From c6c79970f64c21089ae4949ed9c0aa46adb6f8e2 Mon Sep 17 00:00:00 2001 From: JetSquirrel Date: Thu, 24 Sep 2026 00:50:53 +0800 Subject: [PATCH 1/5] Document the .dash format on its own page, and make the docs site findable A dashboards page, in both languages, is the one place the .dash format is described: a complete example (also downloadable, over the tutorial's sample data), how to open and edit a dashboard, every block and attribute, plot types, values and heredocs, the read-only SQL rules, how relative paths resolve, the plotting limits, validation, and the messages people actually hit. The CLI and app guides point to it instead of carrying the format. For search engines and link previews: - a sitemap with per-page lastmod (the Pages workflow now checks out full history so the dates are real) - a description for every page, and search-result titles for the two homes - canonical URLs, en / zh-CN / x-default alternates, Open Graph and Twitter cards with a preview image - SoftwareApplication structured data on the home pages Co-Authored-By: Claude Opus 5.5 (1M context) --- .github/workflows/gh-pages.yml | 4 + docs/.vitepress/config.mts | 71 +++++++++- docs/analysis-app.md | 8 +- docs/cli.md | 6 + docs/dashboards.md | 252 +++++++++++++++++++++++++++++++++ docs/data-sources.md | 4 + docs/development.md | 4 + docs/getting-started.md | 4 + docs/index.md | 10 +- docs/public/og-image.jpg | Bin 0 -> 105383 bytes docs/public/samples/sales.dash | 49 +++++++ docs/results-and-charts.md | 4 + docs/s3.md | 4 + docs/schema-and-history.md | 4 + docs/settings-and-data.md | 4 + docs/sql-editor.md | 4 + docs/troubleshooting.md | 4 + docs/tutorial.md | 6 +- docs/zh/analysis-app.md | 8 +- docs/zh/cli.md | 6 + docs/zh/dashboards.md | 202 ++++++++++++++++++++++++++ docs/zh/data-sources.md | 4 + docs/zh/development.md | 4 + docs/zh/getting-started.md | 4 + docs/zh/index.md | 10 +- docs/zh/results-and-charts.md | 4 + docs/zh/s3.md | 4 + docs/zh/schema-and-history.md | 4 + docs/zh/settings-and-data.md | 4 + docs/zh/sql-editor.md | 4 + docs/zh/troubleshooting.md | 4 + docs/zh/tutorial.md | 6 +- 32 files changed, 695 insertions(+), 15 deletions(-) create mode 100644 docs/dashboards.md create mode 100644 docs/public/og-image.jpg create mode 100644 docs/public/samples/sales.dash create mode 100644 docs/zh/dashboards.md diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 8d8249e..71e7217 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -27,6 +27,10 @@ jobs: steps: - uses: actions/checkout@v4 + with: + # Full history: `lastUpdated` dates each page, and the sitemap's + # lastmod, from its last commit. + fetch-depth: 0 - name: Setup Node uses: actions/setup-node@v4 diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index dc5e0a0..39d8682 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -1,8 +1,12 @@ import { copyFile, writeFile } from 'node:fs/promises' import { resolve } from 'node:path' -import { defineConfig, type DefaultTheme } from 'vitepress' +import { defineConfig, type DefaultTheme, type HeadConfig } from 'vitepress' const repository = 'https://github.com/JetSquirrel/DuckLocal' +// Where the site is published: GitHub Pages under the repository's name. Every +// absolute URL the pages hand to crawlers and link previews starts here. +const site = 'https://jetsquirrel.github.io/DuckLocal/' +const ogImage = `${site}og-image.jpg` const pages = [ 'index', 'getting-started', @@ -16,6 +20,12 @@ const pages = [ 'development', ] +// A page's path under the site root, as `cleanUrls: false` publishes it: +// `index.md` → ``, `zh/index.md` → `zh/`, `zh/cli.md` → `zh/cli.html`. +function pageUrl(relativePath: string): string { + return relativePath.replace(/(^|\/)index\.md$/, '$1').replace(/\.md$/, '.html') +} + function sidebar(zh = false): DefaultTheme.SidebarItem[] { const prefix = zh ? '/zh/' : '/' const item = (page: string, english: string, chinese: string) => ({ @@ -46,7 +56,8 @@ function sidebar(zh = false): DefaultTheme.SidebarItem[] { text: zh ? '自动化与扩展' : 'Automate and extend', items: [ item('cli', 'CLI and agent skill', 'CLI 与 agent skill'), - item('analysis-app', 'Apps and dashboards', '分析应用与 Dashboard'), + item('dashboards', 'Dashboards (.dash)', 'Dashboard(.dash)'), + item('analysis-app', 'Analysis apps', '分析应用'), ], }, { @@ -63,7 +74,61 @@ export default defineConfig({ outDir: '../target/docs-site', cleanUrls: false, ignoreDeadLinks: false, - head: [['link', { rel: 'icon', type: 'image/png', href: '/DuckLocal/favicon.png' }]], + // Per-page "last updated" dates, which also become the sitemap's lastmod. + // Needs the full git history; the Pages workflow checks out with depth 0. + lastUpdated: true, + sitemap: { hostname: site }, + head: [ + ['link', { rel: 'icon', type: 'image/png', href: '/DuckLocal/favicon.png' }], + ['meta', { name: 'theme-color', content: '#f2b705' }], + ['meta', { property: 'og:site_name', content: 'DuckLocal' }], + ['meta', { property: 'og:type', content: 'website' }], + ['meta', { property: 'og:image', content: ogImage }], + ['meta', { property: 'og:image:width', content: '1200' }], + ['meta', { property: 'og:image:height', content: '675' }], + ['meta', { property: 'og:image:alt', content: 'CSV, Parquet and DuckDB files, plus S3 storage, feeding one local DuckLocal workspace' }], + ['meta', { name: 'twitter:card', content: 'summary_large_image' }], + ['meta', { name: 'twitter:image', content: ogImage }], + ], + // What differs page to page: its canonical address, its title and summary + // for link previews, its other-language twin, and — on the two home pages — + // a description of the app itself for search results. + transformHead({ pageData, title, description }) { + const path = pageUrl(pageData.relativePath) + const url = `${site}${path}` + const zh = pageData.relativePath.startsWith('zh/') + const english = zh ? path.replace(/^zh\//, '') : path + const chinese = zh ? path : `zh/${path}` + const head: HeadConfig[] = [ + ['link', { rel: 'canonical', href: url }], + ['link', { rel: 'alternate', hreflang: 'en', href: `${site}${english}` }], + ['link', { rel: 'alternate', hreflang: 'zh-CN', href: `${site}${chinese}` }], + ['link', { rel: 'alternate', hreflang: 'x-default', href: `${site}${english}` }], + ['meta', { property: 'og:url', content: url }], + ['meta', { property: 'og:title', content: title }], + ['meta', { property: 'og:description', content: description }], + ['meta', { property: 'og:locale', content: zh ? 'zh_CN' : 'en_US' }], + ['meta', { name: 'twitter:title', content: title }], + ['meta', { name: 'twitter:description', content: description }], + ] + if (pageData.relativePath === 'index.md' || pageData.relativePath === 'zh/index.md') { + head.push(['script', { type: 'application/ld+json' }, JSON.stringify({ + '@context': 'https://schema.org', + '@type': 'SoftwareApplication', + name: 'DuckLocal', + description, + url, + applicationCategory: 'DeveloperApplication', + operatingSystem: 'macOS 12 or later (Apple silicon)', + offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' }, + license: 'https://www.apache.org/licenses/LICENSE-2.0', + downloadUrl: `${repository}/releases/latest`, + codeRepository: repository, + inLanguage: zh ? 'zh-CN' : 'en', + })]) + } + return head + }, locales: { root: { label: 'English', diff --git a/docs/analysis-app.md b/docs/analysis-app.md index b23bfdf..eed4864 100644 --- a/docs/analysis-app.md +++ b/docs/analysis-app.md @@ -1,3 +1,7 @@ +--- +description: "Build analysis apps for DuckLocal: JavaScript views over your data with query(), live reload, the component catalog, trust prompts and HTML export." +--- + # Analysis apps (JavaScript) **[中文](zh/analysis-app.md)** · [Docs](index.md) @@ -252,9 +256,9 @@ Because it is the loading state, a statement an app only runs on a click is not ## Dashboard specs (.dash) -A `.dash` file is a dashboard declared as data — query and plot blocks, no JavaScript — for the common case of standard plots over saved queries. The file format and `ducklocal check` validation are in [the CLI guide](cli.md#check-a-dashboard-spec). +A `.dash` file is a dashboard declared as data — query and plot blocks, no JavaScript — for the common case of standard plots over saved queries. [Dashboards (.dash)](dashboards.md) is the full guide to the format; `ducklocal check` validation is in [the CLI guide](cli.md#check-a-dashboard-spec). -Open one like an app: choose **Open dashboard…** from the tab strip's `+` menu, name it on the command line (`ducklocal dashboard.dash`), or drag the file onto the window, and it opens as a dashboard tab beside your queries and apps. The tab runs the spec's queries on the window's own connection — so a dashboard sees connection-local state such as `TEMP` tables, and queues with the editor's queries — and renders each plot as one panel of a vertical stack whose dividers drag to resize. Only read-only statements run: a query that could write (DDL, DML, `COPY`, `ATTACH`, …) is refused before it reaches the connection, so opening a `.dash` file someone sent you cannot change your data. A plot whose query fails shows the reason in its own panel; the rest of the dashboard still draws. The toolbar's reload re-reads the file and re-runs everything, and a reload that fails validation never replaces a working dashboard — the reason appears above it instead. Open dashboards are remembered between launches, exactly like apps. +Open one like an app: choose **Open dashboard…** from the tab strip's `+` menu, name it on the command line (`ducklocal dashboard.dash`), or drag the file onto the window, and it opens as a dashboard tab beside your queries and apps. The tab runs the spec's queries on the window's own connection — so a dashboard sees connection-local state such as `TEMP` tables, and queues with the editor's queries — and renders each plot as one panel of a vertical stack whose dividers drag to resize. Each plot starts at its default height, and a stack taller than the tab scrolls rather than squeezing the plots to fit. Only read-only statements run: a query that could write (DDL, DML, `COPY`, `ATTACH`, …) is refused before it reaches the connection, so opening a `.dash` file someone sent you cannot change your data. A plot whose query fails shows the reason in its own panel; the rest of the dashboard still draws. The toolbar's reload re-reads the file and re-runs everything, and a reload that fails validation never replaces a working dashboard — the reason appears above it instead. Open dashboards are remembered between launches, exactly like apps. The tab is also an editor: its source view edits the file with syntax highlighting — the SQL in heredocs coloured as it is in the SQL editor — completion and diagnostics, and writes back with the save button or ⌘S — a save whose spec no longer validates keeps the last working dashboard up and says why. Outside the GUI, `ducklocal lsp` serves the same completion, diagnostics, hover and go-to-definition to any LSP-capable editor (see [the CLI guide](cli.md#edit-a-dashboard-spec-with-lsp)). diff --git a/docs/cli.md b/docs/cli.md index 37fc2f3..0926dee 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -1,3 +1,7 @@ +--- +description: "Run DuckDB SQL headlessly with the ducklocal CLI: structured JSON output, Markdown tables, profiling, file conversion, dashboard checks and the official AI agent skill." +--- + # AI CLI and official skill **[中文](zh/cli.md)** · [Docs](index.md) @@ -152,6 +156,8 @@ Exit codes: **0** with the file written; **2** for a bad command line, an app pa ## Check a dashboard spec +The format itself — blocks, attributes, plot types, SQL rules and common messages — is described in [Dashboards (.dash)](dashboards.md); this section covers the command. + A `.dash` file declares a dashboard the way Terraform declares infrastructure — queries and plots as blocks, references between them — rather than scripting one as an analysis app. The two formats coexist: the spec covers query + standard plot and is easy for a person or an agent to diff; an app stays for bespoke layout and interaction. ```hcl diff --git a/docs/dashboards.md b/docs/dashboards.md new file mode 100644 index 0000000..04e7198 --- /dev/null +++ b/docs/dashboards.md @@ -0,0 +1,252 @@ +--- +description: "Write a DuckLocal dashboard as a .dash file — query and plot blocks over DuckDB SQL — then open it as a tab, validate it with ducklocal check, and edit it with LSP support." +--- + +# Dashboards (.dash) + +**[中文](zh/dashboards.md)** · [Docs](index.md) + +A `.dash` file is a dashboard written down as data: a few **query** blocks +holding SQL, and **plot** blocks that draw their results. There is no code to +write, so a person or an AI agent can produce one, review it in a diff, and +check it before anyone opens it. + +Use a `.dash` file for standard charts and tables over saved queries. For a +custom layout or interaction — buttons, filters, your own components — write +an [analysis app](analysis-app.md) instead. + +## A complete example + +This dashboard reads the `sales` view you get by opening the +[tutorial's sample file](tutorial.md#sample-file). Download it as +[sales.dash](https://jetsquirrel.github.io/DuckLocal/samples/sales.dash). + +```hcl +query "by_channel" { + sql = <中文文档 · macOS 12+ on Apple silicon · Free and open source (Apache-2.0)

@@ -78,6 +81,7 @@ sample file. | Get more out of the editor | [SQL editor](sql-editor.md) · [Schema and history](schema-and-history.md) | | Chart or export a result | [Results and charts](results-and-charts.md) | | Let an AI agent query my data | [CLI and agent skill](cli.md) | -| Build a dashboard | [Apps and dashboards](analysis-app.md) | +| Build a dashboard from saved queries | [Dashboards (.dash)](dashboards.md) | +| Script a custom view over my data | [Analysis apps](analysis-app.md) | | Fix something that is not working | [Troubleshooting](troubleshooting.md) | | Build DuckLocal from source or contribute | [Development](development.md) | diff --git a/docs/public/og-image.jpg b/docs/public/og-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fb5cbcf0015f05965aabbd3cd3b503950131681 GIT binary patch literal 105383 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 CgqD>6 literal 0 HcmV?d00001 diff --git a/docs/public/samples/sales.dash b/docs/public/samples/sales.dash new file mode 100644 index 0000000..8e010cb --- /dev/null +++ b/docs/public/samples/sales.dash @@ -0,0 +1,49 @@ +# Two weeks of sample sales, as a dashboard. +# +# It reads the `sales` view — the one DuckLocal creates when you open +# sales.csv (see the tutorial) — so it works however DuckLocal was launched. +# Validate it without a window: +# +# ducklocal check sales.dash + +query "by_channel" { + sql = </jsconfig.json --noImplicitAny fals ## Dashboard 规格文件(.dash) {#dashboard-specs-dash} -`.dash` 文件把 dashboard 声明为数据——query 与 plot block,没有 JavaScript——适合「已保存查询 + 标准图表」的常见场景。文件格式与 `ducklocal check` 校验见 [CLI 指南](cli.md#校验-dashboard-规格文件)。 +`.dash` 文件把 dashboard 声明为数据——query 与 plot block,没有 JavaScript——适合「已保存查询 + 标准图表」的常见场景。格式的完整说明见 [Dashboard(.dash)](dashboards.md);`ducklocal check` 校验见 [CLI 指南](cli.md#校验-dashboard-规格文件)。 -打开方式与应用相同:在标签栏的 `+` 菜单里选 **打开 Dashboard…**,在命令行指定(`ducklocal dashboard.dash`),或把文件拖到窗口上,就会以 dashboard 标签页的形式打开,与查询、应用并列。标签页在窗口自己的连接上执行规格里的查询——因此能看到 `TEMP` 表等连接级状态,也会与编辑器的查询排队——并把每个 plot 画成竖直堆叠中的一格,分隔条可拖动调整高度。只有只读语句会被执行:可能写入的查询(DDL、DML、`COPY`、`ATTACH` 等)在到达连接之前就被拒绝,因此打开别人发来的 `.dash` 文件不会改动你的数据。某个 plot 的查询失败时,原因显示在它自己的格子里,其余部分照常绘制。工具栏的重新加载会重读文件并重跑所有查询;重载后的规格若不再通过校验,不会替换掉仍在工作的 dashboard,而是在上方显示原因。已打开的 dashboard 会像应用一样被记住,下次启动自动恢复。 +打开方式与应用相同:在标签栏的 `+` 菜单里选 **打开 Dashboard…**,在命令行指定(`ducklocal dashboard.dash`),或把文件拖到窗口上,就会以 dashboard 标签页的形式打开,与查询、应用并列。标签页在窗口自己的连接上执行规格里的查询——因此能看到 `TEMP` 表等连接级状态,也会与编辑器的查询排队——并把每个 plot 画成竖直堆叠中的一格,分隔条可拖动调整高度。每个 plot 以默认高度起步,堆叠高过标签页时可以滚动,而不是把所有 plot 挤进一屏。只有只读语句会被执行:可能写入的查询(DDL、DML、`COPY`、`ATTACH` 等)在到达连接之前就被拒绝,因此打开别人发来的 `.dash` 文件不会改动你的数据。某个 plot 的查询失败时,原因显示在它自己的格子里,其余部分照常绘制。工具栏的重新加载会重读文件并重跑所有查询;重载后的规格若不再通过校验,不会替换掉仍在工作的 dashboard,而是在上方显示原因。已打开的 dashboard 会像应用一样被记住,下次启动自动恢复。 标签页同时也是编辑器:源码视图可以直接修改文件,带语法高亮(heredoc 里的 SQL 与 SQL 编辑器同样着色)、补全和诊断,用保存按钮或 ⌘S 写回——保存后的规格若不再通过校验,仍在工作的 dashboard 不会被替换,并会显示原因。在 GUI 之外,`ducklocal lsp` 把同样的补全、诊断、悬停和跳转定义提供给任何支持 LSP 的编辑器(见 [CLI 指南](cli.md#用-lsp-编辑-dashboard-规格文件))。 diff --git a/docs/zh/cli.md b/docs/zh/cli.md index 23d865d..51b9edf 100644 --- a/docs/zh/cli.md +++ b/docs/zh/cli.md @@ -1,3 +1,7 @@ +--- +description: "用 ducklocal CLI 无界面执行 DuckDB SQL:结构化 JSON 输出、Markdown 表格、数据概览、文件转换、dashboard 校验与官方 AI agent skill。" +--- + # AI CLI 与官方 skill **[English](../cli.md)** · [文档](index.md) @@ -152,6 +156,8 @@ stdout 为单个 JSON 对象: ## 校验 dashboard 规格文件 +格式本身——block、属性、图表类型、SQL 规则与常见信息——见 [Dashboard(.dash)](dashboards.md);本节讲这个命令。 + `.dash` 文件以声明的方式描述一个 dashboard——像 Terraform 声明基础设施那样,用 block 写查询和图表,用引用连接它们——而不是像分析应用那样用脚本来画。两种格式并存:规格文件覆盖「查询 + 标准图表」,人和 agent 都容易写、容易 diff;需要定制布局和交互时仍用应用。 ```hcl diff --git a/docs/zh/dashboards.md b/docs/zh/dashboards.md new file mode 100644 index 0000000..cf731e1 --- /dev/null +++ b/docs/zh/dashboards.md @@ -0,0 +1,202 @@ +--- +description: "用 .dash 文件编写 DuckLocal dashboard——基于 DuckDB SQL 的 query 与 plot block——在标签页中打开,用 ducklocal check 校验,并借助 LSP 编辑。" +--- + +# Dashboard(.dash) + +**[English](../dashboards.md)** · [文档](index.md) + +`.dash` 文件是用数据写成的 dashboard:几个装着 SQL 的 **query** block,加上把结果画出来的 **plot** block。不需要写代码,所以人或 AI agent 都能写出来,在 diff 里审阅,并在任何人打开之前先校验一遍。 + +标准图表与表格、基于保存好的查询——用 `.dash` 文件。需要定制布局或交互(按钮、过滤器、自己的组件)时,改写一个[分析应用](analysis-app.md)。 + +## 完整示例 + +这个 dashboard 读取的是打开[教程样例文件](tutorial.md#sample-file)后得到的 `sales` 视图。可下载为 [sales.dash](https://jetsquirrel.github.io/DuckLocal/samples/sales.dash)。 + +```hcl +query "by_channel" { + sql = <English · macOS 12+,Apple silicon · 开源免费(Apache-2.0)

@@ -74,6 +77,7 @@ ORDER BY revenue DESC; | 用好编辑器 | [SQL 编辑器](sql-editor.md) · [Schema 浏览与历史](schema-and-history.md) | | 把结果画成图或导出 | [结果与图表](results-and-charts.md) | | 让 AI agent 查询我的数据 | [CLI 与 agent skill](cli.md) | -| 搭一个 dashboard | [分析应用与 Dashboard](analysis-app.md) | +| 用保存的查询搭一个 dashboard | [Dashboard(.dash)](dashboards.md) | +| 用脚本写一个定制视图 | [分析应用](analysis-app.md) | | 解决某个不正常的问题 | [常见问题排查](troubleshooting.md) | | 从源码构建或参与开发 | [开发指南](development.md) | diff --git a/docs/zh/results-and-charts.md b/docs/zh/results-and-charts.md index b3c0be2..bea0b7d 100644 --- a/docs/zh/results-and-charts.md +++ b/docs/zh/results-and-charts.md @@ -1,3 +1,7 @@ +--- +description: "处理 DuckLocal 的查询结果:过滤与复制单元格、导出 CSV 或 Parquet、内置柱状图与面积图,以及行数限制。" +--- + # 结果与图表 **[English](../results-and-charts.md)** · [文档](index.md) diff --git a/docs/zh/s3.md b/docs/zh/s3.md index 262309e..3349980 100644 --- a/docs/zh/s3.md +++ b/docs/zh/s3.md @@ -1,3 +1,7 @@ +--- +description: "用 DuckDB 的 httpfs 在 DuckLocal 中查询 Amazon S3 与 S3 兼容存储:配置凭据、浏览 bucket、对远程文件执行 SQL。" +--- + # S3 与 httpfs **[English](../s3.md)** · [文档](index.md) diff --git a/docs/zh/schema-and-history.md b/docs/zh/schema-and-history.md index c11172d..daf9e73 100644 --- a/docs/zh/schema-and-history.md +++ b/docs/zh/schema-and-history.md @@ -1,3 +1,7 @@ +--- +description: "在 DuckLocal 侧栏浏览数据库、表、视图与列,一键生成 SELECT 查询、修改列类型,并复用历史查询。" +--- + # Schema 浏览与历史 **[English](../schema-and-history.md)** · [文档](index.md) diff --git a/docs/zh/settings-and-data.md b/docs/zh/settings-and-data.md index 084dc90..8bdff58 100644 --- a/docs/zh/settings-and-data.md +++ b/docs/zh/settings-and-data.md @@ -1,3 +1,7 @@ +--- +description: "DuckLocal 在 Mac 上把数据存在哪里、重启后记住哪些内容、界面大小、主题、语言,以及如何重置。" +--- + # 设置与应用数据 **[English](../settings-and-data.md)** · [文档](index.md) diff --git a/docs/zh/sql-editor.md b/docs/zh/sql-editor.md index e7ec6d3..c950c40 100644 --- a/docs/zh/sql-editor.md +++ b/docs/zh/sql-editor.md @@ -1,3 +1,7 @@ +--- +description: "DuckLocal 的 SQL 编辑器:查询 Tab、运行与格式化 SQL、EXPLAIN 执行计划、基于表结构的自动补全和快捷键。" +--- + # SQL 编辑器 **[English](../sql-editor.md)** · [文档](index.md) diff --git a/docs/zh/troubleshooting.md b/docs/zh/troubleshooting.md index 99a2232..50e7994 100644 --- a/docs/zh/troubleshooting.md +++ b/docs/zh/troubleshooting.md @@ -1,3 +1,7 @@ +--- +description: "DuckLocal 常见问题的解决办法:找不到 ducklocal 命令、文件挂载失败、重名冲突、查询卡住、S3 凭据与 dashboard 问题。" +--- + # 常见问题排查 **[English](../troubleshooting.md)** · [文档](index.md) diff --git a/docs/zh/tutorial.md b/docs/zh/tutorial.md index 6ccd2b6..4a74427 100644 --- a/docs/zh/tutorial.md +++ b/docs/zh/tutorial.md @@ -1,10 +1,14 @@ +--- +description: "DuckLocal 10 分钟上手教程:用样例 CSV 打开数据、写 SQL 查询、画图、导出结果,并用 CLI 问同一个问题。" +--- + # 10 分钟上手教程 **[English](../tutorial.md)** · [文档](index.md) 跟着做一遍:打开一个小的销售数据文件,问它几个问题,把答案画成图,再导出一份。本教程假设你已经装好了 DuckLocal——如果还没有,先看[快速上手](getting-started.md)。 -## 1. 获取样例文件 +## 1. 获取样例文件 {#sample-file} 下载 [sales.csv](/samples/sales.csv)——两周的虚构订单数据,共 224 行。也可以在终端里下载: From 33b9dcb8aa0aaa33b04d8c9a672d136195c95a80 Mon Sep 17 00:00:00 2001 From: JetSquirrel Date: Thu, 24 Sep 2026 01:05:55 +0800 Subject: [PATCH 2/5] Run every query in `check --database`, and report all that fail MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DESCRIBE only plans a statement: a cast the build cannot perform, or a value deep in the data that will not convert, surfaces only once rows are read. A check that passed such a dashboard handed over one the GUI could not draw. Against a database the check now describes each query for the column check and then runs it through the view's own `run_of` — read-only SQL on a read-only connection, the same row budget — and reports every failing query at once (exit 1, kind `sql`), not only the first. The static check without a database is unchanged. Help, CLI guide and skill say so. Co-Authored-By: Claude Opus 5.5 (1M context) --- docs/cli.md | 2 +- docs/zh/cli.md | 2 +- skills/ducklocal/SKILL.md | 2 +- src/cli.rs | 2 +- src/spec/mod.rs | 44 +++++++++++++++++++++++++++++---------- tests/cli.rs | 30 ++++++++++++++++++++++++++ 6 files changed, 67 insertions(+), 15 deletions(-) diff --git a/docs/cli.md b/docs/cli.md index 0926dee..bf70703 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -185,7 +185,7 @@ ducklocal check dashboard.dash --database warehouse.duckdb A `query` block holds one `sql` attribute — one read-only statement, as a heredoc or a string. `SELECT`, `WITH`, `FROM`-first, `VALUES`, `SHOW`, `DESCRIBE`, `SUMMARIZE` and `PIVOT` are accepted; anything that could write — DDL, DML, `COPY`, `ATTACH`, `INSTALL` — is a diagnostic, and the GUI refuses to run it, because a dashboard's queries run whenever the file is opened. A `plot` block holds `type` (one of `line`, `bar`, `area`, `scatter`, `table`), `query` (a reference like `query.latency` to a query block in the same file), `x` and `y` (result columns, as bare identifiers or quoted strings; `y` is optional for `table`), plus optional `series` and `title`. `#` and `//` comment to end of line. That is the whole language: no functions, no conditionals, no interpolation. -Without `--database` the check is fully static — no table needs to exist and nothing executes. Each query's SQL is validated by the real DuckDB parser on a throwaway connection, the way `query` validates before running. With `--database PATH` (existing file, read-only) every query is additionally described — planned, not run — and each plot's `x`/`y`/`series` is checked against the columns the query actually returns; a `y` that is not numeric is an error for every type but `table`. +Without `--database` the check is fully static — no table needs to exist and nothing executes. Each query's SQL is validated by the real DuckDB parser on a throwaway connection, the way `query` validates before running. With `--database PATH` (existing file, read-only) every query is additionally run, exactly as opening the dashboard would run it — read-only, through the same code path and row budget — and each plot's `x`/`y`/`series` is checked against the columns the query actually returns; a `y` that is not numeric is an error for every type but `table`. Running rather than only planning matters: some failures, such as a cast the build cannot perform or a value that will not convert, appear only once rows are read, and a check that passes them would hand over a dashboard that cannot draw. Queries run in full, so a check against a large database takes as long as opening the dashboard does. Success is one JSON object listing the file's queries (with their result columns when a database was given) and plots. A spec mistake is exit 2 with error kind `spec` and one `file:line: message` per diagnostic — all of them, not just the first. A database or I/O failure is exit 1. diff --git a/docs/zh/cli.md b/docs/zh/cli.md index 51b9edf..f2a6b3c 100644 --- a/docs/zh/cli.md +++ b/docs/zh/cli.md @@ -185,7 +185,7 @@ ducklocal check dashboard.dash --database warehouse.duckdb `query` block 只含一个 `sql` 属性——一条只读语句,heredoc 或字符串。接受 `SELECT`、`WITH`、`FROM` 开头、`VALUES`、`SHOW`、`DESCRIBE`、`SUMMARIZE` 与 `PIVOT`;任何可能写入的语句——DDL、DML、`COPY`、`ATTACH`、`INSTALL`——都会报诊断,GUI 也拒绝执行,因为 dashboard 的查询在文件一打开时就会运行。`plot` block 含 `type`(`line`、`bar`、`area`、`scatter`、`table` 之一)、`query`(指向同文件某个 query block 的引用,如 `query.latency`)、`x` 和 `y`(结果列名,可写裸标识符或带引号的字符串;`table` 类型不需要 `y`),以及可选的 `series`、`title`。`#` 和 `//` 注释到行尾。这就是全部语法:没有函数、没有条件、没有插值。 -不带 `--database` 时校验完全静态——表不需要存在,什么都不会执行。每条查询的 SQL 由真正的 DuckDB parser 在一次性连接上校验,与 `query` 执行前的校验相同。带 `--database PATH`(已存在的文件,只读打开)时,每条查询还会被 describe——只规划、不执行——并把每个 plot 的 `x`/`y`/`series` 与查询实际返回的列逐一核对;对 `table` 以外的类型,`y` 不是数值列也是错误。 +不带 `--database` 时校验完全静态——表不需要存在,什么都不会执行。每条查询的 SQL 由真正的 DuckDB parser 在一次性连接上校验,与 `query` 执行前的校验相同。带 `--database PATH`(已存在的文件,只读打开)时,每条查询还会像打开 dashboard 时那样真正执行一遍(只读,同一条代码路径、同样的行数上限),并把每个 plot 的 `x`/`y`/`series` 与查询实际返回的列逐一核对;对 `table` 以外的类型,`y` 不是数值列也是错误。之所以要执行而不只是规划:有些错误——比如当前构建做不了的类型转换、数据里某个转不过去的值——只有真正读到行时才会出现,只规划的 check 会放过它们,交出一个画不出来的 dashboard。查询会完整执行,所以对大库做 check 的耗时和打开 dashboard 相当。 成功时输出一个 JSON 对象,列出文件中的查询(给了数据库时附带结果列)和图表。规格文件的错误是退出码 2、kind 为 `spec`,每条诊断一行 `文件:行号: 消息`——一次列出全部,而不是第一条。数据库或 I/O 错误是退出码 1。 diff --git a/skills/ducklocal/SKILL.md b/skills/ducklocal/SKILL.md index 57989bb..ad6e655 100644 --- a/skills/ducklocal/SKILL.md +++ b/skills/ducklocal/SKILL.md @@ -42,7 +42,7 @@ plot "revenue" { A `query` block holds one `sql` attribute (one read-only statement — SELECT, WITH, FROM, VALUES, SHOW, DESCRIBE, SUMMARIZE or PIVOT — heredoc or string; DDL, DML, COPY, ATTACH and INSTALL are rejected). A `plot` block holds `type` (`line`, `bar`, `area`, `scatter`, `table`), `query` (a `query.name` reference), `x` and `y` (result columns, bare identifiers or quoted strings; `y` optional for `table`), optional `series` and `title`. No functions, conditionals, or interpolation exist. There is a working example at `examples/analysis_app/dashboard.dash`. -Always validate before handing a spec over: `ducklocal check dashboard.dash`, or `ducklocal check dashboard.dash --database warehouse.duckdb` to also verify every `x`/`y`/`series` against the columns the queries actually return (a non-numeric `y` is an error outside `table`). A spec mistake is exit 2 with kind `spec`, one `file:line: message` per diagnostic — fix all of them, not just the first. To see it rendered, open the file in the GUI (`ducklocal dashboard.dash` or drag it onto the window): it becomes a dashboard tab, a resizable vertical stack of the plots with per-plot inline errors. +Always validate before handing a spec over: `ducklocal check dashboard.dash`, or `ducklocal check dashboard.dash --database warehouse.duckdb` to also run every query read-only and verify every `x`/`y`/`series` against the columns the queries actually return (a non-numeric `y` is an error outside `table`). A spec mistake is exit 2 with kind `spec`, one `file:line: message` per diagnostic; a query that fails on the database is exit 1 with kind `sql`, one line per failing query — fix all of them, not just the first. Prefer the `--database` form whenever the database exists: without it nothing runs, so errors that appear only at execution (a cast the build cannot perform, a value that will not convert) go unseen. To see it rendered, open the file in the GUI (`ducklocal dashboard.dash` or drag it onto the window): it becomes a dashboard tab, a resizable vertical stack of the plots with per-plot inline errors. ## Authoring an app diff --git a/src/cli.rs b/src/cli.rs index d0421fb..3144c7f 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -6,7 +6,7 @@ use std::ptr; use duckdb::{ffi, AccessMode, Config, Connection}; use serde_json::json; -pub(crate) const HELP: &str = "DuckLocal — local data workspace and headless SQL\n\nUsage:\n ducklocal [PATH ...] Open the GUI (files, folders, globs)\n ducklocal query --sql SQL [OPTIONS] Execute one statement, return JSON\n ducklocal query --sql-file FILE [OPTIONS]\n ducklocal profile TARGET [--database PATH] Per-column statistics, JSON\n ducklocal export --html [OPTIONS] APP App data as a standalone HTML file\n ducklocal check FILE [--database PATH] Validate a .dash dashboard spec\n ducklocal lsp [--database PATH] Language server for .dash files (stdio)\n ducklocal --help\n ducklocal --version\n\nQuery options:\n --sql SQL SQL text; exactly one of --sql and --sql-file is required\n --sql-file FILE UTF-8 SQL file; - reads stdin\n --database PATH File database; must exist, opened read-only by default\n --read-write Allow database writes/creation (requires --database)\n --limit N Maximum returned rows, default 1000; positive integer\n --format FORMAT json (default) or md, a Markdown table to read and quote\n --help Show this help\n\nOutput: one JSON object with columns, rows, row_count, truncated, elapsed_ms.\nColumn types are Arrow debug names, not SQL type names. A 2,000,000-cell\nbudget also applies. Limits constrain output, not computation. --format md\nrenders the same values as readable text: dates and timestamps in ISO form,\nDECIMALs with their digits, NULL as NULL. It is a rendering, not the contract;\nuse JSON where a caller parses the result.\nErrors: JSON on stderr, empty stdout; exit 2 for arguments, 1 for SQL/I/O.\nRead-only is NOT a filesystem/network sandbox: COPY can write files.\nExtensions are not automatically installed. GUI state/history is not used.\nA GUI path named `query`, `profile`, `export`, `check`, `dash` or `lsp` must be written ./query, ./profile, ./export, ./check, ./dash, ./lsp.\n\nProfile: TARGET is a data file (csv/tsv/parquet/json) or a workbook\n(xlsx/xls/xlsb/ods; its first sheet is imported and profiled), or, with\n--database, a table or view name. Per column it reports type, nulls, distinct,\nmin, max; for numbers the decimals actually used, the median and\nmax_over_median; for dates covered_days, span_days and missing_days.\nStatistics are exact and read the whole relation.\n\nExport: APP is an analysis app folder (main.js) or its entry file.\nThe app is run once, in a hidden window, and the statements its query()\ncalls issue are captured with their results. Output is one JSON object naming\nthe written file; the file itself is self-contained HTML with no JavaScript.\nExport options:\n --html Required; the only format\n --out FILE Destination; defaults to ./.html\n --force Replace an existing destination\n --database PATH File database; must exist, opened read-only by default\n --read-write Allow database writes/creation (requires --database)\n --timeout SECONDS Capture time limit, default 15\n\nCheck: FILE is a .dash dashboard spec — query blocks holding SQL heredocs,\nplot blocks with type/query/x/y/series attributes, references like\nquery.latency between them. The check parses the file, resolves every\nreference and attribute, and validates each query's SQL with the real DuckDB\nparser; nothing executes and no table needs to exist. With --database it\nalso describes every query on that database (read-only) and checks each\nplot's x/y/series against the columns the query actually returns.\nOutput: one JSON object with the file's queries and plots; a spec mistake is\nexit 2 with one line per diagnostic, a database or I/O failure is exit 1.\n\nLsp: a Language Server Protocol server for .dash files, over stdio, for\neditors to spawn. Full-document sync; on every open and change it publishes\nthe same parse and semantic diagnostics `check` reports (exit-2 mistakes,\nall severity Error), plus each query's SQL through the real DuckDB parser\nwhen --database is given. Completion offers block, attribute, type and\nquery-name candidates; hover documents blocks, attributes and references;\ngo-to-definition jumps a query.name reference to its query block. Exit 0 on\na clean shutdown, 1 if the client goes away without one, 2 for a bad command\nline or a failed protocol handshake.\n"; +pub(crate) const HELP: &str = "DuckLocal — local data workspace and headless SQL\n\nUsage:\n ducklocal [PATH ...] Open the GUI (files, folders, globs)\n ducklocal query --sql SQL [OPTIONS] Execute one statement, return JSON\n ducklocal query --sql-file FILE [OPTIONS]\n ducklocal profile TARGET [--database PATH] Per-column statistics, JSON\n ducklocal export --html [OPTIONS] APP App data as a standalone HTML file\n ducklocal check FILE [--database PATH] Validate a .dash dashboard spec\n ducklocal lsp [--database PATH] Language server for .dash files (stdio)\n ducklocal --help\n ducklocal --version\n\nQuery options:\n --sql SQL SQL text; exactly one of --sql and --sql-file is required\n --sql-file FILE UTF-8 SQL file; - reads stdin\n --database PATH File database; must exist, opened read-only by default\n --read-write Allow database writes/creation (requires --database)\n --limit N Maximum returned rows, default 1000; positive integer\n --format FORMAT json (default) or md, a Markdown table to read and quote\n --help Show this help\n\nOutput: one JSON object with columns, rows, row_count, truncated, elapsed_ms.\nColumn types are Arrow debug names, not SQL type names. A 2,000,000-cell\nbudget also applies. Limits constrain output, not computation. --format md\nrenders the same values as readable text: dates and timestamps in ISO form,\nDECIMALs with their digits, NULL as NULL. It is a rendering, not the contract;\nuse JSON where a caller parses the result.\nErrors: JSON on stderr, empty stdout; exit 2 for arguments, 1 for SQL/I/O.\nRead-only is NOT a filesystem/network sandbox: COPY can write files.\nExtensions are not automatically installed. GUI state/history is not used.\nA GUI path named `query`, `profile`, `export`, `check`, `dash` or `lsp` must be written ./query, ./profile, ./export, ./check, ./dash, ./lsp.\n\nProfile: TARGET is a data file (csv/tsv/parquet/json) or a workbook\n(xlsx/xls/xlsb/ods; its first sheet is imported and profiled), or, with\n--database, a table or view name. Per column it reports type, nulls, distinct,\nmin, max; for numbers the decimals actually used, the median and\nmax_over_median; for dates covered_days, span_days and missing_days.\nStatistics are exact and read the whole relation.\n\nExport: APP is an analysis app folder (main.js) or its entry file.\nThe app is run once, in a hidden window, and the statements its query()\ncalls issue are captured with their results. Output is one JSON object naming\nthe written file; the file itself is self-contained HTML with no JavaScript.\nExport options:\n --html Required; the only format\n --out FILE Destination; defaults to ./.html\n --force Replace an existing destination\n --database PATH File database; must exist, opened read-only by default\n --read-write Allow database writes/creation (requires --database)\n --timeout SECONDS Capture time limit, default 15\n\nCheck: FILE is a .dash dashboard spec — query blocks holding SQL heredocs,\nplot blocks with type/query/x/y/series attributes, references like\nquery.latency between them. The check parses the file, resolves every\nreference and attribute, and validates each query's SQL with the real DuckDB\nparser; nothing executes and no table needs to exist. With --database it\nalso runs every query on that database (read-only), so an error that only\nshows once rows are read fails the check, and checks each plot's\nx/y/series against the columns the query actually returns.\nOutput: one JSON object with the file's queries and plots; a spec mistake is\nexit 2 with one line per diagnostic, a database or I/O failure is exit 1\n(a failing query is one line each, all of them).\n\nLsp: a Language Server Protocol server for .dash files, over stdio, for\neditors to spawn. Full-document sync; on every open and change it publishes\nthe same parse and semantic diagnostics `check` reports (exit-2 mistakes,\nall severity Error), plus each query's SQL through the real DuckDB parser\nwhen --database is given. Completion offers block, attribute, type and\nquery-name candidates; hover documents blocks, attributes and references;\ngo-to-definition jumps a query.name reference to its query block. Exit 0 on\na clean shutdown, 1 if the client goes away without one, 2 for a bad command\nline or a failed protocol handshake.\n"; #[derive(Debug)] pub(crate) struct CliError { diff --git a/src/spec/mod.rs b/src/spec/mod.rs index 91424ac..5872587 100644 --- a/src/spec/mod.rs +++ b/src/spec/mod.rs @@ -20,8 +20,9 @@ //! `ducklocal check FILE` validates a spec without touching a database: parse, //! references, required attributes, and each query's SQL through the real //! DuckDB parser (parse-only, nothing executes). With `--database PATH` it -//! also describes every query on that database and checks each plot's -//! `x`/`y`/`series` against the columns the query actually returns. The view +//! also runs every query on that database, read-only — so an error that only +//! shows once rows are read fails the check, not the dashboard — and checks +//! each plot's `x`/`y`/`series` against the columns the query returns. The view //! half runs the same parse and validation before drawing anything, so a file //! that fails `check` opens as its diagnostics, not as a broken chart. @@ -98,19 +99,40 @@ pub fn check(args: &[OsString]) -> Result { })?; } - // Column checking needs the queries described, not run: DESCRIBE plans the - // statement and reports its result columns without reading the data. + // Against a database every query is described — its result columns, for + // the column check — and then run, the way opening the dashboard runs it. + // DESCRIBE only plans: a cast the build cannot perform or a value deep in + // the data that will not convert surfaces only once rows are read, and a + // check that passes a dashboard the GUI then cannot draw is no check. The + // SQL has been shown read-only above and the connection is read-only, so + // running it changes nothing; it goes through the view's own `run_of`, so + // the two stop at the same row budget and fail on the same statements. + // Every failing query is reported, not only the first. let mut query_columns: Vec>> = vec![None; spec.queries.len()]; if let Some(database) = &database { let connection = crate::cli::open(Some(database.clone()), false)?; + let mut failures = Vec::new(); for (index, query) in spec.queries.iter().enumerate() { - query_columns[index] = Some( - describe(&connection, &query.sql) - .map_err(|message| CliError::failure("sql", format!( - "{}:{}: query {:?}: {message}", - path_display, query.line, query.name - )))?, - ); + let located = |message: String| { + format!("{}:{}: query {:?}: {message}", path_display, query.line, query.name) + }; + match describe(&connection, &query.sql) { + Ok(columns) => query_columns[index] = Some(columns), + Err(message) => { + failures.push(located(message)); + continue; + } + } + match crate::query::run_of(&connection, &query.sql) { + Ok(crate::query::QueryOutcome::Rows(_)) => {} + Ok(crate::query::QueryOutcome::Affected { .. }) => { + failures.push(located("returns no rows to plot".to_string())); + } + Err(error) => failures.push(located(format!("{error:#}"))), + } + } + if !failures.is_empty() { + return Err(CliError::failure("sql", failures.join("\n"))); } let lookup = |name: &str| -> Result, String> { let index = spec diff --git a/tests/cli.rs b/tests/cli.rs index a57762a..457f382 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -927,6 +927,36 @@ plot "b" { type = "line" query = query.revenue x = channel y = channel } std::fs::write(s.0.join("absent.dash"), "query \"q\" { sql = \"SELECT * FROM absent\" }").unwrap(); s.error(&["check", "absent.dash", "--database", "data.duckdb"], 1, "sql"); + // A query that plans but fails once rows are read — here a cast that the + // data cannot satisfy — fails the check the way it would fail the + // dashboard. DESCRIBE alone passes both; every failing query is named. + std::fs::write( + s.0.join("runtime.dash"), + r#" +query "ok" { + sql = "SELECT channel, sum(amount) AS total FROM usage GROUP BY channel" +} +query "cast" { + sql = "SELECT channel, CAST(channel AS INTEGER) AS n FROM usage" +} +query "cast_again" { + sql = "SELECT channel, CAST(channel AS INTEGER) + 1 AS n FROM usage" +} +plot "ok" { type = "bar" query = query.ok x = channel y = total } +plot "cast" { type = "bar" query = query.cast x = channel y = n } +plot "cast_again" { type = "bar" query = query.cast_again x = channel y = n } +"#, + ) + .unwrap(); + let error = s.error(&["check", "runtime.dash", "--database", "data.duckdb"], 1, "sql"); + let message = error["error"]["message"].as_str().unwrap(); + assert!(message.contains("runtime.dash:5: query \"cast\""), "{message}"); + assert!(message.contains("runtime.dash:8: query \"cast_again\""), "{message}"); + assert!(message.contains("Conversion Error"), "{message}"); + assert!(!message.contains("query \"ok\""), "{message}"); + // Without a database nothing runs, so the same file checks clean. + s.object(&["check", "runtime.dash"]); + // Help is help, and it is not a spec. let help = s.text(&["check", "--help"]); assert!(help.contains(".dash"), "{help}"); From 8b6d34a930f4e7d01824d097bb20d7fa71fd069b Mon Sep 17 00:00:00 2001 From: JetSquirrel Date: Thu, 24 Sep 2026 01:05:55 +0800 Subject: [PATCH 3/5] Scroll a dashboard taller than its tab instead of squeezing its plots Every plot keeps its default height and the tab scrolls, rather than a dozen plots crushed into one screen with the rest out of reach. Dragging a divider still trades height between neighbours, and a tab taller than the stack is filled as before. Co-Authored-By: Claude Opus 5.5 (1M context) --- src/spec/view.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/spec/view.rs b/src/spec/view.rs index 60a1a19..6ce9e86 100644 --- a/src/spec/view.rs +++ b/src/spec/view.rs @@ -3,7 +3,8 @@ //! `mod.rs` checks a spec without a window; this module draws one. A //! `Dashboard` parses and validates its file, runs every query on the window's //! connection, and renders each plot as one panel of a vertical resizable -//! stack — the plot heights are the user's to drag. The data a plot draws is +//! stack — the plot heights are the user's to drag, and a stack taller than +//! the tab scrolls. The data a plot draws is //! `prepare`'s business; the view only renders what it prepares. A plot whose //! query failed, or whose columns do not resolve, shows the reason in its own //! panel: one bad plot never takes the dashboard down. And a reload follows @@ -36,6 +37,7 @@ use gpui_kit::component::input::{ }; use gpui_kit::component::label::Label; use gpui_kit::component::resizable::{resizable_panel, v_resizable}; +use gpui_kit::component::scroll::ScrollableElement as _; use gpui_kit::component::spinner::Spinner; use gpui_kit::component::table::{Column, DataTable, TableDelegate, TableState}; use gpui_kit::component::{h_flex, v_flex, ActiveTheme, Icon, IconName, Sizable, StyledExt}; @@ -631,9 +633,22 @@ impl Render for Dashboard { .child(self.render_plot(ix, window, cx)) }) .collect::>(); + // Every plot keeps its default height and the tab scrolls, rather + // than a dozen plots squeezed into one screen and the rest clipped + // out of reach. Dragging a divider still trades height between + // neighbours; a tab taller than the stack is filled, as before. + let stack = px(PLOT_DEFAULT * self.plots.len() as f32); div() + .id(format!("dashboard-scroll-{}", self.id)) .size_full() - .child(v_resizable(format!("dashboard-{}", self.id)).children(panels)) + .overflow_y_scrollbar() + .child( + div() + .w_full() + .h(stack) + .min_h_full() + .child(v_resizable(format!("dashboard-{}", self.id)).children(panels)), + ) .into_any_element() }; From 3f04f61914f9a704db9384f199ee4c88c03d2b41 Mon Sep 17 00:00:00 2001 From: JetSquirrel Date: Thu, 24 Sep 2026 12:51:12 +0800 Subject: [PATCH 4/5] Move the docs to docs.ducklocal.app, and redirect the old address MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The website — a product page at ducklocal.app and the guides at docs.ducklocal.app, both on Cloudflare Pages — now lives in its own repository, JetSquirrel/ducklocal-site, which carries docs/ with its history. This repository drops docs/ and points the READMEs and the two source comments that cited a guide at the new addresses. jetsquirrel.github.io/DuckLocal/ is linked from READMEs, issues and search results, so its GitHub Pages workflow now publishes redirects instead of the site: scripts/pages-redirects.sh writes a page for every old address — the English pages, their zh/ twins and the older .zh-CN.html ones — with a canonical link and a meta refresh, and a 404.html that sends any other path to the same path on the docs site. Co-Authored-By: Claude Opus 5.5 (1M context) --- .github/workflows/gh-pages.yml | 28 +- .gitignore | 4 - README.md | 10 +- README.zh-CN.md | 10 +- docs/.vitepress/config.mts | 231 --- docs/.vitepress/theme/custom.css | 35 - docs/.vitepress/theme/index.ts | 4 - docs/analysis-app.md | 292 ---- docs/assets/intro.jpg | Bin 158744 -> 0 bytes docs/assets/logo.png | Bin 150886 -> 0 bytes docs/cli.md | 266 ---- docs/dashboards.md | 252 --- docs/data-sources.md | 153 -- docs/development.md | 182 --- docs/getting-started.md | 111 -- docs/index.md | 87 - docs/package-lock.json | 2564 ------------------------------ docs/package.json | 16 - docs/public/favicon.png | Bin 7664 -> 0 bytes docs/public/og-image.jpg | Bin 105383 -> 0 bytes docs/public/samples/sales.csv | 225 --- docs/public/samples/sales.dash | 49 - docs/results-and-charts.md | 102 -- docs/s3.md | 99 -- docs/schema-and-history.md | 88 - docs/settings-and-data.md | 108 -- docs/sql-editor.md | 97 -- docs/troubleshooting.md | 82 - docs/tutorial.md | 137 -- docs/zh/analysis-app.md | 254 --- docs/zh/cli.md | 266 ---- docs/zh/dashboards.md | 202 --- docs/zh/data-sources.md | 107 -- docs/zh/development.md | 142 -- docs/zh/getting-started.md | 87 - docs/zh/index.md | 83 - docs/zh/results-and-charts.md | 81 - docs/zh/s3.md | 98 -- docs/zh/schema-and-history.md | 62 - docs/zh/settings-and-data.md | 87 - docs/zh/sql-editor.md | 73 - docs/zh/troubleshooting.md | 78 - docs/zh/tutorial.md | 112 -- scripts/pages-redirects.sh | 79 + src/analysis/mod.rs | 3 +- src/spec/lsp.rs | 2 +- 46 files changed, 101 insertions(+), 6947 deletions(-) delete mode 100644 docs/.vitepress/config.mts delete mode 100644 docs/.vitepress/theme/custom.css delete mode 100644 docs/.vitepress/theme/index.ts delete mode 100644 docs/analysis-app.md delete mode 100644 docs/assets/intro.jpg delete mode 100644 docs/assets/logo.png delete mode 100644 docs/cli.md delete mode 100644 docs/dashboards.md delete mode 100644 docs/data-sources.md delete mode 100644 docs/development.md delete mode 100644 docs/getting-started.md delete mode 100644 docs/index.md delete mode 100644 docs/package-lock.json delete mode 100644 docs/package.json delete mode 100644 docs/public/favicon.png delete mode 100644 docs/public/og-image.jpg delete mode 100644 docs/public/samples/sales.csv delete mode 100644 docs/public/samples/sales.dash delete mode 100644 docs/results-and-charts.md delete mode 100644 docs/s3.md delete mode 100644 docs/schema-and-history.md delete mode 100644 docs/settings-and-data.md delete mode 100644 docs/sql-editor.md delete mode 100644 docs/troubleshooting.md delete mode 100644 docs/tutorial.md delete mode 100644 docs/zh/analysis-app.md delete mode 100644 docs/zh/cli.md delete mode 100644 docs/zh/dashboards.md delete mode 100644 docs/zh/data-sources.md delete mode 100644 docs/zh/development.md delete mode 100644 docs/zh/getting-started.md delete mode 100644 docs/zh/index.md delete mode 100644 docs/zh/results-and-charts.md delete mode 100644 docs/zh/s3.md delete mode 100644 docs/zh/schema-and-history.md delete mode 100644 docs/zh/settings-and-data.md delete mode 100644 docs/zh/sql-editor.md delete mode 100644 docs/zh/troubleshooting.md delete mode 100644 docs/zh/tutorial.md create mode 100755 scripts/pages-redirects.sh diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 71e7217..65fc352 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -1,10 +1,14 @@ -name: Deploy docs +name: Redirect the old docs address + +# The docs moved to docs.ducklocal.app (source: JetSquirrel/ducklocal-site). +# This repository's GitHub Pages site, jetsquirrel.github.io/DuckLocal/, now +# only redirects each old page to its new address. on: push: branches: [main] paths: - - 'docs/**' + - 'scripts/pages-redirects.sh' - '.github/workflows/gh-pages.yml' workflow_dispatch: @@ -27,23 +31,9 @@ jobs: steps: - uses: actions/checkout@v4 - with: - # Full history: `lastUpdated` dates each page, and the sitemap's - # lastmod, from its last commit. - fetch-depth: 0 - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: 24 - cache: npm - cache-dependency-path: docs/package-lock.json - - - name: Install dependencies - run: npm --prefix docs ci - - name: Build the docs site - run: npm --prefix docs run build + - name: Write the redirect pages + run: scripts/pages-redirects.sh target/pages-redirects - name: Setup Pages uses: actions/configure-pages@v4 @@ -51,7 +41,7 @@ jobs: - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - path: 'target/docs-site' + path: 'target/pages-redirects' - name: Deploy to GitHub Pages id: deployment diff --git a/.gitignore b/.gitignore index fdf8136..caf4366 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,6 @@ # Rust build artifacts /target -# Docs site dependencies and VitePress build cache -docs/node_modules/ -docs/.vitepress/cache/ - # macOS packaging output (scripts/package-macos.sh writes these into the # repository root; CI uploads them as release assets) /DuckLocal.app/ diff --git a/README.md b/README.md index b257255..253b9fc 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ DuckLocal logo -**[Docs](docs/index.md)** · **[中文文档](README.zh-CN.md)** +**[ducklocal.app](https://ducklocal.app/)** · **[Docs](https://docs.ducklocal.app/)** · **[中文文档](README.zh-CN.md)** A local-first workspace for querying and exploring your data, built natively on DuckDB. Point it at your files — there is no connection to configure, no schema to create, and nothing is uploaded anywhere. @@ -59,7 +59,7 @@ ducklocal check dashboard.dash # validate; JSON diagnostics, exit 2 o ducklocal lsp # language server over stdio, for editors ``` -See the [CLI guide](docs/cli.md) for conversion, stdin, output, app export, and safety details. +See the [CLI guide](https://docs.ducklocal.app/cli) for conversion, stdin, output, app export, and safety details. The [official agent skill](skills/ducklocal/SKILL.md) teaches schema-first exploration, SQL analysis, and verified file conversion. Copy it into your target project's supported skills directory; for example, from this checkout: @@ -72,9 +72,9 @@ Inspect existing destinations before overwriting. No global configuration is cha ## Documentation -Guides live in [`docs/`](docs/index.md): [getting started](docs/getting-started.md), a [10-minute tutorial](docs/tutorial.md) with sample data, [troubleshooting](docs/troubleshooting.md), [data sources](docs/data-sources.md), [S3 and httpfs](docs/s3.md), [SQL editor](docs/sql-editor.md), [schema browser and history](docs/schema-and-history.md), [results and charts](docs/results-and-charts.md), [settings and app data](docs/settings-and-data.md), and [development](docs/development.md). +The guides are at **[docs.ducklocal.app](https://docs.ducklocal.app/)**: [getting started](https://docs.ducklocal.app/getting-started), a [10-minute tutorial](https://docs.ducklocal.app/tutorial) with sample data, [troubleshooting](https://docs.ducklocal.app/troubleshooting), [data sources](https://docs.ducklocal.app/data-sources), [S3 and httpfs](https://docs.ducklocal.app/s3), [SQL editor](https://docs.ducklocal.app/sql-editor), [schema browser and history](https://docs.ducklocal.app/schema-and-history), [results and charts](https://docs.ducklocal.app/results-and-charts), [settings and app data](https://docs.ducklocal.app/settings-and-data), [dashboards](https://docs.ducklocal.app/dashboards), and [development](https://docs.ducklocal.app/development). -The same pages are published with VitePress. With Node.js 22 or later (24 LTS recommended), run `npm --prefix docs ci`, then `npm --prefix docs run build` to generate `target/docs-site`, or `npm --prefix docs run dev` for local development. CI deploys the site to GitHub Pages whenever `docs/` changes on `main`. See [development](docs/development.md#the-documentation-site) for preview commands and configuration. +The website — the product page at [ducklocal.app](https://ducklocal.app/) and the docs — lives in its own repository, [JetSquirrel/ducklocal-site](https://github.com/JetSquirrel/ducklocal-site). A change here that changes what the docs say needs a pull request there too. ## Run @@ -90,7 +90,7 @@ cargo run -- ./data/logs/ # or open something straight away # Produces target/release/DuckLocal.app ``` -The released disk image runs on macOS 12 or later, Apple silicon only. `bundle.sh` does not sign what it builds; `scripts/package-macos.sh` is the shipping path and signs and notarizes the dmg. See [development](docs/development.md). +The released disk image runs on macOS 12 or later, Apple silicon only. `bundle.sh` does not sign what it builds; `scripts/package-macos.sh` is the shipping path and signs and notarizes the dmg. See [development](https://docs.ducklocal.app/development). ## License diff --git a/README.zh-CN.md b/README.zh-CN.md index 1496497..a357f63 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -2,7 +2,7 @@ DuckLocal logo -**[文档](docs/zh/index.md)** · **[English](README.md)** +**[ducklocal.app](https://ducklocal.app/zh/)** · **[文档](https://docs.ducklocal.app/zh/)** · **[English](README.md)** 本地优先的数据查询与分析工作台,原生基于 DuckDB。直接指向你的文件即可——不用配置连接、不用建 schema,也不会上传任何数据。 @@ -59,7 +59,7 @@ ducklocal check dashboard.dash # 校验;JSON 诊断,有错误时 ducklocal lsp # 面向编辑器的语言服务器(stdio) ``` -转换、stdin、输出编码、应用导出和安全说明见 [CLI 指南](docs/zh/cli.md)。 +转换、stdin、输出编码、应用导出和安全说明见 [CLI 指南](https://docs.ducklocal.app/zh/cli)。 [官方 agent skill](skills/ducklocal/SKILL.md) 教 AI 先查 schema,再进行 SQL 分析及验证格式转换。复制到目标项目支持的 skill 目录即可,例如在本仓库执行: @@ -72,9 +72,9 @@ cp -R skills/ducklocal /path/to/your-project/.claude/skills/ ## 文档 -完整指南在 [`docs/`](docs/zh/index.md):[快速上手](docs/zh/getting-started.md)、带样例数据的 [10 分钟上手教程](docs/zh/tutorial.md)、[常见问题排查](docs/zh/troubleshooting.md)、[数据源](docs/zh/data-sources.md)、[S3 与 httpfs](docs/zh/s3.md)、[SQL 编辑器](docs/zh/sql-editor.md)、[Schema 浏览与历史](docs/zh/schema-and-history.md)、[结果与图表](docs/zh/results-and-charts.md)、[设置与应用数据](docs/zh/settings-and-data.md)、[开发](docs/zh/development.md)。 +完整指南在 **[docs.ducklocal.app](https://docs.ducklocal.app/zh/)**:[快速上手](https://docs.ducklocal.app/zh/getting-started)、带样例数据的 [10 分钟上手教程](https://docs.ducklocal.app/zh/tutorial)、[常见问题排查](https://docs.ducklocal.app/zh/troubleshooting)、[数据源](https://docs.ducklocal.app/zh/data-sources)、[S3 与 httpfs](https://docs.ducklocal.app/zh/s3)、[SQL 编辑器](https://docs.ducklocal.app/zh/sql-editor)、[Schema 浏览与历史](https://docs.ducklocal.app/zh/schema-and-history)、[结果与图表](https://docs.ducklocal.app/zh/results-and-charts)、[设置与应用数据](https://docs.ducklocal.app/zh/settings-and-data)、[Dashboard](https://docs.ducklocal.app/zh/dashboards)、[开发](https://docs.ducklocal.app/zh/development)。 -这些页面同时会以 VitePress 站点形式发布。需要 Node.js 22 及以上(推荐 24 LTS):`npm --prefix docs ci` 安装依赖,`npm --prefix docs run build` 生成到 `target/docs-site`,`npm --prefix docs run dev` 本地开发。CI 在 `main` 分支的 `docs/` 有改动时自动部署到 GitHub Pages。详见[开发](docs/zh/development.md#文档站)。 +网站——[ducklocal.app](https://ducklocal.app/zh/) 产品首页与文档——放在独立的仓库 [JetSquirrel/ducklocal-site](https://github.com/JetSquirrel/ducklocal-site)。这里的改动如果改变了文档里的说法,也需要向那边提交 pull request。 ## 运行 @@ -90,7 +90,7 @@ cargo run -- ./data/logs/ # 或直接打开数据 # 生成 target/release/DuckLocal.app ``` -发布的安装包要求 macOS 12 及以上、Apple 芯片。`bundle.sh` 不做签名;正式发布走 `scripts/package-macos.sh`,它会签名并对 dmg 做公证。详见[开发](docs/zh/development.md)。 +发布的安装包要求 macOS 12 及以上、Apple 芯片。`bundle.sh` 不做签名;正式发布走 `scripts/package-macos.sh`,它会签名并对 dmg 做公证。详见[开发](https://docs.ducklocal.app/zh/development)。 ## 开源协议 diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts deleted file mode 100644 index 39d8682..0000000 --- a/docs/.vitepress/config.mts +++ /dev/null @@ -1,231 +0,0 @@ -import { copyFile, writeFile } from 'node:fs/promises' -import { resolve } from 'node:path' -import { defineConfig, type DefaultTheme, type HeadConfig } from 'vitepress' - -const repository = 'https://github.com/JetSquirrel/DuckLocal' -// Where the site is published: GitHub Pages under the repository's name. Every -// absolute URL the pages hand to crawlers and link previews starts here. -const site = 'https://jetsquirrel.github.io/DuckLocal/' -const ogImage = `${site}og-image.jpg` -const pages = [ - 'index', - 'getting-started', - 'data-sources', - 's3', - 'sql-editor', - 'schema-and-history', - 'results-and-charts', - 'settings-and-data', - 'analysis-app', - 'development', -] - -// A page's path under the site root, as `cleanUrls: false` publishes it: -// `index.md` → ``, `zh/index.md` → `zh/`, `zh/cli.md` → `zh/cli.html`. -function pageUrl(relativePath: string): string { - return relativePath.replace(/(^|\/)index\.md$/, '$1').replace(/\.md$/, '.html') -} - -function sidebar(zh = false): DefaultTheme.SidebarItem[] { - const prefix = zh ? '/zh/' : '/' - const item = (page: string, english: string, chinese: string) => ({ - text: zh ? chinese : english, - link: `${prefix}${page}`, - }) - return [ - { - text: zh ? '入门' : 'Getting started', - items: [ - item('getting-started', 'Install and first query', '安装与第一条查询'), - item('tutorial', 'Your first 10 minutes', '10 分钟上手教程'), - item('troubleshooting', 'Troubleshooting', '常见问题排查'), - ], - }, - { - text: zh ? '使用指南' : 'Guides', - items: [ - item('data-sources', 'Data sources', '数据源'), - item('s3', 'S3 and httpfs', 'S3 与 httpfs'), - item('sql-editor', 'SQL editor', 'SQL 编辑器'), - item('schema-and-history', 'Schema and history', 'Schema 浏览与历史'), - item('results-and-charts', 'Results and charts', '结果与图表'), - item('settings-and-data', 'Settings and app data', '设置与应用数据'), - ], - }, - { - text: zh ? '自动化与扩展' : 'Automate and extend', - items: [ - item('cli', 'CLI and agent skill', 'CLI 与 agent skill'), - item('dashboards', 'Dashboards (.dash)', 'Dashboard(.dash)'), - item('analysis-app', 'Analysis apps', '分析应用'), - ], - }, - { - text: zh ? '参与开发' : 'Contributing', - items: [item('development', 'Development guide', '开发指南')], - }, - ] -} - -export default defineConfig({ - title: 'DuckLocal', - description: 'A local-first workspace for querying and exploring your data, built natively on DuckDB.', - base: '/DuckLocal/', - outDir: '../target/docs-site', - cleanUrls: false, - ignoreDeadLinks: false, - // Per-page "last updated" dates, which also become the sitemap's lastmod. - // Needs the full git history; the Pages workflow checks out with depth 0. - lastUpdated: true, - sitemap: { hostname: site }, - head: [ - ['link', { rel: 'icon', type: 'image/png', href: '/DuckLocal/favicon.png' }], - ['meta', { name: 'theme-color', content: '#f2b705' }], - ['meta', { property: 'og:site_name', content: 'DuckLocal' }], - ['meta', { property: 'og:type', content: 'website' }], - ['meta', { property: 'og:image', content: ogImage }], - ['meta', { property: 'og:image:width', content: '1200' }], - ['meta', { property: 'og:image:height', content: '675' }], - ['meta', { property: 'og:image:alt', content: 'CSV, Parquet and DuckDB files, plus S3 storage, feeding one local DuckLocal workspace' }], - ['meta', { name: 'twitter:card', content: 'summary_large_image' }], - ['meta', { name: 'twitter:image', content: ogImage }], - ], - // What differs page to page: its canonical address, its title and summary - // for link previews, its other-language twin, and — on the two home pages — - // a description of the app itself for search results. - transformHead({ pageData, title, description }) { - const path = pageUrl(pageData.relativePath) - const url = `${site}${path}` - const zh = pageData.relativePath.startsWith('zh/') - const english = zh ? path.replace(/^zh\//, '') : path - const chinese = zh ? path : `zh/${path}` - const head: HeadConfig[] = [ - ['link', { rel: 'canonical', href: url }], - ['link', { rel: 'alternate', hreflang: 'en', href: `${site}${english}` }], - ['link', { rel: 'alternate', hreflang: 'zh-CN', href: `${site}${chinese}` }], - ['link', { rel: 'alternate', hreflang: 'x-default', href: `${site}${english}` }], - ['meta', { property: 'og:url', content: url }], - ['meta', { property: 'og:title', content: title }], - ['meta', { property: 'og:description', content: description }], - ['meta', { property: 'og:locale', content: zh ? 'zh_CN' : 'en_US' }], - ['meta', { name: 'twitter:title', content: title }], - ['meta', { name: 'twitter:description', content: description }], - ] - if (pageData.relativePath === 'index.md' || pageData.relativePath === 'zh/index.md') { - head.push(['script', { type: 'application/ld+json' }, JSON.stringify({ - '@context': 'https://schema.org', - '@type': 'SoftwareApplication', - name: 'DuckLocal', - description, - url, - applicationCategory: 'DeveloperApplication', - operatingSystem: 'macOS 12 or later (Apple silicon)', - offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' }, - license: 'https://www.apache.org/licenses/LICENSE-2.0', - downloadUrl: `${repository}/releases/latest`, - codeRepository: repository, - inLanguage: zh ? 'zh-CN' : 'en', - })]) - } - return head - }, - locales: { - root: { - label: 'English', - lang: 'en', - themeConfig: { - nav: [ - { text: 'Get started', link: '/getting-started' }, - { text: 'Tutorial', link: '/tutorial' }, - { text: 'CLI', link: '/cli' }, - { text: 'Download', link: `${repository}/releases/latest` }, - ], - sidebar: sidebar(), - }, - }, - zh: { - label: '简体中文', - lang: 'zh-CN', - description: '本地优先的数据查询与分析工作台,原生基于 DuckDB。', - themeConfig: { - nav: [ - { text: '快速上手', link: '/zh/getting-started' }, - { text: '教程', link: '/zh/tutorial' }, - { text: 'CLI', link: '/zh/cli' }, - { text: '下载', link: `${repository}/releases/latest` }, - ], - sidebar: sidebar(true), - outline: { label: '本页目录', level: [2, 3] }, - editLink: { pattern: `${repository}/edit/main/docs/:path`, text: '在 GitHub 上编辑此页' }, - docFooter: { prev: '上一页', next: '下一页' }, - langMenuLabel: '切换语言', - sidebarMenuLabel: '目录', - returnToTopLabel: '返回顶部', - skipToContentLabel: '跳转到内容', - darkModeSwitchLabel: '外观', - lightModeSwitchTitle: '切换到浅色主题', - darkModeSwitchTitle: '切换到深色主题', - notFound: { - title: '页面未找到', - quote: '这个页面不存在,请返回首页或使用搜索查找指南。', - linkLabel: '返回首页', - linkText: '返回首页', - }, - footer: { message: '基于 Apache-2.0 许可开源发布。' }, - }, - }, - }, - themeConfig: { - logo: { src: '/assets/logo.png', alt: 'DuckLocal' }, - outline: { level: [2, 3] }, - editLink: { pattern: `${repository}/edit/main/docs/:path` }, - socialLinks: [{ icon: 'github', link: repository }], - footer: { message: 'Released under the Apache-2.0 License.' }, - search: { - provider: 'local', - options: { - locales: { - zh: { - translations: { - button: { buttonText: '搜索', buttonAriaLabel: '搜索文档' }, - modal: { - displayDetails: '显示详细列表', - resetButtonTitle: '清除搜索', - backButtonTitle: '关闭搜索', - noResultsText: '没有找到相关结果', - footer: { - selectText: '选择', - selectKeyAriaLabel: '回车键', - navigateText: '切换', - navigateUpKeyAriaLabel: '向上箭头', - navigateDownKeyAriaLabel: '向下箭头', - closeText: '关闭', - closeKeyAriaLabel: 'Esc 键', - }, - }, - }, - }, - }, - }, - }, - }, - async buildEnd(config) { - await copyFile(resolve(config.srcDir, 'assets/logo.png'), resolve(config.outDir, 'assets/logo.png')) - await Promise.all(pages.map(async (page) => { - const target = `${config.site.base}zh/${page === 'index' ? '' : `${page}.html`}` - await writeFile(resolve(config.outDir, `${page}.zh-CN.html`), ` - - - - - -页面已迁移 · DuckLocal - - - -

文档已迁移。前往新页面

- -`) - })) - }, -}) diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css deleted file mode 100644 index df0ee30..0000000 --- a/docs/.vitepress/theme/custom.css +++ /dev/null @@ -1,35 +0,0 @@ -:root { - --vp-c-brand-1: #806000; - --vp-c-brand-2: #967000; - --vp-c-brand-3: #a47b00; - --vp-c-brand-soft: rgba(242, 183, 5, 0.14); - --vp-button-brand-text: #242117; - --vp-button-brand-bg: #f2c438; - --vp-button-brand-hover-text: #242117; - --vp-button-brand-hover-bg: #f7d361; - --vp-button-brand-active-text: #242117; - --vp-button-brand-active-bg: #e6b824; -} - -.dark { - --vp-c-brand-1: #f2cb57; - --vp-c-brand-2: #e7bd3b; - --vp-c-brand-3: #d5a926; - --vp-c-brand-soft: rgba(242, 183, 5, 0.16); -} - -.VPHero .image-src { - max-width: 240px; - max-height: 240px; - border-radius: 32px; -} - -.VPNavBarTitle .logo { - border-radius: 6px; -} - -.VPHome .vp-doc img { - border: 1px solid var(--vp-c-divider); - border-radius: 12px; - margin: 24px auto; -} diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts deleted file mode 100644 index 42fe9a9..0000000 --- a/docs/.vitepress/theme/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import DefaultTheme from 'vitepress/theme' -import './custom.css' - -export default DefaultTheme diff --git a/docs/analysis-app.md b/docs/analysis-app.md deleted file mode 100644 index eed4864..0000000 --- a/docs/analysis-app.md +++ /dev/null @@ -1,292 +0,0 @@ ---- -description: "Build analysis apps for DuckLocal: JavaScript views over your data with query(), live reload, the component catalog, trust prompts and HTML export." ---- - -# Analysis apps (JavaScript) - -**[中文](zh/analysis-app.md)** · [Docs](index.md) - -An analysis app is a workspace tab whose contents are a JavaScript application you -wrote. JavaScript is the declaration: the app's `render` function is the description of -the interface, and the range controls, chips, KPI cards, charts and tables are all yours -to compose. An analysis app reads the database the window already has open — the same -tables, views and attached files — through the host functions below. - -This is for building a view over your data: a dashboard, a purpose-built browser for one -table, a report you run every morning. An analysis app opens and closes like a query, and -sits beside your SQL tabs. - -## Open an app - -Any of these opens one, and each loads the folder immediately: - -- the **+** at the end of the tab strip, then **Open app…**; -- drag an app folder onto the window; -- name it on the command line: `ducklocal examples/analysis_app`. - -A folder that cannot be an app — a file, a path that is gone, or a folder with no -`main.js` — is refused **inside the tab**, naming the folder and what is missing. An app -that is already working is never thrown away by a folder you cancelled out of or named by -mistake. - -Apps close with the tab's close button and rename like a query tab. The app folders you -have open are remembered: they reopen at the next launch, and one that has been moved or -deleted is reported by name rather than silently forgotten. - -Apps run on their own DuckDB connection to the database the main window has open, so an -app and the SQL editor see the same tables, views and attached files without waiting on -each other: a dashboard refreshing half a dozen statements no longer freezes the editor. -What a second connection does not carry is connection-local state — a `TEMP` table or a -`SET` made in the SQL editor is not there for an app, and the other way round. All apps -share that one connection, so they still queue behind each other. - -## View definition - -**View definition** in the app's header shows the folder and the entry file's source, -read-only. An app is an ordinary directory of JavaScript files, so that is the whole -definition — there is no second, hidden form of the app to inspect. - -## Reload - -Save a `.js` or `.mjs` file in the app's folder and the app reloads. The host polls the -folder every 250 ms and waits 200 ms for writes to settle, so saving six files at once is -one reload. Dotfiles, `node_modules/` and `target/` are ignored. Only the folder currently -shown is watched. - -**Reload** in the app's header does the same thing on demand. - -A reload that fails **keeps the last app that loaded** and reports the error above it, -inside the tab. A load that fails on an app that has never loaded shows the error as the -tab's whole body instead. - -A reload restarts the app's JavaScript, not its connection. The app connection is one -long-lived connection shared by every app, so state an app made on it — an `ATTACH`, a -`SET`, a `TEMP` table — is still there after the reload. Write an app's setup so that -running it twice is safe (`ATTACH IF NOT EXISTS …`, `CREATE OR REPLACE TEMP TABLE …`) -rather than assuming a clean connection on every load. - -## Host functions - -Import them from the `ducklocal` module: - -```js -import { catalog, query, appDir, sqlLiteral, sqlIdentifier } from "ducklocal"; -``` - -They all run against the app connection — the same database the main window is on — and -they throw JavaScript `Error`s on failure. Everything but `appDir` may be called at any -time; `appDir` answers during the app's load. - -### `catalog()` - -```ts -catalog(): Promise - -interface CatalogEntry { - database: string; // e.g. "memory" - schema: string; // e.g. "main" - name: string; // e.g. "orders" - kind: "table" | "view"; - estimated_rows: number | null; - comment: string | null; - columns: { name: string; type: string }[]; // type is DuckDB's, e.g. "DECIMAL(38,10)" -} -``` - -Every table and view of every database on the connection — the one the window opened and -anything `ATTACH`ed, by the window or by the app itself — except DuckDB's own catalogs -(`information_schema`, `pg_catalog`, `system`). `entry.database` says which database an -entry belongs to; use it when you qualify a name. Tables come before views. DuckDB resolves -identifiers case-insensitively and keeps tables and views in one namespace, so qualify a -name when you build SQL from it, and quote it with `sqlIdentifier`. - -### `query(sql, limit?)` - -```ts -query(sql: string, limit?: number): Promise - -interface QueryResult { - columns: { name: string; type: string }[]; - rows: any[][]; // one array per row, one entry per column - row_count: number; // rows actually returned - truncated: boolean; // true when the row limit stopped the result early - elapsed_ms: number; -} -``` - -- `limit` defaults to **1000**; a value below 1 is refused and anything above 100000 is - clamped. A 2,000,000-cell budget applies - as well, so a very wide result returns fewer rows than `limit`. **Read `truncated`.** -- `type` is the Arrow type as rendered by DuckLocal, e.g. `Int64`, `Utf8`, - `Decimal(38, 10)`, `Timestamp(Microsecond, None)`. -- The statement is prepared and executed as given; `query()` does not split or validate - multi-statement SQL. - -### `appDir()` - -```ts -appDir(): string // the app's own folder, absolute -``` - -An app cannot read the filesystem, so this is how it addresses data that ships beside it — -`query("SELECT * FROM " + sqlLiteral(appDir() + "/orders.csv"))` works with nothing -attached and nothing open in the window. It answers while the app loads: call it in `init()` -and keep the result. - -`panelDir()` is the deprecated alias from before apps were called apps; it keeps working, -but new code should use `appDir()`. - -### `sqlLiteral(value)` - -```ts -sqlLiteral(value: string): string // e.g. "O'Brien" -> 'O''Brien' -``` - -Quotes and escapes a string as a SQL string literal. Use it for any value that comes from -your app's own state — a filter, a channel id, a date — instead of templating it into SQL -by hand. A `NUL` byte is refused, because a SQL literal cannot carry one. - -### `sqlIdentifier(name)` - -```ts -sqlIdentifier(name: string): string // e.g. "my table" -> "my table" -``` - -The same job for the other half of a statement: a table, view or column **name**, quoted so -it is read as one name and matched exactly as written. A name is not a string literal, and -the names an app builds SQL from are rarely its own — `catalog()` answers with whatever the -database holds, so `my table`, `Order`, and a name holding a `"` all turn up. An empty name -and a `NUL` byte are refused; neither names anything, and quoting them would only hide that. - -```js -const entry = (await catalog()).find((table) => table.name === "orders"); -const from = `${sqlIdentifier(entry.schema)}.${sqlIdentifier(entry.name)}`; -const rows = await query(`SELECT count(*) FROM ${from}`); -``` - -### Cell encodings - -A cell is plain JSON **when that loses nothing** — `null`, booleans, strings, and numbers -that fit an IEEE double exactly. Anything else arrives as an object with an `encoding` -field, the same encoding the `ducklocal query` CLI prints, so no digit is silently dropped: - -| Value | What arrives | -| --- | --- | -| `NULL` | `null` | -| `BOOLEAN` | `true` / `false` | -| integers within ±2^53−1 | number | -| larger integers (`HUGEINT`, `UBIGINT`, …) | `{ "encoding": "integer", "value": "170141183460469231731687303715884105727" }` | -| `DECIMAL` | `{ "encoding": "decimal", "value": "12345678901234567890.1234567890" }` | -| non-finite `FLOAT`/`DOUBLE` | `{ "encoding": "float", "value": "inf" }` | -| `DATE` | `{ "encoding": "date", "unit": "Day", "value": "19783" }` | -| `TIMESTAMP` | `{ "encoding": "timestamp", "unit": "Microsecond", "value": "1709296496789000" }` | -| `TIME` | `{ "encoding": "time", "unit": "Microsecond", "value": "45296789000" }` | -| `INTERVAL` | `{ "encoding": "interval", "months": 0, "days": 1, "nanos": "0" }` | -| `BLOB`, `GEOMETRY` | `{ "encoding": "hex", "value": "00ff" }` | -| `LIST` / `ARRAY` | array | -| `STRUCT` | `{ "encoding": "struct", "fields": [["name", ], …] }` | -| `MAP` | `{ "encoding": "map", "entries": [[, ], …] }` | -| `UNION` | `{ "encoding": "union-value", "value": }` | - -`DATE` value `19783` is days since 1970-01-01; `TIMESTAMP` and `TIME` values are counts of -`unit` since the epoch or midnight. These are the storage values, not formatted text: -format them yourself, or `CAST` the column to `VARCHAR` in SQL if you want the string form. - -## Components - -An app draws with the same component catalog the shell ships, imported from -`gpui-component`: `GroupBox` (a titled card), `Progress` (a bar), `Toggle`, `Badge`, `Tag`, -`Alert`, `Empty`, `Collapsible`, `DescriptionList`, `DataTable` with `DataTableState`, the -`Table` family, `Sidebar`, `Resizable`, `Scroll`, `DescriptionList`, and the charts — -`BarChart`, `LineChart`, `AreaChart`, `PieChart`, `RadarChart`. Layout primitives -(`div`, `h_flex`, `v_flex`, `Button`) come from `gpui-kit` and `gpui-base`. - -There is no `ToggleGroup`: compose a segmented control or a row of chips from several -`Toggle`s. The example app at -[`examples/analysis_app`](https://github.com/JetSquirrel/DuckLocal/tree/main/examples/analysis_app) -is a full dashboard built from exactly these, and it is the best thing to copy from. - -Every app folder ships a `jsconfig.json` and a generated `gpui-kit.d.ts`, so check the -app against the API the runtime will actually give it before you save: - -```sh -npx --yes -p typescript tsc -p /jsconfig.json --noImplicitAny false -``` - -That reports a property that does not exist on a catalog component — the kind of mistake -the runtime otherwise refuses only at render, inside the app's own error surface, which -is not written to the app log. Its blind spot is the `gpui-base` primitives (`div`, -`h_flex`, `v_flex`, `Button.new`): they are loosely typed, so a wrong method on one of -those is not caught here and still only shows up at render. - -## SQL is not sandboxed - -`query()` runs on DuckLocal's own database, **with DuckLocal's privileges and the user's**. -An app can read and write anything the SQL editor can, including `COPY` to files, `ATTACH` -of other databases, `INSTALL`/`LOAD` of extensions, and queries against S3 views whose -credentials are already configured. Treat an app's JavaScript as code you are choosing to -run, exactly as you would a shell script. - -So the choice is asked for. The first time a folder opens as an app — from the command line, -a drop, the picker, or a tab restored at launch — its tab says what the app's SQL can do and -waits: **View source** shows the entry file without running it, **Trust and run** runs it. -The answer is remembered per folder, so later launches and every reload after a save run -without asking again. `ducklocal export --html` runs the app you name on the command line -and does not ask. - -What an app does **not** get is anything else the process could do: - -- **No filesystem, network, process, or environment module.** `fs`, `net`, `process` and - friends are not available to a script unless the host grants them; DuckLocal grants none. -- **No S3 credentials.** The S3 browser's keys live in DuckLocal's own Rust state and are - used by DuckLocal's signing client; they are never written into the DuckDB connection, and - the host module cannot reach them. An app can still run SQL that uses httpfs if the user's - own connection is configured for it. -- **The host module is the whole surface.** Only the functions above cross into Rust. - -## Export an app as HTML - -`ducklocal export --html ` runs an app once and writes what it asked the database into one self-contained HTML file, for sending an app's numbers to someone who does not have DuckLocal. The command, its options and its exit codes are in [the CLI guide](cli.md#export-an-app-as-a-static-html-file). The capture ends when the app has gone quiet, or at `--timeout` seconds (default 15), whichever comes first; in the deadline case the JSON's `stop_reason` is `deadline` and the report carries a visible warning that it may be incomplete. - -The report is the app's data, not its interface. Only what `query()` returned is exported, in call order, one section per distinct statement — an identical statement run again collapses into its section, marked as run that many times — and every call is captured, including statements that are not `SELECT`, such as `ATTACH`. A `catalog()` call becomes an appendix of tables and columns rather than a numbered statement. A leading `-- title: …` comment on the statement's first line names its section ("Statement N — title"); the SQL itself shows verbatim. Each result shows as a table, with an inline bar chart above it when the result is a label and a number per row: exactly two columns, at most 25 rows, and a non-negative numeric second column (the first column labels the bars). Anything else is only a table. - -What the report does **not** hold is anything the app drew: KPI cards, charts, and tables built from JavaScript constants never reach the file, because the export records queries, not the render — an app draws native components and their contents are decided while they are laid out, so nothing describes a chart's bars well enough to reproduce them. Constants a report must show can be sent through SQL instead: `SELECT * FROM (VALUES ('Q1', 120), ('Q2', 95)) AS t(quarter, total)`. - -Because it is the loading state, a statement an app only runs on a click is not in the report, and neither is anything after a reload. The app's JavaScript runs with the same privileges as always: exporting is running the app, exactly as opening it in a tab is. - -## Dashboard specs (.dash) - -A `.dash` file is a dashboard declared as data — query and plot blocks, no JavaScript — for the common case of standard plots over saved queries. [Dashboards (.dash)](dashboards.md) is the full guide to the format; `ducklocal check` validation is in [the CLI guide](cli.md#check-a-dashboard-spec). - -Open one like an app: choose **Open dashboard…** from the tab strip's `+` menu, name it on the command line (`ducklocal dashboard.dash`), or drag the file onto the window, and it opens as a dashboard tab beside your queries and apps. The tab runs the spec's queries on the window's own connection — so a dashboard sees connection-local state such as `TEMP` tables, and queues with the editor's queries — and renders each plot as one panel of a vertical stack whose dividers drag to resize. Each plot starts at its default height, and a stack taller than the tab scrolls rather than squeezing the plots to fit. Only read-only statements run: a query that could write (DDL, DML, `COPY`, `ATTACH`, …) is refused before it reaches the connection, so opening a `.dash` file someone sent you cannot change your data. A plot whose query fails shows the reason in its own panel; the rest of the dashboard still draws. The toolbar's reload re-reads the file and re-runs everything, and a reload that fails validation never replaces a working dashboard — the reason appears above it instead. Open dashboards are remembered between launches, exactly like apps. - -The tab is also an editor: its source view edits the file with syntax highlighting — the SQL in heredocs coloured as it is in the SQL editor — completion and diagnostics, and writes back with the save button or ⌘S — a save whose spec no longer validates keeps the last working dashboard up and says why. Outside the GUI, `ducklocal lsp` serves the same completion, diagnostics, hover and go-to-definition to any LSP-capable editor (see [the CLI guide](cli.md#edit-a-dashboard-spec-with-lsp)). - -## Known limits - -- **An app in a tab has no window-level overlay.** The shell's dialogs, sheets, toasts and - tooltip layer are found only when the shell's own root view is the window's first view. In - a tab DuckLocal's root holds that place — it has to, or DuckLocal's own dialogs would break — so - `window.open_dialog`, `window.open_sheet` and `window.push_toast` throw a `TypeError` - reading *needs a ShellRoot as the window's first view*, which surfaces the way any other - error from your code does. A tooltip is the exception, and the one silent one: it is - attached by a hover listener, which has nothing to throw into, so a tooltip in an app - simply never appears. Build app UI that stays inside its own bounds — an expanded region - rather than a modal. -- **Reload is implemented by DuckLocal, not by the shell's watcher.** gpui-shell's hot reload - hangs off `runtime.watch` / `runtime.refresh`, which only work for a `ShellRoot` the runtime - built itself; that path is not reachable from an embedding host, so DuckLocal watches the - folder itself and reloads through `load_application` / `mount_application`. The consequence: - reload watches `.js`/`.mjs` files only. Any other file an app reads is not watched. -- **A reload compiles on the UI thread.** The script runtime is not sendable, so mounting an - app happens on the main thread; a very large module graph will make the window stutter - while it loads. The first load is deferred until after the tab's first frame, so the tab - appears immediately either way. -- **One connection for all apps, and no cancellation.** Apps do not block the main - window, but they do block each other: they share one connection behind one lock, so a long - query in one app delays every other app's. One connection each is not available — a - host function is handed arguments, not a caller, so nothing at the moment `query()` runs - says which app asked. Cancelling a query in flight is not exposed either; keep an app's - statements bounded rather than counting on stopping one. -- **`row_count` is what came back, not what matched.** With `truncated: true`, the rows that - would have followed are not available; aggregate in SQL rather than counting in JavaScript. diff --git a/docs/assets/intro.jpg b/docs/assets/intro.jpg deleted file mode 100644 index f5bde474903b462b3927364bed7601f0222fba50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158744 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

7N?sE_P9NCxMDj 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 DK-^7& diff --git a/docs/assets/logo.png b/docs/assets/logo.png deleted file mode 100644 index 485b984229c744a63a2a991e61cf7d30e890f5fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150886 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 diff --git a/docs/cli.md b/docs/cli.md deleted file mode 100644 index bf70703..0000000 --- a/docs/cli.md +++ /dev/null @@ -1,266 +0,0 @@ ---- -description: "Run DuckDB SQL headlessly with the ducklocal CLI: structured JSON output, Markdown tables, profiling, file conversion, dashboard checks and the official AI agent skill." ---- - -# AI CLI and official skill - -**[中文](zh/cli.md)** · [Docs](index.md) - -## Run without a window - -`ducklocal query` executes SQL without initializing the GUI, history, registered files, language settings, or the GUI's global connection. Each invocation owns a new connection. With no command (or file, directory, and glob arguments), the existing GUI still opens. To open a GUI path named `query`, `profile`, `export`, `check` or `dash`, use `./query`, `./profile`, `./export`, `./check`, `./dash`. - -`ducklocal export` is the one subcommand that starts the window platform, because an analysis app renders and rendering needs a window: it opens one hidden window, draws one frame, and exits when the app has stopped asking the database. Nothing appears on screen. - -The supported release target remains **macOS 12+, Apple silicon**. There is no separate DuckDB CLI dependency. A build containing this CLI can be invoked directly inside its app bundle: - -```bash -/Applications/DuckLocal.app/Contents/MacOS/ducklocal --help -/Applications/DuckLocal.app/Contents/MacOS/ducklocal --version -``` - -Alternatively, build this checkout with `cargo build --locked` and use `./target/debug/ducklocal`. The examples below assume that binary is available as `ducklocal` on your shell's PATH. Older releases may not have `query`; check help first. JSON and Parquet support are bundled, not downloaded at query time. - -## Query options - -```bash -ducklocal --help -ducklocal --version -ducklocal query --help -ducklocal query --sql "SELECT 1 AS n" -ducklocal query --sql "SELECT 1 AS n" --format md -ducklocal query --sql-file analysis.sql --limit 100 -ducklocal query --sql-file - < analysis.sql -ducklocal query --database warehouse.duckdb --sql "SHOW TABLES" -``` - -- Exactly one of `--sql SQL` and `--sql-file FILE` is required. Files must be UTF-8; `-` reads stdin. SQL must contain exactly one statement. DuckDB's parser validates this before opening the target database or executing anything; comments, quoted semicolons, and trailing semicolons work. Scripts are rejected, not partially executed. -- `--database PATH` opens an **existing file, read-only by default**. Omit it for a fresh in-memory database. `--read-write` requires `--database` and explicitly permits writes and creating a database (not parent directories). Database errors never fall back to memory. -- `--limit N` is a positive integer, defaults to 1000, and limits returned rows. A 2,000,000-cell budget also applies; an extra row is read to determine `truncated`. Neither limit constrains query computation or DuckDB's result buffering. Large individual cells can still be large. -- `--format json` (the default) is the contract below. `--format md` renders the same result as a Markdown table, for a document or an agent reading it. Nothing else changes: the same SQL, the same limits, the same errors. -- Repeated/unknown flags, missing values, empty SQL, and invalid limits are errors. Options use separate values, not `--flag=value`. Relative paths resolve against the process working directory, not the SQL file directory. Quote shell paths; inside SQL, double apostrophes (`'O''Brien.csv'`). SQL identifiers use double quotes. - -### Markdown output - -`--format md` is a rendering, not a second contract: the values are the ones the JSON holds, written the way the results grid shows them. - -| Value | Rendered as | -| --- | --- | -| `NULL` | `NULL` | -| integer, decimal, float | the digits the value carries, exactly — a `DECIMAL(38,10)` keeps its scale, `NaN`/`inf`/`-inf` are spelled out | -| `DATE` | `YYYY-MM-DD` | -| `TIMESTAMP` | `YYYY-MM-DD HH:MM:SS[.ffffff]`, with the fraction only when the value has one. No timezone is appended; `--format json` keeps the raw count | -| `TIME` | `HH:MM:SS[.ffffff]` | -| `INTERVAL` | `1 months 2 days 3000 ns` | -| `BLOB`, `GEOMETRY` | `0x00ff`, elided with `…` when long | -| `LIST`, `STRUCT`, `MAP` | `[1, 2]`, `{x: 1}`, elided with `…` past 120 characters | - -A `|` in a cell is escaped and a newline becomes `
`, so a value cannot break the table it is in. A result with no rows is followed by `_0 rows._`, and a result that was cut short by `--limit` or the cell budget by `_Truncated at N rows: …_` — a preview should not read like a complete answer. Errors are unchanged: JSON on stderr, empty stdout. - -**Read-only is not a filesystem or network sandbox.** SQL such as `COPY` can write files even when the database is read-only. Authorize output paths, overwrites, database mutations, extension installation, and external access before execution. DuckLocal does not automatically install extensions or retry operations. Explicit `INSTALL`/`LOAD` SQL remains possible with authorization; installed extensions may autoload. A failed command can already have performed side effects (for example before an output failure); inspect the destination before retrying. - -## Explore and convert files - -After confirming the actual file exists: - -```bash -ducklocal query --sql "DESCRIBE SELECT * FROM 'sales.csv'" -ducklocal query --sql "SELECT * FROM 'sales.csv'" --limit 20 -ducklocal query --sql "SELECT sum(amount) AS total FROM 'sales.csv'" -# Only after authorizing this output path: -ducklocal query --sql "COPY (SELECT * FROM 'sales.csv') TO 'sales.parquet' (FORMAT PARQUET)" -ducklocal query --sql "SELECT count(*), sum(amount) FROM 'sales.parquet'" -ducklocal query --sql "DESCRIBE SELECT * FROM 'events.json'" -``` - -Do not guess `amount` exists: inspect DESCRIBE first. Compute full aggregates in SQL rather than summing a truncated preview. CLI calls do not share the GUI's registered views or each other's in-memory tables. Persist explicitly when needed: - -```bash -# These are separate statements and separate invocations, with explicit write permission. -ducklocal query --database warehouse.duckdb --read-write --sql "CREATE TABLE sales AS SELECT * FROM 'sales.csv'" -ducklocal query --database warehouse.duckdb --sql "SELECT count(*) FROM sales" -``` - -A database lock conflict is an error. Close the other writer (including the GUI), or use an authorized copy; never delete lock files or silently create a different database. - -## JSONL and nested JSON - -`read_ndjson_objects` is the reader for newline-delimited JSON (one object per line, `.jsonl`/`.ndjson`); `read_json`/`read_json_auto` read JSON documents (an array or a single object). Name the reader explicitly for a JSONL file rather than relying on auto-detection. `json_extract_string(col, '$.a.b[0].c')` walks a nested path — object keys and array indexes — and answers VARCHAR: - -```bash -ducklocal query --sql "SELECT json_extract_string(event, '$.payload.items[0].sku') AS sku, count(*) AS n FROM read_ndjson_objects('events.jsonl') GROUP BY 1 ORDER BY n DESC" -``` - -Use `json_extract` instead when the leaf is not a string and you want it as JSON. - -## Profile a relation - -`ducklocal profile` answers the questions that decide a chart, a scale and a number format, before anything is built on them. `DESCRIBE` says a column is a `DOUBLE`; a profile says it uses two decimals, that its largest value is a thousand times its median, and that its dates skip eleven days in the middle. - -```bash -ducklocal profile sales.csv -ducklocal profile orders.parquet -ducklocal profile "my orders" --database warehouse.duckdb -``` - -TARGET is a data file — `csv`, `tsv`, `txt`, `parquet`, `json`, `ndjson`, `jsonl` — or a workbook (`xlsx`, `xls`, `xlsb`, `ods`; its first sheet is imported as a TEMP table and profiled), or, with `--database`, a table or view name. A dotted name is read as `schema.table` and each part is quoted, so a name with a space or a capital letter works as written. A target that names nothing is an argument error (exit 2), not a SQL one. - -One JSON object comes back: `target`, `relation` (the SQL the statistics ran against), `row_count`, `elapsed_ms`, and `columns` in the relation's own order. Per column: - -| Field | Meaning | -| --- | --- | -| `name`, `type` | as `DESCRIBE` reports them | -| `nulls` | rows where the column is `NULL` | -| `distinct` | exact, not estimated | -| `unique` | present and `true` when `distinct` equals `row_count` | -| `min`, `max` | as text, so a `DECIMAL` keeps its digits | -| `decimals` | digits after the point the column **actually uses**, which is not its declared scale | -| `median` | a value the column holds, not an interpolation between two of them | -| `max_over_median` | how many times the middle value the largest one is — the number that decides a linear axis from a logarithmic one | -| `covered_days`, `span_days`, `missing_days` | days the column names, days between its ends, and the difference: `0` is a continuous series, anything else is holes a line would draw over | - -`decimals`, `median` and `max_over_median` appear on numeric columns; the day fields on dates and timestamps. `LIST`, `STRUCT`, `MAP` and `UNION` columns report `nulls` only — `min` and `max` are not defined on them. - -Statistics are exact and read the whole relation, so a profile costs a full scan. `--limit` does not apply: a profile of a sample is not a profile. - -## Export an app as a static HTML file - -`ducklocal export` answers "what was that app showing?" for someone who does not have DuckLocal. It runs the app once — the same runtime, the same host module, the same database rules as `query` — and writes the statements its `query()` calls issued, with their results, into one self-contained HTML file. - -```bash -ducklocal export --html examples/analysis_app -ducklocal export --html --out report.html --database warehouse.duckdb apps/sales -``` - -- `--html` is required, and is the only format there is. APP is an app folder (one holding `main.js`) or its `main.js`, resolved the way the GUI resolves it; a path that names neither is an argument error (exit 2). -- `--out FILE` names the destination and defaults to `./.html` in the working directory. An existing file is refused unless `--force` is given — checked before the app runs, so a refusal costs nothing. -- `--database PATH` and `--read-write` mean exactly what they mean for `query`: an existing file, read-only unless asked otherwise, in memory when omitted. The app runs on that connection, so an app that writes needs `--read-write`. -- `--timeout SECONDS` is a positive integer, default 15: the capture stops when the app has stopped asking the database for a moment, or at the deadline, whichever comes first. -- The command starts the window platform, because an app renders and rendering needs a window. The window is hidden and never appears. - -One JSON object goes to stdout: - -```json -{"html":"/abs/report.html","app":"/abs/app","queries":2,"rows":212,"app_errors":0,"captured_ms":630,"stop_reason":"settled"} -``` - -`queries` counts the captured statements, `rows` the rows across those that succeeded, and `app_errors` what the app logged as an error while it ran. `stop_reason` is `settled` when the app went quiet on its own, `deadline` when `--timeout` cut the capture short — then the report may be missing statements, and the HTML shows a visible warning saying so. - -The report holds the app folder, the database it ran against, the export time, and one section per statement: the SQL, its columns and their Arrow types, the result as a table, and a bar chart when a result is a name and a number per row. A `catalog()` call becomes an appendix of tables, views and columns. Statements an app runs more than once appear once, with the last result. - -The report does **not** hold the app's own layout or its charts. An app draws native components, and a chart's bars are decided while it is laid out, not described anywhere that can be read out — so the export shows the data the app was built from, not the interface it built. Filters, toggles and later refreshes are not represented either, and there is no JavaScript in the file. It is a snapshot of the app's loading state, and it says so at the top. - -The app's JavaScript runs with the same privileges it always has: `query()` can `COPY`, `ATTACH` and write files. The export is not a sandbox. - -Exit codes: **0** with the file written; **2** for a bad command line, an app path that names nothing, or a destination that already exists; **1** when the app could not be loaded (nothing is written) or when it loaded and then failed (the report is written anyway, with the error in it, and the message names the file). An app failure reports the error kind `app`. - -## Check a dashboard spec - -The format itself — blocks, attributes, plot types, SQL rules and common messages — is described in [Dashboards (.dash)](dashboards.md); this section covers the command. - -A `.dash` file declares a dashboard the way Terraform declares infrastructure — queries and plots as blocks, references between them — rather than scripting one as an analysis app. The two formats coexist: the spec covers query + standard plot and is easy for a person or an agent to diff; an app stays for bespoke layout and interaction. - -```hcl -query "latency" { - sql = <

中文文档 · macOS 12+ on Apple silicon · Free and open source (Apache-2.0)

- -## Up and running in three steps - -1. **[Download](https://github.com/JetSquirrel/DuckLocal/releases/latest)** - the disk image and drag DuckLocal to Applications. -2. **Drop a data file** — or a whole folder — onto the window. Each file - becomes a view named after it. -3. **Press ⌘↵** on a query: - -```sql -SELECT channel, sum(revenue) AS revenue -FROM sales -GROUP BY channel -ORDER BY revenue DESC; -``` - -New here? [Getting started](getting-started.md) covers installation and the -first launch; [Your first 10 minutes](tutorial.md) is a guided tour with a -sample file. - -![How DuckLocal works: CSV, Parquet and DuckDB files, plus S3-compatible object storage, all feeding one local workspace](assets/intro.jpg) - -## Find your way - -| I want to… | Read | -| --- | --- | -| Install DuckLocal and run a first query | [Getting started](getting-started.md) | -| Learn by doing, with sample data | [Your first 10 minutes](tutorial.md) | -| Open folders, globs, Excel or a `.duckdb` file | [Data sources](data-sources.md) | -| Query objects in S3 or a compatible store | [S3 and httpfs](s3.md) | -| Get more out of the editor | [SQL editor](sql-editor.md) · [Schema and history](schema-and-history.md) | -| Chart or export a result | [Results and charts](results-and-charts.md) | -| Let an AI agent query my data | [CLI and agent skill](cli.md) | -| Build a dashboard from saved queries | [Dashboards (.dash)](dashboards.md) | -| Script a custom view over my data | [Analysis apps](analysis-app.md) | -| Fix something that is not working | [Troubleshooting](troubleshooting.md) | -| Build DuckLocal from source or contribute | [Development](development.md) | diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 12a1cce..0000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,2564 +0,0 @@ -{ - "name": "ducklocal-docs", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ducklocal-docs", - "devDependencies": { - "vitepress": "1.6.4" - }, - "engines": { - "node": ">=22" - } - }, - "node_modules/@algolia/abtesting": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.25.0.tgz", - "integrity": "sha512-rSTin9Uta23uaewYVQEp8XI9T3iA/zrg0/1G2vhf8oFFDxFL5vybnZ5IQwsVAg4JpKxPX4/WYNKdcfWrZymk7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", - "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", - "@algolia/autocomplete-shared": "1.17.7" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", - "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", - "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", - "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/client-abtesting": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.59.0.tgz", - "integrity": "sha512-bm2XN0hCSMYwStSsCBT0/PUB2BDxoyR1Lnub3c392HMEy9bi8PUSW8vR6zltVEKWG2t4PQFWMD5C07bmJxGgPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.59.0.tgz", - "integrity": "sha512-XOFPOTa69WuqHR6c5tMgnUUwwqQgNSzMpxmhrgA9KmxRf8WIqEa0cokHJvohk5CYb7CZx0xeSL6Bk2IUJ7Lv7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.59.0.tgz", - "integrity": "sha512-PC8ipLOYFKRTfIUY1J3FJxS6ryzWziaXmIX9/sNMoUR8L+XhF7hX2QAeUI87YVl5zujvlYTSOb+HAIqKXDjyHQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.59.0.tgz", - "integrity": "sha512-yFNcCMM5fHiyoR0HuxMrzy+VjDcmhFUZTm2IJ2DHwGsVH3B5SEob4zTmeEZ3j/AZqNnmrJOCKl/tJnBg7+84bA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.59.0.tgz", - "integrity": "sha512-GYja6HkDt2VrQhWmB2cLx3Z5fDwI9no7q+xwCWcFrTPm5CLH9QZvK0XLO9co1FcNIDxxkMaP3AXM39/XcecEOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-query-suggestions": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.59.0.tgz", - "integrity": "sha512-Wofg7bMpWh8N5qDDZs0wy6whc+KMmdNsxgrIGp9Ug2s1Bka0uq7AjyckdxReKPHLA0Q1qH8X/SNh0wn2t2X2Lw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.59.0.tgz", - "integrity": "sha512-fHnALZfbEnODczGk14Y/1YBRApp6UEpZUTexGcMUPzY7RDc7q4HN2Y6jh0KUG8Jo9B+q+wOoQEc3ziR0ErbuFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/ingestion": { - "version": "1.59.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.59.0.tgz", - "integrity": "sha512-Fa38s1mHgoaLCT117sfJ6P78rtxUt93CYxBYpq1VOIcslaF+cH+1h5uikAPsKfxLnsuEDZHiBiaI6eNPTsQMRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/monitoring": { - "version": "1.59.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.59.0.tgz", - "integrity": "sha512-NyNsRSqM2tF1MX7ZGw/j4rduoEJiQ5wfvbSo/CFVdEzYCjyxbGFRPOZyS/GETJG9rk1TdHOq8NZqKqk/u1fm4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.59.0.tgz", - "integrity": "sha512-nXBK2uygWtvbCOffMWqqfjjcEtp9enDKY5/2Pw/Hhw8VVaOyK2ThbGK04bNX/Le+qoK1VHYkodWGVTKfw0Otkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.59.0.tgz", - "integrity": "sha512-yb+4afX/zja8QwX0KmV4/ae2kyYkRknsE79CRusYS2U5D8qwn2wq0cn1x12f3tm3F3+5FgmDdbuGdQTuCLSKMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.59.0.tgz", - "integrity": "sha512-Lp52TmpA1QtNmdHzs505Xwf4tgII7RAapkDSF9AAtWIBETcGaTIaXci4Rd9nS6SdaWK1BWTSqAPp5wzh6UN3Ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.59.0.tgz", - "integrity": "sha512-YYHLEs5rC6oRTFwT7bJaKBR9NSFzikeVHGAT1ffATmUQzR8XqyhHXjoieAUoR7fBU6I5cfy1FVeh5GoRgriuzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.8" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", - "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@docsearch/js": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", - "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@docsearch/react": "3.8.2", - "preact": "^10.0.0" - } - }, - "node_modules/@docsearch/react": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", - "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.17.7", - "@algolia/autocomplete-preset-algolia": "1.17.7", - "@docsearch/css": "3.8.2", - "algoliasearch": "^5.14.2" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@iconify-json/simple-icons": { - "version": "1.2.96", - "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.96.tgz", - "integrity": "sha512-/FmCYo/H5rIywTLV/P6OYsr0rg/31vuc8jYq0QnkOZl6m7PWIs+h5oAnSTT2cqRhOsMaKqbXcdkka6tnZ1WiUA==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@iconify/types": "*" - } - }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", - "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@napi-rs/lzma-linux-x64-gnu": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", - "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^22.20 || ^24.12 || >=25" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.3.tgz", - "integrity": "sha512-w3Jnvi1ocaVm/c7yVPpfB98XeSRBMyzp6njL5MVVbGyXjpmUkN+s6Hp4t0PqhGCCaI1ZHMKXt/w0lA1RCaLVcw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.3.tgz", - "integrity": "sha512-uI/ESiaIbbRYAEhzy8PCUWDp1hB0bjAqM06mW9flOoNO4Q8DQpeoREhBR5Hegfl+wpXiguyJv6XSPzEN7OxyHQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.3.tgz", - "integrity": "sha512-oxhrd1jmXLwWZ83eQYDXxuqRdkqkzrjR3JobKeuUyfdNZo11FuQIvqEOZhyIT7OBHxXoGslDDjN0cQcM6T0TqQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.3.tgz", - "integrity": "sha512-7/YiIMghVE8DrxKvNdorAaJVdriOFgOIpdStnPx8ppx5zfTwC3jBCSEAIzB7JD5404m65THl6H93UTTVUvypmg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.3.tgz", - "integrity": "sha512-GXFZRRoMAytaI5z6N3Zhfw0WL18Q0M8r95D5hlC4GqE/lGk8pbSJNUBoOWDfbm6dTciqHj2nU87tI5f6XhQiOg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.3.tgz", - "integrity": "sha512-77W+8X3ddYgPxUpB8nZFQs2Mq+wc4HVlcSRtApXLjYBcnPMkttrSnU8VwKQjeWYhMsITHFs5cWBQ8vz1Q+5RHQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.3.tgz", - "integrity": "sha512-FVkwK+iUC+mq+GipVK46rRVticfAPtvPUNlqlGXUDxdVk/UGjQiiiUVPUrEXdSpU2ufU0XxLGyTqDtBidDOVmg==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.3.tgz", - "integrity": "sha512-+aGU1t3398yQOVj1Bz8o3e+KtswxAPvO+mtxtNdfXYMkXIHu7XhhkCD7/DEH9q8tF8uhDnMWvfpUKI8y1sZJsg==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.3.tgz", - "integrity": "sha512-cR0kjpRXR2KJ2oQK8E2KTPtphs+b9hZ8IhTZubNryt/RsqgdOZBQ2Zq0q5UedtiIi0rs3jVhJh55RE1ZHUVGUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.3.tgz", - "integrity": "sha512-y1RYi4Q3/9ByVWSSt9kX2ustE0B7kFYbJ6zZdVZVyqopZs3yhCTwRfrjIX4vezUJInma/Gs6BOFDJg7yZmJ0IQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.3.tgz", - "integrity": "sha512-DNhEA5viIj3Z5bZLE4z4oV8N5ozWqDwyt7T6KG7VdLDJ0nW+rNOYlphBl4/3HQkK75qipPLsVOfStHHOwN9WSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.3.tgz", - "integrity": "sha512-17gQCqrIpXBX2Cmi9/TygnVOqGbzsba/iaqcYSL8FY7lNugg+7AiYNs5c5nKWD+NRQha36Sa0CqkJqH4XVHwnQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.3.tgz", - "integrity": "sha512-6LwVnZRIyINpdku/yOcI8Tm9YqLmhHK5emmlOOnW9tO0SYEm1FmKPcsSAGp0NBlqR2P04xaND4jvN6sTHqhq8A==", - "cpu": [ - "ppc64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.3.tgz", - "integrity": "sha512-xMUqkTXlEUtI/p5AAukMwBRr1enU3efsTeF+bskeFfk8t1C9rcC8sLREcZXmTfAXEbvRdJVSonVJez3TMlbR3w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.3.tgz", - "integrity": "sha512-S3E94co9F9WRRqEaUoQZ38K1gCz6KiM+nL7/3ijq7fDGF3OznjS5TasgYITlvl27GQKtu4lOAOsr5MFwkijvOA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.3.tgz", - "integrity": "sha512-1QtRDwG42x5BJI3s9mxu5rEjDnfbSnk20HQ9/ylTAYnSwYwxMVb+Vgu34wzzTQ7ogqBybebgQNUDAvZVQ38DbA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.3.tgz", - "integrity": "sha512-BQhejF6ZXOpxbngiNTP12GCGQeaDVL2QXGeBVViKIYzFHM5RKxTxwUMB1fr1BeNFphFMpnRqC5QSXFSa4z6UQw==", - "cpu": [ - "s390x" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.3.tgz", - "integrity": "sha512-SXagRwnI2Wlwlitllu59UK/nGVbD1CKPcNqDplHwIC4BqJcpXFjD32d1R/RbuISa95HdQrZM3/7v4bKiowFaLA==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.3.tgz", - "integrity": "sha512-2IPozoEALRCziGqE8O9KMK60PMu5TS1huv4fwoeCexj+WjmcwFtX9CTOVbfXCUqcELAubEwRFPYlzb/WvwY2HQ==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.3.tgz", - "integrity": "sha512-AoxqosUHT9IX54hFn2TiN6A7d6ZKTtE6pd2bqWtqkkNJ6HJGaU6FRouGX8L1O7R/ZwsnCnpQrHzb4pDEx+UHRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.3.tgz", - "integrity": "sha512-d+CaftKgmkFBzCwezMqqy1d0QNNYugqLCMcYVQWBy5SS2YfeMP8Q8ripkgx9O8IyBXXLHrJ+aaCV4U96usv6Yg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.3.tgz", - "integrity": "sha512-xXlDF6nR1eOuXbdDy5Hl5fmtY7teUDevF/k0O7IPoZe4Tpmdv+lgdE5JRsnhQtt37ql9P0VF2kAN9a0OCZdo+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.3.tgz", - "integrity": "sha512-YtXAgLN+JP7Ay6qG3eWhc7IHMQPzLc8r3uvhAvlJIoCz/4Q32+Bl9Fmnywidh8v1GOIMmymjovfqY9ETAtysvA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.3.tgz", - "integrity": "sha512-WuWtSJRNo549vzcfZyEgfqb6zeSgn1F+UE5kQ+BCjzz0W4MGCjntUHkZVc1VRuAM7+ULaSyhiPxD1spyewFvkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.3.tgz", - "integrity": "sha512-+lIKX7O0+IGe7WuhATaAMMeT7B76vfhXH/l9wLQL+nvyhbw2ohYCKIdWL56JfDu75CWt5oKRP4QFH/jkMtBquA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@shikijs/core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", - "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/engine-javascript": "2.5.0", - "@shikijs/engine-oniguruma": "2.5.0", - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.4" - } - }, - "node_modules/@shikijs/engine-javascript": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", - "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^3.1.0" - } - }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", - "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "node_modules/@shikijs/langs": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", - "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0" - } - }, - "node_modules/@shikijs/themes": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", - "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0" - } - }, - "node_modules/@shikijs/transformers": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", - "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "2.5.0", - "@shikijs/types": "2.5.0" - } - }, - "node_modules/@shikijs/types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", - "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", - "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/markdown-it": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.2.0.tgz", - "integrity": "sha512-NoQ2yGlLWj4wpxMs+TYmRKk3thDrQ97agr7sFqfLsAlvoS8SNQuTrlObhFqG9iugdTtgOE9jpJ6FNM4ZGsa5xQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" - } - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", - "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", - "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", - "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.42.tgz", - "integrity": "sha512-2Ye1ilMtKXxl8qZUrQ5j0CdgenFp/HFQmta6rfRyfEsTG69L6Wk+tWuNoHYHMx9E8tF2Slvdg1FuwDvAXdy1LQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.8", - "@vue/shared": "3.5.42", - "entities": "^7.0.1", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.42.tgz", - "integrity": "sha512-qbhQZEFmycr+ni/qyuccS4sucNN7VAbDfbkvNxWOX2VfgFm90MNs3/UhRNKoPMEIVn0F8gdlYjLPvqxHwHeQOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.42", - "@vue/shared": "3.5.42" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.42.tgz", - "integrity": "sha512-fkCAFB4okcAANGMThboWnScp/gzWjU0ZSkVnjTIiplmMDq2uq0tIB3j+xVu4rhv5rvOgBySCysudmbMd6xRRqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.8", - "@vue/compiler-core": "3.5.42", - "@vue/compiler-dom": "3.5.42", - "@vue/compiler-ssr": "3.5.42", - "@vue/shared": "3.5.42", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.19", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.42.tgz", - "integrity": "sha512-xmLk3wLkbizPAiLyomjgFFosf2ys9b5Ghb+oh/k2tnvipNz8OFrQOiTcWCzyK7MpBp9KkyGtfvgfLUivbmuGYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.42", - "@vue/shared": "3.5.42" - } - }, - "node_modules/@vue/devtools-api": { - "version": "7.7.10", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.10.tgz", - "integrity": "sha512-KxtEpUOOpFz/qOGRrAwA36QF7DqIA+FXgCYit9mk9wjbaZt0sXOFz81ElOZtKA4HbWHUdwNjZHBFsFFyp5BZiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-kit": "^7.7.10" - } - }, - "node_modules/@vue/devtools-kit": { - "version": "7.7.10", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.10.tgz", - "integrity": "sha512-3WNi2Kq4tbpVbmhml7RiphmAt0279oh3fKNeWMQIrltfX8Q91b4i5PL8DtyNKdwmcsGrV4fg+erwWOmD05CLIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-shared": "^7.7.10", - "birpc": "^2.3.0", - "hookable": "^5.5.3", - "mitt": "^3.0.1", - "perfect-debounce": "^1.0.0", - "speakingurl": "^14.0.1", - "superjson": "^2.2.2" - } - }, - "node_modules/@vue/devtools-shared": { - "version": "7.7.10", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.10.tgz", - "integrity": "sha512-wOPslzB8vTvpxwdaOcR2qAbwmuSP0L+rhpoC6Cf56V3Jip+HWb7PQQXOUPgBNQARpXsbQX/+mvi8kKucmBGRwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "rfdc": "^1.4.1" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.42.tgz", - "integrity": "sha512-TzNNfKpb7hDxbQltwAut8VDQA5YP+BuRlxntHUuRjyKwlMvmAPbs3unhCvieijifY6vFfVBwsS7wG/C7uq+bEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.42" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.42.tgz", - "integrity": "sha512-9uACtuHs7vJGkm5Bp3xu4xRDLFTIYy5DgxpToVjqGIAhAEKwQfsaLvKINhM6nFVp6bZPRFGdDqd1g52MqKsotA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.42", - "@vue/shared": "3.5.42" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.42.tgz", - "integrity": "sha512-rsCmhiWLaRxGltLwhlCWyYkFn7WAbKRh0q17eZ1A6Dq6eqc2ACQ61IIryxz0LrsvCzHSilLA9JHovVwM8CNE2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.42", - "@vue/runtime-core": "3.5.42", - "@vue/shared": "3.5.42", - "csstype": "^3.2.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.42.tgz", - "integrity": "sha512-2++5dUyYS4gvo7xQXSECUDhB7TS0aOl5SeVfC5qSq1Jgfhjvegw1zqhwTIR3imZ+QYPJQw9gfcFvXGAjGZ7ajQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.42", - "@vue/runtime-dom": "3.5.42", - "@vue/shared": "3.5.42" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.42.tgz", - "integrity": "sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vueuse/core": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", - "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/web-bluetooth": "^0.0.21", - "@vueuse/metadata": "12.8.2", - "@vueuse/shared": "12.8.2", - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/integrations": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", - "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vueuse/core": "12.8.2", - "@vueuse/shared": "12.8.2", - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "async-validator": "^4", - "axios": "^1", - "change-case": "^5", - "drauu": "^0.4", - "focus-trap": "^7", - "fuse.js": "^7", - "idb-keyval": "^6", - "jwt-decode": "^4", - "nprogress": "^0.2", - "qrcode": "^1.5", - "sortablejs": "^1", - "universal-cookie": "^7" - }, - "peerDependenciesMeta": { - "async-validator": { - "optional": true - }, - "axios": { - "optional": true - }, - "change-case": { - "optional": true - }, - "drauu": { - "optional": true - }, - "focus-trap": { - "optional": true - }, - "fuse.js": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "jwt-decode": { - "optional": true - }, - "nprogress": { - "optional": true - }, - "qrcode": { - "optional": true - }, - "sortablejs": { - "optional": true - }, - "universal-cookie": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", - "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", - "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/algoliasearch": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.59.0.tgz", - "integrity": "sha512-wUXzaeI7B526W4y1gFg3lcxgDZ67XSgRJIiellYWOas/pLpO7rOtxm9Gr2E/C8aiSDXIgx1q5TdSsvK67Uakqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/abtesting": "1.25.0", - "@algolia/client-abtesting": "5.59.0", - "@algolia/client-analytics": "5.59.0", - "@algolia/client-common": "5.59.0", - "@algolia/client-insights": "5.59.0", - "@algolia/client-personalization": "5.59.0", - "@algolia/client-query-suggestions": "5.59.0", - "@algolia/client-search": "5.59.0", - "@algolia/ingestion": "1.59.0", - "@algolia/monitoring": "1.59.0", - "@algolia/recommend": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/birpc": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", - "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/copy-anything": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.1.0.tgz", - "integrity": "sha512-ufbM3smX/Jbnpk5wcQjzd1MgBpzmqfNETUAyZNrGwU9foRlyHoGzMMBBCRzEhQLBjZfFDE1W2ufPXX2vdWkV8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/emoji-regex-xs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", - "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", - "dev": true, - "license": "MIT" - }, - "node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/focus-trap": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz", - "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tabbable": "^6.4.0" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/hast-util-to-html": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/minisearch": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", - "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", - "dev": true, - "license": "MIT" - }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.19", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", - "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/oniguruma-to-es": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", - "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex-xs": "^1.0.0", - "regex": "^6.0.1", - "regex-recursion": "^6.0.2" - } - }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss": { - "version": "8.5.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", - "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.18", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/preact": { - "version": "10.29.8", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.8.tgz", - "integrity": "sha512-ej2aVZ+vZ8WO7tvlQWRM9N63A0KzF9q4mWJfDUHgYaIofWY9hu74QdnQrjoPMmZi2/nZ5gN0bJCQF49xQqx09Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - }, - "peerDependencies": { - "preact-render-to-string": ">=5" - }, - "peerDependenciesMeta": { - "preact-render-to-string": { - "optional": true - } - } - }, - "node_modules/property-information": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", - "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", - "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-recursion": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", - "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-utilities": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", - "dev": true, - "license": "MIT" - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rollup": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.3.tgz", - "integrity": "sha512-1i2XreiAoMMXuPGD6Msj2xWrMMkHojNRKivInxGQcg7/1KuPuYlfUutLyh4drnOxUTHX9cHI4wFoat8D/NKaBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.9" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@napi-rs/lzma-linux-x64-gnu": "1.5.1", - "@rollup/rollup-android-arm-eabi": "4.63.3", - "@rollup/rollup-android-arm64": "4.63.3", - "@rollup/rollup-darwin-arm64": "4.63.3", - "@rollup/rollup-darwin-x64": "4.63.3", - "@rollup/rollup-freebsd-arm64": "4.63.3", - "@rollup/rollup-freebsd-x64": "4.63.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.63.3", - "@rollup/rollup-linux-arm-musleabihf": "4.63.3", - "@rollup/rollup-linux-arm64-gnu": "4.63.3", - "@rollup/rollup-linux-arm64-musl": "4.63.3", - "@rollup/rollup-linux-loong64-gnu": "4.63.3", - "@rollup/rollup-linux-loong64-musl": "4.63.3", - "@rollup/rollup-linux-ppc64-gnu": "4.63.3", - "@rollup/rollup-linux-ppc64-musl": "4.63.3", - "@rollup/rollup-linux-riscv64-gnu": "4.63.3", - "@rollup/rollup-linux-riscv64-musl": "4.63.3", - "@rollup/rollup-linux-s390x-gnu": "4.63.3", - "@rollup/rollup-linux-x64-gnu": "4.63.3", - "@rollup/rollup-linux-x64-musl": "4.63.3", - "@rollup/rollup-openbsd-x64": "4.63.3", - "@rollup/rollup-openharmony-arm64": "4.63.3", - "@rollup/rollup-win32-arm64-msvc": "4.63.3", - "@rollup/rollup-win32-ia32-msvc": "4.63.3", - "@rollup/rollup-win32-x64-gnu": "4.63.3", - "@rollup/rollup-win32-x64-msvc": "4.63.3", - "fsevents": "~2.3.2" - } - }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/shiki": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", - "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "2.5.0", - "@shikijs/engine-javascript": "2.5.0", - "@shikijs/engine-oniguruma": "2.5.0", - "@shikijs/langs": "2.5.0", - "@shikijs/themes": "2.5.0", - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/speakingurl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", - "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/superjson": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", - "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "copy-anything": "^4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tabbable": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz", - "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==", - "dev": true, - "license": "MIT" - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", - "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", - "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", - "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vitepress": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz", - "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@docsearch/css": "3.8.2", - "@docsearch/js": "3.8.2", - "@iconify-json/simple-icons": "^1.2.21", - "@shikijs/core": "^2.1.0", - "@shikijs/transformers": "^2.1.0", - "@shikijs/types": "^2.1.0", - "@types/markdown-it": "^14.1.2", - "@vitejs/plugin-vue": "^5.2.1", - "@vue/devtools-api": "^7.7.0", - "@vue/shared": "^3.5.13", - "@vueuse/core": "^12.4.0", - "@vueuse/integrations": "^12.4.0", - "focus-trap": "^7.6.4", - "mark.js": "8.11.1", - "minisearch": "^7.1.1", - "shiki": "^2.1.0", - "vite": "^5.4.14", - "vue": "^3.5.13" - }, - "bin": { - "vitepress": "bin/vitepress.js" - }, - "peerDependencies": { - "markdown-it-mathjax3": "^4", - "postcss": "^8" - }, - "peerDependenciesMeta": { - "markdown-it-mathjax3": { - "optional": true - }, - "postcss": { - "optional": true - } - } - }, - "node_modules/vue": { - "version": "3.5.42", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.42.tgz", - "integrity": "sha512-4RyHQTbQvOPs3MfvUO1Sg0YRrKNnA0mAVtvpd12Tg1fKDN7OHBUl1IqSn8zGJjK9nI3NkNp8cgTpVrSZC5TTcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.42", - "@vue/compiler-sfc": "3.5.42", - "@vue/runtime-dom": "3.5.42", - "@vue/server-renderer": "3.5.42", - "@vue/shared": "3.5.42" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 6ae6b97..0000000 --- a/docs/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "ducklocal-docs", - "private": true, - "type": "module", - "engines": { - "node": ">=22" - }, - "scripts": { - "dev": "vitepress dev", - "build": "vitepress build", - "preview": "vitepress preview" - }, - "devDependencies": { - "vitepress": "1.6.4" - } -} diff --git a/docs/public/favicon.png b/docs/public/favicon.png deleted file mode 100644 index 1115ee94f809bd9d819383fff8897ef755e1d5b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7664 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuZT1iAfRCocsTM3w5MU}3)_r9&y zbhrDP(JkUMtl5a^@X5WPoJPMS1H3=9l7 zwY9Y>pU;~<*=$yi88gP=`y@Q?037twZ@>Mv88&X*I3>gyv1W}B)2C0@ot>R}{rdI# z+H0>hu9*TrH{$6_(bdtF_f_B>C5=+eA=XTPDLA;oqOBN=ddmN-5WIgiuNZXyXtdqc|U4bRdLF8BTzUN4NejL`=wO9*=%7qnArg-OSiSP6>Dm09N-s#c}4UMLPqS93HxGz1o7fm zzxoxYcW2C~k73b0h+QMfu~^^}!R2Fs`9vUFi@R%RL+1~^Xz(e(DvLp-bUW}|69mPF z+S+!%+}_^a30!mt+E}GQ3NvF zZUS3UfR<4uVKfOaE5CB(N^jPz@yTMbE-@3!KBlShD(vM`q;#ZGK7ox2&{mHC3zDFj z_QvTw+oJxQ!4SHS@ex#Xf&4>SrSSdYQ{CM?H|*NAab0`+U>^D*2Sw>qQI1rQBPBpC zU%s4L-5WoCeA20_u9`i4_VHtz8owWl#gE6PtO0twt#VZZ(L zA!jN;b8aAqQA$HP52>n3EsDjeHx+t&cflM9TAKUszh6TVhRs|F!VnMB=D}PgAnM6! z(+-*6+}!d*0GzCXB9zj|!r|fSj6^t;Q8R+{Ml)5?K8(;1*2pQ|#+!#z}enVT^&P&_cI^Tj~?8DgH2`8KoL|dV>1yJF@md8PSbuyW3 znl$;K%TlSTCGUxNVra$vfEci^PVa{~3QF1Y;^REmO%7#qYm&a7?@XtId+xa>h_-^U zuw4Dt)>apeNUE+b(J-N<Y)0Cn)eUIe;SAT!d_r;t88LOeNld05_#>O#66%&bC zDDos}rM6%(44|#Y%6nvh>&Ba^YO7DizOTdfF71`dt-HU8E89no8~I+@_k(x_p;U^s zbv1P-f%xX8rmBPx6Jnu%BOGXb2PVR8j>V|^>XOOSghV`XgmKm?FnX^mF>>6<_lhY# zut!LN@M7MA>gwe9AV?$|8nQ9QFqC{F0aK<-apF}~@s#JKs#7)7VNNH(mHq!-tPhL< zbkE=;v{qNwOslC$RE-@w)tA$10NVh`v)8`U&7m@ zLUj~e-)I;cAxYsas@?mYec>s_6S4Rlt-YrZK)Fp#O;q~QfkI%^#P&cmYIvXbJuugMILa`h_$OWG{`(&gPdxb~mYnN@SP-`TZ=K%K zp#{RzF&JA@EG8JP%SDS|1sWRKWK}-TFf!q2gccALD_xuh>tH19Z=G`A{XvMNr$%DT zA1kciP#Vbhd@idVf9!FwZ0S-{k34|*&bPm1ESecexGvdl;{9mw9;+2KyoWo9=CF?TcJ=0l4SH8wyGSMz;zJ)g zT+Em;1FH-7HSo<|N6aOd+&E$J33A%>X-+mfq`v&+%f;~vj~DSoQlKAYgvx+)8#K*( zNNj{&c>%!~Y4Q|~rxVDpR2f_hu}DD)$M;bY#IYM=92`N7`1yVqLD3Zu=hds9SGWD} zHu0CWYju5HoosAs6n@dyNM;CVW_iO6*Q*7`91A8C;l?Y`I-ylw@^2R#Du4d-pNXT7 zK3ZIK(H9+(@qme#28xqAP_G+_h+*e7B60mK0%04iBz+I5i=tEvCjSr3rlvNcp$JrqQe(W*f#%j;|=1_Lk}||Y=gB3)96mPVL=tuge?#y z$3cXIq+)-+$tpWcFZcBLIBoE$Z@hjeD<@S5pTWqmfYRZ!Nh9_osNPQP~YMcOO`m;K9YOCy#LGC zTCBriCEWPHR0)!@NF_qu`EdIc)A?owzU0}5!aoWG%ZLg@*>{vey%FgSHh=d!w}7C} z%A<~&8}8|d=x8w1vTGbLCJ#uYqHd_EsTNd>5buZsCAdg_a_@j0_8%dIMj!$@>YWS( zKnJ5@QWi^yIQ+Q4d^q;)a0{@{aDps%hBG2!P9@)W<&QES(&)1UwRzXHzQ z!dJ!GulS0O8YtYxtXGh5R*cC5JRrf-PTVB(&9`p;_Rx4$U9eqL6L zYmAFu{#UnXN?#{#ynL}(diu#?i!7}{h2ch~a< zC8ggm0J$>wrVbG;5g&~+_lUyE$`Y-dF~X$Wp|P<^_VxB@e&eG#v}9YBvKQzV$y8EY zcG;JmB4qC7<)71cT(UzxRVcEsu*=Uo%?*d)U%k;(9b? zsUfNuai?TJSZ|O3j;l zl<4d06>Hb76AKp1cc6Xor6cSTb~TcLR6Fwcfai%h4f!A6T3WDDx84Y^8OrDH=3PXr}=^}XmC5TBX zktLuJlL7f*+J`UE`r`Ygm@x4m=Tl41P~ZIKx5T~o++#jgTGT5D09e4$Qx2La;`MXn zHTPDFBj+3@3i-T9r0T@vgQtsszwtz|c+qj_r{MpCe&P{<7=~kILx^wGFG3&c3e$PM z6TtKLjk33!O7uV}HN*4r5DirnGr_x>`J7uiQt@cbnF%nKl~?k^t`!Z z_M9WZxT1m*L4WhHSG@f4%j&DwTm$#DNqqN~TQJ6WdnGiY2TBc{nN_P+iR-Vw4#d|w zwDXAD0Sy05;he6-_X>>=R`9R4w^t7i4C+2O^ia0Ie^B6yu&zOd=k(K0Gh3RTqbU{W z!=6IG9eg|VWe}uHi$^mEuESEn4+!~dWNbKNLsZBUDXzNeE268bTdchOcJZmDOV#C< zU*Yuk_aSzFLj4R;+xBhS#hGWG2?h5h>@}p?;JB2K83C7BpBkJuXou&=LInj+P_6pY zBLe<`(Ifo8naK=s;pwwT^f9pj;{k-Vv@`-)ZSlw>kLryZ-;+ z=bn8|_4M=zhSg`BafUeQIQ*rZZ8VnN{J%(?vobu5}A5nMT{WIN-%nagqF>&G~=gzzC zR1f{}VeyfVEEIcfdv4ec@qqo zEx_;R^p67^%|Iszf(2;sLk+py*Vm`7TX7v?_Os|Rh|JIsx&?aT#EIg93ok@mA28T} zE-;a9IKM&8&d)2E$-B{EeBnU{Ure4n#ho)}j{5!&ZWZsoyF;9F&N-UV8i^;-=xB-L zI72OTCsvz}ghDQ)(SO&@oniqbXRod|U?I;ap&np*%_n}VX*>@nPT0gFDdc9jV1&(r zRg_&_ot#HsaKU-vr$7CPGj;00Fzo?cXkP?A_8X96@?#tJf1z057>vZy8}tnf1Iu0v z+H4Ms6ib$TLfmo3N`YWV*45V9l{YI+au~^JNL?{v3RrEJ!*^~6jW55t8rx+0v}v?V zCCJeXyfYyJ9pHm`R(x2;2AC{x#IO{iVYtj{TL6lzZW%wGVkcjJ{jX6==??QD5%Vjg ztHi2RkAP@e1WP$JI1rSS7%;Fj#ypf>wU~P7p-^UV>_4f7-eZ}Qhi1W`sAK9NTIE>rDZMd9qXVW{I z_1C{~v)cU57Djf4ZgU~*ign86vSP;c>68Goze$7OW!bnM;>_u zb%CujSKEo=NImi3uOGyrs{4X$E)Rq@s;j^9mEfxXxJn#%+%XbkY2z!#;*rA*dQv?7 z^fQJ)u|mqV32~ETJa86l+KHR3M8Nha0sbY+uTp(t^=^f+z;2Wn2Iij}8JEe(^5Trbh-R{%3;K5Fh`v74f z#V$xBJS5wh6s^P*V8{-p&GLKSzeT^g=2bc; za>n7)VVkR=s%`3u5<+EapqWGuA8mQJrFiY)eRdqh}Q9~YG9yW zbnV_vXNf4$6bO9D(d*W&lk<+A2k3C9_mltvGZ87a3RFn|M~Jj06wIvlm>Px%xyTc` znz<6Dn?mujXmGgI#MA?4o%Jv3zyJFh@%!H&sm3-oBGu({02GtY6QSa`4}Ta)z;;7> z(HDS@kgydx-Q6$x2l_QQui?sy-kx5wnuGB09)9>?F>n5SW~G=yFLMS{lW}Q?crR9- zN|eNdG1#rpb?AvqvD~z2lb{Q{$HIjK0DS`!T7`!;T{x36mCLCCm_l#!=FR53FBC@Hjrsn4ych}O9h39 z1`CtG4@AzP7oX5__-KOs7J7g|&^2W}U;&0#AOIAq*rykki_&k@GS2q~M8@@l7*=wG zrV4pLaYR#hSC6>$)>{z|TqQob_@f$0Pj&hkr^EgphV*(J5Qsir+J$`Li6?Lnx*#sR z4SEJN8^Fv5s09laU<*Q&Q*jr_ z`n0_x3r)l0k3AtaZ{9-Dh2Id!`Sa(?d+xng+%5~1~w|0h*KU+1h*9d z$4&$_mt1B9Wps83Wq$wTzqYgmkS$jAas8gvy z<+{yC&FDM;cT-L(f$$k3E9 zIg_kRnOCK%%=~rrb+Q)T-}?0%z}QBZ+vBkEF%wb)VYBK6IV?M9@(YFhHb~JxUhAUQ z+Z(*`#v7Uvpy$nNg=^4?LsVWC@%C0QVF=u;!r)6a0P7~ z2+Mp3DUA!^vpt$SoYM^C#T4LZ(WGLOFyHI@(tXe7^T94yp))cMG+Rq~yGrM~43 z{6U64I5_YZ%rgkD*A(hLE&z6%;Abd?pZQE?u)A0+v?06m3Y>(k#xxqZWoV@tD<1aN zy0`j@p`$*M<@R5>d9-DS;751TV)}uxAkN62S^dn=TLYQQt8jojf}x>IEY?%t{%3dY z9X=>XMJ}Drron(dc%VCay1Sl(Q$p9+xS+V3j?rX%k4iKd-VIR9Zn~9LBkFhncT1=p zSt1DIqU{%fh+voTiCAV^C{4i2fubIQb$JG>-;v7=^bZsY{ad$Y3-{f3pD}etc`RSP zoNz#IdnVtX?JxMbUYML0ySuud101#)sJKur4QI;}v%&@$sAI+^6yFHd_jZp6j_xC& zRL;L=n`vdnqzDW2M6QtAq>HK_o@rl4M@I${&%@GYm|*~(cuXb8=WFvl@DTEYxgM}* z3zWuhyE;2x064ONIrU+4MQ;RU!Lhmg6m_<1V>ubsRo-p8orLv-5W%h-%R2j4Zneu1 z4Iuxq8Ys{$s=KrEnf`S8StPA@q%)b$wzl2@xcyNw!~iMTnWykW0+B`d@?Bt!2G4rbnfw7!YZX*Ya_PMG?RTzaSr`@XlkySo5T__avoj3Gkd{G}UCa=CCT zV9_sb zLmFT!-0v<-+#BTmj%+d0mCXh{5cvUs&*FG|fIs2|faNk$0!#}#LLcPuwS_0hIC)Tm z-{Hk;Y6>`N*#+BLg@AQCOw3qtyc&K6x=0?r!oJb9z?qZaOM}AMd>4PH)%X$(Hy`y} zg&h4kumxmcB$$9Jr44-<^(pp&%g*GCLaGkAY_y{@BkBy`4IrQ>fO7@h@!v@US{m+d zFMcAkJC_U6Jw3hXCx&R=so+E64SkgtBTAJOmCsNXT%GvL=4LN7d2+I*#>H<0Q^_jN zt9Ic!BP^#rz#(IVo~}Tu4VfCPQ=oOr$TNvJ zsT?j52*tvHd<}wyN`N6uWKgN#JEY3Mrqe$u!nEb^i3F~)lS5q&kz^X?y9Z8OcFUG6 zc{q32^VgPsA7n8ae%&Vnhzpp&K0H_FVmo-q8{n4}#aMN9ebV#2xJ)@XS(?D1Unh=` z+-N@h>;QE>atmgCkrv1L!}x$as8@V~hq{sh&g!56L%3_-k>9 z6iyt+&3St;+Ck*TUx~-OeBKFW1h}@|KnI_Zu3on42i}NHxSKVhq6Da3q^9nb+-iXzMD`Dk3FW=BgzY% zyJ7o%6uPKX4!D@Ugt)>=g&;$Cz=FRyfW9#8&6$j|vB2$#U*;fej>mg}d_xHlG7Zrm znP7ey&O7T;sa{C`1d(mbYOzC@#0eA_e>!iHCFo;*Ar3#y;V;Kudg&#?RLo~^E{637 eN;LaN<^KTrYgwzk0G$i~0000SFU1x?M&TpEqcEpf^9p84MU``v%;AHUcAxS^cG@!|6<@8|t~&T98+ zKd_eKN%jOF5CHH3KY-N%z{ewjaU1}AeSvKN0B8e{Oa`CJXAe)37nu@p;NYRdM}7$mkNE9) zWE3NsbuKn8J|U5v@%x2~nV0_HUgZm}UC+C5Q+P)#krvDDmfZXEuZqgYPpY0id->|M zyrJ<;)8ESWj(441-S2w_28TZXJ3R75^>ym|w0dTCZvMx@e|CZI%KvQ^`2GLWEVZno1}=SG7cW3Jz_J53w8Klk>ddL1i!`s9YNvu(N?x8eqV zn)=VQ|FP`<%&_$TUzYuE!~S2pJ^=0j^nVr%3hojN2JVywxHPpi|65wxTK}`O|DUDv zKWoi@OYeWLRq#b1;A?;^$L%AD^-z_LRE zsSdOco!ON5@-US-kYLcJ3x%q?JC@$@N)KJ`dfAMWM!grNf0H4H_3bCnza% z)YJZrR7Du&_w}IW(NFi|Sdbk9&bjY|N>enMD zT`gYbgtsGWzBJuit4C{Hj_T3Z7?A?V-XRrLGAug>{T>BtuS8Qj#+g0BR;}D0%EEl5 zp{EvMm=^)K2)tshem%Jb9yn3yn zb=MAi4~!aDpl`G`T`(dVC8Y>LXT<&{BwW>y_4S--IVBW>{JnoLZJHQH0P{&+Ov}3yqaBlL!IeKZOaVDR_LrK1|u#JX*S`0r}gmB%4>Cw5wz@P0jplD z0{sP;8Ku^1@p)>QkdR}s+PbXnr)6|0b7nr%hiYs@aFhg{#l1+S&} zSUilH5W3WCd&;3FV;#9?PzuNV*g;8B`A{WlYbzD&_GXlLu~6SeXMz;$CW{{~@zPqC ztRkDi1Krz^)dr4jF$N6Ber`PO(|P6Tp{gNuW6i$8isW%@0!pDxB$Yuklo@Yem0)!F zmYXouvr?xpzUjD352lo8j-YUThyjY9Y>52Es!s^%9m-O|gn`F*vAi@Vyz3+liK48T zV%T5x$X520=Xi%08HGbD1+j88emDq8gUx$@Iv;8`=SWVK;dcrgC>=8c!+~PC?ULww>XvLlwz}Ghjvhs z(!@W>#I89C7*q16rK&FB?hXJ#aW2V33xOfzIIKL09;X0U-c7Q9pveT0fx5~$sqIsr zL{qv7I5VC)JJ4G2xObUMwmD-HcQ+|G`EGx1e(P&v{2&M8@(P*3U9Yjz<}4Qfg^@7f zcjKhrZ82fgyMC19Qp`IBaS;?r;m!;LJF+A2EnYO$ZVlR53Mbrt&Y5`0C-j4sx1Y7o z@X{RW%zMnJW(QL??F7-ZN7M`EaeFFwk49*-os%v7+~;2$UUKYT=y1t zQV=(2SV%N`c1~gz6V)X793~94#Z_d;a5Ybn62~aB5(r$1##y`+hM9db7bJ~9h0e8s zbT`wP5(tZH@7wG*K&`{=T08B@h`L8iU2R)dTk)!CYRRm4N>XQ67zNL#=d+cO(Bl5h z#wu@xsbMbh^EnCBFuy(1j}7;u?ANCge{vj^qsvqI9Vxx3l4jC#2Z zJXoOZ*p~Gj3wKVCI^$)bYp42hSUvg4s;6oR?0HyL5rwJ`E299;cVEtm3qE2KM6fM6 zrpm=Mxpk@oK+6w6(EK!JiZhC)MDQdqu=FwastaFkf zT>J>v-!Wbq14&a@T#Q<*rh#szL2!<;+Nv9i4$Og8Sv2P+t6uZv)|vpCAd8iV{9&N8 zek$Fp03vw;K*GT$It>bY;}phVCR+aj%gksQpm-r64N(ACfVHxQ`f^M&6o55BZle#c z#LkMK*ZDR3q<{-wNM#BUr2uvW`8!?cTNf{ao5tR`mCq$I!N8?^SR?-R?jlGVrIu?W zO#`0INa`18>f#$~h{goTS9{{tvy5K2>0EIRmdcQ@RKDL}kAzef4>N=dox2M(V3{pW zN>jCTiO~z_(doQYT?85j+-R)X+=8p-BCK#q$nIopq5`HO4UxxT;3XS&MSY2aS?6e< zb#34ePbgftQ5qH$`@S4z3od?`gEVdPUQnLJ5G{xJZo^qZnr}DEG%VeZq64($AK-{P zdDVp#7c&3#o*?S*y2Ubz&QKrUeCAh6rSUu&PbVl2%hA_G zP(fC#7#Z1l5gKYPsOS|23B6z_oMd`NGAl*x@dap&G;%Y8C0zS{Rk=Jp`bOf!62=in zy$Hj3IcxIEDDE7$FhfRYc^?5hRBm*XBjUMQ-6h-0EkFr>LV!&idPf z1y>P)SPaDBJGQ%iFo%c10mpOJ+80Kd(&KT!1kG7-A3+i^` zCE(^LA>DL{U8let%j^`|6Ac=XZCO*^PfV4Og_?jZHEK9#83RMs#haD5>INwzX72d_ z%*JR&(D$T(A1$~@(+*C3S7FDu1-jDIfB}Rf$9It^r=$Aw<3*<~x17cdX3a@@$s=41 z8&Wi)#@b`skje)bF=IfSpNiUqL|f^;VqZtoDX*C1FA&H{+6N(x*GmJFRXcz#j51>i z19B(4V%Txg7z1@pRdK&T#ka76IzM(usj0cX>8u30o>x&dVpih(h-yXt&ow-BI@L;Mdya|GMW=5{WBuihZ<{FhafP)WmCYj<@>Dj zRGx@vAZUTcQ}>Zo-n<5mnOEvH8#_7LjR?$$SQA8X8c{211Xu8vcVkE(Ko%g62TE*7|LwUyv^8olZH#E}X3W>6qaq@_lpYFhNxVo%%c9l02KpU>Mmh=O+>o)w zW1#BBlupq zcYUYSv^qmJNqq zh^!s>)H$$VU^|{bWDglhbS1*w7sqj*kv6g&{Ha*G+rGH)N{s6T4VGf#T9yZlr*Axj z18&a9BH`TAQKvoD#6Xr*UX6i))H^xw^R#X@jmPp{cxMeE=Qz>}JCYOb!B*RsXO;*O zbd~tF98*%IO=VCW;w3G3B+H{6g0)l0ZK>6**qwEdM!1mXbKH!8`=%Eu-Pl$sZxz&1JAM%3u)xf4TB9?Ttgwb9wg1)3rdv?#x@n-n-qWy&)meL_4i4cYO^4&Qnp?!-pn4{vQ^3C|c zym(_A5XRS_XLzy0I0&ZPHkz7=GcO7R9FONoHKyb!5ch`K7})!MRxe`+Ul^VUXpVN2 zWdwb?9T%E{>jA9F$9ydUnJQn)I0;nUPcPKOeO7+klVRL7k*hVrq|J*U_1fFl_^gjP0gogaRJ9Eiib5s z(h?2CVKX0U;wPDIcpMPnPhmvHZ!*4;f(+xFbg!Yhd4# zSE^y24px?A6{~xi{NW)M0V`8-%&Neu53riRa!P(fxV@cIg-qQBuMM;xJ@_{#Sj=_f z3F!T?6ZCf+YDEE-6ztg64i@7fDF*gk@_`fx#Gj-?M!kFZRs@lz(~#@RJ$G=M5+zPT zAf77VqEkrbnIjX*K(J9y-4@5!nMst#7sSI+C$lft37!DoK-5 z98QM+JbeEe(7KzgoMg9kNzvxlc4)So=}c4R@!m_&Y6;+LOL5FlfhicMnox2nfo=L0 zs~yYJpOsuUg)OY}wxvM<2HjPPzkLRwBDO3bC$Kx0A9AlGdM89G$zTjxki>*2r9N68&Id$r{@ z;-!{D zxKDm;z(5~wo_-Ys--uE(yiC`}A5s*InJexe&WGcAAg(=97ziOTXe7tSbeQ);?EJ;) zoJjNYcPubLI@#(FD+12TknwMjg&->i1knmHW8{3cKjf+whSn$GLIyc{BN;?FswGfI z4xr3d0bQSSxD0fuO`=Fsu`fMAI?m7@`Oyl?ruZz-P1W^MCkSy3Uzr8geLpq z>c|-{aG-fPFunIf?3z8`9c^<_qrT2WIJzf4##tqnqNFj%Sh=N{e5bWD7BEkcG_r#Q z`LiNexx})N@sa5*jEmCB@xxW8c?*fojE|hQtBj>tiK(t1i_Cdmqe_?{clbwn0X($< z9+#Y?XB^o^#xp9kQPf%uq@ zLQY6=!}-KGc+g;m8(!kneiDY3TH{v%lfV#mS}!%ftsW;C0bM^$;rK`!5gmlMD{&2^ zsSZ^3!lanFK>?H8C55@JzFVGFDGTP6bVH#Jki`U{c*2CY0yTmw6|M1|@Gi6`r9=}? zV}IPq85V}3x6;+fbwq_VDTV3#J}U*mw)1Tg69y$j?M9^OtaMa?1o{ft${ahc9bZL) zceg@K8Pl>Q0>v$jpwB`}pyxV3PELG)m1sw=%gvP+Pw8xBx5&j3(2zs}5~f z8+!^q2m!p)FduAB$GpLG6|r7nTP`+s0*Sa<%W`Ov8d*DnEJ(zKBTGX8tRI|DPRnoO zL=)YwlA>uOTnqsRh>-<;12HHVP3V#KDqN z#{jF_!?#-86<8;(T{B}(=z1KzkbsOGF4+ZT7$itXJ7^j6y1txb(kc+hu~Y2aV2O(m z+NU!}T6w0!mw|sGg{hB08jhoA%tZrw$Ly$G`v^l^GCl;sIXMhIh6kp|eAw-ZNjG9_ni zXsoo^V{?<~lqXmh%m~GW)$La-8`*#sBHDgBISSrN1No8(wRDvH1j$lz4AeK|Hh2Zh z3THOcvBYO zHJk%!ar16uk~>TsnZz|+Jz1Z*aEkWGmRr3*GMmm6!Y!`Y66BT!?6#K9Jc7i$<_j=7 zqZY;f=YnUPF~I0mjK*|N9x}WVSLfc?nP)lW6}4vmptJuPj>EJkd#a^WV@7%x;#^{v zp_Z;x#9%*(bS9`G4wX@Z$F)P)CXg*z<{h!fhjsg3$4YSH`p}CUhr)^%PmPPO>WGHS zqN3msz8AAEjW0KyK5zr#6qdy#-Nixe1JJo@3oa;_?{X6U6I24vWB>`DrGkr{BG-vHO zl_${{TEM}+=q~2$KXOh6E37DJ!1R(R>mg?$!#viQm)(rCnce!a&R*!i^mM!Pd!6I- zJU#nwzDqT@f#^rl6+uCjbYaT(!(FW;A!cM!a_0+TwR3seJQG(XvI7fz^1aj0cDFfM z3{?|nkX*9M2qi8HbW3ZmadcWxLNaB6K~rupWnLK$U?RUJ_9Cc|@o^;Yo`2nWh6Dv4l0$ zmOutbFPOD_{;ek8QjAge89b=0hKoqE99y7O-gGi~^cX!+j z<3vj%X#|{f%MOrZ8n92tC-xplsJaoMd%KIEdIp&ZA_hNG z5DvMG3WKs*p({7;@Cu?}W{eL+y(w=Wf>?&z3-fbPF9opD8HqEBt-x6ax;a5wCvjGl z8}U7pvYYw$>9IIYe6T}ngLhsZP$ud_S-hvYBp! z9HSca5OL+4KjaNkR%x9maaqPdlJB-iw=DQe;*0BocxpqT!;H!e{NL=-NEC(&WNHDK zbYB@IK$#}rrN^~vL>2e9#;1UtSXL-Kb~r5`>}5q7ge5Ep)!~t3|V8L}O#A2r$|2g}aFx03m9E0)@2r8w98Zj9m;in9heen_Aex)vbg%IgsWK ziD9@pK$_$lS6u|aw?%q{Ib#<*&`w2MQ`nH^=3G)WMugyTQ+zKw9_EcKW^F!`3rB0E zC%%zx^@n)p`xA<@A_l=kq>ObP5!!oqB>6*Gt;%IAoQhfShp6Rfrgwg<@tuqBoMS;;tSXxU+v`?Dccvyg-T!$qI?Sw%fQ1XY;z%;E4eP_)fIE7v3n}+3SsBhor z6p*E=nc_l()X@t00G1r(awmgJkAggvncun9Q;_S)LE}Fk=LT2PBP(?{zniN?;X*&D zY0*oN7Xj&UU(1#NPi-fEz){KU6X+GzMBz910{J}bM`{%Mk!Ts?rD>IK-cf+Zu{=Gt zM+5dC8fHL-ODxS=xm20Zy+b!Rksz&tQ$W6AIB#0g79?BkTAqgG(?=?em!hN*u*7DD zo7{??o7*XZoiV?Y!4p84S*qHZLrIS^>O?H+?qk6f8{_geUTn7 z(j4uov}IF*VlWWAsj@wW!D@(tL@g-wW^jf1?QxLzEnE17OSA?5#MwLjVE2kKuMXqA z=m;-!EwEf)B1VZ!nVkZ)0zkX-J>3SgQz;H{#Q=U*I>G}xDW&NUj$_Zy@U$b<7!PyS zBW3M1=q>pP#v(2CoLIUUZAv5R+Gn-p>ryZfCP?2jD)~>8IsULKd-E)(xrj;t115_J zPe57>W92JHoP@jWRHR_W5e;em79Ii_2L^#lMT%fua#Z~oNRW(n=9#N+5QcB)T*XUA zxpoRiSZB#jt=C_$1S@6UmNa#V&;E5DXluc=GVd`ayu7WxUc_TG;@W5AmQnO5XM5i> zlz{xugO#G+>z!t0r!20ZyKp8P1Hn^drU)0Q22%r%<>th6Q<1ZD0WHi(yA*})$umuA zh458GwRB8w{$8ZVQ06_Rygd%#&j(Ohq`PXF9vwnxAWE9P zFggmpKoEH8h)B#+vpNE*Aali6MQ5X0O3gcta;jRkWQ=+;Ti8BDrA9ytN;-s+j3C8k zzLsm-THBxJdL34BU^9|BC!tnSdo7GwXRYao8q6`J6*{*2f-dK5=W9IXH`ao@1;IBW z0S6_bSl=e05!nvlY7%hDvv}z&(xo4cJ2fGslBHHWP|VFNwLzS&;7s)u6k-|qt9O;@8TgHka5K`nbPJth?v?W@9AHJV{Qgaqph2#up@ff>I{LIq@>lj`r zx#eIEyuH+Mrg)f_?+=k1i=`lx^GRy2tCQ3fKYtLugJ?Q4`}y5g*mO@?*VD3#=Tlb! zP1Lf$#o|PKp;^t;FYhYX=$LH3RB`#2iFAtOV)j3O`23cJ!k^YpbZ%MNu&;l)C$fG; zZ>r(N=lQL<>w2)(Yu&ZkILHD!`5CQ+y_7iBGA3S(UNV}3 zUtB-fSU+a*?S=KTs`M@&<(~DiCDiLN%Xd@*+DBQY#K$N-b(zvNJ=HA5G^N#C`|;Gs zt7P9Z-_S384S(3|7y*o)JiWBkw59NM=!^#U&{zBJX1_qJkrXRtYCB9Rd9@dep*hn^ zDM!-khmr(W-1!|u+GbTU7LOol1XWdsSgAx+H!PsVLDaZ*zBex=&>@Qs(Z&xKw3OgD z>szG8Fm8M+Oh_>M(txSEQ)iuO@75M@wF?1BR)Cxf9 z$3BRRbdCa%2a_jw#f=Y6D87n;Bz>mq6;_n0JVD(J#DT`hRwC{j+kfv)OSBXSyPl?x z-jdfEmIuuW^@n`ek~QUPq0AGWe*m+pgq!Ibo82{6AJMQ>OTfNbMN;PI6unIA;!_-s z^D2NIOoP57A4J9fA;YCvDO5x>!c4Ua7jGnnqAFAFKtMwFVx5kdXf3+ zet*eNeD7awp8APl`Rv-w+wc>15$;v#o^2UEh)!MX+VeGR`j8p+S`w$huJ8Wa*fX## zE!#XJPUU8XN^d=Ur}3THeY_ero3ng-Y2Ttlf@by6(!it9PrCBf91}A(Vw6Xt1ApfT zo@8P0{lDE%(|V^uHlIf=7r5ZhGv_nKE6UW$7cyq?QO04N)PWEv_Z0gl4{+Q zM3ON*ex1u%_**w@(OpjZZtPhH;qg|7X|UmiZ?Ji}zHE!o7r&qkuh|Zadwp*A3$*K{ zgP{~au2Ttv=n-JI59(az6*reaaN`&YG|7P>8B`F73^!FmSVA9g&f_Y_AkjHW#HNRH zfqm#V=msHb}hKgrnJ3TZ)!ivr!7Y7HWi)S*g4{8Ga)1 zHBKL+E{u~PF~dXwrn-0>hspJ~^U^RE(bH3P1F7kkf&67qHf3~AkSC~hn@y*@Jqh(H z67B(nKO@~5i~M~sjSK8&(?0a&AyYF=;Bz12TP5>6{qL5%N%2&35ViGt(APD1t6swk_KdAPy zgj7vSBMne2P{0_&c`q2<>-2;Oid{XJ@~Q@Nddk;l>4r4$LG-;4u-^!wqT0?Z;MoA|oywm8=LTq(5 zSfkLE+0xB&V6#&|xnm6DsYVig#MB?cdpbexx;>mHQ)WeG_-HIM4h!8V)x$Xm`T5jE zc0y6$WcIi0Df^?7GaZi)PcgP=KeRl1^=BJ2&)67s)}Y~7qf=Mc@>GakYQ2{=&$j#3 z;PLOCi;h2=f9`Wn3xpIbVwW~gj`RCnfe&8_*SC(HcRtlWwr%12!r;qImzM($c8I2> zXPmpXJu?04QPc5IEuie#Np-2c-_gg1;wEh+yCmVOfElz}HhccbudZpe24ms9hiunG z^>6&j`pvNHcr#Vs2=d(BJhi|IxR)YWNeb}VvCDTWd}QC4$9C_<-%|d5{B?J2Pl|O; zM(bERXXRkiQsQ#K(wRxC#(fr*so%sWn^GauOGo=pgf@kj1+D^b8KMg=2dn(O2M!Z9 z<>hB|uk_3YZ=H;P-I5+s;ldvn^M2h!dQ}>Jz~p0LE}|&W?6EZR^B+p5^!g*Lg63eX*<$;ze(yic^5)|gy%IJeQ1d2}I^x%Xg?R+% zqR;cj7R`T>-QbSDqC$6X|MUd*#ji5e;giu4ZE9cLr*)Cb4^ks1eqXVhKb6SX)R*wL zS)g`UYvr$)H;EC2TUmd4eu?8984udaTKqKG*kE|xeLjAm$o$pG&fNKI@?Y;Z_W5l5 z{b=1^i4nZ#@!@-H1|4tbtHowySp+D^OBz~RsVwh0ky>IdY2EBLH<%UQf@}v>sS-du z>Mcitf}n}BJy8TrM2ZXbaU3@a(1OM#os*8>Z{G)Eq9k}xR@}XEogRT&+KhE%`2ZmG zXxW$o3IY)a-e?tS8iN|kLoAc`&eFb*SJCh40Dz+{=wN}KZcw~pU;Y#*BM2R0Qgz{r zPP)Oh6u|E#2lJJ|T8O>peOK47()M)a@Qcm!^^;vMQ}(v4m?dPt-WwQysoHH#FXOS% z?n|GadUabRCY4LZ@i2n(eI-P1H~XOekw9#UAoB6HQ{A|AJd9)qz6pBQEMrm@heF;A z04L8DTP+pv!fIOUcg)>?AyslSywnQTlM`NIyg&;z1*|%hdWdRf&y_l6^Y-amvm^6! zQ}+E`mtN?;UvllBHz1G+a@_I(C#-GHPL|0HgUPs(b?YeopADk;{j%59?~qg{UtFAG%O8bX@$pBRdJmF;oL$>}SQp`2YB#U!dAlcX zX+uDN^<}3Lv#yJ$kA0{~UwdeB0}MZs#alW&T2S(jwsXmkOSeijLSu*XkT3t!PEsn) z6_1AmrlOjbRGf37uI%$i=6_6P^v9-0TdZHA9TPoxWk+ISrolm#vm4%)&%rjN4n#K8 zUI1B>ieJvVPd2_j6u2x{w&HTh3QJm z3;5Hixz`0hAL-uTcfii_6EmKm@nGZBOgvuIYCzRYIpYq3mZ&ydm&3>v7v%h39+Ov; z*ULNgD1)J?@5T@HWTc)XEHS#H8%Mv*e?MYgRn|~z*c`D6q&Fn|9G6{xjI;tdS~MC` zx?(=H@z&rfps!j%w|(Ay_M4fqH><#OoZtRRVS~2Vh?GRNK zlonsz*t_u{aLqMsgFyvBK&Tw+_`-v)--bYz)E+O$fAHd5A~zLk}G0p^i|;%ms7}!Zy&fRd43_atWQxA z(&1pdi~9JpUxq4=QQ2X)x;pbFWl0A0b?}BxPkI6} zl84>p$R&au=pr~{>d*>3wU`No?c)oy*=H|il zvr&z%Lqs@D$-j*pPiBzz9BPH;42`;p&N8+FIx4PDoQxjha4-#=#!!!?M~MqNiY_wt z++D*{-*gca=S<>DLalfCZu)Z4{=ZBQ_!y!IcBJskqh9@hJ8)mb!Ja{pL#6E}mJ+4t!1C#S29hwEG?1NOg~wVh8l zs+~Psbo&Ljf|&f<#6bIp9ialW{-5GMy&$ep;s2DYSNVZD|XAp%Ed#~9ZPo7?(O={ky*DAwmd&<^V1)f z*8RwM1k$3*Yj!^WL6;m$8Be*nXR`L&UsLxR7UnLy*e+Skx0lr0{^4RWs{H%O3EdAn z7BqW|OVQocr#v(^j->Bqkr$CmZd0p3!+qOJuA9!2N{;Tkc;0W2F}7q;?451hMQVq? z?~J+#QM~#$|8qJC$x*qUd2{-wYt_|;=0tUnP;L93GE-K2Jo^Iw z&4>5ZKS|P)<9hC_0u(TJoh~_=8ex0+R}%WwzVJy$x8?1{%Q**0-)blCNAmUWi#5nIEa_HWfDA@z7zKQs?pd&SadD}BhxBoLgeLf6>RI&(h9N(o~J zPjRpg%C>`{>&*pXXStbQAT7Xhz4=XX{sMi3>pmUutHEHzoU{qvlP8Pz8NOjT%wx|L zSLBv`3at%1yiLpu757~q`ZwuvKAoisj+|OESeBV$mVB`*!27a-bf9m?jvcoX$4_S^ z^jZB3-+WdF4H)>cKIyLP=v~^+`*m?~O|p6C@S)2-T<DA6tXJSWhkJZL;Ag0RY0grPo zjh8MK!jT+AU`(?!*1jchXJ}Xv1tFuj=TAnp+?9rw4`lg+5-SqMm6m50)JD0!=MO}V zSq)UQxmX_A_u=FdmuvTX_FcQnXgB})`gb1jjmGW%p)TQ%53{kiW}nP^Ol@;b3qkGp z)R>~Xx4r3h!gr`ftNUqDb^?Cv9~ULlgSv{gqBw$**6H0^{?{{@hwT`00d$-~g)vepK>=vi$MgvGqO9PmR|# zZnKzQXBcv=cG63wsIC8W$$V4&H13SqSHs;!1D}u}^!@EN{PxH~F#gmj$QPGr)&3T)R#46 zr}y}leQN{@`i?2T`c$2gN0WzND-erejnqS1)+9Z$=z$9gw7STxY%ENKe4Ww;jtBt@ zhxyT~z$O>tgw(<77bXuM>Kw>yaM@CEbK@zql*=z zR@cRNzG(2YRO3lpA*$VGk8x-wl>D>yuVEYeH#$X3^jU0=X-o#Jmcp^I_}6`|KXoWd|#EG4&AMhG9NxGST0M!&EFpiUA|Tuu^naW z6cBx@+O3Rof9H#vIcq%k9mjna4F6(*58L2ID7Kp6Xr9j8Gd~SldzAmpA+_$Km&>a& zLu$uHjq|yW-Ilh0DSFSZbA3F=SxRO`PIWc(kghlxGmD+>vrH~jU-mzKG`B&6`B?tr z$;M4y4TQ2H*Z%UHHK}QR8eP3C>3nCO&)pxK6AW_W^0Y@LYbN!z%Z|yp-_LFOv>~C$ z|4I9~QitB&j~{#ASaDH;-)?pnIzKPW*z<2HEH$d-Vn{`BTFHFgK&-mwVv+QdOOeyn z4{y)hJP@%vk#qV`u$#rD4f7LsMlF!F{UxdEerlC}dtoqdF+dRgI*OOkl1sceyKjaE z>c2H+)#pWh~;4t^#_q_WND?=||BkijeZSse27#r@`7ywWpGX+g5=yi1$ecXcrd` zJTg+{blt0JS<;)D2>Fw2>C!D}U1zUdzvsu%#o(2W5ThAHmI>+G<;5KjutSPNhOrN# zmHoxnPBsm5q-j4NGnz1agV#KuSD7OHXU)B_5p#df7-&fyG*R{KjrHhptS-d$gM zV(+Gkja8P3<@??be;?S{TPFt0xuodOvmxtV7^i$n{WJA-loVZ1%bM zs8#jO6IDANu5+9AeE#Cp1xndJ4u@4|F1Rv^5c9ROM_eo9zwh6UIlm|NK}&Sw7RR^v zqUK8U!;R-K2xdlK^`;eF^3=UlsIWcweJF2(7Xvfx*a)15T14+WA++~4l|84U%%lRvY zsv?MMls+tIauxW)$)H{JbzPHW{i_k&CEb62IU2uVfvldN z^6Dotr@^AUW=CXPSL_&jAK7MePt4=R6c0YWTl5G$5$X@;E}c@6#@xWD*)=&)Z;L9b zm`4xrvV@A}!p6D7^a@%~)39yoZgS|A+HSgI=fu*6kwNMox6d1ZNAJXYKFj-K20yW` z*%F>xtO}3&_X_Fn;{EqTdgo=z=dL}MXOAr3*#YLU0>{~s*=L#i){d z_0E>pTcJK%FHPOcq`T>*T{w}_;`+#l_i)APt80bDSmON;35^X47aly03k+KUlh00> z=aqM!&SG%H_d)rzTy@VH;tJuwNcRX?#gvY#&@P~g%uC@E_*zrStwotp(cFA^NC*oC4vDD>J zyj0csINoT^V)Tr4`cI^)oK=ABshQpR?4=eKhciYsmY$ECdOQ1Wl2q4%dfT7;>&w0! zU3*ZW7vqyHDAxx+oP7I~STz0!HUVj!3OTN)`-k`nZ^YlP9jAG7>Ttcqhot&XrcUu^ z`gdB?r`WYU9JdrQWA8K0Xx`C2%v|T)M*i~jYeLy$ExQSyBX``N0vZc?2Qr*}?X+ST zI!zkldoQd{__7Z8K(HdBd?r|-5S0xj%7q92<_zI~}o`1RJMgT2JJ=A6iyUt90qf4Xj{ZMnNeNpGUgAO@yf-yn2dT#^SPu@`MEVJv zXMenR?NHY~vg@l43-_qPKRs%#`n!sr;Uhs$*8d@+mueF*zdS$9 zkNfaW-1W;fEx%(z@NQ3FNd7_=Z*y&O$gQLLVC?!EeJ2vKHe$ZU)K6G{u+Rt{v#y!n zz3YdUYyXL%3EslH@$4Zp`&W4@R@IYT7h(&xe7mFa7ggoapTxXG^={vNbHjJ2{_8R` zR?sg6iOOP`(QjQRRvc_!FBl-+me2P_l+Tn*Qxx}~1~wgCEDut~z1uoi5r2H*!k$l; zg>!Q80N9ay-599+cPFBTsyi8T-jl^(?dA)_A_SXT06NHhu1; z@X3d@($`mZ{POrZvG>aNI@8F-cWQV;i2jKb*U7P>G~C^rC-*#mQ#y02GH3IXcB9=? z_*vxzLyl_=zpl*1^xdx5W1F6aJS_ca{p3T^De1%H)0rjeHxc*@WGH z>TJd5Pus6jec#^P{=t1%|5tifb>wf8Esd#$6{Fk#aB`DGPwDUWvwJ|FI+pBCjl1;N z_#ftmQ=j_E0+tJ7*K8V#59;`~<)YF8`9%o7^!vuY*J)H;*V#FKXiqS3=!%wOe3|iN ze8zcKaY~D@k-O*e7-ePp)xP++$s>N}zI&Xwr|McCxc^kskGy8ml|ZMl`Ub+D%E@tC z^Chjx4RbHQIJrLf`s`CqMC-)KvGeoOiO{E{8v|?I&W3Dz4G<=RQ0!~iPFbMjsIWFZ z?g78O^yW-rvk~l%y6{~n%Kd@^vrNC<%q@3Eu%2TQQNf;f@1GtOi+^!q4cKN2U0)X& zX&?Ew zptA7khosWjLi_o{{izl$jM%{|_@I_B62W#kCE@>pN~8(*GY!B>Q&&cuSY4H zuq?^K;|CL6E$%~7dADDfs%!2y2kP%1_e?gdAI{uXeSm-H^7H59(T7i8Sj^v)jfSk- zQ<$d` zPw01cTOY^B3b$T?YQ&jqfs8|w_^uRWduBjY8~Ic%wgkh4s8g7H*P1^mhbuWoWk|i_ zS?fFVijxL8h9wn)IumXn6J!m^=Mlsrh2>CBmXHW9Ma{|}3R}ELD}o!BsL)8Ff%gvS z&5B`C7+(P^+e7Y!mEj_tRo$=}YdAdTpKnHGWFt-&>5vurJRcd~sSXRTqK8P;!07RS!ZYm5k3A#aGwaIqrTlr&hKQHq%$ z8W1-8m;tN3!^xBeb7w237ecU!E&Fm`y~*l!S&QpDcJbtLmQ!rjD)3Ob3aFpCRNjGo zE4xsNUfS-eoribrb~t9W^3h6>k}yBrU=sPQZ87dd5o*Q8odr*Kv7D#2kd;fsax(Lb zEcnQuH%|_Ke}xM>`n(b4`c{n|2(N5>m8#tvVQ77!7;kl3pJ6=s{MNFo-@Bbxilt{Z z^lGGs748A)L7hVyDS{xxRZ#o-WohsHtpS92f~-EpVhV9djerN<_huU07~C1^RXY4i zM%vq%ej@cOPdRBr-ols$g4a5 z;u{w{v%Ri`pn5fq`%14BWa*sxZQZXgGjvQThDOWp{DGxy9#1Yh{h%13(STl20QouO z$C|~Y^VaiSk|nS5`JzR<>WR_5RbXAk_Uz0Q?BedfDq?#7-1KV~Z2V-FgE3-FMPzA8 z{t|jV@y_{eAdg>`>0)t-bZnqz?@77bxUbN30W@v}+%;0qP!N;VJ|=)P&w7GrtG zv~Gh^OW@-h>q-ZFeaoHc>qZyu-gOOYh+Gz=tbgQu-Zs2rWM2Q5<-g3mz_!xja<<{- z%-<{NcA&G237eKP$NNTSDf7OL7kbazM_0$}x|NfXei!jT2ON8JHKCE0zV6#}tV0>@ zBn%9GFFOXPm$7(-tyxqv0{QgFw^zo-;!#p3e^1n*FQ&?lu&D0*UHJa#R$j;V1A2va zWZb)kcIrO~b;H6zO;U7W6P^x^wrK+o-dR(XT&dr`(^8{})GR8PMeWw&Br&0!m4PbR#Jp@{^R1 zlvc?x=^7o<-3U@jNegUrcSw$q(F3GmBL@t8_kX|d!@fMv{oLnu9>-;ozIF?|Ub#!C z>QAn=qw@Ux#+!f-Rm>yLXyD_#?qV*xYJO6G>;5p=QYAar!%>jHG3tR{6~(=+#-OlVS$J3BWG^RBcjg*Q&VcVVO zr0f%;lixCG9FKj+P6Ny<3Q_SUsP))DwXI~l(uaD_00#+(j6_q$=tmnM)3)-D*6t3M z5{*pa4hKe(J6S7eV|(w7{gSHmp z_wmnB2OxEF^xzzgWLJRhPl)Rd4*%1c*No&}ar;?O*18ycly~Id=_Lu)=8nTf5Laa|tr3%7cMMp=vo=>q(?90g{9Sq1O0l{(&{(u6csr&&`r@$}O#{YA~Lb zOH&lZv4$di2Sv7w8{T#K!H@SwYXfzVLdBbotam|?`*WA-secQ=H5_s3F6Hg5U#p#t z#Zq2Gy3yuc)OjqPc4#4znN1Iyad!mlQImz`driWvD!o4j<+8K+>4u&((CE33D8noM z0c^qJ2I$xgSzU%Dt3PY#AN^LaOO9W$HECmgK+@IR_^-i61%#2Jo@wt3E(gt`Ap@_W z1&QX`Ot~62)@qB|R|;PQhldHWjC(6%1Jn(>JHExa|Jcc1MCU);N4!kn zEsxulBmWLkV3=l`xvcr*>;dv)eB*V&F7< zUci<2(fD1&O`5-a-L8Yfb!>ayyT#mhTKB-R53lOj5}r-@%V0$lC!u0-IvG%_vxBuE zxK?{MF_rqP`tXlR+~2y>xQ;50^~>U+j3&D-<=6x0^?gQl?TJ7&RNKZdjhO!B=Zk<* z>ao1Qh@uhha?LB(P!{NEe>a@na_)kK5NO5Pkgf$aZ?&I?j8<=W`JVL+vtvrnC)Zj= zkAN|^jU3*kL~=7}LkY|mQA_yy9Yfv6CflwUN|9~k^?)#3tw*Rmq_M-3bDH!zd_n+K z8~mLhxNU6HC(ldbhUkv{z#Z&x^>F`Fj&{90=?dhm^HNnx15aeC{8kB@ETP6AV3!h; zE!9$QR}}jL$zj=>V$pG;e%B{2=QtB~0@oXw_C^_T>%6Lx^+2ot0HE&We}JBK!i%L2 zJY<_=$48XdI~JQ?u+O@1_J)=WXAKuKx$pz^CEWbq{u@SxXzuHy@;VG9vaALrj40Od zM9CuXqpr;ZvM98Gc&%BopZXO$J_U~YZT{-+S7PQyec%h}wG4hXDgsXfYbw*I89#Mm zB)O%0AdyEg=pc!XQn&c|D~yCN28{ls3AX0~%{osa$Xe7h{}h(`g&f}?#kM3Cle(B5 z<_ZCj^J;YS=0F*LzK}?pRu$!oR83aa5yE};RH_r68z%k%j0iIQD)zpkOB4-4kYi(8 zv5k<(2Vz%ASbrlC(Ysa-y63ikQU?+MX{vhEgoE4ZN-W0M5LHA%3v~Kty;pKtv=In9 zxbnckhz$2z~+!jZraW~-c@!`FOm_L*b!BTf! z^B2#LOz%VjUG8(_Tv3mEbGs_+f{qDg_kRcdq#0W^SL7X0%eacpkqRH{? z@H+deVPnig-0j|oGd@Yy{xmJNmeh-+&0aK;2K{@X16+PS664T#gja$u!VxR1lNn|^&Rr>KU&;d5wXQPO= z)-hCzJ%tnuLm>nTLKt!61U8(i!*EyY*fuqW?dXjQn7kC|vNHWIA)$5u)S@F;9-F5@ zF_zgO(HOB3jBI_&YE)a?+N(G6#COVBdP*0X_YiW-HFs_VEW5vYf%7daSJ`z^7y=*dve{`=6WxdC{P)c-Pnm z*#&4w%o<<4ciQB+Rrc?=wg2uK1f*Z&=<;`@l&6SI1jm&SCkJ0D%2$*WnthT|qzDv3 zyKgbH)L~3E^Z89$BQw)L%To5KrqTwTbInW*p!#~)k=L?a1MC<9ZB9N>ArWw|yZc#$ zgEpG>CDFB+4W&q@8v-s}l^hQ8Ke1W`ips#cGGzk9t#>sdgl0*hy>>GT<*>=}THUm(#GDAYifcb6&vUS+IkGm2f zfzXVSG!^6o&!2H-P9FuszO=Dkhw~(!?aM>eH*`#U06N@^fLZU-O~0zQ_?${tbyLak zVT8j#4f7gIeI`(zsWsZrd_rcwmd3myq)~CUq&03$@y0eaN{EA|RY7Hbs#>LJUsL5~vKo6DlnqyV)W zFW;W4?JLk2_3KaZ>U8oL`D(t*e$~nS1KM@%bpp{m+7D*Hcp%GSOH_ykm_kgF4d)~+ zpDzlS&A9W0SGd^d3Xk`W^ov|d927p6zz!jNY1K(bX6`29{C{Y6iaT1bwr*2>EI&*0|NMS!y=nENF(vhTkn!A*gt!5<$aMFfYr zx^CtKj)i(!!R%>{Gqchpcx?O$FI9(>KF*Or3rx+*xF21b%saLFE*ei3h>jz36ha7& zwlg!<1!i?~fa50t70!z)Te|VN*^$t7614f2+?B(CKW$TU<1g6hj^rrgZA2BN<=SY9 zYjo@5j~(xH(4LWHGOvjcyxX z_p#ui8xg{Nq@J5i&3KLvERAigjkCgB(cZrsdVgw&PS%UyjV9n5kzRk3+VHH}QjA*T zMjEyWWp8Tp8=^Sib+H%DR#=kBH=?v-!K2!_4gc}Z;P#jBqOj@Q^U^2(l`?83{fix9F!oAYT=RajMj{xUCzdUpv0QJEz?;SukYUO zwk|dzvBzIIW_Ho3F|5y)<8E~OvC%?dq?d5Q`2l@WykvXH8t~=Ha7e}PYgIx0HJgsE z^Tb(xUaOaqsJOdlV&@K>LccGmFT9cBARWpIhL(eFCh}p?TF&8}IsQ#IsKrMkk5O)y zinT+l`0-!_2dJ4A5B_syUnXd0qH|{+qCaK-`|3=F5S$Y=JCi<^Mn=q3^&caNzV18A zHi=3(+A)n)MVMz#@XJ6c)MAowphBR;&p+nx_x($girty!TpZScZVjhVZ#bS5+3~4K zA6lKTTBIkHq#9rbOjxSHFpX);j+y)!E4NctI4~SkZ@Vs=o(@L?MJf=`j^KZxoj_7$kvdZjqM+oL~R#We^cTY zp!m**`X#TXlJdrv30(t}lHyf%bhoKkEHyJkQFNp)8vX-N!GrMSU-C*Zg@|Z|kSK&h zR<_83Ay@+Gd#H`#y+4)rI7H-dY8CBw)S-m@ziun zxrr1Y2O@*4^hDxE_6hzolfW|Etpwj<+GABe+=OQfwHs87alGZskpIVqFR1h{4kxh0 zr+g?;V6IG(q9(ZVJURFQF((LR(iMgHf82QQhY(p3>bk@rQ( z5U);?#XBHPqrJb1VwBsT+%}PeqwDH=w9< znn5w4qRMQ)(&#dniPiMnSKQ5TJU2=zxO=AnzvKf&iVG))*sY3_{&w?q$Zr&)dF%SM ziFD8*oB3)z%$&0qJTzm&CUZ}wEwz9oF&n0z^om5;!ty8r(#@udupe6nQ2h7bEYY52 z6dra-(smyU{@8xJ)psO^t&YhQE+ihVgrOIA4l(rDlkS_-nDO0~YXk(j8a!U&!hb}b z#;2}m_Ybg)y)X*b1ZaBtr-ee}gzID@jaiV|$JY8E0(DX62+1Om1T}wFTKQje(fhCG)Ud%+kJ7C~ zsp|%v_J}>zo=oY@YotDXG7{VNz!=08RdONJ!-0FtoVS zfaD(3rUS30_xmcze!P#G3n=-9G3)-mfJ@Fl8!k5C_tqcVJK)ToISpxsT<#wEMhK1x zmw0-)ewgpX#_=)qH0^E+1O?;ol4Au7+8p2S1oBSq(5wD zrCrQit9e`e`0=GCGOdcBJ?RkhZZ+7-!F4t(VEo&{$v6h^B{%%>8K_0GQO+FwuNe=^ys(DD5jdrIadPG(Z;TtYV6>&@3){2Pm(NoFsuT zsjpfB1FXmH$tTvMo4Z8XP|cCfmxVM3GQp)nRlarTbd45eXM#*f)z|Mn={fk-sQ>aJ zN2KuM?pcj>IhP(~yLdd$OI@xr!`z_1Y_d>2uJG24HM3h;Xg(XPMmL>na%Qdd&5Z5C zogsN5?=6UTZFj>1;%>>W?5ABI*n^ncv_0U5oL0peND{TC#nI3Y^w=;f7LUmLn)&{G zzG~MaRwq;AW2<#Q=fWs(cl$V?u-5%vK;adEnpC1;t`ncgyB%MTbVz1l`;0`0{eIK( z=NqB{X8AUB2&!2l$y{~{XFqob`llm<--$kR!2WRRyq3+fPco&LkFurOuLnRiUXqL^kWg>V$*& zd7TYRASmX<5NE1qB930;l4s1TCTRn)rM|;N?6aNCi0%km)NsGNXCM84K&nOK&rP5{ zHeHq}GFcunA{YKtJ8F(9RS$m!$K$iJRqOw9yK^q|w=e{BcJpo**#cWfRj;_6SvtGB zW)qH2H3pZR$z`EvU+(bW$3PkK81W^!cOjemi+WmuvTo+z&fQ?DaS@3#9BH_(0*i#U zX1i?e3j*D1lj)byiUVfHUCEp04%Ms8(SHef1#5+co0RPYW;aGQWZV3}TZ?h`bV$^^ zV!imzf*$7?TuI1CM=4LW>%$W%R!KkVaiBFx2VJ?7OhKbWoYSjYD0+^&wd=ovH>rU4 zX>8+X9GU>7PMKYa1CwzF8Hm$NHeXz$ZY3-LbnD0RI15!nLi?m2@2mb*dgV>A_ye8g zY6&cE6@tj9Jq}>u!pI=&2ACcjp^^u5Bi!F`Wx7`~DZrHG&Fr3MwYi^r^wkL??4-B+FM{(|Jf&xgTne-8Yj8H-kvA}tWbE}Dq4_nkINpajIL;IomBYMP%ZIr~p*-Il9eNf+J zA)LL}2c9?-w)y@9V^Y1m6_l0ySjWH@&{5>)D7N~Qq%yTvFV9J5%u@E!U-;W{yR@5k zBW5Tk)c*J@+x z9JWS9{ZE z>MA`yyq%VrSdW*@5>SUo0`##{$DW)3EV=YM3r?2(IPE>eM~|1| zOy@Nj$mcP?meGumZJZ#QDWcK>ZsZ$*o5}jYw?7G@!xcr|yG|}A`zk)rrV0+Ee@jd1>&>Gc z|7t}qB&L1?KrD^}XC%=B?^|;O|L%rnM~49Uxw7BPK>4Kwv$icQ<;c8xB|7_6wv~N0 z|7#F+PABQ$mEMiJT?wEENMl)Fv5{i#8vJB`^_oX6E;ZFP+ih)`FTyzmInrJl8Zl{! zY~UP#GEn8oa)QWf6>AD`*Mq#GPTIl31b1Mj*xJ}H^K!ubwKq!=Xh_j%iV%H>aP3`H z+4K!fA8$uR9%rQn1ZqaYE?UdUgM7x+1!y>Us68~?t#J+%XpvXnk(K`dO6b!qONZfb zS9;wK^?S2g)l5JLxWrju-dP}%EN8pDc#7r8(92gFU*4u)HY=mbBRX_FgMgb8_Wg$6 z-g?Jf3Y@UFNS1V``jn59wCKtxEKdqs5qWD|c znteaAie$LI5M0^FUAylRz$jtw8$OK)7BVYqv#HIhV?~oTEr!w0wym(uR>RI_AmT+P zGm)FFOXpAeSJ;v|$Qs`q;}X4jk^48=ZgWJOL2G$J^Y%zt%&83$fB((KmEl4`IM)pz8YSq9w6-{^9Lzlmz(m#bcAj1zFWxN}mRF z)E<8?J}%o?>UD{fLBiriugy>3qL`(cgD2H7USx{u!47Rg=(0xdu-r7eF8&PU5~~W) zYVYK#6^lS8BM2K@El{v8TMiZv&_zN}kd^eN^Drm}uV{rQ9$ zu_kTxDx!@)Bjw|w#}{aQftt#xafR5vrm5p+XJTb4ufJhaghj8(AUKnxLPVulN(3LP zO(1u&(5J*2^xU-)^eNT-HuP`{q>Hhnx|!5v5#d$2jd;rhH&fd*ww&Ev!+0f58KwvJ(YtkUsIHz~^m}-|1u`ZmVZ22W-3@``$cS*_GRVIV7_PNy_lre`l59 z)CWxJXS>m@7>>?vTzF zU6#OPPl1j#$C+PU`GqCLu=1?47l{1j^3o7{@?>ghI^Nx^w7~F6?)>NhFPI4=pg@-R zxXm3pS-lt|_GD01YOG^SmY*Ygl%sC9mA;a-2Y|D$sl+15J52Z`Y_Zha34Hhtr_`ob zBDNZwtTJ5`P-AtwHpxLJC>KwQcQ9Z=y2%nBOo3Xf@h%1H0PDJjnQw&BhzTlgnleqt zBJ8j5Q4^m~R9h0-qm~!4`*z^547=Dwu1%&L`?Q-QN5uh4uJxg2t4DJ$S{mA-Mx36m zOn!5A`G8OSM1R+1ZzB@_ zQKjw9p(Mm(bjDU-hGfkj3mOb8JczZ=c~871r8u>k{@(SGCdDSKCu>f{4}z;qPv_*X7&%{KQD$zkN^r3e9pcXI0*zXK8u1C$k z?zqc*U2NG3nF)lGBGxrNJ49==EfK(8$$knN#%g&-PpyRl^=2@hD2g$`SEeZDZ$;p= zDW8fTdos4+=0oja#3a|+;iV}JOz~j_Wu3_z*9je#2-#CQu+31Kscr=rWTd4l*~=_t zMt3}G*W)ADYfmS&Z><3AqUxCLcI?#EMTRg%Ut-Ojd^^v8W`%aRv*pErG*{ZRfnIEXxp!`n*l@nxp1Xf@iT?4+1WXf4fqV-Vfy! zU<1`T@1Gn^-L1cx(hi6-_=jZ&%HFuiJY5>8(;_mn?yX>us)hT&Fm0a$qo3_ubZ-Nr zs>^k%^V2hTpWCk3H@CU0ENd>B|Jkpf;JtV-d~%CYgZdWouufUb&V&+*s9Et!;yn1n zu-;!RP@=W0n9mXFc&MhLQ&u4BsePHOa`;n!m~CdMPtwWwb#a|L_DI z$rRa?9`a~jSiD8T6nnK4F#~_hG2HC?2k>el^)FN90~$rXKZj+`)XEAEY*fi9@O_KO zR;{@g76Hot#La?2p;7~-+zVe0wYL-?tV|2(;x_EF$=RhZ|7T9RRG7@%53G~&4VT(m2UO7=J(gv~+B|hgx#iKEBRtf1OLMkIO}yNv$OU^1${e_gt49#x$OmSQUD!A4S0L z%B?Fr*NR)F*$OXa1cqE(kH6z}r2Y5@5anHNVX)SLtfX3K4-ZU5FGN4L;+XyZaWUxV zF=nkzo85e-L)kVrD>}gSr&;%E0sOyQv1GN^YKJhxjW z=A>4$viFjhIYy2^A-b_nIYP*jq%16qGjsQJmQ{9GntoIb|i`>!J zfKC<;c3+3)hr^HtDTy-)_T-U5NVG(tuu-QbsO?ayc52O%;m$iaoOpUKGT2Jz4-yA%uE$2u!yL&<-OCDd$ zs7mAHmevNU*hIXXcQneRpK(uH6&vp20do&nKedC&2{mf~H~s9+FZ+^$VV;ctiJGYr zJ!UMww{ehFw(zuSbR{u=o$@-K@!ik=-q0FiLkqlVG6LNsPn`|p`X3o9w~bEdTd1Q! z|LEPX&a{(j*LHvYD-AF9rS=-VwmGi}1rP|-9`ilxN`_8V_ zY{<+vBf&%qy0zSX?(e7O-5S|H&?gu5Vwmx%@~z3P_vKiA|U9MKKbeR2r*PLSD|lcbN1aXBf18I!^UUeeL?)46g^O{j`KwU!UNr(z#$s8O{Qm4_@( zE}87d``t*n`g;{#G(~|JKvKrD0kqo*CE3l{1SKswh)??BJL;>00iBn>vbS{VH@gYY zujwx9pzlEo@cg;Pu51t~!u6Y8F2&mWLadlD1#V=kaIK!v$u8r7p*H`Iqs> ze}lT*d;N^*BORj4TKV40>Hm#)dj~YPGOVMATwQ&$pcN3ry-Q!YWQJ~u50 z2GHAv+Ctd84U&qEdYPlTWam2U5G2Vvi``> zVVsSI`_yxa`pP60GUGyZQXR8_yOE z*A2lP)JgpxUW)eFqaYT$k0lx_v_Yo|hQ&OuO)|J$;47EHOZ~>MZm1mg-XOhN&7v1S zU}mnFNT~s=Qp;gf?V%<_@RErPZ5~=1pWvJP-cm>9Swr%h>dC?cYr}7u7V_OIN@9>Y zG5R3O5wdNsl(tCr?~|Z?3pb*WvCh0!saY>L+T3j4yY0qYH}&T9`B=WiXA!UMLTCin zY+7c?d_Me6yVkzh0$w6qN`zG(q)*^K`P*JQl^GE2;>gIT|1`+)RAc>TC|5bVtxmJ$H#5~wJFb0Qo;_#jlWk-kD@y-k zJRB>0X(^^M=XwERuUI!X)0TkdN+s6XCq7nt(Rq!GFCpNE(%5)&Z_J*lzplt$f{n!cSP~6MP zm=+^|7vNLv@&EL7zK3d38}F9cQqrXNcmcR-){_azV_ow1H4lnl_RYe+Iy#{17LT|h zO;;@V)`Di%FE_$h>lxTW<*9?w3ZZ2vRw)4qv9C+AeySk7ck2-6f+6=VLhGErX>Ms+ zkYH$u9K7E&r0|n`cfyY&J2vv0czE^iSC;ot)Y-KlnUH8NOO*k7NSAg}4oG5W?kl&g zBr1pF^OJO_VIGbZ@tq+?$2H;~058xSaVQuJ>xU1}TTWdG4lWE+9B9y`Jz|eN|0|ox z%7ed=4)5YbC*Rqjvj-Ju(b~meS(Q1?xd-lEzv7j>-0H_4+A{p3vg(xsv&q}Xn(hqh zRX0Yy|9Z)Tcd62UdzFa@BG*ANM@zNApyu!E1i39DvxuiP7!uB-^hupP6TIq16#rlc z2Se`YsUCQ6%@(PFb$CeRHKh~%=fZZ_MONe7R>QC6sHc+A#8lm#Hf>hsVPV#_o7bvz zWE-l=mxN)fX&aYvFjMe#9UD5V8e{bfr5Ju3%uW9poN z_gDHe>WEN!gGw}z*0<`qycLS2&=ef3uRh2s=h5EDNXTcGtFX?;jd z^BwP8*PaCrFJjtuniBF5Us;@kf3wgD1`A_oXM~{6{=)+WT+K6roG3Qnpt@F7%aZ~FzQFHG zU_Nq-i@FQ}?|YMXXeN}&=5AjyJ~;XHf*eleK0NDN`Qe&sqaST|rUMv)E)#u}&r0?& zF`o9?1hx)P5JD4|xJJN}Bb^^;!SG&PxSY_mnoD}j;-1=VSoqD z`RS2HnHjqADm7hyMnbkqP`0<=C5m9aXAv6a8WPx+-85qE56 zz^o1ME~NH4jmhl}laQC))Ty!i0sirh<&P`$5f(@MPrXbVg-bl<@_0{O0uFRvA1sHz zsnkqgEqPWtkXkm7_90Y#uT|>F5~~mOcL>=<1X<2-C%`XxNLKc4DsoM@aaM>E+L^92 zmk2?MXne|XE^&lQGDbZie6(+!6v7l3uqCTYjA80RKGaJ_mIi8|10<_{-iPl)(!CMy zKOZmE32{ThO;5N}B=MDScl@0f=AuJ-1H$qs6v!hms39T?<-3J2xdrycO#HLkF6H$h^jKu~Qsgv9ki zTYa^Pb08aTy(DZSS{1rHa-RHKY_zWCL3Dqe`f^oay)PIrD<>ULcCc{1eE8go&Clx5 zCn=KfNzRELHyvefJjTl!XU`4a&`T^GUBHAM3?iMva9BN$0t=YQ<`}PkMu`hpt#e6! zs8;%bvzxbJQgdUQ3&2FDUs=z0Z&r%4kYe7Tnkqc)5OuigIa|m+?xZ7~ccwbD^POo44pg@Pm#)PxCTo+BZn^!y zf_+*76rWlwDRY&6e6n!W>`W`BLOlc%cf2>U{&a#@O8{aja%K#8XOB~;Gv}F*t0STn zHm7G`29VQxv`dwUwOUrBzDRPMblf=O>0ts|5ME$Ce^fSDfg?%4yQb`NsbY?TjHBU? zBJi-(k@5n_OmF#Ek93JN)fRTOM_MkePB5f<7mEs|4{s_DQyq?OwpD5{G_MV0aue#0%ek#i!Fd{#^plk z?k{m%5Q%o+AwPKCkos0ZKIl8v2`mds`>P}R2cBrEUqPR;>IBh6`UmYs?z1#b^^cnm z%m=<hL38WUq4PwM^=2u#$`fOoU85Nd>(D~SBxuHsigpZAgA>#=ge0u zba0uwCg??i8_=Wku)x%ZSw}xlXa|I8!Xz6<)BJ_JP|YM+sV^z{k!EZ$S|M3u4|g^3 z{d2w!zz89u`_)|*`)SUqZ{yk5EiH682M1w8Bvs=a5otY?(GJ)@&dnO#GNF~@oxp5z2Hj}%qH|NFD7$2{~MItfIlc3Se z>C4OEP|GhfU#v;yIU_uMJl=4NK0x+=-15^XX?HrRz2%40PFeL`ibrh4A@5bLLa{@0 z^cNlE@Ky4%aNWsf!?Jy%jEda4yIm@d(dbrs?g;t@#jHqVwpTzGZAdSF8Y{f;%>NOo zGZ2SjRkL-{{KKD6yzCGB1>jo}ik~I9Ny%27$=0NOIr$bwPXzYHL@V=(y)NTAw=-*J zH9DWGEM0a}?G-Q=zHOSXH71q_82HtwPkioTYwVq1(@LVdX$}&1$W%-W{J2GG{T{vi z)6o_Ack`kQ>C=2Qeph3)itQq4+y4VNv_0)wNVSmW0pssV;Wm2-G8iGb2VEacxFc%R z28`E)8|FTrl(eOiHm>&4ubOu}Q#(^Ts}3cYRMQ9LN+;wU6@xAL*E_ST7IoSG)bvq( zj7*kyv3MO(%ID*J*PL|)an<$|G!LrwW`R5(2q6P1kS}1^a`S)798czpH_ZU!&Mf=J zB4_Q-ZW3|m1O}eim!c`RPU$gPGXfnZ6}{z4j@dNNs-F$IUws?p#!*iD)Xm}K7UJWv za{k^L;sdoS-^(hXs!w8YHXq7P0m3W^j8X;I6zq-~q;|)XRwO;##H?j7%=FJ=CHPMX zFrxHL`JUeou2Z;UA)mUJ_CK;q41R6bAkS7L{Y6@e6w5RDW=(BOmv&uS<6>0SUV1IL zJj3!a%k6=ZvQPBqzLd7sH@N2PyDt_E*-H(cn!G}Ojz>9{g~trlhq)$w$HuV!g|^Iv zn&1NMcwmg#`@hP&#B^Z{Pw{2Hricvt-TT#NpZRGvJ&krb+i}%|g^>E7r8Lz>m z7bpNt_>xT^VX6|rHam$fUQJMDk?_DhyXJiQP+9)~ud~y{r`yjS%AQ`m=3XAkFGMO_ z0B|(NVhou4%5_difzGK-E&lYR8p`Bc+yXoPuj{iJ?(*cKvHO4B-X(FWtL(maMH@zc zY0dt`-c`Wg!LJ(Q+wN9xkL>zP*UZy5KUHZK%Ja2pbHC!5{}KV$S&$r?_sV#O9rgT*naK%g!182dGt%hIRmqb#_F>Pw9Rdmru9 ztGZb%!M8?)yzZYOHANfr>p>)GlsoF#AxWlx+S}Vbe*f0sYCl_%`&p{+2^8Z z@hGs4*4|5uSc^Jlpt2=eP@1Zh{qZPdW!AY>!)#H*>eS|!oHy16!?Qo};%}#YAk)C4 zaw%RCuUHaRO!z{_T_YLmE61)z!NJOqFZM*@u!9D9UbPx7`61?3!t5LUdm!4jL(rFiF9=@FT(cqfr~jy%r+b`Q%jR*uOG!8U!Q!q!5G_qCZJCo2Z#p<p!jr%W3EdSY^@^dVFSCEy%Sr~ zdhMC)pBiE#4BxVhNu~{k$&9Rq8|XA**I^{lbn8=Lif-qEZoXsTBd2wwcA_~}Y?eB; zRhJA^>L;sTy;1H)ZN<&~!j^iB0tr^T2bkGV1&zaOTc#O!{{VrD`@@78l#{#`3mR z*BFW_3^P*;y2|oRWc2lSlwRg|m-7AzOE$L~H_P-;4W%wfPKm;b*brxK=TY6{KLDCD zPgBv3r=}dwOMw@K@4@bEd}qSfU%&hP_%+^Pa_Bz*ivm;d^aBADdjaiKvNY5D&zENQ zqsvjP$hop7jfNU?=c8>(t2OYp$&Sge>r&NlH(rOI@11V&(3(+ggRd^4kbv-UIcQ|6bb? zI=|H=jtnj?Kd9PTC&09o;N6SPg;aG#c#QSmZ3MxrAAkJ-+RiNfx|8y^nA;z+xTXL2 zChIH?ot<;>)#8m@Uv8g`9kA3<`{7yo@ltp6^p%o2Go)C$7StEa4Z|1}t5p7>sJzi& zbM2;z?;qN#CpxdqZkD+E`qq-si1w4CR<5Xtw)b142o?A1lAm+NX){HEAHt>NL0gJ& zwZ5zZt`sm)@0HKhg8*tE*z%;L{;#9gw`W~`Ot+DD^`RnJAM+NMz>K-opO4M9t;9ug z=AV4hFKSU`%_LpK4^^M!bN^}=Q?f5#xU;aDY!fX8&ry}3z2!TLs_^=2HVCZ*YVexw z9R=$LQp23R$?4!|k3BU;W+`OmLwvx~maLP_Q|I%$y9L)Y$xjUe?~;tvH1AlhoTe{` zJD!s#WQlRdx)xcozi;uQSJ?%UEjZKjGpd#ruNf(gN=ux|5PiXjZGs${roEN}IMV!t z%*PUNVQ&Xl$GthSyXk9dQ|iN0snx$_S@#F=05;-Kop74k|%+w&7X+J zrrRC)94Hu{KTXaY|LleX$i4lLFl*BUYP=IB|GmA1OQ(~Jx85$jewt|R!IAwV zE)v=X{gGeO)n4GR;Towxj;#P57Lq#pR9|J!j=Fh*GtFO{FJ%yyK%J%#K%H0@Tfz4ywpCN-xY=jjZNu|+ z2CeUXsP@_4IB%GzTUleB${P_bJ?Z!v4-4j4rQ_3E?B32kWU{`hVVr@XN~JEvVZVqI zJatz0m6##6?}A)Jz>5Akp;!@ls`eyUd@e#J;T~8NXMlz=eA-5-e2jWDL08to=~hkz z|N6hj9^^`nHh=$32mNN#QmAiy(3HjhqMVg2igP%=dSkX=U617I%IqyGW%)Ae5L=eTIImp04L878x92qC zISX-zE{f|hzbunt-|a)EYvrC~ma?8Q0}!d~l}HglfIYtO)SY9q-;n;0h;`;bgFAsev#6RasblTs!!Y%^Qj_;?XU?awpjk#KZA$!hRNF9@*rAU;)<8PV zdV(CPMys^*zl*nCwo_}pE|!Ivg+(|7X0>(Kd!ZC{q> z!E`|D=NOzSjQpYy7X&iDzyw=%KK~KmH;Z_sy<#h8Q|FZZ25r3=#4-%;9vE5hySxYK zG|cX{6zK0W)g&QOd-B=Iep|f_`r9kdKe3Izt~rRA*ud5XgSqDc8yXTn>l4x+=C&Dw zsq^Ga?{p78_rFD|#(y7DRXOm_&Ks6j^aUKqo?BK$i8wvL-J;Qz%8G5r4@7c}2c+;! z>8V+Y=Cz~b@24HFik#Y#3abw2gK8$OGES~ui4G)7G^&>}_P=0A_edinXKNxFU*EZ1 z{LS8{2qmn8I9W+fL%{2&W%*@tXRH?{IXxIBIF?pas1!kT#};sR?w%}lND`ljP^A9@ zB(TwQIAEh#lo%cNlR@&Xa z7hhCjw9$T>m%>%xcx~vg-nEFs*=p{&x$DxG&Cedh(D#?}_Bz$@q+(Bnt#x)VOQ|>9 zwWltE-oT{+nUqm?e*u*-A++(d`Ec;ah7+J^9ctehIg2tL$a zX_-9Tx6WOs!x*5tx4MrxgYLvJTqvxvVp@*YsG^T2Zg|a^krz zLtR}>&2V+2YT@lO>Y)P`S_Nt#M{W5QDcN*b8t0r~M%cx=HKAEZFK>v$k}V}T*&0>b zvih)CqsYDfDemYZ8O=p>6jYi5L+d-Mf5}^4UwNy$_}6+YRKDNr9{WLRcZ|nwfX>;R zW0w;=P+tk)0*!emqj?pNyo)Q=xBdu?*RpQbtUVI30Ku$h7b4i5UGEF;YiXyz6!+Hw@);<+>{oX+`|%MvNL=FH&@>@ zR=D8^d-n!wEuQypB$)2DcYOv};kQ~H226EfKX%CV?#mS&g6In5wGh}OZ&l$eUlUht zj!gJG%Iki zDy%ZMBNf{W;(W)5m7)FJ27(#+Y0HzYx7}4ukTS_;SJj$z+-xTGX*IdB3AWjT- zR@kqZgDlJvzZ_?U`}+>t53@JtJe*=#SsVfk^M#vq2qdO!-R>(s9@5>isG%rE-9kisvyF zWa=7<^KKQ~S3a)#T7A6J_7x$On*VLakRn9cAUz2*_P}}2U}0{Ce)aZ~>*bBY)Y)a+ z@`L%vS}2#=LdWMjvD+vT@2%>lxKr*DlZnP=oCt9Bf4qWiU87FxqfY*Wu~kclZAMM? z}(r0KC^8c)yBPs!vRlN-E+PCkrccwGeLJrm49ekZO>CIzc0!&?61UoIIQ{BQ%lX?8IU(EgTSsWV#W@k zCdA1+wQ}{u(69hN1WHYZXAs~%!AcgLE0)W{6-u@)$hwVg4Y15y%Ug`)zyI)h@h|IIpq-C3v7TSa^cwiEA5dXklsMZ%Vd2RuGE6Aw?>_(~*wqMv zo~r!gc(MT8>L#3W5(;c`bUuZ&;`W_3hu!5&;ta1MI;w-{+J5ChlPc;^!spG1Andjh zds^^^dRoVT%zJoT=>v-cPrLA)_oOz+PnBk#abJNBS(hj*Zcrxly$IO!e-xc}Jk{SH z$1gIniEJu6A-S?$kL6EH9z_OWLG0uND+Q($?_A+pHeX zoXr-pbTrNE+dm!dIrZYkUQbWi>X!FTUcn#Nev}3g>VSJO)(Fn|EhW?8)n(f4TyFoF zYEhHhDf_fwU-egWFcZ%ELQY5aSAfp}8ZR{IZztI>?6!YWFX1kO;Vy20We&eBou}Gx zBGcVPY?jAVS`=7AXal!BUm{`KA49?#RISee+Hq313yWdt?7f0gq)&T^!cV1ISU+4f zFmJ;&fxx4u$iTXF5q$=j-L*(`mom%8qeGE<-Rm>c0L!yr#DyJc6=l{zOccnAPF>tU%<7fesQ&m~ zabx4>WDQSVpHGQz)r~nQRH?52GzyuK8K7~XvP{?63ik-HdRe0T*mUNs+RH z+xaOLafdy{G4<|38wpj#b4xvsU45OvlGLtcN^IqmFPRa!9?c?Jo0HOWPW-yU$)7e@tg}>)JNEUH$@avjDQ7S7KnHTcZC2Y5n8~Kq??+ zpG6j+bh^RaGS;@;oZy*oxsNC>4^h1rxsoqHRb#o&UH7IP{%KHAWUbHg)3eJxAE;UwIl*k@AR2-*?PLq0 z?y{JihZ*5krR`i>autrMFXH@%8D*i=8sBC~v}h3KBC@Ae=OlHPmvr5L>>}y`XcSyfsjX)i zbEi!GHukli&rGJ`ol@$^A{1K|ypVyS84zo*|L!j4AIJrrd~(OCnDyt#qbX(->epB2qDa~ z4rvQ%ASU**#UB8~1B9UE3a|*D?@YW0Z*$_kWiC(G3;V9-3EBdC^pW7m-x9;ni$If; z!`P*?kGYk{-}PmC4k2q3){zl(<@q1K9q=g$E-*+bPd-{yxKogsY`G)~-}q1M_<6vt zCR-i|{En@CJl}Xu29Wu|LR~VG9ZD$y38X3S1U8BcFv0VQ-|whU+*cDm;NmmTC=TNVj;8(^B?PY?Mdl3QpxCeLC&KHCaKdbT zT&g9vd(eABQ_{22T+%gw{4rr9)%L?#o|{%CEii!e$GgAKpL$<%wZp;8bLBTR6i>J5 z-ceX|r^~23PimS7^A5AQ{Lf>JB%VeEo4;pt<~-wFe~Z726Bu*ZGC#Jpz^Q*!U~x3* zq9IQkG&>))-XhI(Ph{if6t; zaB0HC^NVTp-5-`XmrCisTK9<#nM6%~{;mU4M(@j!;iCYRwEqZnxFq$vrxEOvrSBvE zH2!$JVfNSBa~*k{$8bY)VoK!w3lF!Fs9Vtrz+OL$%sNP|p>Yi>LqHt*)>)W(w|O6_ zDm}Ai%dRvtIo72CfqnA1Rkwahq;73-%p^~^B(EIlzoSG6teXXwfZ_LfVa>(sqR~JH2oaUMJK`h?FcF#J*Jvl^nmnu zAS+XMYK$BKDDwVhO#lk}pCM)f#TS!1ip@p?H7}_*M!T&Jgn$%1kr?*yw9xb4WPvN%w2xovk+Cc%Rv9NBYEFju(AEFUi5dJYsa<9*rvYDh0fK4 z_?j@2+Rol#<r6ffCCyCimCQ zw@Di-X|-suP=vpO^juN5Y5F`sN>YieKFT-3+RSx})(z8%Rhs~}r?XSm+S6)aw-EQg z%9)0^org;y;st2});K?0E+)n1G@+Fsj)kNZ3Og+$&T+SFnBY zdUw94Sip3i)Yl2Ro$Z94I59BtHmUHi&i>wX`Tb~R*46b=C}JdlI)tb^R;Jcuu?!R4 z-OL?bv*!!ElnJsIelB}vV#)q1qHjrVmgsXS6$J0Im!JAG z?bYiZFcSG{6_qnH@%NcSun^~B7>dj5%1uMng$dvj*Qdp6fcZIbF7E^{F?-g2Ha zgo*}MeLd(mR8TUaGbmRK^L&}JBYqBfbK*X%3Bc|5^=A=cb)QupJy3PSCcmD^a;z1% z1u?pnu9!?Bo>1=UPUK|1?w5$7XFNx#9sB*k%81)NvTA%I_xpZDuDy>&AV1|%%n-G82v&1khx39YI*!;B#X1w%8 zKde?Ez&4w@%x4CX&30>3GN;_|27`*Gn{hc_x3q5a!|Y$30YlKPVSG?6vp!vQV(;y& zXr^Yt7-&&v{n>y7K!_zw_JuH<5GSpAq+itA496w!Im}9|cdh++A8$v8V`p|$nGx+N zN`!J$A0Na;kT=yQXpYOZ)JkHfUGHpQ|I$GoY$yA;(qt6V(7}fku~ke=^}i)u$xL^9G-qQA$V$NG1}hiX&rziJDF*LYUUDq-BK(Jf(4 z&cIMr4ZB@nB6;mg+r0@_g70gi88np8w$|a=XD>B*EGcR+1zF{oY2cU!ACDQ+<(=Pt zoAK(*==C+RJid4E7#kqf^p0znhp%*K4}@G1H+Bu1lD8i+iC^AEr<&Y*DT#S71Qf5< z9gBB7VrKp8ZV;Bu3FdVRc~FMYx^3j1o@bUFUAV&hz1>DCwjbl=x17yW6>Faivsl0@ zA74mW)S&Bf?Q(}noTtqYvF@>+7qZVDALceD=bxI!hJW<2$jbYcKO_MVdCS5@apX&9 zh6L@^JUdHMJ3V|2{r>%yOB1(0ZwqBM`EBo}x24%yTGj2&GoothdTodu8;xali|4|0 zw;L0yWpAodKLC;KLfJ?^(83d8+=V=!b01GRrS%2QA_1dE?M9!OkhIXZ@m?>CSe)fG zN?UpM)3Au^`C-N_ge2jK!5B>dcsvWElAJt0YVk^lm;yPbH2%(Y;0u$Kqx8(Qw>VOR zCq4KS>=lg25%DY^71P%YhBq`MWmsec8k9SKRk2x>P9*x5h4CA3Jepja@n62SW690F zU(i=3F49z=z9)mGIpY5PHZzdA%wxG-5*VZ(u;+j>|9a%(p8U1?v)zCL^7;#5XN0Dg zh6K5)a;ikX8k5^HtKY$!PG)JMWr?st4+sZSf+UTu5Enl(yIGn(Dc!Lbm*7bMa@q}$(mTwc!9zI!*@Ne zSAqHk;)ZIwKJE{^W~Qy@kBJ+tIIl)5G>V^lHVgs}cJ}wK-I>iP*Ke?@b1Br{?fgu_ ztvTsDtG|&hYsa*=fEVm8yn%xU#q>iQ#tyu1r7r9RoMqZA*^RjW&6Ssb*u`Am-ZBib zihmHqemoU%Mji)|PG6mppni~=FB6$JUbXRU&B|^yv@i))JN@~~=KK%1)4w9!Tjq5Iy0YDUc zW#e!HAh>_*D`WPGLxJ-^-(VjJ*gZfZ(S~ANBT}+}yB-0p;ZrinG+g0z1eQg%eMV-nljEOvwsBk`U508y+`L04E&ulOi;h+=^0`icrOd4FFJ1x0?@U30$W89&QxGt zWK5*jXZ4ETSbgBtiy^g5x#wZ~fTrStBZZ_GF~NV`h|E3WA^vAoWJ!6Pv}ewL2COzI zayqS{*ly2~)W^aY3%ahlK*IY=8{(s@cXHD71i^j|0CvWXj^jvZ@bqNGVm%!;Jeo^V zvH0)e@r#1%pMET$c+cuu!fxPR611_MeUWd9=0#RjA}+wuqr(fQ78BK^?-5}{k}JcQ zBPs~e7dgkY8rg5e1w>|rA~XK|lVPr4%Zt<$Pv1L@N~O$+x6u|95ripc=7OjrgkmdM zw3>9pFQ|qrjAOy;jP#3Eh~wwpYojF#P$5>HWCYIO6<& zAcL!Fk~EtqNj!oI@UHAR=a7MhBz_xx*r-OCH*a>QzJmouf9@&&Yf z=^8=xUsyfUh&5moUogkhb31VtEFOW=UV*D#c)T1bO!*wv=dUt5D9{kN_hB`!?q(1L zRWgP!F#Mcn^B_AJK|7~dMC#fJY@ zwc64Sk^1za;5as3Kd9QXA=|XaK_|;z*74Qgisdc}(MFwFEGeDYN}=6zl*!<8p3L<-Cn)A?}5pzOwx&%2^t97Z#znr&BsPT zWICM$;)`g}d=cYCH^IvLM#kQJbA&wOB<*igbzUyb&ErD#O>b-0wa$g_>5{vwuTh}9 z2_NF$1N6yfIPe!7vZ&W)@cPN&Mswt(XT&=`CQUm%y8vZ6=PBpJ$7j)O91NUW@wVP~ zRb>&xDMH!jXOZ0|B*w)b-I{07ayD)QA+6!4FKJ<8)H}4iwXmr<%rM5$)D>6hT}*## zjg3)!%4aD%!9~6<#Ao|Jn>@4SWB2m`O-T_5t*z6^N9+wZ!89wkgz&{+AUJXU+rNUkYx?K;19$d z^vNrguoTnYDtjYbAK`1#4sS|lqsih2PLV?v~m|uc5Cw&5cV0??@mw=Gn*9Y*}G{I~Q zQENqdviXyapYzxFC^?TeUQcA1GCQie2?dlOyfKxh&b<<7@0CQT6w~iDkqBGG0j?m z*CoyCI3Ed2yp&SU0pj1_lH1R4qf3pq1#dK<8rml?&##D^ zDU{T#L6yo3`GkG&V*c;?(H%iwR-dzG(|O+{x=fu6HVOy?dG+5)d(zOLAH31p zXK9i(w0tA%JJYq3Vx}6N)BBThmf7vPcnz#t^(V~Ti`BSiG28U+nqeQxNkhxjwGhwW z(5{fK897z{<<-X8s-!FXzg8*3JCE2n^Xyp}wgjU`j=T@}W}8H`gv56@zQe7GaE1#!9+AJOyJhZ(#hXO`EEOupH1?^_W^%kbO2_Z zgn=+-vINyq-I4Q8BtyA?R5N%9Ge8)-9j!q&VK7rrx+FHmJCJU~$}; z3Z;~m&eR(ZGbH8^$*hOaJ3W<+?K5@0;xmLr)?VXT(Psz=GtPK|8hRNV=J(8V;h=-zWYd?$nM>(pR%Og z>v1+j;_c`fB;ui!57%jKY(MQ&*~l*qEDsz3BQ3-Q6o_7U-qWUewFLI+-21^*!LL4* zJ0{Kr>pY_v_-ixw6wRI68#rI8^gmFNw9~X)fb+9E%tNR8rWnwFvCj)*eCmozo8ryh zvpoABsDTXi?A8;{6fIRY%Z-EAUs!*-Z#2s2xtp3AXGxVfJ9~%vee+bdYiv28ON8BH zP~jD8ZZ6BuoUsfHob=kZ-j>K}>+!UI?r@w&GR71fwgEZGhIwPlG zhe)Vt*s>mMG^F$|#b*W)YH+)$fY-4O#Vx<$%>!BuT~qRyxf!)iV7N5X-z8oS_QKx+ zDRW1H<*@$tYLtRPO};})ajG_(oF8^XY}#*=JE^SvPfc2%F z>8ht?|(4>A~(tHHs_uIwLwW%J}G5 zp}&ou{l4F&#GC5Pa`mhJhV8FHepPkb^Uo~UPStw*y8`unIRlX;tc#7E%x3y`izW73 zPBNlCLz|7^Y;4lMRSjXkczqDp$y>#YQJTIJDR0*|-VeyjRPKM7&R_r5wlMkepxi|H z1hqSpxox;_1O2jbJzZ>f)E#i;Si1pPrH?N1xfCT|>-bxBENYNKajj8OSh~ZM0v(U7F( zRPl~oAZQC4Q~CwMeG< z^auYTvp);smUSOuKJ5GgFSQ@n<;e*waGcstJOZjdH&m24`FuhECtk5j`~N^@z?+IE zVYrPQMf++V`gYWm6vB^rZXg3#PP3x273#hp%s-&|*NaXija;CE+b8{#9(Q1J>PFW# zNZH#QkvOx1U);Azaae=L#JBl2+w#e3@5L1BIO_2)uD(XTjEsw9C2_e~_t!DPec9%*wo2xy>Q=aMNpSsU`*A+cp73C7IEt>st2pkomiAWyTr<2d8_h+kf zB)>xIa{dPzn?V=gnR;_4l58pk3|k?GJ$QP_B8NqRu35hjzY!;QYyRw-$1@i-)s`}E zlXX6PITn2j1s{fu($!MjT<^^Jv;h^D&_CEvjjVei5!pUoe?aX`%>ErdBgd+<{z%B_ zLE$6nTckThg-h9gm{vUDy|uIU)Kg1ByjRi3?`sB0JDEqKtCoKM+`RKYTfLKO^8V{^ zYII6H6hf^pudvJ_XotM@=rh3>E3Z_qVEMUUF@9kIfpRfty2E1Bn5T8&-C|AgA_i&bNE}>HA&+d*fhpoCc#}-A_Wj zY|o$IR1N`om~?&y=kC-wyryASS-Y;c9s zzbx_c59Q}~jJ^0K;&-D{;&Zq{Sw6*x65?b*A*O~mMklz0_xaPP(j%m|p*C0Pw*Hhc zc{F?ob)cK}GkL8BBxS@|R`?!VocX9My9>k?<(R3b4(6Qzb*qM&W@5mL2$R8Ls?A2u z1EgI;`89_qZkZT8g~1X|sx00y3U!nsTk}SyKZr}!t^1_(r>4SN1jq=PR#7S{lB>`U zk~Zn*TwBWQxE9l|9L29ak*5bZWI)(_B{TIAHqhVmk~^9HqG7b4Kx%}#j4t987}NqT z*oL)_kqvI28~chKywx#uBlDFR+yydBJrD|b7LtWdz~^HyV1Gs4F|rsW5H|8o!jT}L z*~nK}S{R?pS3#!z#4Ln6;`+93Hx^0uK-)f>eUzsB>H~2nvc|Fna(DBxr<&=fz}(Nt zpI4=k?smq7M#(jj{{tN)Id~lFKTCgvTKfK*b;gC5jwIr*5^DwX){6EYfjwJnFzHdD zyf)0*8xqGFW{vWv@Lyl%o0x~LznHqtRvSq_;YoHbeaY$uZ5T}i{*s=IyIpDza0dxt z@;(*2o-Z@EeeIzs^I4a_<~}DA&jl&UWQ`+cA+%`4g&@Z+?=_|*OY2X+0oC@Od=qQf z!yFH9mDy|B{yd-`_BW2iytB?~dsn4)vI?n;?9EkAOpi5X>nEK}qN6`TVGp_v-f7Gmsi7EP5w zx#pi63I2{1@1^{!>KeI9r&Khd;i)zEtj#wKP>-{aFl(o?FLsY$LOJQ*j$<2quDTXq@2d01 zRFDRW>RsLzyIW2K8QTp}ru;yAo}BD$ir?VP6q>6(Acz{9UGfptDB^UaZ^~>%AKDd% zI->mE{@Vm^*5?fOA%R_=|JGk-%w6d2tYK>M{jN`J*I1@3$4TtC&UlhQkcT0zDE=OH zq9OdwZ^@VY4m=L=Y@Fr-Q)gi4AR{WlJ;1rJ+ZPdB1qg! z;o|MZp(7%fa~z3PCwCTO$SGARBe<3ckkcW+zU(0Z?BMCcWaPUqQ)GL_+~RlpWlBj- z-h$`R!s;4|425c2(2xtDOXy^@K-YKI2D97{kMd;svo`*+kCuZFb+4C`PdxET2f49C z)(X1`Aj{q21ZsQ%{vnhMW=hitVS!mx_la56J=Z9F*X>SB6Zjg~#h}q^t(_9)bNMJ} zvY#88={dyj)VNpI|`z(Ux8#?M)3h2Gbrjo@=hAJJR*0B@8`yz!#k1G)5N zCA9f?-@!od@W6f1h~pi-DX&C2llfM7#b<%)n`aiYK0>Eog}&&ty&aE{5Z^LSxE6|d zcO`KoO}f4duLiIUYw}%{ClWPAngrO|&B+FF>Cy*_n$EAPu{YtK52F)%`!w&Jf#x(%rE!RX4H+|IqhZ3L9zL>U75<(Ug2J zB}X<8?{P7cwNZ@%NQ_K@jj?4!N)=YTGDgvwKjFkE^GGerDR5UEq+$xh4lpKFabG21 zvb1<36+R%YlngXquJucUfCW+fcL-qdS}ubb+0s5S8FPsuzb{_$pyEc=HDDA2V52lPOZE7+UL|k(XP$jPz`lQ5I-MW$O z{i*bUP0e@jr)miQJa4`*T&hftB>Jk)!RAD$B1;(gr%TICB&x z6uQjS*~sR|07zPo>xEa!bd}x`?BJbn zNVYpEZ(HS>;=oQ20VV(9wq)Xbb|A91&TfKWb86Hy`5waI#h`)5} zd{tq(n`{HGW+Le$c(!+LVtVE!oB33#=$tU?*|XO3)>c}#>*H>vgb2B_Xpf13%<~pnD@Qe(P0oxuLWOI7aHI>5v{&Bq1(}aU)12Pv2+K>v z{YuIf6Q%u3_#i3Fu{|A-(HhQ$dFO2YIln#|b=_0=QzS05+@&>>S;pQ9&$EikO{re8 zvAn!l@g+-l%I8kxsG|DiaN(6^$hYws#MV#WC;XnVg>(W2hOECMDv!gFvHVu$ zbsZKvxf1XTmhWMr^N3)GjSLX3@Gm_27+M+WkV)2x95HlpZV5emE}f5m`eQdHqU zw9Fui^fc;pTZfXwO$E9b?^Y=G2ZP{CdHu>N*i@!fbp}2LG5!We{)U2j1So)#lPw=f zh5^K@2BP4<=cPMtpr4Vn#%fvbF>LPui=QB$m?~K*1sISpf(&6jnN+D+AoOujfwbzS zDS*_>U!%&+)RNIxr-2L>zt+;E23|;Egcm83&mGAI8Xw$9%^%n1&jJ;wx{b2U2PkoK zQW^Sa&*XMa6vU*$N-2Qv`(4!E53XfhvzA9fEYg;5qbrC8!L?QRn4X)=!@|{>P?})4 z=ZyzxRk)I)x*HF%FRLVyav&_6R#3~Dwgvcjx3j_zn{V8ixdt4&Uv?JFJu(l)fJaxP z(rP>P+MtTRtAC^`Os?VKVdCpN0YyPkFIDB)FcW7A)sR^)bL49MJxP@S#;~c4+5%+j zLCyPkd1{;M_CX=|hL3x*E)lK~J6SylY0}l)beSM@6`qP7FDqFeS#LVtdB>7Wv*$}#Jo<;-z*E$gsc=q+?{4Bz#gPUs7wiYpL~>vdu_ADfePx}tHjAa z!inw=HNDs_<9npaJWJ| zW~Dr#Ar|>y*C)LC{H+GCU`o955#Hi`#X~wJ~J=V;l(7rUjxX=KJJD zy}{dA58Xe*Hc|I?Hpro~>1u`2G$#69%5L>ZA64!HA5LkhNx}%PyjIu8#Bwm;fHsuy$BC`4;$9S?3}HDOMN+NY_7HO8oksYkitjLC9F=ZEqc@^!MM0Y)5s;9gx_r zaynhpC>=>GqX`jwjS^=zdn|grTN4R#$JB=6K`PvG6tum)Ayk>%8YtLIjtQnmvYn-m zV~a&g;>mmoZ-(y0bfE$^IfAVwyql%egR_h8$nb6|&2vUA8bMVz$JfYn(Y4L}|NaNM zPPF<6Xsn>I2So3+@Q|Ke^Oz^~847|iM)iX^8(3J7`QRM0x;&2$0y^BH6(n;>Qc&b|O}iQaTU1eLQ6!ft_>X$;S3yOu_BD z14?baoR$h637)FJBs)Er=9`|pXkfaroqJpNf1tuQ(vZYEokkbQt}3)d%vFBUvxp^V z!%w8TNgz{#_h;n|$+k{=kK=WE_!EclNPBTZqX;okws*&sFJ6`I{tq-;oFS&RhP0-U z-A7QtbVu11P02!#)X*9+)ii6{Nl;l~Ls>evI`#bP{P9^FN)QZMM9LcSXEp3SP&+PP zG`l!1d;1o7?>59*b*uOg25RUK&uR}BBbzHB&wM>)QsfQ-38KZ}{USmC4u2vHd>vvK zAN{xLG$AhO@R_Wl5D+#BMBSl`hFu?J8&_u>b!P%?#0(ZEBf@F5bL|J3mTxu;+7ep> zvVC4rdmavci8*)a(BKL2JFb(8`$mKUp1knuz@SN&7h@zUByl8cnZeqmf5dCo@P8l) zVS-S|uPT^v(zYR_ia6I1g4fp+(K)Rv`=b&Ylew?w@eZGcXc)Z~1hv2i)VDu#n~~>^ z8%p+yygM%|xNpB6r@-HMB)_+C=|SYWDs2do0!uyu8@R(oJF}ua~O1y-+7{%Amh2aBIz8bzmafVx?tLltvY%!@>dp-u3%JSzo z&@c=|jp!=U5C&?w5)VOmim7meUTt!g`^=|XKob4;WqU4!fuo53`?$vVynn2-ku%5m zYY%ibw~D80qGs=rbrU71?eWm~FzJ`G5kk{1kDH%54F#*b5+m9oh?Ns+Vi7Y%O}v)e zo!vaU-f;qS=yACkbcdRhf4HuLZ!%u1bElR6!TnI=36w6fTMm75_^x{=C(!^4eS^%k z;<1?$y_9*md51F0aqI>Hbn1OGVhK2IME`i}A;997kR#amu|A+J?2<;q@~wSjw^64{ zn(TMnB_YN>;PPXyR$KV;lZugW;nn3|8mHd4eDRwJxV7H&MAEKW5&dY9>4XGpB=^Za zq}#{o0xjtHbU!ULP(vQ9?Eh*8`bW|EAk|M5HZu8A~}oqDC? z3pEtinF5acduA^Z%Nm8WV`(=u1ljOJcu`3+{;gr`y{~rnT=ujry+VT z2z~_?7De#xjl`J(bvULz4sn=#vf*1+8A3wW5qCO?Bb`jPU8mm@RpA7T?;evuy*GWu<2bPKVqbbMfMg{@22 zhX(^|u|RAsY9t%vCu9k#?0aAPSoI2PqC+a_oPjSH~wY|H##T;z!`L_FfX7c)PlJz2A0GyUOa5xMU>ky@YQs9GW$*41Q zT}-^zD=wUJosYViwNCqF-LfdCccAhEr(c1TU}&{{LC(zhA^hr$w3E8gzBsGU>)afe z*sm;^VcjC%;LzlGtZl(WZF$4Qw6qpD>$NuhqE2h9ql3-6HR0)XL!A8YTkRk5TUq{% zGpY;0kHFPuYr*As>NhV^mmXM1NKvJOy?!&lkENQ>!9}R--v8CrYUwv8`ReFb&$Z?3w$I73Iv^0hIywJ zIQDNTucUtDp=VmFrNw(3|FC3JRQ~i>jv`mNpd~=NIVk>}m7~IpKlg~us0k1PO$I?6 z9yaeK--x!H{|}Tc5lHbj-IuH!KPkuh(AaUJREY69@3<40$*d3D)7c0gkPWi=R>B-tI;j%%nitqm-#u?B*@5|p?EOS_Hv_>8_h)eUeuV- zHDb7o1=KIyRW;k(lz__y_pN|F=k(%tHd-jSRw^EZcKs;?y2C9`33vnGJBs~nW`kpjzZGx5(N*+|UQ$kCpX)bz zHaJ+2VaaaEhd1nnZ*Xmn5mz~pjT$Rg7pKDG;|oA-?u^+HK5l34FZ6LYUCe>wwR(eD z80r)tp&$4pj*ko`U;0&Xf-mWU_C0G#bY4WWUuQEJc=+*7DtW~U*%L;M)!bevEl~)k zmV!IzzF9V^IaU+bSgqOg@PSpq0-<0oC*ZGc?b52zuQ~3b+d&mBLn##$M;@!8l0`(e z+%@5tsG5o((cUxNRO~}z-Ls8Oy+@-V#NM&FZGf_Gt{OtV=)O$959NbQ>2cts@eN8FFQ9Yv?eV#=csQXZ4Hh!Sd@x%6bK2Os5 z1kKUaw3OD`-UAN|5Gi;R{rb3jWz<*4!23VYl-6zHh_Qgyt4La9B;Eruue>5sEaQr& z>ovVG#$dPrsY2}CLyLwfOz{kV!E2?xnxke}w)wJIu6>|4OVL_dov8BY!*BY9AcREh4Qu927PfhK2w<;cSNe+Pc~Kn@4=C_u5Zm;C|-rb zWVQ`AVp3z+o(1w`h>bpm!IUpdnX~rrS}-PCWAd0(2F_7EnA+6p2@rlNxU%t!@ri*z zaIO1Frc9fF(vDVjo71&uQ=0-&7sxbURFxP2H!p7IyxC{@isi@ z_;cgitq5QzO{|Y?M*1Hm8(L{)CT(QvR(fAsW1DqZJaB37nHGQ*I+2FSG&mH0TWLvp zO6ax$dqhcS{Um&HsH?m9`It6}Pl*LuEx;Pqc~Bx54| z^yo%&kcOA9p~XnUo%CUfYn~!Asuq}@R;P6LoO?N~HCYGb!yEl@ejy9`U*}&{tIC1J zGTS3Y_bLT_tM7q;u|5wCeyXv59iUiJ*aGu7z*{IPy4EO76Xb0yZ!bLQf8DQ5v^`_e zwj=q+h*#d)i;d?Z@FdFbU7e|;|V3uopa=ipGU zlhf>VT+^u~fgKmJ=Z>bu)s%*G3hgunw@)#K{0~$*+JRZo45#@7>cU3djG2fj%t}ZN z8FvE7YKiTV*xCza)US_CT)C}~*aS?}1^zd6b##C<-+qM6><}T(M;iUhlkFpE4XQw6 zOnNd=Fhf|!)hBhImFLDX218q7qhJs}={UL|b3T&|OblY z$Q~Z2Z$C*AAl{#jxE{1-O9;n8c(*L%Ar4=DRl=I0>C7`OEzk``NkKC%%zWii>z-U9 zof=>|qXq3Q62tUgx!>A7k<2Gme$c%^$7oOCa^?6V@Ov@F#dOg6S*_VAIW8g(h);kO za1%>6e6JN428uo&xy_zCo~(XcR5QN1h!=wp(~m%KOMsL0`^#l ztHi>oK#1K9Ghj)@ocWec@|+$JI^63Kj=G+IM?2VeJIvy zGWp`~w{IaH;FtCrTP48(-(FEEXfF06YN>oNWw6)hHl<noG33zOjCD6 zE6%YU)YNE+lZferbc8akL2BPsP$|WfSr^f*8})*QQbct-)a0ZjJ1XB~8NoD>yRDxc zWg0k$x;QB|PI$G};Ts{2LnXYCoEjYQ3?}>S9mv7j*ZYCG`Gl$!9q}&Ivt8YzQO(RL z%jyGTc^MGnW|Rbv{TR58<=Ml6PhBE!TKL}c)JynZ<3CxqJW~QZiLSWWq>Y>djdrNW z?9;S6HZO5Wio7_V_)#y9)hd@~KY7dV1`W@Aa2+x^;2-~VGWoI68*dYMOh=b6!d-Cf zgW103%gbh|tKdi+|L_t`3COa52*DfA`knjj4pF#Un_U&Ir)DsI`BC25y0SSdw^h7> z9u*sLb9ts0v?$x|g8sXGUS4vn@+5$<>}ErSxpm#P-1`=}y{ai}V>AcJlNF$nS#ZKzglYwuBG^k++z^g5BsGAF z$G2dLC5phrt&je$?o2Kli2mPQ-3ge#r5HYo1X1#d2W?MeO$(8yHe~BvTny_s05ull zLgi2ozX$sFs#z7rwe*$0fIvza9!IWNZz7uq5LDtaMsaJWFx;7@8L=bQT@>1 z@;R&DGpGj7aOn?OlWzmu36)j7${VWAjr04`#Q+*RKRgL!4#@f7Wl- zPaQ$K)#R}f->$kZi5-%1ezY)mno?>l4?_%yWmrjY%bW+gvwH5G6wOuGX6oV_=&(Kcb5)OX3_{WXbNFm zaroJ?O3o288y(x~k$1&pcz?z3(S?=kNN$x;FR(T^FYw01$kN)KrlUi<>fe|^^@kZ^pTJ#=jLuXcC~IM<)4 z%hK^fi=+c@R>3ao_=3ek=lz7oj1e0DJO_jm-y6`YtC4@jEdenmi&ykfkeboZS~sa4 zKj{l4A6zte@$@jzJlP$_-ykx29_x1Qwfh2Mw+!syIwRRu5sL`r4>bP-o5tWw`ThDu zQH2XSZ?a9txJuH=kKQRzfoA7(*xRnb@8Pip=D=p!Y0jZYO>=&LgM^p9hiXlauZ*Uw zM0s;s7}<8S2L+z1Glvc?S%jDBu=G}X8CTHBS5x!hjez?5z+>}7UE#z4S+eO19p>xo z70LgBTyo}Pq!wg4Gvp$3N`YVi`3*4b{%u%>T6x|0vaI}VN-{z1tMSb6*iA8oiW0xj z*;;M6srz>leHp&*jrgK|Z+yyC^CYGt9j(E*_ZV6dOYM~7tek%TnD zxMS+sKTkl{Ux01SPK%-YHo;|tm-sj9g_0X!7N;gBP|oSsEB_IycQ?0NpuNbtw1dU9 zkK6JqGBxOIk(P0{!qT)!9qPdk<}X4e7c=C@_hP+z9vU@h!W)6@?q<9L*0Fm5837kA z_D?(Hj5QE@W#d%;a3%r3RoQ22-YDj#>zeTDP*@1w1qSG%@ej!ePpNjEM~?PFV*ud`@+k*ntZLN0 z$}1<%ih*$rQD`K#qq;xq-=uo22&qQ;6#+`OFikS}sUWYa2i;@QszI!J5m zC8w>LVH5Bx`yzVJ75ln^)l_2Nin=p_le2>NqZ)xPKoJ9ssW2n@y@yX%d)$65=YjFq zit+1Dy^DGB_f1R4Paf`&XzVa-cTWwFy_|}NIP14IkfXd8qXeeFU>*$&v={x6)3joF z6)p_eCdh1Mpv6!d1CD`R!!?Bc&=ognx=9jEFhSOgv^FBP0^@UN2l}37Cc5Mh#H8?| z+L0Ro70sxZ{+53NXhTw8kAdkw&^6;8M4oLjZICHBmP-e32b4{EybpF2iobw-P!Zp} z71YhCS^i0>D`-oDrLeq{g68w{Mor1g6C2o-6%4@i$@ijYZ17e#c$uHhFK3lJaQ-OW z<}0`IO+TLQ$rjj4?|YB~RZAgyRS31AxX*-(7u6baPRgJSqorIF&Fe@)24n&Q(vS=Aa$V~Dpi zCT7<4j5z!0pRL`8gbu%JTJ3~J+VEeOTfOmjwu5w@W#_&{)O|Wh-rFK~1tSfqiJ6b2 zU3k*;c!d@W;&F&VAowi!3r^i3Za4+%U0IRIjz>)IFX+v2^8MxD?>cQE92sT zALNs{?vH2!`8xXJj1tdSRa5J@@LaV)bx;AL5bL8HpTTS7@K)HgHwrHTnEoPt#Py*I zRO{dv1kdi|Fi*|G6!rqgdZOoB{H6Wc?d*$0OoKpp~=0z|5S0;uwTVE zRGnI(kUTTPnP)dZ#q{ytw=ku9DHZb%b4o4yeB6n~y#Z%b-yx69+$7x&+`iS+XmH=> zi7GK+U-I``=;6Ptbr+bv$RLOVi-Z z^uNm~3s&MdS)aFSdA|>uyyZATb`;LfDg^Lp*u{1FPA*X?HGcmJ{V|-VhuHQXiUaAK z)Z6-*xX#%fQX_Bx_!28s41(5j=Kg7{=TJDC)|OXe$&JJLeMe{mU%Ap9fOOuBKK`t9 zrQHR_3m3On&{+3vxoCiDRSiw6T)L5VT<0eb^(Ylj$v!)QVXglFS)KN1QnPMUe1P@y zN1UDea|^=oe`z+dTHD&RMEZ?n<`+m>chlJ< z&gmodYAaE{fo+vdE3y2X~F9QX;&{h=lU;zz}8xxNFC3d-a0MpZbGZ0b zpv3gAo-qtU4mI`92PVBaoLb}l=q^jc%2H~GYjvcp#{P*?(&eNxS+^6UroNq?S#$d@ zPY z{Th!L$C3S8a3_V1mhPJUMvD}b*rcL~Rl==w;e7Fu8&X`>i@G~=dl{{blQno@F}oA5 zJGUZe5$*~?ZHJiI1E9y$?BaznL4 zQ??=O+-8pK#!eZ+6fyOP9l4eZsaoDz6;qtfyR{fVUxTnW+gk#CO!mvA@zm&Z8J;S? zcUX2eV-Q^PG{%B|xjxAERW>CooV1GnxW?Y1$e4rsHwnqDV7osm`g%|7eW3{;$q3%P zd*W=h<@e@3Q+Z~-NI~;})NuA!-Ou7fKw(APl@ji%WcXXJpYumg#d_1pzY$X~g4|91 z+u73B%l`b(B*N)({Kutc7D})T=ScM*$ny@#@w-ocoA}_@4Tqj`t>X1z!+C8ibxX(5 zxyx^$fn@y6xVL-AjcbVB?Ay@1y_p%;X89$Big+f1+|{MQklw(0KP8e53ol-scEzV} zhf)1`br|(YMe(Ny?3UJo+w!%+0+PkBM?vV+gKYX@{4Dyz@B0nkPu5*}VOM34{u9`n zpW|tg<_c)JH>A^6MdmMudJ1xjKawhERK*8tQBfILqYF7Yv+lNRPlxZe&RKn=+sta# z>9?614ysBHmvZ=a(roqlr1E`>2)N+IU**68K-d~n5xm`l@_Yp+k%^&S`s1YjAul8;LLA=xd9=OYhDy=a{URbc;=xq z=VWoFnGg=88MYpqZV~Vi)TI7r>9@&qie*HKdZO3aC=7cax9^5 z+5W=Fg6F-OWv)VU8@?KNuoba!!)-a9!E31b#V0LJyiPPR=iM@o=KEANHc^f2Du3|c z5@1ZPc9ZZBFS-u%poS}s9oEFD%|Exj%j;T7Nt>jH2;e@ui?ZA$(66Cs396X7^tDlH zXUuNKLzH`J-OEam7x9AZ9DOfUEl`4q20l4uLbAd#7$e-r##xCrmi_&oM(exRY_!G!3iB_qBrWb+SZN9> zZnH7Nbu-l;2Li`TYmivD*A)vPu#%XlCc5VZgV3v3j!K2dT~$5(tfPCa)A8Wun}?@n zV%mdC2s94%zHM)0e{q3jLcVjG}?OZMU=F+jAvLTtN+Yjpdq` zp4d~&vBt{D74cPcq@Q9X20pkWXzjMEH6KiX0!;%_Z ziA1J;3Ji#QwmH@$1K!S~WOC!_TF^Ku@Kw7g;1dszc@XGRc*ep<4#@((ws|edm(qwG zpti=F#VgD&MZBP>=56<>;FvfBZ_vk#MpsZ0>9rHSP3C(vt9E9pZ28^LVq2*t-P!Z2 zKXhD+V|-Mo) zn~V`Jh=b%i{M)aGVokCw({dH~43g<`q15+v)nY=+&kUPq^Joj#mZX2sryJSMN|_m| zC5Mc4Q4!lx#=5cI`$yWdfDVQZOl!D9Jq!W{oIBUPuddEJW8{Vj*bYWIORXEA%Z!oM zKyT;4G7FKyX7{1(!D1SN?>*L4&hBNl9I5u|N`FE~Z@+hyJDn`uRFHa|_;y6Vg85fp zWyRNu16P8k&jWucgTy_a-;;Y8A0~p+74O!SFf{W{2LS~7Ft_+$o*Nf361S@#zY)0A z=0zLr_~IbzGeYjd@FuF-)!pMU*@sTei6p-q*|Nd6q#Mn6- zGR_tR6@puYG?Pv(s&G1Itx)B*h?k7+EpPGWrRkFF7f8anNmt z?Li<&^J*evZES?M#H=<^e8!gf-vwy2+$Ww#yVL1>k^h07I;<>`K?0~;h~%|C(rHv` zZzSlytAszVb)(Y4Qb;fEr?M`5kk+{yul(J_!2;CoV@5&Ao1X!~Tdv~9h-t31t&gD? z)`XJ%%bA}H?&aPPI%}0#1a$dCSeg&+J7o6Q@yZIg6LUAKuwVpw>#;I!x@YuN&IyTu zj-yF@fwK#&O}^>Hx%$dZZpn14>@(7+Z)7G*%jS!Gu=M=sAP$~q$jxq3@@)tYz5-X? zWGw-g#z3OndX|$-ZH6jbN-alr`$nl!TnluVt~x4Vk)Jwp>dm4BmdoMl7{7?FOxN+# zfbu^Yhj%9rg)tQcK1Z>uG;nb=i4hF!e0qL5k{ro*jfGshsJMk?J3PD+#CyDJ#V6!1 zDV@a+FZ}rrbj+D>IiYT6gBS#0!7Wdt!SQNJ_?hDe=+-FxE8cXbM6bRSCM8sF(-3s- zKhU~&HaRj1A<%-Q`dBkiD>(f&*vz~+Bj6sR3_GQ!1HWnk=>T4EGSedezkV?fG16vd zh1VMGUJ*(97AKZpK@QKcpSq3R@s3vt_{ryHg4%MI#5n2$-zxIU@z-h% znDc`;fKg{>pJ5gv>+wLvR{x{g#0AfZqE`m)6PU_h`>6&`d|dIOSV;b0ZNz;l_50t@ zvZ!7ZUKAP2O;1a>gE^1LOAEPdJ<7oD;M4uW5MgzBcxT|z62m5Iz_qc;oo%;u)sA;9 zVMhGnv$TdXyHDvSnZs7@E;35IrVDvZhJUG*zX73l>UWq1`bSMr;@fNmJP+wD%f$dN ztmne!bbIW;wTSsG4nJrhvl_)4gEHB9dUfjM;s2Wg*&;@5H5;)uc^f%QqXdH=`!f9% z2hVRyALi`^3~bW4WLzzbp6 zYsbkMv{{*kIY_Oj#c>^cu#SPQy)u>R1Pa@nQ_`#N7XQAXe188_TsV1Xj&j{-ZSc+u zd3{#2b6hxD#?zw@Qf%*ejW4#W!<kU zaX%`vk>n(kO>d}9{AW<&<=A^F=x&a2f{K^PQp2`c|FHWW1jbxY;i#Nd z>`LJN_;J1^k~kg}4097vTy`$(t?bUt&hx{*ibY6Z&O4xs@|&}9HP>m@%LLYk(>}s2 zVD24v++0|FKX@LO9{1k&AN_3<$k_lcdE+&#OyN1x_GktIyT#U#Q-w>o()Yj8Y?_pm zlaw+-lLn$wt#V{ce02EYzLKSfQ*C*V7W$&ukj@p6ND8=Up?_Lmz5H#1ic;jf<%=3g z&mT5J{1VyES+Rf8lkd}chB$|witGOJlfTx8r1RhDw2@9S{nVvYR#$K-d79y#E4dm_ z*Yc5EkTFmx?14C73qeefDDeQ-gaKcz^=rDuYaMdmWkzW^Gu7;28MlyUqdn-hv7bG! z^6UWm7gfBbln2jEOyI37KB3PTY8+=E5K%ccU=CE}Ay6^2IY<;SkWC!TS{&?0Gne|F5)v zeuq+7+pj_ciON17*PeW5J}>T{H01v(`6hMA2A2H=x_vWdqfS?;_EOt8FzzuQPn>5S zM&rIV3fR>x^|u$i>_L!vPS}CG36=}MK6c$5`)4&0>8LM7ZT|EH!LH;JEae$ZkiLS= zw&wNF_Im;Y+_+J>%THy_C8f@38LyHIu32{o-n!fT<&Oq`iX>P3i{AI8ij?T=(Z!?n zj9qjMRR=npQ$8B54fq8;nv{Xm)k6foRSABrJ19iFQ6PBPD|F$*KdOJ=gR4BKKXeTV z$c1!!4|FAGa@Je#ab%cS{0^JHdCf?LDLzI zCW4t-9&dmb(VOLYSIYPYmoTYto9pTH@jhRL<}O;AD1HMZs*Qj3Z%VaG7eDTdmF2nVZ8*JsTEgzu zl|pg*#WA%4-|V*0LDZEoo(%`bAIi5&%6GHPLaE^|q#H2HD`*e7!jXvJhsd!%C)3(V zcgXzc)9zZu)*@;NOvDt#P56!RJCiMU*7pNEW~6y~E57qDyU0JGeQOm>=KAh_NeCtA zCz=^S3uh!2!38$Jl>XJ4_1ThY$8HiU1vD(nSqD0(?Zv10??hXJQG78J!Qvhdh8c%A zXv-gz(rHkA*5J`NaCsFz8$%caiX)Psf$dF~MBF z6IZuiTFS=SF6u#3OX^1K`E{a30 zLKlJ*-nRJRK2!&5uOU&V_-8ujylgW9&jpU8tCPr2Dr_xJMq|bXJTW^x0LfunH*e1+ z*GIxl5cHyms&^Ihlt-ghYHqbX=u5R_mf;*WHo)>jJAJz?T4QU4Ir~e+2n2uEs|S4G zu^wi1O`Hh(E!l1&RUk-|wniUnW24In5X^}>K6o?88a_o7?MD zXS=YsznvvU!O7*T-rG?uL7@lPApB79rc@k~sg0#BGZnW=53uP|m22ORdS4b+zf#-k zWflUl?~lO#KAQv87a}1Kp|@+1%3<2Zs{%?5lG(M4=~)A&Ey44LCQKk%H=AWJ|NhoBBSACddaLyr z`qnPz)Zj0J@6Nbc6l3Or%#*77JpI>yWe`x<-e}AuaHFY0_UgdJu`mAvZP2xr;3-!3 ze9sqtu8KG=*c^*IM{EYE4d;e{$T`XdfHtL9ip^iS9m)hpZeC^Sz!8%K{(G_z`sII| z_JPdrwA_RyBsYZ=r%lhRAL{?3;1zMApM-D|-c7aK!5+0kY3wRvVDzj`*?iOP_p-j| zGdb;Y^(KTKf4+)8xH3gMAmcdEeUMNR7d~Y}L9$Ga2X;6t!8%VJeSND^OWiK}1*H)H zhZOE8vjeu?t}NhEO&BD~2lY|@oJ5Ib&e+cXu2Quq)EHpjO$1uV-J5Ax4f73;iS<&;i4(ZZyyvZn8wjC$RGr7gNuZfldP4 z&*fP$uX=48;_S89#n$c%{Dq|vU-i8)BM5J9H;d)8K!X5$^|390$h|-9-MyYx>Opl5 z1GkS%wrJ$PUF7THfW8_9_Sxi7Nf+pvK0ByW1YZj;QlZ)k(AiNIB;W|D(Xj*#+fcdD zyEYk@RmdSO`yc4Vd>K7Nt>2U5rSRU_La?co+>(u_mRFCk(zM!X$OZ;N^}?k%qHhrL5) z;C8BQFrm+N@^w%M`97sDk| z_#kY3K*-G1k(<`jCg&=MU^|1LC5>=y|611%r}`*2Uq*lw0w-!|{00#xn-E`^sM;OK z3p?bnB99Obd#4(uaRd!Zz+c%AE7k5pVL*HB;a0OOwO-U5;E|6PQz;!^>fFBD*0%aP zUj4$eU4>4GFw5@w5FB-!F<*4&VQ!7?!^I%Uhs}GZ+SQ*On0{lYFrS^R_ZI6uA)$|M z$*)5~)fnI^6Q^9Ln^}m>m)R3TCTR!zUY?#l!4Vk&%g2vIC3Hv0SJE*f^b3!1D$_o9 zFxHX;80H^ow|ooJx)q!D(ACiDAdx$ze>0vdYzVlUh{9LO#Teex4?^xh+u@Lnf5FMN z#h<$LGkmyw6c-b-R?@6F=M`#;zB(Zdx8V$_n;2}qrKrffW{EI3$Lb>54*0h|#jvJE z(|4ny5DzdtBfbq+jLY5B+zI?unFy9sboZ=*{CXJH0o#rOZRId*g?IqDd}J)Cg8Yq19DHAh*N|_1oH9GiRKtt`foJ6|6P?z z8J4FFtM@B$t6N04)p^_gGVOkjOIjHS6in2Ghx68a0TTmd;%k|!d#-Ufcyfj&numZ0 zusWYN6g%?vu>!28PqKEabh-6xUQ(9~2(H~YQ8n7otX|@g@2pGQH*4R#jath459Izh zg7+*l`z96=V{eti?V@JTsL1ISEzYYdm{bxJ3cX_$L#h_mzWZ%|$Q^b(X*A*n+x}KS zq<@?JY`0Lwby{vQ0HQ-G@2@Q-=+OHw$cG=STA(4K(w-EKGrCH&FMV?`JI`mO*v#-z za32ntMp?YBz5>cM^t}Ikqt#Sz{B)Rg+_h%NyFLOLDUIsRE+E2;jtd`0IL3VcrTE7K zfG9*xZ4mNt8An2dM6rO*JT@b#sA?-k)wd+1cl8_iS~Ocr5$8!YiN z=U>XMne5?%A>FF_$x=H84L8mnM*8&^?AOXC?9HaNZ$6S!t$E#8nh&Hi{yV z!U$|nWjyw*{KKM5S4KBCd{3 zW#Q{6ycktXR95gt1)0Cy zrs_s(mi0On?ktbUH`8W!$sKE^MgIqK%knV7O!xlU$RWoYnPa~=dk-^|y1Q?^I3}Ec zGYTT5do_F&I23+1#0nA8{-G{_h*UcFk#RvcT!c{*#`cm7hkcnQ|pH zg*|UdIf9k6?DsKV?ScP$K_A*Ox)3^zEr!(Gn@v&#CP$q51c%L0N0dc^q5fX|teFF< zAwc@ltQuGb)gq=7B!=#VV-~yWMnbN8{L;R&Nou03$Z#ZPqTLQnUS=HOBJ}M9?8}Ni zaf+cdM_lR&5Bv`OFJurC3sp(;vUBQvwKQax^o9QVotL!yx43jFe?uqDV4uL9)dXjuMOR53deL!?;?if*0U1fs`>#&l*bND) z-GCbbDq{*jV=iM$OhdYTdQ}6hi5tr9G!PR450>oZ0E(lV6wN{z?$?#}?#r=Z*_Q)% zNlDC}=|ye{T7@4kmgAZIWJ{@bw}X*c96Tk*6DJ+3b<>|*fHmJP4g6DdRKA7Ji?4=p zw-S|(v;ccl_M5bXW)7BKJaCzX)<+!>*Jwy8`!+I|oNg(azx&shi62YQo^JGu8g?pM zH`#+Q1r&bcT1jnl46-vP;!^SldP>D&b5Tm{x5CF)lAo9C9`G{D=;V8@`ILc(6nL3+ zE~#sT2blT@NlCtH17*$0wM23M8QGKkx;O`0X4+JEqLHH93aroAfXmp8UrG&QVT5xU za$SX_u2{OOKA7V;v?0sKf8BtD->ccihf!9P<9m;}tYx|um^rE^+}60ti!zR%vN7~7 z7A9cWLw=PT1dEkQ$1lf$5E7)}wp+wj5*M5gxKK;2p|AZVv9x@BF(r3%lm&MFNj^=I zkZq@XJ@ZX{@~i738Unx(AA`1Cw(DH2GU`EI^Y<`qz*;9RNqUwk`VOKorQ zL4*$8fGJIodRngvJN;`nksKO-oez@ZvA||cEKpN{i(%g8uytBHc0uV#>^6TNz?yu1 zyDmhQ__>=bJgKSINUN_m*ijw27HBrP%0l8JsN(Ie0-YhZ+f++4pb?`XhwB*4GXkxv z>(PqI>`%gjKD7xp;e-pbeO(*zbgXO?*RSkzvzjr9eYxBKg`$Wn>R}JNH8W8<&hzW=syrqbJN$-Vjc3AaZn~%CJKHEvX82%m zc^*G@y%zgt&RNq~w^*e0zBrgrvU~Gq9SCfVE`;V`a}G_f6bT#=w4XIfp!i9X4|J?N zLd&UBbqXNeh8skRhPL|2gQC_(k9+JX+bN@%-jL?{H8MFYy6->GT<_>6vb$AkV*ZoX2m5hW?0jeTn_>GKa^T{-#t^EsvU2P19Jpy^M3cj&_=(k{$&9is__+oGQsC z2rEOnadQnYBIbAV@?!cTRJ1o?P|E*6{i8qs`VL7(rkbU*Y}=C8*eQ3Oc5GJwPjAJQ z5y5h@1qv&Jiy))wD*v*TpzjATk`goR-CPJdci_qhm#6Q%#|%olKJ4!at}KhS7ixChBi;CgrB zJZr<)I3+u8@zlL{PliJAongCF(m7gI~^r3gK+?Y=kOLq4x<_`KK$9&?m&C7H<&-u9i-ug<23N!pYQHu zhR~}>{}V3-Ix4p%0(&bS`4dI+*UwVBTUE$=lHiij;auy``b=F?B^*fKEw(KO0oi0* zy58ic!|X~?q%&n89#wsDB8lh6{Tu3{GV!8)CqKvve0Y=T(ob`}G}xIz`Gu5W05sD! zgNtX%_Di2js_KtrN*B=(C%wyf(ZcVj-$${QuE_uSfY3J)T(7_oO}yv&RR!m&dO+-| zfmD){d0^}v(Ci>E{ggtnk-*dNTNspHGwZR1fPWL_0nL+H2AwhIaV1{rmyG%+o?~kp zZ7sxXK`1L}4qfBXZ5n0GAI#SIFrHFfUx%U^6uek5fo1^Y;bMePE8tP~*bMp}4dc0a zrL0boa$&PFr8k&+5_hl@iULq1YI2f~cAmH7JZnuUZfH!|&M;GSOw^M2-Pb6X2vbUq zVnhyOG4UdMc(O<9ZOjO^khUKjdbx0QV8$55^zpyatwtV$sHImt@>Z}q^au^ zn&<87e13YCO9Ox&0BWI+kn+US z0%nur;MTvO;NTz8IsZ%1?AuV?rJqUr-citFki=zsOvOEBg~|2aslBtE^zt^H$YzrM zn5pON%4eDpQL~9O-WoNgy168;D4PBQeor!gHJ7Kk3zn{Pz#j zBmZ<9y!V2-ufVDCn&0u))!0_>+Inf73H_7W1+`UN=70R0IiDDQ@Zi5MhY*+*0FDu zPzblc^u@G+_h=HtTr#{`sM|MrU0>S=ZF~W{J3+}2^!~P^&nIi>shn`EP0N`;1}eqF zgaR|)y7g3%qNi>S&xT{eXH{KDC`|aeV^nTk?HEBg-@M1!QSO8Itzk5vh$Zi;>J0=RQnQ`D zrA%4wvoqDfU&mN=T^d&B0Xvc75~V7SnL2)IT+h@=^MtI#zoz;PEbY?k9oS>!!?&6z z&sfJxEsyl-VB#DLD>9O`)xxP`-CGXNDh8i>#!K4-1YGIEL6xyXe!#~1ub;6=#C)>N zzwEQ=dw?y^?;tH-Q?MS&B&&TKsn;Qzf~tJMJ;tgQ1N?E=p8eGW!*-d8+>tIos8Sx+oS1v*>=5 zo;!Kfj2G`rv@t;5OLLR#KCoUMla>e&&O9qGFz)f%xc?=P(6*A1QrBd-k~X)H%3mga zrC5s?u4u`3E1I(a)uoO z6wMkh`oQ3x=)-IF&vXhwCS=36K|REefw=ztaky0Z*JB1C4Xk~a^opS zl^Fa!E|yr`LXM%bnN*>oOZx$!O%^%>X4-hi1sIp975OcU?l7+%_6x=bz8IY^#`WVJ zuJj~H3HjQ7>;HjRownliyPB##dgOxEnku-)c-cb}mR`J%&Uv*p!P{5}R@f{Qmd$*^ z<1D?Br2%Za=JF_wXI|6fX{g}G&tr?*q1V)S_mB(-zE#Ph^kOZ&+}FZQng4-G>g!Dq z&fIGtB_D-rKd1@E#I`efyd|2O1S0+B^gr2}A{c?AYd;u$>9Vue6HN#b7tWqnfqz3= z*wTdUo*R+R(WP8iUERV{0rmv8HX;9f+#bH-t?L<>UBH=ids2wXH|Lvhe-&*gN}8FU z;XD#YQX;;1_Osb6x9EV4Tggi|K|=*2T3n{t{%-3mpE>lslk3l8AnogGm()=WO8 z6$zT}JV^dQy07Iq#CbW21H6#2fchvE&kH7gRO5C@{97kK16^!WnOYbA9i_)E>Qop& zsmYg+&`=fL3p-j32MoptE;t<~t|DBG>+hJeWpLGXNluj7Iy%NG8gUxm2Tm-jD4L5DHyf`)hlmex#N}_)9{A*cFX!1ONj8H|%H>G(;2 zVhzz))@|0+tvz{4E+NJK-(tFN4y-bWLKsvSTy#y9k)F<9UbkkvX6VhwGS@tFTN~-m z-<7hrPL7~*Hi#8um1;CUfb0@rQQ%k92XbWjTX6q@NH;vLc+7_-$a^EbIC@{#WT^KM z6RG45CyQ@*{wZcob0}U5ILR!yDEK#u4kXW<@Y;uF{;#!t4zcfVsGq9+nxCzbb=KyGOG>~$H`()xT?pmK#ZS2WG@(hH z1NP3V&7B5v0I6Kyu?WTuHmKtu)oS0*t)RvTs?%3G+gTwT5!xE;O5&jz=q^Y{XARUz^s zO9j}mE#4YgfrDT}<@2f(@47g5J<{Ky#8C7?pF%kuebl*9>^CIaUiDs-;*}E9txDV+ zoq4c9ph?)^jq~Eq%Cm8({z~(OUnQTSAom99hxUgMFNvmq{ob71IOX5eTp)U*SDS2N z3yXK_IA7g_6)*OAFrMm6i4eusd6SFdYgUZp_9kQBuuzNNo!d;#{F$KF<XES(LlwP*oa}(IPJ!$U|V2Y&^^#KW! zQzF~NaUG;lR?q$sGVebWun5Q;IHLvHa?V#Qs}8~^OXWY0L$->ak&(H59$7%8`YgC z5nth7*DvtFox*hv)Vo3eoJ1I7{a~*3*#qGX4@!UcWr+g@*T$4xP~zP_#GE; zg(dN>c!SwC6@eLN7lc8#t6eu3mWpY+-fI=_aUL<8xce#$2$~he}gMxiayaI zfVeQBELXOxwil%^R2Rz%Q~0pyWd7|AoX@&#H|*571}Rpj$w;QqbMGDH^@mw8AxuX; z75%71bl(EF3%!to3&NVAK2+i#cR89*?=&!^X}3NXWofbt7r+1Xn$`oF4YUoWwPb*F zpTLB7!!C9*`3r2gqgX47bUJmW+jL(id#BQvZO0KicJhWT)!})7BptKDhTVzrMsmaT z@k#m4##V(R`T72jb*JC>yV+HtMlv>EHpQVQ-p0!`^gis23gM2OZ6@5sM{F9!EOcip z$FO^&K)N^k@-3INkTqwoD#d^3>HY`O4h>Oz@`Tmr&RlFLlxZK0(H@Y4s5;ioSa@g|H8n@GJUGa9%xN?;u7Yvb+5BeAR9fzLfdDz&z4zyG{na;!%Q0(lov z?N-FL-P={;#A>CiN%Bs(1$AGR^a76X8T+>rzv~2BTayWuk3x6~F%#evGU50|Q*2IT zO`Ml5W+wmpW4a&ZDnE)XS%1&+>K&ydP#R7_Tl#J&ISR8}FyxWCR_mp@N)C<8F>HN7 zuusD;?HgKCNef!3yPF!EH1-MhcVDRAXly@Flnc_u184Dd8H{j@6v1Ckio(CkqB&C8 zqh^KHh^O@NwUwo0V@BzVOd)xB2_xoms)Lxd9iAV$6@wfQC*bVd`5*vffrnnYx3F=z z31PNE|K?^41E*L;EQ0F-j=WOB*Y#J>;v$O3r(%1Z{Qg2r&+30{=S0{5in%4S!%FS8 zrBc@>Jvn|zBZ*Hw=QaDipfgjOlp5HwiEfF|D7B53~WaJK;3#{c8!+~b-2-#w=OO2$F=rARlJn*`%s#*S`}=>7`*Cl(@AvzCUDxaNe1S_B93M>R zTE;!K*o@Q8P_X;Vq^2u;P>A^F3I~;QFwq$Ajf+G=?kXLZ3b3adi)PA)?Lp&U7pQ>F znK+UeLA~}b;4~wxbg`$*)^_=a)y{R13hB%w76Ol-gP#0GV}|#vw!oDe0|KsJW7_E~ zcuc_sAjWTZmE;HAFi_&lL_)4uH(z5FU3FWv$a{F>J+_-IR;VeS{<{IkB^hD1B+pKF z{36q){k3M{VO;%Y#S~UU5)U__M!?>867?2Y-MRBv$mt|l@B0zoGDLoFnJdmtCWtBE z+sR6%$lBlLfkugOsE5g0As+G@BACFM><6^qT5*Tle7Eq*+rx8mbCKV>YnD>dWvIke zT~CRz&ZR7MCiN@l$?Y8Pui)HS-&D%dy#2nhI(09UQV;9l=sG*&*SL_KZ(whtWvui| z{65WemH5Sd{oQpS7hQv1&2{C>Y{l$l*p>aMh!I8aTPtU#DLtyE6YQ-exL_8O(bsMv zjBBcvA#xoo|A8KRa!vjE>zl7fcnSScegmqCTFM<3?I;LwCe6QJ>&@qA_;fYqY;68R zocfz30n7b`vqy;U!{+Cu>Y|8NS7FS17{|toOE399pU>Cd+L6tevyA-bgB3&pgEg|K zh?zBYh>P!cq5H<%ug>!KLBE;jL5t*7)P0-A#7aPU%(+@0$md_2b6QeU`3Lqx3go5&J{THWt$ed6>cw2Xmjab7`=|Bm4$Ri_6n z?Q+Z&pQjHct~GpMOR6!b9mp^IlH<~V5=7NlytB#Qh7oIjXm*os7UlufO_Ltf0=><4 z^>`-mg=;e#-KD#V7uu)$Iyu#O5!|-8_M3!cHn@#?RrOHQqng&{B;M+0*^nD-48I3J z$Lfdwa2GZ#6|tNrO=p_OUg|CK0BMdjR=gU1)m3&FKPzRnfz$UllqvW%&U0`QJ{SMm z_Bg-FciYSjK?zfU0*k)$x|uj3n=mPX^SAP>$k!V%`JxM`R=-Jt;5e^jmqkLeQXa0gov zJEP^veDlu$weO{m4#huZeq1^@>8|<@giA?HNb;HPkb%gO(~cC+KT@ooHRMP0T`b;j zc|Z07n)AjT3!^g3o?X*h9q8G-h;<5@Kx%Go?W3HMzx{s5KiUd#g{z{>6kH;Jc@T#f zg}v=a)8wQy>y2;zrxMS6qVo0u>rCB|Epfak%cLiij+f<0$JY;Q)HyEnSJzWMDX`2J zgv57yzHrHUX1;+(anM!(Y59alWBp>Qp_Kcl%|C zLTuM__=_60WXys7!uqtaX2l(kKmhwxh1En(4!ei;pH@T2Ig6xyV>X{81} z=eMxMGDTu)tie8z;%oiBe{#cr1(m!@mL<24VBcYMNTE#>Tf3LH$3Y_FWVNWo@Q=j+ zMMuGv)In{bQe3C99AHcL>brbdP=#R92Ynmd6iwxHzgIfjuI(k>oHaN1v^P*8;QXO8 z@>SS9<(Jh!g`tPmjcb5}{|BO7lRSb5koSJN-C||4nbYUF)$^G*O;J7l)WsiO&O(%M0~ zGf{I#8=)d-)-ZZZBXAhzj$FC%F3lgp*eHJILCc9~FuQsU)@V-i45|9n+tPe>War^IusG!vvs9`9jR(d_Yngmq$xd zFC$J{cO+Sa~Y zK_|PaTHeQ%+c~?pX6&ebG`)yuDr51P+>G%Nj8QB`^_e&xTI<)6rJz1?%?x$>FW`n* zwHcv`5Rbd^1^;yQrl)RCNe<11-434qcN9%r>q7E|ONJ=nx1|mL_l9M7e+Q4hhW}C z1817#(}88y?V)n*fYw)UpNVyyz5y(~jng^F^&U6%e%&j#Y9ifNL{AmOC^6EhtoMo1 zsi;UiQ=gJhQOw}Erk!+a>_Me#gj;!d7)Su5*k>!3Z?0?JXBbEmqy}ewtRtfd^3|ga zRG*l&i#!R&9TmNJAmBg1seeGb7kFg<{_ios?LRZIb6Zw;N`$A_?5;)@_%m`GGCmRY z*@jidux2!z@RD8=V6&xw^Lc4E{`fyo3*gc)mIHw0`8$2|#oUa&v?CPuP5B}RxHa>j7B)ou#J6-2Hk_b;5rw$9Y`>S9i^QY z6i$RZ#+UiechKU|;diXxDSR3BRmBQf*xvpWB=|O>xu)weEELtPff2W(+&j;tz@##M zwob?3q?y-m=WhzFS$JLBI<|_>lfa^!O`=)xCfu$aD43T@3Z*2s(MH#rJA4sep}U7p8%5 zSpxU8Ar=~TFOYS_HHECk4`wEHtBuOiw(S8?Vk3w}`AKdaE=52Rz`H~rT~sTLI{13& zpV=>h2CXZB9kT z(OIn=7OjOFn)0qZ2>uFZq*LR8k*DrdBhDMFqKMo}ro6Y{62oY5O_SL!=vHM)oeF(dl={W`y z&LJnKFA>V|D;32^Pu+k_zeZHBT08hMVH0ChHjepaFhs4`ahV7eZ~5EahR;s`(4gGb zBU0$ns#fht!w-W=Pk&vqP|qujI|QFR$+4VrYUyAar!x_ZGJBlW`u8cyS2d)E)*Kv@ z$5+)-Sdz543zh41{a=FY_9ozfdm^4H7w>h&9e3+r^Sk~8)RKY3K?#;}$fz+{91TYg98#7i?8;?ZDo)^3kbKpjdh(2|?$ddT|S2v;-P zFl9fq=8~$UEeb zk3gl&0PTaaVfl|;w~MXVp{afPXVUYA6;!}-P`{YKV(mOYOzCCWHvI{H zu|KF(Gd2o)1h%13ECNC=vOa)V-R$0s>*78L)$h=T9TyEK%H+MRiBw&>NG zFv48=iRa=EEvbLeilLSu4lld34Z@mu(dxQho*9>bciBuMy7tnGjP z1{L;1EoCjT`CWkE2exSl+jj@@rBnd-hETrGz+MGcXPqvE!>gM@hAsCc)y9CV4h;j8 z2C7%Q)?ih=K)?q!IL`qpvN{1>s{C_B#W?eAyIss(RrGC9Z?*V`uift=Cjkza7Xy@H z@gJyeg|Eox{CM06sryxC_!@eeApV(SKgsPQB;|k2X$5jT{)EY1g-k=pRYfn}$1n11 z9v2R5KHUN?4h2bhJ#Qs>MTD3aJ)37^(?6KV#V_=Dcxy>xl&3cxH96v*KD;Q@>x69h z^@ptRT{%uQI4b`6>)H!EhVGZ&vf8ZzL=oAeit}#`((|@GbJ1PNVMhv<_vexdotbmr z&Wwl_mdSb6%J=;&y)rx3zi`ibruq>#dI#3MdyzE?@XJypmb5R?hkuz_-(Ec*zuC_C z{_3IkfP4eKGur+F(Qki&Y~IuQGFiU=BF<_~i*_g}J4^oJxkMc;;NPc#7nX4d1wWqq z92VFoXabGApTlyCrX*7|$AlxlCk~`C-Zi+KW-O>k$Ze~sn7Md_79sDJGeef9lNubn zr|kJASB3gstqg41M-l`Ljtxc+)y$1+Lk%{5{CWd$f>iAPS`|vAR0z?$zVJ2_P`lcn z*VlU`L2Czkhdo?0TZynZ7oulNkn{5Zf}U4Z)#Uct8-3#EKj0t6S7}D~bZ+Uf>Yc~u zwo3xT8Y(fb_!7+*Vs%X!s_Rp=(-1`)rHm9JCRGtSqo=s|-i?xdb=%#mjCs}J4O~sH zrTkT@X$M7Ea zWtLc(*8{%wy=bjRh6K!25)`IN>zP%XxTR+H(P=X;&9{UqzdHsN<&G zFDr5)N0_=Q(d<$yS$2m(PofV%VT#q#^c}i=I4eY3KNOz)EL7+3In(iJ`U=V=W@L5O zDM}`Tfk(*Bk^Bt=deMAHq@rbXn!dHAil%6@2eG}-@oFvic{?yFF!uVr?hFtoFR5^* zb@Yq;^4*2&nC51s|3D>A-#6{|p`Jf}TM$0D4f~->VcY$FoJyUwXU}|6m$A5Y8i4la zNoRB!ZgjfoJ55&u8&_{3Y#W-8v+;n?GMy`{BLnU4cWD?>BO>&a)ho+9-$p^?(4N^c zG6B>o;+ghP|O*Xe~$d{ zA%(yWA zKS?D?Iis=~JAzO?i$b9^16#V8r7|%eq#YK z+%NmvwX@FaZFMmf+bHGHi5F?F|7)0Cn4;a9@ZN;6`SCv2jj%&O+oMr3_DsW_+n(z@ zmcn~WPVxs+~ed)MGAkM7P}{Raxblme%Ko@ws4RER3@a2i-Zrw341Y_M0PvS4vX z8&hnl$B%Qn{RQjZs#P51ir^qS%32ioGOpw z82-GV;>W)9Li%+(+K)Et{NecSR)e9U^uft;OJhr-bCl~x)z>=9uUqfs+)H_VNp)J{ ze;ULHj2OZI*n8}iaUO?N{Erj*eBj>U5l#-ud0#gtt@W-Qpoj9oTHvM0o~o&{A-AEv+m4MO&z<>^FY7 zspFXQ`~&z__iv)jX3X>p^(FB%e$wf52}R_*O`Q+1*ykN0LyjnQgE6-U%3R74i}`%F za!+V#8n#h{C9WhKjYwKyo5^wxEUspk)F#c5ASQVy(o|e0ouc>bEx(#DkbxKXPY3*+D}c~;=6-ip<4s$6Z*A!EX8DGeO3+2 z9*r-~#dJ6p&Cd_cId`6hZvX6U&&<3=5D8FCDZOJ^{N`+M7< zys&4`vvn_#OlQt7Cmr*uTLF%?T!c-PJv2FhGXEdwIzmm^RA#=IK1-Q|>nQm}6V!K& zcLkSk;OT=)p*N=gkiZCCD7Z+U$LeS-kOyBVABChriKZWQ5=ogyFG;Jz9(CiCfDGS8 z7Vd4ft{=Sz0^;bYTcb1yYpT<05DKU8gRxzxbEs~wrRCea7)j3FjDI+B;e;KLaoRB!6eD=e zWJopd!@EF^eD5p1eNr-0pE}HM{u;ffuO3nL8gOx5QN4^1b2quN?i>2C`Gal{Ezi#& z>1O)DIU2EX4zI7XGxUTMV(|1}W`6zlZlaBc%8@@Y_c*!QF{O8|s9-&d=?=?fwe2qR zyFBX`?!VzX^a3Hg2swH7EhNLPL> zH*K8}Oqk~T7w1o38CU&d7h~lrevv4mskago;pYPRbHvHIrAC_CU0&N-!zc4>{NlH( zO)`c62lLR@-V^7UfP13TYc2AJt3O>GrFyRU3nn5>seQ!ccZ>DM+uTI9#bZ8;ykZYR zhnoI(U9X@Bsj(TlR1{rB$0$%g!-I;+i)UUTJm>iz`4ic@Nyf{aR~~c*`l(?0Yp;%f zoB*NLijk2acgeosp0j730c{GWnX&#A3%+Kp&T~##+ax}k+3S&JB0}+bhbQM}msBYB zunDvR&i55Rev!nu%^(IwMr#SaohODCyA{`G-B5rOv5OxKyCby++;S@ zetpSgwx{Qw^2Q=}h#|cAr|{WksqF~Ak;#`#zo7wb`BSYWEWvnawX#E_)alkyGgEhTcYqR3$|&{6Fm=@NK7x96 z8&>5bmJ!bCRuQ&mqG{KNUfSliYvpbtpybURWK2Y~X!Bw;s!PL|d9g~>cRXpC<4d<{ zo=hyy>C2O|O?xd0rGoGIgib|+0KS8q*pi*w<%9N2irXi$1%8NiS4y7iNa6kR$#n5p zj<5ZlW~gx5@wX>{`1oSrfa*_SBH`w7-AE>0;Vo8n-WYoB-<;l={j>pSp8W29Lbc%;wIKCZ**QZ>Q!YtlrNpaNR021!mG5EM1KLvp48( z6t4iy8|65o=Gkcx%VLf%A0GeOnSVv;BVYFyi|t%0f(nH^SZt5($rBp$(_1{tbG2q< zC9^dkb9pbt)B?~buQQehbJN@GXJ+Ji(TB~XN@W|pH&vgqFDE-_BU8xZHj@-tyoatW zks9kukT}x|oL>*9)#aErNl~p2iYrjt8)&e|9a3kVqTWJIz&J3_5Cd``z;z%lM)^rc z(;75n7{iR;thKduMqp97Rvt4fGD-P1fIjjiECIzEVnX634D^^JC?};>JPT36;I<1V z{Ni=$qAc4R-v^}>%0kjyyTw}2`ReS5ilZnpoFq-aCdxy?sG^u;f>?}4gVjTYR^*wh zfYb3N$)fr*iQT4oYRibe-|O~*2L|gwBZLsO za1mKfU<4gWlf~}j&*js~OY^i6OgIs1eadZ3P=!xlm1(ga72#IUZ{n#Kc7S+sNaR0+ z#b9nt)XGK(mRa@l975Vur}L>lA?)hcLukmf_{B)-b+Y7gMWVTO9QijE?&U@tmY@7t zmtpcJs$U>r`w7%#kr&YhXdbql%gL6#i>x6I^7HEyjkmYtu=3Q&N_}6|JDg5Zjv5<6 z4?tKBngcL}J#Wq(HLLKQuVW0RVADC(0JjQM$ohbDPWEl$J++XY;oAbjwbVrrr(3kr zF&JS)2069Mxv_cAJl{ynh6oFT)c;8(dL4NXy}oy{BiIL?D)+}0G^F>&7uc!NpG;zZ zYz_%I`uDjYhk>U>9QdS74M0vj*yWfdr)X6@v)BC(bZO_yzb4CltQ@LC??-C1T^8t+ zmCDff(&ao)s$FmJD^;9S8tebE#}k{49AnBO@6{Z9?R)`Iupu39^Dis$k5I?RnSm|> z&HexC$y_&S*WXL@bUK;LodL`ZnKKmxKfW`;Kh)4@>L6QOWa4wC&P2cfV934M8{e)~ zp913*u=E0|#Bp-f68b6v+WSW!{;^meUuPUelVF<-ev4SKm8dAV_Mxu8^Vgx$XOYZFmn2j?=r6gIp1SNKrbG}zZB&^@5V5wg6G z9tNB;Q*2OhA#ef^>2dgBOd% z;vVHHo1H!hW0Z+A4|gTrSWF4V43U)U{UPe5(hD*8Ajy0fyJ`C z*W>Cd!2|hC`SICZi?y)cZKRTFi_7TB_;rV%eSdCS?SXSj_2!Wy@gpEf+$OGlr@1em z99ciQp>rw2l`H6;T3`!06}nWa{BG_z3=lf<)(zWHG|Az`RveH%uUBWQg9pqaE<`l0 z`8_|+^~RH@m#)5`<)IO#L4iP}-cSh)Yrkp`(EEUry9s+CGwopf8)kaioS4;|2i5eU zQ}$|`ho2bc+JT}zjml8oNz6uMABB^#uiI8g3Q21XZ#{9E@K()auRm4D>M#yQBhVos z4cug-qa^o94n$xjkKxipNE%q9C%jkYFj%Uf{iG#+s0VbwS zFyk{!{Z^OeKV?3}gW}&6hAmc3uhq(mE;tI7`K+7%#xfU4`>4hX_>=_(UbnE&(SPwj z{U|zH{yz|)=W`|cCBj{Wi}d?4LjsV(G`uE|o2_}LST`&rs#M48-w`3aAm%cio; zNCVVDgcaFe`trzg_d?^NSV>wEPjk?(Sw;uX`RN90qV%=}(Tm^`_5q0lFpdFIl|H8Rx zRoC+9RA}}y2Nq|?31a;)2-(qo3@PUJ=PGe0CLiEqX178c2c3T7c*iEg#rJ%39EGz; z&)!fOs+MvAUzQ9}9vkl;D=D97^USwrnmzUARBTWXud(*S7J9>hU zFGIGizmD+zgI-9id^K}#l^kK@-h5*(lkS?{j_^E-{#;@X z<5{jcH*#9}yi7=h+)?aWy|zO}^^ige1@jJ9lqeFj7@iP05;Xk4c3Y*7syIpU2trAJ z^gQHfYI5Zso^cG9Oy#sB*9`&5aCy^!-7p>_@Gs4_`zz%d&LfPsxowo+F!w@=&U}8o z4D7W;A4YtJJdJlQiS{5=v3IGTLeP&kT7K6*Xjx4<&~aN?k@=pQ%3&E?RqWwxIj znlI=@fqzsoJpbpu0cA!mE`r ztUoYt>NEa!ViKDCMK)i8^g!uD^hn^oTyEnOM1J2T;R!FXmaOGq3Hr-?20v@UbZJ1e z4Z&4^0qK;L9XzdNe;CUlsD)_~76zE_z{EZnx@wvX{+s$NzBW2SaM&^kBhtU5Nao*-<# z_y6g#xh_*#qhaw;&z$aEWpNRBcO{}5ormP1_NZS1G?cWOn>s!^vJ>V}YT_{uOxz+1Vi%nJnTB%Mlz2BI=H=Bu)cP=23tAu% zE9m@lrweP;Vm)At4pCS(df~HcZy^&@ z{X-XJ@cbj{6_BEf@cn)a9CYUN|QAx9|5s>P))4_%`N}+6dSS|AMOv zD>&WfE3y?=vH~n-E-Uf=x+|MA{R628lw1K6b=*#NKcp_Ip)5p<Qcpm4}wF)DsB8w(D9$oDHQ`DkIfoC z1+Wyu?zaf<`!?pq=GOf9;NLs_PCW#>lL%}_g47Cv+U1AuhRb1^o`q*SG!*VK3SH38 zPPRj1_()TDy=~&dJi6Z-4vpYxU#8T9>Ieg}BVJ8eyESjN;qvDx!ePRW33{Z9LKiqT zAaGka^1-ctpe_oivNUszyn9^v(3`le?`r}~N8i_;=#FJntj?hDrn0t$Zh3A*-fU90|{_DoH94&p9f3n^tFW_NU$@6&W1OR+@x$b$DyE5l_dL*t! zi}UAbZGRwb`jFz_dd~D})7B&bI}^Xu`L1396?>`{9gY!)bNvT$nA&O>HY}6p#%Mgx zLj)GazR1t8G0U(yhJQ zwX_LgPn;Z%t9z4B-#hP7fI}pmz?fX((`Wq4COuGYigMB)Y4U0Nx2z5NPkQunuBIV{ z)jR2c*r;a^`f|A5Y1GsI+-l-*&OJ7GE#8ST%=eoJ6 za}U1L<=lNf#z{G#&cZm_&53W0Fys!vFJS1wbc*iDg+9!+OV848&=R;(PZRvJ^G!aU zzVownm+P#4x7r9wUc4As(HruC4ySpY@pKkfW_9JXu1cXhgynnLTU~w|Kfunq(RKd) zJOz1m06?q<6Jb5GFBsmyOLYCe3OF?O>r;M3a~|=cxqgY{@h6OoJjZMdjUSI<~nJ z+@4|=T088OEii>+5PnhBlMu$(1n?K}tg{kF*<^mAR+o)scXIrk5sabT1K;LT;uibW zD%;k>z!sMBM;F2U>I)2GC{!AeU^$KvKL-$Q&M0Q9`Xj1h!?YA+HE!Uc?u67T3jZ+a z`eZV#hy@L?sUH>%6Qr_J9+96Beeu`N3sY!w!B!+psL?r4T4d>!{%T%K>Wc4M8Cqttz;be_{5S z4Fd9D0&x7dw6?>fLJfAL?q7HpY5uR>TmM}Ca*fQmnk$Xonp&Bx{^%&j#Nsy=NNy0U zA05*OxrE_H6cS#RbbExT6#s?^4)7NzUWx>_4O-|ZoM4=bz~k0;Vai!xwOc%! zx&|OSpEyM`{sKW)L1cY&S_H0&Wq`1@HGHNSB6*&v3MbWd!|H`f72c`pRv`Aytlz>PRG#J+p^yWu>>^cUv7|tLIw0|kmqy4BBf!O~*19b{*+Bszebx zRAD0o-Cgy2n$J$fbDr^1Y%3#c`=i?DDXDMJ-7oHfolEH`8iLpvv{zlGhACL9 z$_Sc!7pk*5N`WF|Z$=h%9lJV)P#q?+kda^DuX+78`E4zQ;jY*9hF}k#&?bAPpL9bh z>{>kmLx4K&KTuzOOqM(8ZEIUIC}1V7V3GL9i*r8pJdJcl;A|4fJNJCUUL{CVQ_X`*&)Dq%PGUUSfw}* z&MGOAILuBdQ)}Q;Q+4U&h=x$heY&@egeI@`?P@Gn37F~zKM>5pIp*MKXUwBTE2{eI zuaK|?_U%(*vHofJ^UIH?+S9z{&Q#(%#Sw7Tm@MOng+@Xr6zT+>KQjj4Z#*H8<@3wb zE5OKoqsBP2;O)w+JJ;hMW8WGwj6Cyh6g!!i>K&ASOCB57ZIE%YTt!_sJ5)u=rAJ*8 zc#$>WmX@atz3`zYp$FYhv}$>|l2a9nfc(isGr(&~r6h(S|>Sz=T76>jNt3=6~6If!X#Di!SG zQbto~HVrhF;*_&kH2-El1&NFTjr_y0?jpq^+ReYaNuBjgQJBlW*X?;5aPm-Y1h$uP zyNK+i9W(q!)h7k5T8XrBczTT&l0cO|NPcDcD^G=d#eXs34?B4sANtaRzgL;FzE%B8 zo*CAw>|b4H*3oO>tE=DAnBJp>G1{*8{cUaz^zI5$#NR)AiGza3J?8bf!g?jfM)3D7 zHyAEoDU&G2fAR@K4E2TVJD%~mwH9p#k_-vENfcY@k2hVp&6J%#DGfcQD}ZIrtKD`_ zo(EeH)zRvSBzL??Lc0ow?_g}1l{LWJg6}e>HNx(X|26H&;Ur+1iLitN))*lGwgba| za%vv;cctsAf8R?~dZ2ewm?9y5@rowLrK!-{KSJf}v%kJOdarrp5(mq*zmd(TzT3`7 zd>vFR`;e?cEbNH|OpdIhTMq?vSKvqgEQQ{QqHGQ{e%Lx(s}1vJy#|=*n*;jzY3%2I z{2KJAk5aV6$umN4UZ~8uIxgqGsR>pRyzO}k>Rd~@H7H=_n`P!LewQhM@o{%a4q$&U zEduEkjfmN|;{<4pzcKA+nNQ2nWPw$I9_t1Dqhhr_xty^)-$zR-!UAJC=C6&V?%iqz zf#nL44Ok7JRdN>&H~TIw$K9fh;}gXGH-3Jw9ga&##U)RLyliS}odj#>-&>I@s$(GTUukQK& zX2dNSo^gaQOo#YXJwwi-gbKN-YNXE!%7VFF3tZ8K2GFth7ga@)d3mTCj^s}O9Gjv| z{DBDF83J$w17bZ-49#d`hUjmCz= zYjN@*x}3ttGE3+5}1Uam%pZ@XWp5NY(h} z0mYrFi28jELG|!68wxWC(v#>;s48iaZ;EbL^KNYY(3GL@bi7+N+sKDMNSIAlza@YU zti)MIbU#WVTaZ>ZMk%TjrFpwrh;h>zOkH08&Tk`G_Ihr{s+#_QZ-n-?rKWz?t07ND z+fhp>HnRC6;y`cm#a|g&dAYKe7jD}Qe`K2CHoU>qe$V4#8UHlT0Xi2rU5JolfqnC+ zk(|D?n21|PULy^}tE#yW^yNnce{_32cfZ?^{OFAltJrgoq2`_ELnENjb5aE%DVykm zcZsEnx@`!tvaaJ6bb0>+WgPR&dVvO%GR(?0N4x=f@W2GwoXBlVZX+dqH+28|Z5(1c ze(*8Nh5IyPGHH(EH8k=2YBp$1v|ab8OaaQJE){a)JgbWJ)AO%xrTuxg6GDE-dC*04 zGxeM`ace(u;k~Uq0VA3*pr4;-_Su0DC*f+sOHpQv_!)p2A36LJD!#Od=tTE*v59KRzBiQinX1KbA;+M=vggV=_e(nF7!zXowkLDCjkiNQ}$1{qi7*-lwAFm(Q z-}Q9%yrAX9uP+SwQijfkzLbu&mm>vs8G6O%b9qkv-rRGuzuv_5rMHof{l}iQ&Y1>Y z@`L*F{*|C=;iKh_Df#4R8*mql+33X-MvD9v+jHAAmjr)<8883+JZL6kEZuPwj0SQw zFc7z_%&nnibTpLJqdhwnuaYaR-xR%i^Lf}E?*hSDc30YJSK7bLot|i59_musFGjXN zcG4EL+dd~0`sI7sKFuEDD}*m1tkZrWkN)`DXOh52AIYC8DRvW>%gB*Ge7JVQ3bMOF z!<7HFu1%Y}Ezk1~&6`yX&B<#)FCPHnmgW{-bV|GVnI1xH05Be~#GWaH2-h`FV6Fq9 zd{aV9z<}OE@}>SkP)L0vrn!?TOiKWyLhse?9qO)il+|#a+b&pUD4Iqvxr#7fPJY|2 zRtj(A#t1aFbKCqJox5S(MJngz2w56#O-QS@ZUA8-Gac zyZgTLydwakvRmR^4RyqFv|s;QbbsqX0GQ1D?Y-(NwdsJ}0Xcvp_3!=LYMP4<5rf@F zC4Ee$VZz#`%5*%CVk6{-Pu=SS#ZJro3snYf-#i#!!|8ARhRa$OR4X!>BK{^M)e9UI zel&WjCS$B9$Fx)Y&o?XON={yV3rBQBS0V4N2F=o_8eF};lmm1XJC(_^WcGE}zyxm$ z`bB$TL1lVrEu5+hDAXB{Hz`)+;Yzna%srw)WP2#;Ga1|Sn!4v9W+25k{Nx+&;MIYY z4aM&X32eH%7t3q=EfqyO<;@Lo7f1}IaT}yf zSQ@0RG`YTW_A>AYbD>@)3vICV;UNq*c8JaI+~xvnTA9b0_kFm|`o&o|XpftMC!lqZ zZ4?RM%6n~deqM)i$h`@r?S`@+NSZt)2IL4|*x-?yMe47nP_|q&deUSuorm)WZ zj2JB1)k~->6o8nRxcPuNtUJ17=6MUzZn8Qi!NxPrh833$yBjxn{=#+!KM$;Q#g(}i z{A+yJkek>pR_z$e4yIn9b59_oWvTY^(55Jx{Y~TebXe-A;Gm{0s=xlIcTPzJx>E-y(pG^xj2p{i^oGV`l&Uel1Lb; zn;*kzKcbL~RNhFvf0iZ`?k*DXN#u`|m-Eot%|>yGwoiUNcb}lkQCf6gKA^bvkSzUf z68X)fgiQZq+Zr4bq8q&UGK$>q({Xh$EzJ9>ITYDxgL(mdcMPHLdz)znNtt*MTRoy!0!0SVwK$XI=APggGon zfacLrk$`{EshJUrc`xPy(IxTPnL^xwA+yb$D_lo&;zU+EFY~yy5NV<<9{RRKL5P!> zkz8V+=XG!H2hXDLXC`jpeYA-f#Kvg+F9<{v-UlugH8Iyzx{*HM^C&p(QA_bM?gP!# zyLb2O(r+n>6(jXSlugL4P_np5JoSb+H&ELN7fMHOK`On0Y-Gd|MKIEyLgH zLme%j((|qZbT4|Aduat2fb-Bs;k3h29eJOG;-O=4%LMO8Xtr6jn zzQndH_ii*x>*+yUS}cq#0uR`I`L?j3Y>TT#c`=+d(gO6$pxaSO?ZHZ4#GF&!O7Fjo z?lWBKWrrVOw!|seXbY6iFVQB+CxT!4gN7b<%-LC%JyeFz*;-%>@NEM7Bb#08%u0+( z%MZW{zPX%!vdMuF=BhZ;KllNVyA@{B06KeV0E^l*X+A`$6K-|V&5Pa*YZ=p5)Z}58WH`f+Hf3D(4)#l8($`GqbASHP$xKpCII&)kU~ypC^?hlI znsL1lkuoUQ*c$~Hw>nopd`s|Z2$h_0y>#D_C zVESzQKNam#bCiqUtadh9Zb@!BW^OonFZ*L}lA*}|jLg^d_saDd6{kb)N5!N=hTR-7 z%Z&BxB=g~oo&w3m0#vv17odz;@w~A=ti0qb3Gd^VRB#y4|CA4cAYS5ypOb8eT*ffTGe#$WvrCi_0i z{0*2;&#bpxBLLF%*0r-j+oGr1kkjd;mIz2b z+m_$0KmC~;*nNG-HS<83(i)ClST3KVarOP_Ev&e}tZMPgGFNspN_;+nxQM~D4P6o3 zR+P{C*cA0>=J2~8N-E!CfxB-B^~8pfrr(LC?{=JoM6lUl%O6;sS4!{<5gT#h&21x+ z|JvdBA1iCNRGrgEWjkFH_oM!O^G;3g&HCM7E28hU<=?^cwPQO%Zdyv-O4_1ZUL{x8 zSt~w&a?=A%NPgT4`k5S{up>EWZO1yxiuAB>%Sdc?i{kG0D4pGb|PoDMJ zwHgSxP2|x(*J_PQu$89Q-#4hnD&TYMt#9-Dux^9LQu_W3?(b|h^u3tW>=t|aUBR2~ zcMWMn`46i5*BmCC8n%z&=AYl&aOvdMJj@t5@0ou@On$aR;A^&aLCDD91N)ahDM{+1 zd{=IgVp|kn?)=IRo6~;dUtXCSbcxw*-TgJY1H=Q(tacU=cWm?aaoL`KHxF0)`fVH1 z-IjUz{H485;KdpzJ=4}ACJv~7e_L$#MiuDi7R^v(B?I*`nAxTK>U4F-mqpANBg$I`V zl0GIOM4ZWM!uM}0ZzNbu?x3MFHm*M%0dKA3=cXImq~WEQZgS?tfp?i1>T+u?`;)Xp z1u^_&X%*6reJ=i8>a*y}n-p}f{@fK~yVFFrTD!hLJaY1>&yT~V!OsVWt_X)upJqAj z?=z+u^WE>oL~HC#0dWT&Z+{@V-8cHi6&8VOUHF>3Fu`*}NhtCD5!T_5eL{_HSoF2g zv*B#kVZ3?8uGglXy~E847uGsN!+bz(8T2ulFKX&eTR9y|1%`CD@Pkpws3V-nQR&E; zs}Ck$)eK3rbT)cyIWvo{m6#%<(ZUEf$Y3DPl;BQ*G2!ZW zH5Re{DOAXPiLKgq-N!~dZjmWTcb^@|XDp5n&|#rwz1itxHxpzv&{3>#|Fr0MIQ3Dh zC=o-H#3zp_R{!f?UubFrcn+TA>P?ixwFO2e8`1jSP$O_&=@3qH~%1%*e1eN*3*<{UH-Aak(vXSL>BT zo%0K4M8T6H=M{V%arsSftEl6fb~+<-8|6cy4G{qX60Kt{qFT~Z?SpLYnIOL&G?smC z@HthgR8cfOfA}N+WC44)d(tAldFRlce{)a93`xukIhP!a3*S#kc#ZK%NojMZ0$od( z=+BdlF0W6OKeJceMl%kaN*ew$3{$?FQ0!s;Bsa{sLQ>e-1>SboqwvX?q-@@ z*q$FR6AF8_TMr==zYdLCXse?clUo&{5i>lfe)XUIMdAeb^ti;@j@q6ilLVZo@5K*;A3J@} z<=nE8-Ft34BMtc!C>?Vk-FNe zcfC$K9P6n#p7#4~+L=}xvnSnNde^#CPK&~LrCWcjBsEN;cC@+mm)-xh>s3wFRiBHo zzxW3D+to^&c5i)dx|w`3=K6+w!oK;Z;M7WL{K{hRp_2RNx*-9VGgOK{yngANYNk5K z=Be2zVuPzPcMsGn5a0f3b(K#z-yfnE*f3w8nama}2azf=%6Hn*zsm-7eNHuB9J)B* z7$_fy5=_%e|(xvTy8XM`iZ zFlUvk3`JXn;R}}s(+AQy>X|nx?xR^Hz$Y;l9ICilFk z&V*ONtHw!vV>+%C2}i&QP5h<@)pz>dy^Z2zJWu}F%DtAY_$yBP3St`3IBK{2u4nC^ zsQC}BwQT#@ z5U9L*XM2s!>?^bM@Bo!-jtyql9;p%;Q zcT3|UcDH~0hn}l(1wh}ypfC1J+keC2?f~2*Y!saI$DJ^jzI5+uR za+;5o=ry4A^N+d2oXK>!Wp{1gZ=E;Sq}U`lr$+2C;Z$myc{F>JvNQv_roGLM6@%q+ z@h)l3^@Qch@G)E#zAnaQpRuRf50|9l8@=l4$>(R2`PbKW=iWQHav($Z(w(_xt8I~^ zp031MMz8Xzdk%N-n@xy}F~TvbeXCUITTAo?7-+;nWJ_A}(DZwhcChW>yJf;D!P|pf zJtPBmy5g(y>qOl~)PK&9MfJA0J>2f0*=6ebF;*KdAxDsy=5kS_EixA4rg+L4;S z*3o>kCX?kNKl8R@;N8ZZ zh*t9_K%E}bz31dBBl2w}w~XKnPk$j@G^a{8YT4~-v|K#&+3tt01zLl4QFyvdeg1d| zwfNac6FBeSRg_BR1~-q-+#5{kzuGY__c|d@_)*Q|kR+)45{!9Sx| zdH9~kkznV>tYZZGgvO$EPW$5_*s4cVghYOArKjGjqcYe#_FwnzMvwgaZ>ShWT5Epa zLc@D-T;&n+WzKQnMVS?1C^oz8;Fp>sf7H~tU#rVV$N7N~cOF&$lHA8rNdM0ilGdP< zux&CK5?M`b@4R<+GI;N_^Tp;p{grNZ;a6oJ-QKEyWV&>_?=lHIz*({I;*2>FM(qZ+h8ASH<2KojM%;C7>G*g#UG(8#1~UjpL+w^~r?WKzt$C zlkDvIaX@{Zpnj{9pSks7y-82z73}B^Ef+-7&gIg8_!o8ma*houXN<)AubTUrN$ge3 zlcoM?0xRPyk`4~6d<$TOfI_?d=j|DZ=o?@8l-CGN#sk4=FW@9mv#cd7PY)O6p15d| zDHr^lr1$f|OuGXz^U$3X42D%C9!0kX196ce?;eYd+5>S7cERyW5!_<8oU6>R(k^G#h% z6Y7@i>G$Vz-e{;CW_F!Mwk92ojc6$Vhgih%^l_<%^C95Jz~+g4y7XX~M2Yi*M}w2wywLo=ns~2N;^6NQ51^m2aUBE=$HtWjDSG@^#&#|Gp14X9x z=WYiVMMl#UMqi4{jZAavf|?uD>*Yl%@90Sn`60K))CZ&X8E-#u$RuR{Wc-7-Z~h*h zzK}i-p$zgE7vg-~EDJQqeHGNd;LL7$dOaIEU~p#5wP!n}3s5rGVRB(_GuM!5%f@}Z z4A&dc5y8gqclOWiP2un$G(Xax=j@mj< z9vAuS#J!=ei-K>rcheMKS_T=9{ER*3{?W)71vB@YZ1{PL?>an=pHF%=DK3f+n^XZ5 zl96QM*i60Az*v{|iIZD&^B*)(^{-F8qqyp%2W)Bu2E^(^n2FFZJP9fJ<_P;*WEW0U8x8kpsfySAir>zXPWdFMOdnd2$ z=lJT;4epq6Kj8Uoja_YCxqd_0rflc3X~yq-UD=?+FPj5j?S0XzxJd{8!r{;&;=TIk z@nyy<`k>wXj!NxkQN^vA1-_=go(0K2sIJJ>cZt)=K3Mv%*o(d%>VdBa0RlLyoIgMr z+bqnOey^}8*3hLdYV~{JwaMjCnRY>V&3VNxNnx|!$zQkUjV3CuCvESZ4{9C)>C(Cp zq?o|v3a+VDZerEQ7PMJ&b+p+V`gGK@@tX}&_1lQbL01=@#;Iz1`kt47B%T+%H+QB^ zo!zu&_I+O#6z!dLa3nLrM>jxdv@Ga<37*ZO1f!xynztIZit*zA+P}Mx3d(2*%#`_| zF3uOp&6m0tfRF!1-<7O=U3t^9niC!Oq_vat9?&*b@1Ys=3bWMFvKodEESLKBg}hS!i23g zdN~u?wcJHddguKoA*0S+k6IN@OxC&b0Ed825) z=-MHxEkgp&xBYLUYP#Mg<=xuzsl)egkWBT7{qccR60ARhTN^VunQ$2(?w2+;Szaea z|E?JyyLe0Mm7UCi4pq07kLKxd{x~0fn05cQM&-yI|*Zf+z*@E|K+8m z^8%>9Gc-4(YgVzR@PEkV6%CV0d4BaJC1YK7RWjcVaq636W14*6qS48FB9&EJLC1XG z^0oP&){zI4ViT`Eo)Nw?ko#7a^^+DSKT;bcQQfMd5nDNX0yM$bM20MpU1LF+OCEi! zf#;46BbB^jkPlqYO2 zB}H($@}H9``??R+-e_w3_3O-_5|mM6Z$4FDC7f$g5Ks6=bmo7MOzGs^YN7VSL(la` zyuHur1u~E_2euxAf6U7|9UgGU&N0AlYUkSafTr>J*GaN#`$d_&6ZC&*Z{%`3P6yr& zm~;wdMR#@XZY`MKZ8jL6{A|rs^v^0W!Kya_)M~nX_B?9>^ZG!XDehYQm#vBe8Y4A1 zHy>U|4I653NwDCR0@X;fspl2!D%SLT#>HR~Np`&M3+nOH<~x5s>h&B|i|CA78f-jp zeVb_ReFM_=;Wkm_`+J9%<%&mbP{aRl*siL&B-IZeuIv~aIeSBCGSfhPOVVHg>Zhev z(!U#eLaXMPO~4=hz(Co)QS}r3*vhj{i9;{_&sH;rPC!HNkDbTUsueyAHu+X0Uk^zL zTiw3V)vz zcJV*nqSH=qYl-Z8bFR6OyBy3of4?@THScJeanQFE7g}W|crZoN9wLSL?gX#j|A1kr zysJ`0vF`}?YpPK`?`%g+6(c?)E#sDSM2}}%0TPTtTN-$*F{57WEsN7F^wYIum(~Z5 zQQgmu77gK2Tc>!NU!8U^zffst(C9Ym(2~@=X17iQl#f;6(;vQ@6Ks+Tn5nJ;nj=&fdCggj_g4h|G6jueDqtC&Kb{Y);k1;z zJ_7G3B$|EkE(=Ur3B7Vye32x1UNcGhA#ZCUYD= z^hF-a5^7|4h70M-3O9T=B}v4}e*`=4)~ICJe}gx+w}p?XzvSwkt2*sjH>`r)p%1Tj zPI<}y))7L6)|y3a@lQ5Bj7yg#U-?5X87mcb^Dhpcj(zC$>gL>mpIH0lrag5zVQZ`Y zx7O9fad7<@ewxqR{LJz-p>I?74IqmGi!8Tk;@(|ero`we2a{VTKCxVUnw_tphVDJS zk#Ixn!G<60=dbtagLVg6JC>|&0zzVw`WvH+Lk*h`Gw9AL=(;qra zv>?|bVP^*4secaQEp-oBV%GkdU*=4@D#tz=cB=z?ns?t0ZOX74sLWTx3*7QJ$1!>Bzx@T271k6y#yHI%{(i( z?z=5g9U%(czT;lQ=j6*Zdy$t(h4~-u>E;EyK`r}WOFs%Y#;KAQClzFY?a0eZQNx?Y zx30yM_hUa_-hJoSzyY~`-uE4OzUlpI^|z-Is(%>X_6>f04@K^S#T14yNHLi2(xtS7 zsMY`(H2^qSo-hFn)gkE32s+pt5s7&!3MV)cOTs$@G+PS88YG-rB!BbOTf)f zF@!r5RNvmMzU{aqvE|EaU{$khlxjk-FI2gAVsGQ(-ey^=Ej}ubH$INPX}EswVus4Z z^!4Cx{tnqcH@Cmf&i*&0rq^%Zn&JAB4a8c2@X+8D0D#l1Hv9hL^{``%E8Y3_n5xdo z9~+l1XMa!YJSoWp5AqiC7+&zvO zUSN+XIRcZ?%xuk7WX(9GpU{v`%5kUT%XEL475wkh`r^z06&Ep(Tc>?Et<*6fYz{wX z-?s2%a}}TN>O-Sz)aJX% zX+q)V+wB#v{2T9k*@(rH6dZ!5;0bt(ic@RCi(gEDn zl{njTBWuf|#)mY)57P)nb9(y)O8D)v|s5-kw0aFkg&fA=4Zj6XD8H3HM2s9wl!}7 zDg|9VJ^D}PA8*EmMv)Hq>vmx*W-=s$u5-;lH`isGquxySsGWaZ%~S(ESCP|dI-f{{ zFI*Vhkp5FLQz5BNO;%0P5Z#LlR4`5>TvUm6GfB5o(ovc==}ZI$V9Q491(sXA3!hDZ z)@RuFBKj!G*RzZDWT$%D^vLDC@oQD3#j&&8)Ch-{$`(~E2Nc<(j4&6SJgVbS{|#(f zcBg6-HjsS$hCJELpr4z~$a%2Llu*mJIe>~MB%)C!OlTPh3{8dBicExp<9{9?UJrg@ z!bu|%ja|5@Y`-p$)vQBx>Hm9Q0Z~Cx&StXLNJgQkEHWWstS~Fy&7o5R1vnH8;Blr+ zAp$1YNnougSb0y{!Psg zhVWzhGZJmkRvFU6IKw3u6}v%Qxod9%LXt0?GPpLSML+nlx58Lc^VJLBcq_A^9^2NO ztG0D8(#$0CSxM^YSpMeJ&DVVC8qf9Z0(??c=w@_1#D}b;_v)|T$F15mm+W59u@cz- zQC~5j*V%!EZ%j^0mMN-w3(livHJkfJ(KON}U4oL9Tln@o*(?Q(^K}>RqGCCVMUfIF zWvePTv?}RiMznL7-3L=&DEeJP{odF4vmUXg%Kc`f9F!Wl$>IK%siTF%T9lVfeiKIU zZttl&*GIrLgY^LR`&aI&YEt)5SakLLmrqW2POlPv|5ywUxBbH22ij@QcVDq2+1PW< z-_<1N*KcJ`UdLA`h+Z9OTPQt=DAzM=FRrhIOD?<{Q|b@Cnz4}`5OG0(*bTpgTct_wtX})xG+M8j zxOa6+)*Y`Qg*TPcN{Xe5LWQ-hrOQsA`1=Y;%8YBX1qJy2^Ui^OYcEcPn+^)(cC~@T z+U%9KwXJr%mQHHNqu833d&;w~+0mxYbEjg;GvuRpZ-%@BAu0Hw#p~}5eD>uHzMD1L z&^8#0?e;c!oqS0|3rLRGc95U=+Uc#aRM+vxU)7eDuS0H9zangU)blEm=ba9G(c4K1 zDN7`5IH1^BBR@Ryf3@xZ7g?(H`(jxifL9-mzZ#=MzSjpL_;v5!d~h9%7zEP_^`MQO zpQY2A^{ZBax1`=3oo{HKo7+=)KUv5>Lwm5Qv(ZV$`MyjzIR8FA7O{F*(n|E3zOs$> z1zC-J2yZW`ht?Fz{08b_^CQlt+qor%|AQXSl)Mqe^IR;BMO&(JOFogMewOqo6mIrB z`wQK5q4aZ*RoH~9?C4PE*$DRMj*DR`Hv3(Iw>W5qmEX?2ETzFqBM|F%&QD*P)qFL- zksDMvY%9h-87*w2B5*tOA6L|U9|1XAjeTpFiHv=x8ibM$*k8OZ&>x+wue~;gt*Sl; zJKnkXNlYUo_g?4~^Y(l}@sZ%t*~zM#H}>qYxh;**$ZDi1I97L&;*`XmNNJZh9k|R=23(G7PBR?Xv4; z_S~{3>B?vB*5zG_K~~=MCnVbABok+jtrB8dboVjEU^AWCJI!HsCM_t;0<^6^oXDr* zi5*X1v8r6*5M7_7z%irDJ{wD+<7=tXk9o!m&Xx~YI>;PKOfp9&z|n*i4C#1t30ya^ zjk0>t<2w}8TMEgz%@Lmi`Ek>zM(!Op;N=`{<`JizzChPa#Kl>TmuScLv_5RvDSmycsWPT| z8p~ej+?Vl8zH#|Q%s=zFS8HwJf|6edc9>=iT)3btby_ZW{ zWGrsQm`M2^r5}k~DxAuR>fA@+#ZKlT--R`@yNi(C(gxp&jjf~yP3-QHoqlF1c0P;a zWPRLJmi)?sy^E4@r%{?sqxS;c&_P#7W%!KIkd!?bBR5I3R)1F}~TN-QkIZ=9rr zV=S&?gBTK!X%^Kv4`e0DKhA>V#bvyy&^a??zAgAtOgL>(p4e8W!Rvtwoh^uy+2V^# zI0%Lov00g3P&5uZ!cDOS`M$7eI%NOt2Ab23YcC?WGwRt^A_J>ENH=rVax(LYJZAC33@VHtt>~u`U^I`ch=VU>7^qyJM5UD z6BS=efHi9c~6gY~D2eXVh8prS4Kq@94y4B5Nu~>U9%c#fn6;<~M_7vn zQa;R~>8nSIV&OEL3IxdMZmvlGG-?bitdDNorb^dGU@0qHm|dNcc!WzEvQ~a^xgVmK za7@;|n-_3&geSDbXr>F+Q(2W9w8(~-R->a zg`5!yV+8#uqYfk0hOLVbIQc1Xvmh7Mb&{>+U3-Z}RS#QJ0^>egHIbwb8_OcQ*`mK+ zz!5A2#&dY%ZtT_SNy^qdq=$o*Bdmi7EparN?CGKslq(jh{;42v3U_!7Ov?6tF`cI0T9)uqB!1xxu?IMMLTCA~zV_n9ULV_jM#mxK0r0 zUbcmP*@1N%x2ek_@yRb2Z8HXN{D))|ywDn;4$jhz&1IZ>42SYR%ShTlE0G+rhcrW* z&oXi51U|NxwpcYclqJpRKc8(;Yy+3&bMy?HC?x6KDToO=-muN_V3@t#1t`g&6BWlY zX=E{(;;p2zYAo|S9fD)?jf+AtbuJn*7R5N^W;9HiqfIgF;~+{Pbw_V9Hvnb&hph`* z7LTD6s`E9=oE#_-6XDdNqu9YjM6uLzM(ECeu+TzdVSL{@MrxW0!Njs?@A4U8*6?CA&1Z1=EgoXqZAV z^Y=kuN>er|%@jw7(emTDm5#0#AcP|_5Qy_VY9c2o%C;Dc2=a(E2PX80QjW2on*|wc zUO(YvE}!Z#D6mEmiEtoOjy3nFZnP|m!cvYT#xY|SImU}$xe)>vZ}COYh%%Ru2`s7_ zPcNdyNbzgm8|o1U^PV2baFRZnCr@gOd5Y79{;=vy9~OAIP^hFeunnO-VJ36d=9B4M z^xScHv0*Fevm!DF1|rNBKqeVTc{rbHL4=v;45iD!exhf)tvK2*#3pV`J^V|UCo6lC z`#+0o0y3v_7*L`jBWI5I>HJ03@(5d@7TB$Lx6ww!Hf&naK%PFC8#c(%fYaKL0Sy9R z&Y|E{f9c(SlMdNZTr|Xx2J+#sjCvb40LXvn=C{e9njR>`xy7&0g?SP^+YWDbj zDUu=8o9=u*8-@op*p^ISR59hl?BSZokp;T18xd}~2qhtFY%~^;)kS_PJ^p!xsfPA) z8gLLu(Hd72wEI46X^};Dj^@l!aXLL*HRGb-7L3UhMTM4A_J9xGEZQP8qU?iykD zin+v;1W+B#z==ls3=f9)aJi8tY%wAAXdhyM-L!^r5cj8SGhbwlfwzJz#7UVHMY86Z z{uKFq5qk;P0R~{921k7tP|HVg2tPTLoT~Cs9D;0^jhk`6$qQQ0n#igU48a0>PBY}gB2{xBulF6g6~UqM|U z6Z{stNQvLYqoybl;!&(>Y<1x}8W!%*sbkW4;HaZr0N52{*fUOyRGO7CP_O?E6E*G5y zLRtqKb>SGo{Cui0irJn7a2zvfD~DAUk|ck;Y`UDwk1>g`#HcELI4BQ0V)PvQ0~k^rhPoFSiS@ z4|sztGasvB&ak(v`I+ehXuj1_CZ?IlgQx9JEgFLl42937pM8K?0Q9Uq$=IF(S# zvRb%(Tq_Z7PVhtMj8V+Ezl{s|4URZW2dC+g>sbeYCgDM*rjQ!iW#|Cpf?SyC2J)NI zcao&p5*wN>(WaQF%6NQ7vrN7&(E7tEFvjCt01cHm%sEiv`|SO1(_FM+E4>{`oK{H!`T*yB^j{#JQ?cLZ}Caej0UF&?F{j7@y=-^WTr~4!4E}OcMtWe4Yee(Ov`%ay5jOn9oPJr(7%UfK)JAdbdnde@DL##j zH20|L=4LImGsW9DiderMYa~=>j7+nraj(?Qr=Vf-@qMIq0m8foo|H3hIFMb$$1x=~ z_5%LI87064>Q4SmgxTyepG;{la)ZY%F=?a4{hj?#9eR1~`^s;U9SQ*3BwlYSY1H8l z8!nmhvemS&82uvxmqs;cLl$ONpkby_oMGz~4^_>~5ob z%PwS4dN?MGma~T`O~V)q=!QT_gw+tkwPFkzwH}#{mkmHC-vfug;xsO?mAVl~c@o6* zrxhWUy`!0u{1-qFP={F|sO3O&CEC)e?o`vrsr<&HzcA#r{@QJwMkC5N)3k16?_f4P z8a9KIMH$T5N`}WS6{(d4R5K+6-Cmc+OVBf&;tM!wDyYidD}+Tp5|Xd)kLGk5iT71d zAdfe#$GHlQcpEKvJ!oW1%oo`@17$Fo1zXH0T5*{Z2(u3*6MiE^ge~JG;C=khn{dWX z@egapns>Ym*2Lqg<*=yM*+Xo2ic>4*%D1Z+u#1Eu`Kkojls4oVEk{k>Mnk35WX4Vt zI8Mb)rN&K{U?~J^R+gkOdyX!*qaUs`V`rV>M3Im8h+yPI!R##J-P0pkBfZ>fuypq& z)+1yY#nGUP*cI<)dV&ob7dY9IC-3EF$u)Ii&T?rHPHul-hS@FRfxRgV3|SUTy(?kX zi`Y7{JC!It+9iRRacCuTHx3;L-G=%O7t5x&pcbflpC#j_%gqEfIzDE99yel)XYK8b zv9&>xG^wXAAs(3!AN7a%HIt0s;F&1Uc}jg%_F|h!Sr8jp9E8c^??<@)xuss#N9r2A zLbN9H^W-rGU2*J1m;sH%H)fj)ZS18PVRlJzoXM<}9@sc`dz*)Kx2n6SuU}G#|LR_8 zzPMZz!>8lyhOzRoAdB52TtXk^tjWMQ$%fha*l284_d199>;YP8O8Z}srwS=`iZ8R^O3bLDXc+LA z!J}Ldw`uDF=sM8GVerIZ0qBPX@&4)l>9jODL=wv%$O=LgljGgYHnm-FUZ5(xWXiAa ztv;qF#kPn==F}M%!w$Nra@S))7b%}l{EqHC-~~CSwV)N*?Mj`9aSj2ey3FKb1L(d_ z3PCm8GGo2S4C~x?0ZNopN#5&wVJ{`rin_ejTLks>m`iX7chjklR`%%qW0NqT0*I zDMEd>hg(<(q~@I3xaljOEGW_~&{XO{j6qta*N#TxsHtp|$#fY>gaz>>LNmqDaEwmw z&2&_hS6dwM``TlNxXrbNQcE_H;_yrH!a0Q zNA{+ScGlTC1qtuYY|yz+Jjq}%EFlUT)tQwe)3Ewtu9q#ock>;s*-gMzy~WJ9F#Qk5eDQIk z#-GU)JCp_bYdUosETRizO76`fMq+zEL zn~yC*6dlszp`M@;(QN(#o8pn}z@_E8n3Wz1ri_&p6 zZ^}T{VY~r;6ek&BJ#!mhm?p4?7CRNY(1O9b|GRv9OpBq~j#4&p)U>jFzfnzC_pyOX+ z|A;LLMGe-ebF?v17A_h)%>%hh%j^z_kZM3DK@kqabT53eDTfJz19lW$!JKgZ7DYDG z(TmhRgJ)++Z;*S!=ssaKhbbg%-FHna$UwwNx2g5B-MMLC1)rr2q!S{+_$*C#=cWgh z=tANtpvD60Ppq5)!kfEtrY1JI8AHdh*3EUtQ3BV2#CbNzb8WzQPvmV&( zMKFz4{$|Qw=<9(8Yl!y=?eS*EN5oOZNjX=@1TJcEGnpIB>F88kDhh+dvNJhm0Q%`7 zLH8{pY%R-v0q|*#B>x+qoC~?R&W9R@`x%er#6PgEQE*QiWIyq zhXaGCH)+`pf1dCFfc?-S%lnWRJvq{v94h?-OFkFyIdlu-yaI_@p#WmW-48;raod3|qXte1)*b5*+G z7;O=3Fp!n9X@QsT1ps-=e$HF&bI7N_99DJXSU{n-Y)mf^J~~D-;O2tCFkK$a6WVDI;DUks zQWjP0%MY;ZshmZ&7@P)xpa9k0#!g5Nqi-c+*d@gbvdDn65su+^HIcA3?ATu>B7mC} zfMuUgmr<1annz7CqY_&VXe2vAlBPYDweE~X*~P*}f_^yZI;waymQ{(Rm}UY5YLeoj zew6?jgIzNRAfmThi9O-67MO3aRLnqpDa+$oopjQ;<40 z&tMQskzWMEF61n%5)Uqy<{0FDmoNjpAd0aj>rF-m= zzU)TXbz?q9obiCA(RWFl7sG*(h2qe4bKb^vYX~y^kt`V645*b$0HF`6{r)zQRQ;0Bz9qA*iAF`2zOf? z0NMEiPkG|YoX0eDJq3AxissPByxj-7q1v<*d>fcAqdBvS%ovrt0*+pU%d`M*tR9^r zMNZ#91`N{W4Fpd3Mnwxy2lD##G0iAB0#2h-JGLl*?(Ehmfm#^KSp;JyD4TG)4+*%_ zKz@XEOt^%0ggp@>si2+1C<)ypa3_ucG-j7Hq#lSD(R z@;O1}iiPtLGsm;!=NuZ>NR3>NB%HR5N(wfDim21rsp_9?tOzW3Nt+mDm&K+T=uT~f zm(Lpa<)#+x2y1Zpfjf}qZzLD&7M}@yL~&n7LYRw*xkp>M#%6L4*s79p_*IA=t~$pw zi(j_`(tf3FaZt*V5^%wfFzF8?P!=n#bMeD zzsej8qr1H;fr19og>;iOjJ}P6-%fJ^jZE0imrVEPc*8Z^d)(87b_4m1zNKD{J~{c| zFtF_UOJu$fUw9ueVGEn3J5T1usP+F*u>!|$3$u=~|L^GhqmoMVKmJ@%Nlk6)_Dvl% z?FT>VWE%91pM}i^ih_#m?i|)FkIqT1+cqMaibtiKYL_*|fwCn+96_udr}i9cZOX=G zzDmvx3Kz1*%yHG#h|C-z8`Jjtw10BWJ#g=HFVFLNzhCeBd1mTG+~T7po31C|&EEb5 zZ^j_0V2p3;9xwlEe%1JrE+%Sz`Xb=C=A&!qmhh+Lg@ zL}o{m2}XC>jJ7<%PghkAOAj*J^$|727yGEgUE~oh(UMfz&o*t^qU}wHvL}U1nh2vU z4R}5Q+MfD+3i$>!MD4KY$B%6%0vuHwd4>SZ3yhxCGwsC2E6-k|Uj-EIA2>5Fo)b;P zfZ!Srwxr*xi%p%i2~ckCbKEeY?HU-3onxBWzdY+=xNUpbzPe6MD=8Sare0 zvjH_MJRkoL*cjcmQ&mD`msu<9q!6z?fnfZisSejnNEXL0g^U|2r>^_V_lfjUY6tRy z`jhZPx}ToE3VT5o-J;S)4N6H-k2$3dNguR47?8zbe>xb`a{XrXEPS1RS^_++$~+(H zZ0x>0fB11|9qR;~&CT)MpCfQG!1X-Q|Ej1M#WODnaPezs85ia=T8k~FkR~aE+}M4E zkMSnY<*zF@tzxxTJSlJ7W}V)@}8d)BagUovJc55hEx+_o64RURyLueF#W$#l!7ah&z`?Eh>pS;MY1k{OL_Unt~`mmdag-XaXjaHz?{Yn&1u~5U8Jv7PTLV`)@CX6{ATr;MTSW; z!5ZfYrj4}RQ|3699c&e+Stv@JvQTVF>`%zb`DmLIrY5}OmmdPtqF%yw)tsTuT!R8$yOP)CXIC!AKn@D#_$r{HJlK3bumb($H9E>mVnUx{fwyF8aH|lgo>K%Pr`!v0 znb$1F(K9(OH1IkH5)qLv8Gq6IX2@Xh! zM=%v6MO$NCf7jkOgR+h%h0NHC}3%FP-cS$ZZF1)XXCHfxq_+8pe5L#po?@UntUq=)V;@uaWsLFEzf9( z$qb$@8gIH(W|=sqlc$4+u!u&x4HeI^AHg}gM4RD0d?dp_V^uL zrZbQ^JcKK~cE4{M;wWgWc4nw!90a4!aLT?r&a;PhYSd~9v+vWNj8tZ>Qh3n>$S9!V zi%>44t9iQ!(BWpSbp({5FHSSeCP%;@%>zM6wBh39YKJPtn;LC;>uYZnb|Z5c2B#qY zwk2Wh;)6+@!XbeXt6=$DmMN?rzuchDeE>0$(tXDd4p<1IO-d#w!krhmrKR=Trpp%M z;=%>-3?Yt*0t;ZxFd>;2{mZs~W=E4|ub$ z%(i04Hcb&(Xc1Qyz2adElPsWnvy_Mys$nDny)-O6!qPJasycx!&)4qhCm3aWbHE@M zqbhy$Y#+k%&or_nlUn2H3zre*5cTOVW)H4Y;AaC0nmod~A!>G8MfLQen`^+d!kcPS<{i_11A`!T0E^gN zVX$SQH1n9Q2CMQ}6QW9jSXv^-ZyAo>n?Rxo1yLRz%q8GRCB2s=iPh)97)ucojbKSC z+M$-#?>mY1GR)JtABGYkNW#zG?mURtptdT5-Z{I#z{+1ZOn{6E*7}tmPkJ*PWoLS` zAwDRnZnf+L`%J<>X?4yUd{JFMctM3p6i2|6H?5}gbvuk)5xN4@#LYtRo-uaJ&RBCH zqkep|XH1VUzR;9)Zf^>lxu|Ek`oXQOfz3QJT5lm(0#L0T7$ot&2pvdabWAV1E?emE zyX4lQf7|!8t{k`mfFTBj4sd;2TeXAmXNGyuPJP>Pd0Z85e%ao;W%YUP$f>Tg7h&hO z^TC>O(?_0CjAH8auhsKO7xnJP#))+M0n(*fKTC63vq77Y#?p7HUO*j^<39J&eJWlI zBh-;X3UdF?9Oug6`Yy)m^Wd+~bFuF$>8=q&Z+HNJ*_gP_6T0x1G`cb;b&hvhO)&+= ziP$7POE3LO70pB^#No+)biv_PjaDq=Vn0DCJ7@`<`CM0S3L767X2RZ3vDFh%@4~rZgBvmK2x9TcFB-`j%&2HE>ydI_Y!705}cn? z;=;FsU11~YOu0$pP2|`QpNdzB7VUEK=*rUkMF5{bfg>_wkO={2!sa*rNVnggC5us~);(v!~V-DdzKmI@H CgqD>6 diff --git a/docs/public/samples/sales.csv b/docs/public/samples/sales.csv deleted file mode 100644 index 04503b7..0000000 --- a/docs/public/samples/sales.csv +++ /dev/null @@ -1,225 +0,0 @@ -date,channel,region,orders,revenue -2026-09-01,Mobile app,East,72,4181.04 -2026-09-01,Mobile app,North,92,6169.52 -2026-09-01,Mobile app,South,84,5012.28 -2026-09-01,Mobile app,West,68,4052.8 -2026-09-01,Phone,East,43,2186.98 -2026-09-01,Phone,North,31,1352.53 -2026-09-01,Phone,South,15,678.9 -2026-09-01,Phone,West,15,601.95 -2026-09-01,Store,East,42,4276.02 -2026-09-01,Store,North,38,3637.36 -2026-09-01,Store,South,22,2496.78 -2026-09-01,Store,West,54,6003.72 -2026-09-01,Web,East,81,7195.23 -2026-09-01,Web,North,61,5410.7 -2026-09-01,Web,South,69,5477.91 -2026-09-01,Web,West,53,3864.76 -2026-09-02,Mobile app,East,74,4582.08 -2026-09-02,Mobile app,North,78,5551.26 -2026-09-02,Mobile app,South,86,4802.24 -2026-09-02,Mobile app,West,70,4955.3 -2026-09-02,Phone,East,49,2129.05 -2026-09-02,Phone,North,45,2136.6 -2026-09-02,Phone,South,21,872.13 -2026-09-02,Phone,West,37,2128.98 -2026-09-02,Store,East,56,5820.64 -2026-09-02,Store,North,20,2072.6 -2026-09-02,Store,South,44,4369.2 -2026-09-02,Store,West,20,2099.4 -2026-09-02,Web,East,75,5667.0 -2026-09-02,Web,North,47,3519.83 -2026-09-02,Web,South,55,3979.8 -2026-09-02,Web,West,47,3298.93 -2026-09-03,Mobile app,East,83,4711.91 -2026-09-03,Mobile app,North,95,6247.2 -2026-09-03,Mobile app,South,87,4897.23 -2026-09-03,Mobile app,West,95,5283.9 -2026-09-03,Phone,East,16,731.52 -2026-09-03,Phone,North,44,2291.96 -2026-09-03,Phone,South,28,1356.32 -2026-09-03,Phone,West,12,633.48 -2026-09-03,Store,East,53,5880.35 -2026-09-03,Store,North,57,5621.34 -2026-09-03,Store,South,33,3307.59 -2026-09-03,Store,West,33,3578.52 -2026-09-03,Web,East,68,5310.12 -2026-09-03,Web,North,48,3657.6 -2026-09-03,Web,South,64,4516.48 -2026-09-03,Web,West,80,5796.8 -2026-09-04,Mobile app,East,81,5357.34 -2026-09-04,Mobile app,North,77,5404.63 -2026-09-04,Mobile app,South,77,5302.22 -2026-09-04,Mobile app,West,61,4158.37 -2026-09-04,Phone,East,26,1249.82 -2026-09-04,Phone,North,38,1934.2 -2026-09-04,Phone,South,30,1638.9 -2026-09-04,Phone,West,30,1436.4 -2026-09-04,Store,East,55,6034.6 -2026-09-04,Store,North,59,6747.83 -2026-09-04,Store,South,51,5293.8 -2026-09-04,Store,West,35,3608.85 -2026-09-04,Web,East,66,4832.52 -2026-09-04,Web,North,70,5554.5 -2026-09-04,Web,South,46,3279.8 -2026-09-04,Web,West,54,4763.34 -2026-09-05,Mobile app,East,73,5418.79 -2026-09-05,Mobile app,North,93,6013.38 -2026-09-05,Mobile app,South,69,3907.47 -2026-09-05,Mobile app,West,85,6031.6 -2026-09-05,Phone,East,42,1726.2 -2026-09-05,Phone,North,14,604.1 -2026-09-05,Phone,South,30,1746.6 -2026-09-05,Phone,West,38,1920.14 -2026-09-05,Store,East,39,4457.31 -2026-09-05,Store,North,27,3059.64 -2026-09-05,Store,South,59,5836.87 -2026-09-05,Store,West,51,5417.22 -2026-09-05,Web,East,74,5448.62 -2026-09-05,Web,North,70,5996.2 -2026-09-05,Web,South,78,6978.66 -2026-09-05,Web,West,70,5709.2 -2026-09-06,Mobile app,East,76,5447.68 -2026-09-06,Mobile app,North,88,5925.04 -2026-09-06,Mobile app,South,96,6958.08 -2026-09-06,Mobile app,West,80,5599.2 -2026-09-06,Phone,East,39,2287.35 -2026-09-06,Phone,North,27,1281.96 -2026-09-06,Phone,South,35,2013.55 -2026-09-06,Phone,West,43,1882.54 -2026-09-06,Store,East,38,3627.48 -2026-09-06,Store,North,50,5333.5 -2026-09-06,Store,South,42,4701.48 -2026-09-06,Store,West,42,4334.82 -2026-09-06,Web,East,77,5929.0 -2026-09-06,Web,North,49,3685.29 -2026-09-06,Web,South,81,5887.08 -2026-09-06,Web,West,65,4801.55 -2026-09-07,Mobile app,East,94,6196.48 -2026-09-07,Mobile app,North,74,4816.66 -2026-09-07,Mobile app,South,90,5544.0 -2026-09-07,Mobile app,West,82,4623.98 -2026-09-07,Phone,East,45,1926.45 -2026-09-07,Phone,North,17,915.96 -2026-09-07,Phone,South,33,1909.05 -2026-09-07,Phone,West,25,1378.5 -2026-09-07,Store,East,44,4763.44 -2026-09-07,Store,North,48,5143.2 -2026-09-07,Store,South,40,4189.6 -2026-09-07,Store,West,40,3981.2 -2026-09-07,Web,East,47,4055.16 -2026-09-07,Web,North,67,5360.67 -2026-09-07,Web,South,59,4259.8 -2026-09-07,Web,West,83,5892.17 -2026-09-08,Mobile app,East,91,6604.78 -2026-09-08,Mobile app,North,79,4871.93 -2026-09-08,Mobile app,South,95,5770.3 -2026-09-08,Mobile app,West,79,5142.11 -2026-09-08,Phone,East,40,1774.0 -2026-09-08,Phone,North,28,1399.44 -2026-09-08,Phone,South,20,1085.4 -2026-09-08,Phone,West,28,1209.6 -2026-09-08,Store,East,53,5707.04 -2026-09-08,Store,North,41,4316.89 -2026-09-08,Store,South,25,2580.0 -2026-09-08,Store,West,49,5187.63 -2026-09-08,Web,East,84,7511.28 -2026-09-08,Web,North,72,5986.8 -2026-09-08,Web,South,64,4893.44 -2026-09-08,Web,West,56,5036.08 -2026-09-09,Mobile app,East,69,4767.21 -2026-09-09,Mobile app,North,89,6023.52 -2026-09-09,Mobile app,South,97,7213.89 -2026-09-09,Mobile app,West,73,5391.78 -2026-09-09,Phone,East,30,1472.4 -2026-09-09,Phone,North,26,1308.58 -2026-09-09,Phone,South,34,1848.24 -2026-09-09,Phone,West,34,1996.14 -2026-09-09,Store,East,43,4254.85 -2026-09-09,Store,North,23,2323.46 -2026-09-09,Store,South,39,3759.21 -2026-09-09,Store,West,55,5753.0 -2026-09-09,Web,East,62,5238.38 -2026-09-09,Web,North,82,6930.64 -2026-09-09,Web,South,58,4538.5 -2026-09-09,Web,West,74,5942.2 -2026-09-10,Mobile app,East,76,5609.56 -2026-09-10,Mobile app,North,72,4371.84 -2026-09-10,Mobile app,South,80,4496.8 -2026-09-10,Mobile app,West,96,6099.84 -2026-09-10,Phone,East,47,2220.28 -2026-09-10,Phone,North,11,522.83 -2026-09-10,Phone,South,11,595.32 -2026-09-10,Phone,West,11,440.77 -2026-09-10,Store,East,22,2203.3 -2026-09-10,Store,North,26,2674.36 -2026-09-10,Store,South,42,4454.94 -2026-09-10,Store,West,34,3499.28 -2026-09-10,Web,East,77,5477.01 -2026-09-10,Web,North,49,3949.4 -2026-09-10,Web,South,57,3990.57 -2026-09-10,Web,West,81,6433.02 -2026-09-11,Mobile app,East,68,4282.64 -2026-09-11,Mobile app,North,64,3875.2 -2026-09-11,Mobile app,South,72,4880.16 -2026-09-11,Mobile app,West,72,4214.16 -2026-09-11,Phone,East,15,614.85 -2026-09-11,Phone,North,11,549.78 -2026-09-11,Phone,South,11,616.33 -2026-09-11,Phone,West,43,2160.32 -2026-09-11,Store,East,54,5685.12 -2026-09-11,Store,North,34,3677.78 -2026-09-11,Store,South,58,5697.92 -2026-09-11,Store,West,50,5717.5 -2026-09-11,Web,East,61,5454.62 -2026-09-11,Web,North,73,6291.87 -2026-09-11,Web,South,81,6530.22 -2026-09-11,Web,West,65,4909.45 -2026-09-12,Mobile app,East,67,4927.18 -2026-09-12,Mobile app,North,79,5074.17 -2026-09-12,Mobile app,South,63,3725.82 -2026-09-12,Mobile app,West,95,5423.55 -2026-09-12,Phone,East,40,2183.6 -2026-09-12,Phone,North,12,509.52 -2026-09-12,Phone,South,36,1544.76 -2026-09-12,Phone,West,36,1946.88 -2026-09-12,Store,East,37,3587.52 -2026-09-12,Store,North,49,5245.45 -2026-09-12,Store,South,33,3136.32 -2026-09-12,Store,West,57,5906.91 -2026-09-12,Web,East,68,4894.64 -2026-09-12,Web,North,80,6690.4 -2026-09-12,Web,South,48,4146.24 -2026-09-12,Web,West,64,4608.64 -2026-09-13,Mobile app,East,80,5264.0 -2026-09-13,Mobile app,North,60,3672.6 -2026-09-13,Mobile app,South,60,3516.0 -2026-09-13,Mobile app,West,84,6225.24 -2026-09-13,Phone,East,27,1422.63 -2026-09-13,Phone,North,31,1716.16 -2026-09-13,Phone,South,31,1266.35 -2026-09-13,Phone,West,23,1112.74 -2026-09-13,Store,East,26,2620.28 -2026-09-13,Store,North,30,3148.5 -2026-09-13,Store,South,38,4030.28 -2026-09-13,Store,West,30,3279.9 -2026-09-13,Web,East,73,5390.32 -2026-09-13,Web,North,45,3339.45 -2026-09-13,Web,South,53,4159.44 -2026-09-13,Web,West,61,4942.83 -2026-09-14,Mobile app,East,94,6103.42 -2026-09-14,Mobile app,North,82,4736.32 -2026-09-14,Mobile app,South,82,5849.06 -2026-09-14,Mobile app,West,90,5265.0 -2026-09-14,Phone,East,37,1845.56 -2026-09-14,Phone,North,49,2920.89 -2026-09-14,Phone,South,41,2195.96 -2026-09-14,Phone,West,25,1079.75 -2026-09-14,Store,East,20,2027.0 -2026-09-14,Store,North,56,5881.12 -2026-09-14,Store,South,24,2536.08 -2026-09-14,Store,West,48,5481.6 -2026-09-14,Web,East,47,4151.51 -2026-09-14,Web,North,67,5384.12 -2026-09-14,Web,South,83,7172.03 -2026-09-14,Web,West,67,5422.98 diff --git a/docs/public/samples/sales.dash b/docs/public/samples/sales.dash deleted file mode 100644 index 8e010cb..0000000 --- a/docs/public/samples/sales.dash +++ /dev/null @@ -1,49 +0,0 @@ -# Two weeks of sample sales, as a dashboard. -# -# It reads the `sales` view — the one DuckLocal creates when you open -# sales.csv (see the tutorial) — so it works however DuckLocal was launched. -# Validate it without a window: -# -# ducklocal check sales.dash - -query "by_channel" { - sql = <` | -| GEOMETRY | `` | -| Integral float | `3.0` | -| Timestamp | `2026-09-17 04:21:09` — **in UTC, not local time** | -| List / struct / map | pretty-printed | - -The UTC rendering is worth remembering if you are eyeballing timestamps rather -than comparing them in SQL. - -### Filtering - -The filter box does a case-insensitive substring match **across all cells** of -the loaded rows. It is client-side: it never queries the database, and it -counts against the rows that were loaded, not the true result size. - -The filter applies when you press Enter or clear the box, not on every -keystroke. Beside it, the grid reports `visible / total rows`. - -## Row limits - -Results are truncated at whichever of these binds first: - -- **100,000 rows** -- **2,000,000 cells** — so a 400-column result materializes only about 5,000 - rows - -The cell budget exists because a row cap alone does not bound the work: a -`PIVOT` over a high-cardinality column returns one column per distinct value, -and formatting tens of millions of cells would look like a hang. - -Truncation is reported in a banner that quotes the real number of rows that -were materialized. There is **no pagination and no "load more"** — narrow the -query instead. - -## Copying - -Hovering a cell reveals a copy button that puts that cell's text on the -clipboard. That is the only copy affordance: there is no row copy, no range -selection, no "copy as SQL", and no context menu. - -## Export - -`Export CSV` and `Export Parquet` open a small dialog with a path field, -pre-filled with `~/Desktop/export.csv` or `~/Desktop/export.parquet`. - -Two things to know: - -- The export **re-runs the SQL that produced the current rows**, so the file - holds the query's full result set — not the filtered view, and not the - truncated grid. -- There is no file picker and no overwrite prompt. Type a path, and it is - written. - -## Charts - -Charts are derived from the rows already in the grid, in the order the query -returned them. **No aggregation is applied** — these are not `GROUP BY` charts. - -The chart type is chosen for you, based on the first column: - -| First column | Chart | -| --- | --- | -| Temporal (date / timestamp) | Area chart; x is column 0, one series per numeric column | -| Anything else | Bar chart; column 0 is the label, the first numeric column is the value | - -Rows whose value cells are not numeric — `NULL`, for instance — are dropped -before plotting. - -Limits, all announced in a notice line under the chart title: - -| Limit | Behaviour | -| --- | --- | -| 12 series | Extra numeric columns are dropped | -| 1,500 points | The series is bucketed and **averaged** within each bucket | -| 200 bars | Surplus bars are truncated, not merged | - -The title always reports how many points were plotted, so check it before -trusting the shape of a curve. diff --git a/docs/s3.md b/docs/s3.md deleted file mode 100644 index 2550944..0000000 --- a/docs/s3.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -description: "Query objects in Amazon S3 and S3-compatible storage from DuckLocal with DuckDB's httpfs: configure credentials, browse buckets and run SQL on remote files." ---- - -# S3 and httpfs - -**[中文](zh/s3.md)** · [Docs](index.md) - -DuckLocal can read objects from S3 and S3-compatible storage through DuckDB's -`httpfs` extension. Configure it from the **S3** button in the title bar. - -## Configure credentials - -The dialog has four fields: - -| Field | Default | Notes | -| --- | --- | --- | -| Endpoint | `s3.amazonaws.com` | `http://` is honored; otherwise HTTPS is used | -| Region | `us-east-1` | Sent as typed | -| Access Key ID | — | Required | -| Secret Access Key | — | Required, masked, with a reveal toggle | - -Confirming runs the equivalent of: - -```sql -INSTALL httpfs; LOAD httpfs; -CREATE OR REPLACE SECRET ducklocal_s3 ( - TYPE s3, PROVIDER config, - KEY_ID '…', SECRET '…', - REGION '…', ENDPOINT '…' -); -``` - -**Credentials are session-only.** Nothing is written to disk, and they are -dropped when you open or switch a database — reconfigure afterwards. There is -no way to clear them other than reconfiguring. - -## Browse - -Once configured, an **S3** root appears in the sidebar. It loads lazily: -expanding the root lists buckets, and expanding a bucket or prefix lists its -objects. Buckets and prefixes are sorted, and objects show a human-readable -size. A refresh button reloads a level, and also serves as the retry after an -error. - -Listing is capped at **1,000 entries per level**, even when the response says -more are available. There is no deeper paging, no prefix filter box, and no -search — a bucket with more than a thousand objects at one level will appear -complete when it is not. - -## Query objects - -Clicking an object whose key has a data-file extension fills the active editor -with: - -```sql -SELECT * -FROM 's3://bucket/key' -LIMIT 100; -``` - -That is an ordinary query: the read goes through `httpfs`, so DuckDB's -`read_parquet` / `read_csv_auto` behaviour, and its pushdown, apply. The query -replaces whatever the active tab held. - -Keys that are not recognized as data files are not clickable. - -## Limitations - -- **Browsing is read-only.** The browser has no upload, download-to-file, - delete, copy, or bucket-creation action. Queries still download remote data. -- **No session tokens.** The `X-Amz-Security-Token` header is never sent, so - temporary STS credentials will not work — use long-lived keys, or an - endpoint that accepts key/secret alone. -- **Endpoint style is mostly automatic.** Virtual-hosted addressing is used - when the host contains `amazonaws.com`, path style otherwise. For - self-hosted gateways this is usually what you want; for one that needs the - other style, there is no override. -- A wrong region is retried once, using the region DuckDB reports back. If - that fails too, the error is shown as-is. -- Network is required: `INSTALL httpfs` fetches the extension on first use. - Browsing sends HTTP or HTTPS requests to the configured endpoint (`http://` - selects HTTP; otherwise HTTPS is used). These requests send metadata such - as bucket names and key prefixes, plus authentication information in signed - headers; browsing does not upload local database files or query results. - Queries on remote objects download data to your machine through `httpfs`. - -## Troubleshooting - -| Symptom | Likely cause | -| --- | --- | -| Browsing fails immediately after configuring | Region or endpoint wrong; check the message shown in the sidebar | -| Errors on a self-hosted endpoint | Wrong addressing style, or an endpoint that requires a session token | -| `httpfs` installation error | No network, or a proxy that blocks the extension download | -| Credentials seem forgotten | A database was opened or switched, which clears them by design | - -When DuckLocal is packaged as a signed app, loading the `httpfs` extension -needs the `com.apple.security.cs.disable-library-validation` entitlement; the -shipped packaging script already includes it. diff --git a/docs/schema-and-history.md b/docs/schema-and-history.md deleted file mode 100644 index 5c12a9a..0000000 --- a/docs/schema-and-history.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -description: "Browse databases, tables, views and columns in DuckLocal's schema sidebar, generate SELECT queries, change column types and reuse past queries." ---- - -# Schema browser and history - -**[中文](zh/schema-and-history.md)** · [Docs](index.md) - -The sidebar has two tabs: **Schema** and **History** (**表结构** and **查询历史** in Chinese). Beside them, the collapse button (or **⌘B**) hides the sidebar; the button at the left of the title bar, or ⌘B again, brings it back. Whether it is hidden is remembered. - -## The schema tree - -The tree shows, from the top: - -- **Local files** — the data files you have registered, each named by its - view, with its row count. The file name appears beside the view name only - when the two differ (`sales_2` from `sales.csv`), and the folder when two - files share a view name; hover a row for the full path. Its children are the - view's columns. -- **Apps** / **Dashboards** — the analysis apps and `.dash` dashboards you - have opened recently, sorted by name so a row stays put when you click it. - Click one to reopen it as a tab, the way you would a file; the × on hover - takes it off the list, leaving its files and any open tab alone. An entry - whose path no longer exists is dropped from the list. -- **S3** — present once [S3 is configured](s3.md). Loads lazily. -- Each database, then its schemas, then tables and views, then columns. - -Tables show an estimated row count; views show none. Column rows show the -DuckDB data type. The system database and the `information_schema`, -`pg_catalog`, and `system` schemas are hidden. - -**Refresh schema** reloads the catalog and re-attaches the registered files. - -## Generating a SELECT - -Three things fill the active editor when clicked: - -| Click | Generated SQL | -| --- | --- | -| A table's play button | `SELECT * FROM db.schema.table LIMIT 100;` | -| A table's column name | `SELECT col FROM db.schema.table LIMIT 100;` | -| An S3 object that is a data file | `SELECT * FROM 's3://bucket/key' LIMIT 100;` | - -Names are fully qualified as `database.schema.table`, and double-quoted only -when they are not plain identifiers. - -Note that all three **replace the entire buffer** of the active tab — they do -not insert at the cursor. The same is true of clicking a history entry. Save -anything you care about before clicking around. - -## Altering a column type - -A column row offers a type action (not available on view columns, so attached -CSV and Parquet columns cannot be retyped). It opens a free-text dialog -pre-filled with the current type and runs: - -```sql -ALTER TABLE db.schema.table ALTER COLUMN "col" SET DATA TYPE ; -``` - -There is no picker and no validation list — any DuckDB type string works, -including parameterised ones like `DECIMAL(10,2)`. An invalid type comes back -as an error notification. Success reloads the catalog. - -Renaming and dropping columns, and editing column comments, are not available. - -## Removing a registered file - -The **×** on a file row asks for confirmation, then drops the view and forgets -the registration. **The file on disk is not touched.** - -## Query history - -Every run is recorded — successes and failures alike — with a local-time -timestamp, duration in milliseconds, row count (or affected-row count for -DML), and the error text if it failed. Failed entries are shown in red with a -*Failed* tag. - -The list shows the newest **200** entries. Clicking a row refills the active -editor with that SQL and focuses it, replacing whatever was there. - -There is no retention policy and no pruning: the history table grows without -bound, and the UI simply shows the most recent 200. There is also no search, -no filter, no export, and no way to delete an entry from the interface. - -History is stored in DuckLocal's own database file, not in the database you -have open, so it survives switching databases and losing your workspace. See -[Settings and app data](settings-and-data.md) for where it lives. diff --git a/docs/settings-and-data.md b/docs/settings-and-data.md deleted file mode 100644 index 4334af9..0000000 --- a/docs/settings-and-data.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -description: "Where DuckLocal stores its data on your Mac, what it remembers between launches, interface size, themes, language, and how to reset it." ---- - -# Settings and app data - -**[中文](zh/settings-and-data.md)** · [Docs](index.md) - -DuckLocal keeps one file on disk. Everything else lives in memory for the -duration of a session. - -## Where things are stored - -| Platform | Path | -| --- | --- | -| macOS | `~/Library/Application Support/DuckLocal/history.duckdb` | -| Linux (if built there) | `~/.local/share/ducklocal/history.duckdb` | - -That single DuckDB file holds three tables: the query history, the registered -data files, and a small key/value settings table — the interface language, the -open app and dashboard tabs, the recent-documents list, and the app folders -you have trusted. It lives beside a `.wal` -while the app is running. - -Your data is never copied into it. Registered files are referenced by path and -re-attached on launch. - -## What survives a restart - -| Remembered | Where | -| --- | --- | -| Registered data files — path, view name, kind | app data file | -| Query history, including failures | app data file | -| Interface language | app data file | -| Interface size | app data file | -| Whether the sidebar is hidden | app data file | -| Open app and dashboard tabs, with their titles | app data file | -| Recently opened apps and dashboards (the sidebar's **Apps** / **Dashboards**) | app data file | -| App folders you chose to trust | app data file | - -| Not remembered | Notes | -| --- | --- | -| Open query tabs and their SQL | in memory only — past queries are in **History** | -| The results panel contents | in memory only | -| Which database file is open | each launch starts in memory unless you name one | -| Window size and position | fixed at 1440×900, minimum 960×600 | -| Sidebar and results panel sizes | fixed per launch | -| The results filter | in memory only | -| **The theme** | always starts light — see below | -| S3 credentials | session-only by design | - -The theme is the odd one out: the language toggle persists, the theme toggle -does not, and every launch begins in light mode. - -## Language - -The `EN` / `中` button in the title bar switches the interface language -immediately and records the choice. - -On first run — before any setting is stored — the language is taken from the -system locale: `LC_ALL` or `LANG` containing `zh` selects Chinese, anything -else selects English. An unrecognized stored value falls back to Chinese. - -A few strings are deliberately not translated: `DuckLocal`, the `S3` and -`EXPLAIN` button labels, the `EN` / `中` toggle, and the credential placeholders. -Engine and network error messages are surfaced verbatim and are always in -English, whatever the interface language is. - -## Themes - -The sun/moon button toggles between the light and dark theme. There is no -theme picker and no theme file to edit — the two modes are what you get. - -## Interface size {#interface-size} - -Text, icons and controls scale together, in four steps: - -| Size | Base text | Editor text | -| --- | --- | --- | -| Small | 13px | 12px | -| Default | 14px | 13px | -| Large | 16px | 15px | -| Extra large | 18px | 17px | - -Choose one from the **Aa** button in the title bar, or step through them with -**⌘+** (larger), **⌘−** (smaller) and **⌘0** (back to default) — these work -wherever the focus is, the SQL editor included. The choice is remembered, and -survives switching between light and dark. - -Panel sizes you dragged, and the height of a dashboard's plots, stay in pixels: -they are yours to adjust, not the interface's. - -## Resetting - -To start over — clearing history, registered files, remembered tabs, trusted -app folders and the language setting — -quit DuckLocal and remove its app data directory: - -```bash -rm -rf ~/Library/Application\ Support/DuckLocal -``` - -The next launch creates it fresh. **Your data files are never affected by -this**, only DuckLocal's own records. - -## Troubleshooting - -Symptoms, causes and fixes are collected on the [Troubleshooting](troubleshooting.md) page. diff --git a/docs/sql-editor.md b/docs/sql-editor.md deleted file mode 100644 index 926881a..0000000 --- a/docs/sql-editor.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -description: "DuckLocal's SQL editor: query tabs, running and formatting SQL, EXPLAIN plans, schema-aware autocompletion and keyboard shortcuts." ---- - -# SQL editor - -**[中文](zh/sql-editor.md)** · [Docs](index.md) - -Each query tab holds its own editor buffer. The editor highlights real SQL via -tree-sitter, indents with 2 spaces, and shows line numbers. - -## Tabs - -| Control | What it does | -| --- | --- | -| `+` | Appends a new query tab and focuses it | -| Click a tab | Switches to it | -| `×` | Closes a tab — hidden while only one tab remains, so the last one cannot be closed | -| Rename (toolbar) | Opens a dialog to retitle the active tab; an empty name falls back to `Query N` | - -Tabs live in memory only. Their SQL is not saved, so quitting loses every tab -except the fact that you get one fresh tab next launch. - -## Running SQL - -Press **⌘↵** (Cmd+Enter) with the editor focused, or use the `Run` button. - -While a query is running, pressing run again does nothing: there is **no -cancel and no timeout**. Long queries run as long as DuckDB needs, and other -database work queues behind them. If something appears hung, that is why — -check the status bar, or quit and restart. - -How a statement is treated depends on its leading keyword. `SELECT`, `WITH`, -`SHOW`, `DESCRIBE`, `EXPLAIN`, `PRAGMA`, `SUMMARIZE`, `VALUES`, `FROM`, -`TABLE`, `PIVOT`, and `CALL` produce a result set. Anything else (DDL, DML) -reports `Done · N rows affected · took …` instead of a grid. Leading `--` -comments are skipped when deciding; block comments are not. - -## Errors - -A failed statement shows an alert titled *Query failed* with DuckDB's message -verbatim. The message comes from the engine and is always in English, -whatever the interface language is. Nothing is written to the grid, and the -attempt is still recorded in [history](schema-and-history.md) with a failure -marker. - -## Format - -`Format` runs the buffer through `sqlformat` with a 2-space indent and -uppercased keywords, then replaces the entire buffer. It is a no-op on an -empty buffer. - -## EXPLAIN - -`EXPLAIN` runs `EXPLAIN ` and shows the plan as plain monospace text -with the elapsed time, switching the results panel back to the Results tab. - -## Autocompletion - -The completion menu is catalog-aware. Candidates are ranked: - -1. Tables and columns from the schema (up to 35 entries) -2. DuckDB function names -3. SQL keywords - -At most 50 items are offered. Matching is a case-insensitive **prefix** match -on the identifier immediately to the left of the cursor, so `sel` completes to -`SELECT` but `elect` completes to nothing. A function inserts its name and an -opening parenthesis; identifiers that are not plain are inserted double-quoted. - -The keyword and function lists are a curated subset — not every DuckDB -function will appear. - -## Keyboard shortcuts - -DuckLocal defines a handful of shortcuts itself; everything else comes from -the editor and table components, and behaves as it does in any macOS text -field: - -| Shortcut | Action | -| --- | --- | -| ⌘↵ | Run the query | -| ⌘S | Save a dashboard's source, in its source view | -| ⌘+ / ⌘− / ⌘0 | Make the interface larger / smaller / default size — see [Interface size](settings-and-data.md#interface-size) | -| ⌘B | Hide or show the sidebar | -| ⌘F / ⇧⌘F | Find / replace in the editor | -| ⌘Z / ⇧⌘Z | Undo / redo | -| ⌘A | Select all | -| ⌘C / ⌘X / ⌘V | Copy / cut / paste | -| ⌥⌘↑ / ⌥⌘↓ | Add a cursor above / below | -| ⌘← / ⌘→ / ⌥← / ⌥→ | Move by line / word | -| ⌘↑ / ⌘↓ | Move to start / end of document | -| ⌘⌫ / ⌥⌫ | Delete to start of line / previous word | - -There is no menu bar and no command palette. Every other action is a button: -in the toolbar above the editor, in the tab bar, in the sidebar, and in the -title bar. diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md deleted file mode 100644 index b596d07..0000000 --- a/docs/troubleshooting.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -description: "Fixes for common DuckLocal problems: the ducklocal command not found, files that do not attach, name clashes, stuck queries, S3 credentials and dashboards." ---- - -# Troubleshooting - -**[中文](zh/troubleshooting.md)** · [Docs](index.md) - -Find the symptom, read the cause, apply the fix. If yours is not here, -[open an issue](https://github.com/JetSquirrel/DuckLocal/issues) with what you -did and what you saw. - -## Installing and launching - -| Symptom | Cause and fix | -| --- | --- | -| The app will not open on an Intel Mac | Releases are built for Apple silicon only. [Build from source](getting-started.md#install) on Intel | -| `ducklocal: command not found` | The disk image installs the app, not a command. [Link the binary onto your PATH](getting-started.md#add-command) | -| The terminal is busy while the window is open | Opening the GUI from a terminal runs it in the foreground. Launch from Applications instead, or leave that terminal to it | -| History, settings or remembered files stop being saved | A second DuckLocal is running and holds the app-data file. Quit the other one and relaunch | - -## Opening data - -| Symptom | Cause and fix | -| --- | --- | -| `File not found` on a path you named | The path does not exist, or is relative to a different directory than you think. Use an absolute path to be sure | -| A folder reports no data files | Nothing under it matched `.csv`, `.tsv`, `.txt`, `.parquet`, `.json`, `.ndjson`, `.jsonl`, `.xlsx`, `.xls`, `.xlsb` or `.ods` | -| A folder produced fewer files than expected | Hidden entries and symlinks are skipped, and one open request attaches at most 256 files. Open subfolders separately | -| A path opened as a database unexpectedly | Any existing file that is not a data file is treated as a DuckDB database. If it will not open, DuckLocal falls back to memory and shows the error | -| **Not attached …: the database already has a table or view named …** | The open database has its own relation with the name a remembered file uses. DuckLocal never replaces it. Rename or drop one of the two, or remove the file from **Local files** and open it again to get a new name | -| **Cannot restore relative path …** | A file was remembered by a relative path, which cannot be resolved in a new session. Remove it from **Local files** and open it again | -| A view shows `sales_2` instead of `sales` | Another file or table already had that name, so the new one got a suffix | -| A file's view is stale | Views read the file on every query. If a CSV's columns changed shape, use **Refresh schema** in the sidebar | - -## Running queries - -| Symptom | Cause and fix | -| --- | --- | -| **Run** does nothing | A query is already running. There is no cancel and no timeout; quitting and relaunching is the only way to abandon one | -| **⌘↵** shows the editor instead of running | On the first-run screen, ⌘↵ means "give me an editor". Press it again to run | -| Results stop early with a truncation notice | The 100,000-row or 2,000,000-cell cap was reached. Narrow the query; there is no pagination | -| Timestamps look shifted | The grid renders timestamps in UTC, not local time | -| Clicking a header does not sort | There is no client-side sorting. Use `ORDER BY` | -| Clicking a table or history entry wiped my SQL | Those clicks replace the whole editor buffer. Use a new query tab for scratch work | -| An export silently replaced a file | Export writes to the path you give without asking. Choose a new name | - -## S3 - -| Symptom | Cause and fix | -| --- | --- | -| S3 credentials were forgotten | They are session-only by design, and opening or switching a database clears them. Configure S3 again | -| Configuring S3 fails offline | The first use runs `INSTALL httpfs`, which downloads the extension. Connect once, then it is cached | -| Temporary (STS) credentials are rejected | No session token is sent. Use long-lived keys — see [S3 and httpfs](s3.md#limitations) | -| A bucket looks smaller than it is | Listing stops at 1,000 entries per level. Query with a glob such as `'s3://bucket/prefix/*.parquet'` instead | - -## Apps and dashboards - -| Symptom | Cause and fix | -| --- | --- | -| An app tab asks **Run this app?** | The first time a folder opens as an app, DuckLocal asks before running its code, because an app's SQL can read and write anything the SQL editor can. **View source** first if you did not write it; **Trust and run** is remembered for that folder | -| A dashboard plot says a query must be read-only | A `.dash` query tried to write (DDL, DML, `COPY`, `ATTACH`, …). Dashboards only run read-only statements; move the setup into the SQL editor | -| A `PIVOT` in a dashboard is rejected | Without an explicit `IN (…)` list, DuckDB splits `PIVOT` into more than one statement. List the values: `PIVOT t ON channel IN ('Web', 'Store') USING sum(revenue)` | - -## Appearance - -| Symptom | Cause and fix | -| --- | --- | -| The theme resets to light on every launch | The theme is not persisted; the language is | -| Text or icons are too small or too large | Use the **Aa** button in the title bar, or ⌘+ / ⌘− / ⌘0. See [Interface size](settings-and-data.md#interface-size) | -| The interface is in the wrong language | Use the `EN` / `中` button in the title bar; the choice is remembered | - -## Starting over - -To clear history, remembered files, open tabs and settings, quit DuckLocal and -remove its app-data directory: - -```bash -rm -rf ~/Library/Application\ Support/DuckLocal -``` - -Your data files are never touched — only DuckLocal's own records. See -[Settings and app data](settings-and-data.md) for what lives there. diff --git a/docs/tutorial.md b/docs/tutorial.md deleted file mode 100644 index c58ff9d..0000000 --- a/docs/tutorial.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -description: "A ten-minute DuckLocal tutorial with a sample CSV: open it, query it with SQL, chart the results, export them, and ask the same question from the CLI." ---- - -# Your first 10 minutes - -**[中文](zh/tutorial.md)** · [Docs](index.md) - -A guided tour: open a small sales file, ask it a few questions, chart the -answers, and export one. It assumes DuckLocal is installed — if not, start -with [Getting started](getting-started.md). - -## 1. Get the sample file {#sample-file} - -Download [sales.csv](/samples/sales.csv) — two weeks of made-up orders, 224 -rows. Or from a terminal: - -```bash -curl -LO https://jetsquirrel.github.io/DuckLocal/samples/sales.csv -``` - -It has five columns: - -| Column | Type | Example | -| --- | --- | --- | -| `date` | DATE | `2026-09-01` | -| `channel` | VARCHAR | `Web`, `Mobile app`, `Store`, `Phone` | -| `region` | VARCHAR | `North`, `South`, `East`, `West` | -| `orders` | BIGINT | `72` | -| `revenue` | DOUBLE | `4181.04` | - -You did not have to tell DuckLocal any of that: DuckDB reads the header and -infers the types on its own. - -## 2. Open it - -Drag `sales.csv` onto the DuckLocal window. (Or click **Open files…**, or run -`ducklocal sales.csv` if you [added the command](getting-started.md#add-command).) - -A notification confirms **Created view sales.** In the sidebar, **Local -files** now lists `sales` with its 224 rows; expand it to see the columns and -their types. - -## 3. Look at the rows - -In the sidebar, click the play button beside `sales`. The editor fills with a -`SELECT * … LIMIT 100` for it — press **⌘↵** to run it. - -The grid under the editor shows the rows. Try the filter box above it: type -`Store` and press Enter to keep only the rows that mention it. The filter -works on the rows already loaded and never re-queries. - -## 4. Ask a question - -Replace the SQL with this and press **⌘↵**: - -```sql -SELECT channel, round(sum(revenue), 2) AS revenue -FROM sales -GROUP BY channel -ORDER BY revenue DESC; -``` - -| channel | revenue | -| --- | --- | -| Mobile app | 290549.76 | -| Web | 289544.8 | -| Store | 240067.6 | -| Phone | 82511.2 | - -Now switch the results panel from **Results** to **Chart**. Because the first -column is text, you get a bar per channel, sized by the first numeric column. - -::: tip Autocompletion -While you type, the editor offers table and column names from the sidebar -first, then DuckDB functions and SQL keywords — type `rev` and `revenue` is -the first suggestion. -::: - -## 5. Chart a trend - -Charts are drawn from the rows exactly as the query returns them, so shape -the result the way you want it plotted. One column per channel gives one line -per channel: - -```sql -SELECT - date, - round(sum(revenue) FILTER (WHERE channel = 'Web'), 2) AS web, - round(sum(revenue) FILTER (WHERE channel = 'Mobile app'), 2) AS mobile, - round(sum(revenue) FILTER (WHERE channel = 'Store'), 2) AS store -FROM sales -GROUP BY date -ORDER BY date; -``` - -With a date in the first column, **Chart** draws an area chart over time, -one series per numeric column. [Results and charts](results-and-charts.md) -covers the rules and limits. - -## 6. Export the answer - -With the trend still in the results panel, click **Export CSV**. The dialog -suggests `~/Desktop/export.csv`; change the path if you like and confirm. - -Export re-runs the query, so the file holds the full result — not just what -is visible in the grid. **It overwrites an existing file without asking.** - -## 7. Find it again tomorrow - -Open the **History** tab in the sidebar: every query you ran is there, the -failed ones included. Click one to put it back in the editor — note that this -replaces what the editor holds. - -Quit DuckLocal and launch it again. `sales` is still under **Local files**: -opened files are remembered by path and re-read on every launch, so an edit -to the CSV shows up the next time you query it. - -## 8. Bonus: the same question from a terminal - -If you added the `ducklocal` command, the CLI answers without opening a -window — handy for scripts and for AI agents: - -```bash -ducklocal query --format md --sql " - SELECT channel, round(sum(revenue), 2) AS revenue - FROM 'sales.csv' GROUP BY channel ORDER BY revenue DESC" -``` - -Leave out `--format md` for structured JSON. The [CLI guide](cli.md) and the -official agent skill are the place to start. - -## Next - -- Point DuckLocal at your own files or folders — see [Data sources](data-sources.md) -- Query files in S3-compatible storage — see [S3 and httpfs](s3.md) -- Build a dashboard of saved queries — see [Analysis apps and dashboards](analysis-app.md#dashboard-specs-dash) diff --git a/docs/zh/analysis-app.md b/docs/zh/analysis-app.md deleted file mode 100644 index b6199a1..0000000 --- a/docs/zh/analysis-app.md +++ /dev/null @@ -1,254 +0,0 @@ ---- -description: "为 DuckLocal 编写分析应用:基于 query() 的 JavaScript 数据视图、热重载、组件目录、信任提示与 HTML 导出。" ---- - -# 分析应用(JavaScript) - -**[English](../analysis-app.md)** · [文档](index.md) - -分析应用是工作区里的一个标签页,内容是你自己写的 JavaScript 应用。JavaScript 就是声明本身: -应用的 `render` 函数即界面描述,时间范围控件、多选 chips、KPI 卡片、图表与表格都由你组合。 -分析应用通过下面的 host 函数读取窗口已经打开的数据库——同样的表、视图与已附加文件。 - -它适合为数据做一个专门的界面:看板、只针对某张表的浏览器、每天早上跑一次的报表。分析应用像查询一样 -开合,和 SQL 标签并列。 - -## 打开应用 - -以下任一种方式都会立刻加载目录: - -- 标签条末尾的 **+**,然后选 **打开应用…**; -- 把应用目录拖到窗口上; -- 在命令行里指定:`ducklocal examples/analysis_app`。 - -无法作为应用的目录——文件、已不存在的路径、或没有 `main.js` 的文件夹——会在**标签页内**被拒绝, -并说明是哪个目录、缺了什么。取消选择或选错目录都不会丢掉正在工作的应用。 - -应用用标签自带的关闭按钮关闭,也能像查询标签一样重命名。已打开的应用目录会被记住:下次启动自动 -恢复;如果某个目录已被移走或删除,会按名字报告出来,而不是悄悄忘记。 - -应用在自己的 DuckDB 连接上运行,连的是主窗口已经打开的那个数据库:两边看到同样的表、视图与已附加 -文件,但互不等待——一个看板刷新六条语句,不会再把 SQL 编辑器冻住。第二个连接带不过来的是连接级状态: -SQL 编辑器里建的 `TEMP` 表、设的 `SET`,应用看不到,反之亦然。所有应用共用这一个连接,因此应用之间 -仍然会互相排队。 - -## 查看定义 - -应用头部的 **查看定义** 会显示该目录与入口文件的源码(只读)。应用就是一个普通的 JavaScript -目录,这就是它的全部定义——没有第二份隐藏形式需要查看。 - -## 重新加载 - -保存应用目录下的 `.js` 或 `.mjs` 文件,应用就会重新加载。宿主每 250 毫秒扫描一次目录,并在最后一次 -变更后等待 200 毫秒,因此一次保存多个文件只会触发一次重载。以点开头的文件、`node_modules/` 与 -`target/` 会被跳过。只有当前显示的目录会被监控。 - -应用头部的 **重新加载** 可以随时手动触发同样的流程。 - -重载失败时,**上一个成功加载的应用会保留**,错误信息显示在它上方、就在这个标签页里。如果应用从未 -成功加载过,错误信息会占据标签页主体。 - -重载重启的是应用的 JavaScript,不是它的连接。应用连接是一个所有应用共用的长连接,所以应用在连接上 -留下的状态——一次 `ATTACH`、一个 `SET`、一张 `TEMP` 表——在重载之后仍然存在。请把应用的初始化写得 -可以安全地执行两遍(`ATTACH IF NOT EXISTS …`、`CREATE OR REPLACE TEMP TABLE …`),而不是假设每次 -加载都面对一个干净的连接。 - -## Host 函数 - -从 `ducklocal` 模块导入: - -```js -import { catalog, query, appDir, sqlLiteral, sqlIdentifier } from "ducklocal"; -``` - -它们都在应用连接上执行——和主窗口同一个数据库——出错时抛出 JavaScript `Error`。除 `appDir` 之外 -都可以在任何时刻调用;`appDir` 在应用加载期间作答。 - -### `catalog()` - -```ts -catalog(): Promise - -interface CatalogEntry { - database: string; // 例如 "memory" - schema: string; // 例如 "main" - name: string; // 例如 "orders" - kind: "table" | "view"; - estimated_rows: number | null; - comment: string | null; - columns: { name: string; type: string }[]; // type 为 DuckDB 类型,如 "DECIMAL(38,10)" -} -``` - -连接上每个数据库里的所有表与视图——窗口打开的那个数据库,以及任何被 `ATTACH` 的数据库(无论由窗口 -还是应用自己附加)——但不包括 DuckDB 自身的 catalog(`information_schema`、`pg_catalog`、`system`)。 -`entry.database` 标明该条目属于哪个数据库,限定名字时请用上它。表排在视图之前。DuckDB 的标识符 -不区分大小写,且表与视图共用一个命名空间,所以用它拼 SQL 时请带上 schema 限定。 - -### `query(sql, limit?)` - -```ts -query(sql: string, limit?: number): Promise - -interface QueryResult { - columns: { name: string; type: string }[]; - rows: any[][]; // 每行一个数组,每个元素对应一列 - row_count: number; // 实际返回的行数 - truncated: boolean; // 行数上限提前截断时为 true - elapsed_ms: number; -} -``` - -- `limit` 默认为 **1000**;小于 1 会被拒绝,超过 100000 会被截断到该上限。此外还有 2,000,000 个 - 单元格的预算,因此很宽的结果返回的行数会少于 `limit`。**请务必读取 `truncated`。** -- `type` 是 DuckLocal 渲染的 Arrow 类型,例如 `Int64`、`Utf8`、`Decimal(38, 10)`、 - `Timestamp(Microsecond, None)`。 -- 语句按原样 prepare 并执行;`query()` 不会拆分或校验多语句 SQL。 - -### `appDir()` - -```ts -appDir(): string // 应用自己的目录,绝对路径 -``` - -应用不能读文件系统,所以这是它引用随应用一起分发的数据的方式—— -`query("SELECT * FROM " + sqlLiteral(appDir() + "/orders.csv"))` 不需要用户附加任何文件、 -也不需要窗口里打开任何东西。它在应用加载期间作答:请在 `init()` 里调用一次并保存结果。 - -`panelDir()` 是改名之前留下的旧别名,仍然可用;新代码请使用 `appDir()`。 - -### `sqlLiteral(value)` - -```ts -sqlLiteral(value: string): string // 例如 "O'Brien" -> 'O''Brien' -``` - -把字符串转义并加引号成 SQL 字符串字面量。凡是来自应用自身状态的值——筛选条件、渠道 id、日期—— -都应该用它,而不是手工拼进 SQL。包含 `NUL` 字节会被拒绝,因为 SQL 字面量无法承载它。 - -### `sqlIdentifier(name)` - -```ts -sqlIdentifier(name: string): string // 例如 "my table" -> "my table" -``` - -同一件事的另一半:表名、视图名、列名**这类标识符**,加上双引号,让它被当作一个名字读取,并且严格按 -写法匹配。标识符不是字符串字面量,而应用用来拼 SQL 的名字往往不是自己起的——`catalog()` 返回的是数据库 -里实际有的东西,`my table`、`Order`、名字里带 `"` 的都会出现。空名字和含 `NUL` 字节的名字会被拒绝: -它们都不指向任何东西,加上引号只会把这件事掩盖掉。 - -```js -const entry = (await catalog()).find((table) => table.name === "orders"); -const from = `${sqlIdentifier(entry.schema)}.${sqlIdentifier(entry.name)}`; -const rows = await query(`SELECT count(*) FROM ${from}`); -``` - -### 单元格编码 - -当“不丢信息”时,单元格就是普通 JSON——`null`、布尔、字符串,以及能被 IEEE double 精确表示的数值。 -其余情况一律以带 `encoding` 字段的对象返回,与 `ducklocal query` 命令行的编码完全一致,因此不会有 -数字被悄悄截断: - -| 值 | 传入 JavaScript 的形式 | -| --- | --- | -| `NULL` | `null` | -| `BOOLEAN` | `true` / `false` | -| ±2^53−1 以内的整数 | number | -| 更大的整数(`HUGEINT`、`UBIGINT` 等) | `{ "encoding": "integer", "value": "170141183460469231731687303715884105727" }` | -| `DECIMAL` | `{ "encoding": "decimal", "value": "12345678901234567890.1234567890" }` | -| 非有限 `FLOAT`/`DOUBLE` | `{ "encoding": "float", "value": "inf" }` | -| `DATE` | `{ "encoding": "date", "unit": "Day", "value": "19783" }` | -| `TIMESTAMP` | `{ "encoding": "timestamp", "unit": "Microsecond", "value": "1709296496789000" }` | -| `TIME` | `{ "encoding": "time", "unit": "Microsecond", "value": "45296789000" }` | -| `INTERVAL` | `{ "encoding": "interval", "months": 0, "days": 1, "nanos": "0" }` | -| `BLOB`、`GEOMETRY` | `{ "encoding": "hex", "value": "00ff" }` | -| `LIST` / `ARRAY` | 数组 | -| `STRUCT` | `{ "encoding": "struct", "fields": [["name", ], …] }` | -| `MAP` | `{ "encoding": "map", "entries": [[, ], …] }` | -| `UNION` | `{ "encoding": "union-value", "value": }` | - -`DATE` 的 `19783` 是自 1970-01-01 起的天数;`TIMESTAMP` 与 `TIME` 是按 `unit` 计的纪元或当日零点 -以来的计数。这些是存储值而非格式化文本:请自行格式化,若想要字符串形式,请在 SQL 中把列 -`CAST` 成 `VARCHAR`。 - -## 可用组件 - -应用使用与 shell 相同的组件目录,从 `gpui-component` 导入:`GroupBox`(带标题的卡片)、 -`Progress`(条)、`Toggle`、`Badge`、`Tag`、`Alert`、`Empty`、`Collapsible`、 -`DescriptionList`、`DataTable` 与 `DataTableState`、`Table` 家族、`Sidebar`、`Resizable`、 -`Scroll`,以及图表 `BarChart`、`LineChart`、`AreaChart`、`PieChart`、`RadarChart`。 -布局原语(`div`、`h_flex`、`v_flex`、`Button`)来自 `gpui-kit` 与 `gpui-base`。 - -没有 `ToggleGroup`:分段控件或多选 chips 用一组 `Toggle` 组合而成。仓库里的 -[`examples/analysis_app`](https://github.com/JetSquirrel/DuckLocal/tree/main/examples/analysis_app) -就是完全用这些搭出来的一份完整看板,最适合拿来照抄。 - -每个应用目录都带一份 `jsconfig.json` 和生成的 `gpui-kit.d.ts`。保存之前,先按运行时真正 -会给它的 API 检查一遍: - -```sh -npx --yes -p typescript tsc -p <应用目录>/jsconfig.json --noImplicitAny false -``` - -它会报出组件上并不存在的方法——这类错误运行时只会在渲染时、在应用自己的错误区域里拒绝, -而那里不会写进 DuckLocal 的日志。它也有盲区:`gpui-base` 的原语(`div`、`h_flex`、`v_flex`、 -`Button.new`)类型很松,写错方法这里查不出来,仍然只能在渲染时才暴露。 - -## SQL 没有沙箱 - -`query()` 在 DuckLocal 自己的数据库上执行,**拥有 DuckLocal 与用户的权限**。应用能做的事和 SQL 编辑器完全一样, -包括 `COPY` 写文件、`ATTACH` 其他数据库、`INSTALL`/`LOAD` 扩展,以及查询已配置好的 S3 视图。请把应用 -里的 JavaScript 当作你主动选择运行的代码,就像对待一个 shell 脚本那样。 - -因此这个选择会明确征求你的同意。一个文件夹第一次作为应用打开时——无论来自命令行、拖放、选择器,还是启动时恢复的 -标签页——标签页会先说明应用的 SQL 能做什么并等待:**先看源码**只显示入口文件、不运行,**信任并运行**才会运行。 -同意按文件夹记住,之后的启动以及保存后的每次重新加载都不再询问。`ducklocal export --html` 运行的是你在命令行 -上点名的应用,不会询问。 - -应用拿不到的,是进程的其他能力: - -- **没有文件系统、网络、进程与环境变量模块。** 除非宿主授予,否则脚本无法使用 `fs`、`net`、 - `process` 等模块;DuckLocal 一律不授予。 -- **拿不到 S3 凭据。** S3 浏览器的密钥保存在 DuckLocal 自己的 Rust 状态里,由 DuckLocal 的签名客户端使用, - 从不会写入 DuckDB 连接,host 模块也无法访问。不过,如果用户自己的连接配置了 httpfs,应用依然可以 - 执行使用它的 SQL。 -- **host 模块就是全部接口。** 只有上面几个函数会跨到 Rust 一侧。 - -## 导出为 HTML - -`ducklocal export --html <目录>` 把应用跑一次,并把它向数据库询问的内容写进一个自包含 HTML 文件,用来把应用里的数字发给没有 DuckLocal 的人。命令、选项和退出码见 [CLI 指南](cli.md#把应用导出为独立-html)。捕获在应用安静下来时结束,或到达 `--timeout` 秒数(默认 15)时结束,以先到者为准;若是超时结束,JSON 里的 `stop_reason` 为 `deadline`,报告中会出现明显的警告,说明内容可能不完整。 - -报告给的是应用的数据,不是它的界面:导出的只有 `query()` 返回的内容,按调用顺序、每条不同的语句一节——同一条语句重复执行会并入同一节,并标注执行了多少次——而且每次调用都会被捕获,包括非 `SELECT` 的语句(如 `ATTACH`)。`catalog()` 调用会成为一节表与列的清单,不占语句编号。语句第一行若以 `-- title: …` 注释开头,该注释会成为这一节的名字(「Statement N — title」);SQL 本身按原文展示。每个结果都以表格呈现;当结果恰好是两列、不超过 25 行、且第二列为非负数值时(第一列作为柱子的标签),表格上方还会附一张内联柱状图,其他情况下只有表格。 - -报告**不包含**应用画出的任何东西:KPI 卡片、图表、以及由 JavaScript 常量拼出来的表格都不会进入文件——导出记录的是查询,不是渲染;应用画的是原生组件,内容在布局时才确定,没有任何可读出并复现图表柱子的描述。报告里必须出现的常量,可以改从 SQL 里送出:`SELECT * FROM (VALUES ('Q1', 120), ('Q2', 95)) AS t(quarter, total)`。 - -因为它是加载状态,只在点击时才执行的语句不在报告里,重新加载之后的内容也不在。应用的 JavaScript 权限始终如一:导出就是运行应用,和把它开在标签页里完全一样。 - -## Dashboard 规格文件(.dash) {#dashboard-specs-dash} - -`.dash` 文件把 dashboard 声明为数据——query 与 plot block,没有 JavaScript——适合「已保存查询 + 标准图表」的常见场景。格式的完整说明见 [Dashboard(.dash)](dashboards.md);`ducklocal check` 校验见 [CLI 指南](cli.md#校验-dashboard-规格文件)。 - -打开方式与应用相同:在标签栏的 `+` 菜单里选 **打开 Dashboard…**,在命令行指定(`ducklocal dashboard.dash`),或把文件拖到窗口上,就会以 dashboard 标签页的形式打开,与查询、应用并列。标签页在窗口自己的连接上执行规格里的查询——因此能看到 `TEMP` 表等连接级状态,也会与编辑器的查询排队——并把每个 plot 画成竖直堆叠中的一格,分隔条可拖动调整高度。每个 plot 以默认高度起步,堆叠高过标签页时可以滚动,而不是把所有 plot 挤进一屏。只有只读语句会被执行:可能写入的查询(DDL、DML、`COPY`、`ATTACH` 等)在到达连接之前就被拒绝,因此打开别人发来的 `.dash` 文件不会改动你的数据。某个 plot 的查询失败时,原因显示在它自己的格子里,其余部分照常绘制。工具栏的重新加载会重读文件并重跑所有查询;重载后的规格若不再通过校验,不会替换掉仍在工作的 dashboard,而是在上方显示原因。已打开的 dashboard 会像应用一样被记住,下次启动自动恢复。 - -标签页同时也是编辑器:源码视图可以直接修改文件,带语法高亮(heredoc 里的 SQL 与 SQL 编辑器同样着色)、补全和诊断,用保存按钮或 ⌘S 写回——保存后的规格若不再通过校验,仍在工作的 dashboard 不会被替换,并会显示原因。在 GUI 之外,`ducklocal lsp` 把同样的补全、诊断、悬停和跳转定义提供给任何支持 LSP 的编辑器(见 [CLI 指南](cli.md#用-lsp-编辑-dashboard-规格文件))。 - -## 已知限制 - -- **标签页里的应用没有窗口级浮层。** shell 的对话框、面板、toast 与 tooltip 浮层,只有在 shell 自己的 - 根视图是窗口首视图时才能被找到。而在标签页里,这个位置由 DuckLocal 的根视图占据——否则 DuckLocal 自己的对话框 - 会出问题——因此 `window.open_dialog`、`window.open_sheet`、`window.push_toast` 会抛出 - `TypeError`,内容是 *needs a ShellRoot as the window's first view*,和你自己代码里的其他错误一样会 - 显示出来。tooltip 是例外,也是唯一静默的一个:它由 hover 监听器挂上,那里没有地方抛错,所以应用里的 - tooltip 只是永远不出现。请把应用界面设计在自身范围内——用展开区域代替模态框。 -- **重新加载由 DuckLocal 自己实现,而不是 shell 的 watcher。** gpui-shell 的热重载依赖 - `runtime.watch` / `runtime.refresh`,它们只对运行时自己创建的 `ShellRoot` 生效;嵌入宿主走不到这条 - 路径,因此 DuckLocal 自己监控目录,并通过 `load_application` / `mount_application` 重载。代价是: - 只监控 `.js`/`.mjs` 文件,应用读取的其他文件不会被监控。 -- **重载在主线程上编译。** 脚本运行时不可跨线程传递,因此应用的挂载发生在主线程;模块图很大时, - 加载期间窗口会卡顿。首次加载会推迟到标签页的第一帧之后,所以无论哪种情况标签页都会立刻出现。 -- **所有应用共用一个连接,且不能取消。** 应用不再阻塞主窗口,但仍然互相阻塞:它们共用一个连接、 - 一把锁,所以一个应用里的长查询会拖住其他应用。做不到一个应用一个连接——host 函数拿到的是参数, - 不是调用者,`query()` 执行的那一刻没有任何东西能说明是哪个应用在问。取消执行中的查询同样没有暴露: - 请把应用的语句写得有界,而不是指望中途叫停。 -- **`row_count` 是返回的行数,不是匹配的行数。** 当 `truncated` 为 `true` 时,后续行不可得;需要计数 - 请在 SQL 里聚合,而不是在 JavaScript 里数。 diff --git a/docs/zh/cli.md b/docs/zh/cli.md deleted file mode 100644 index f2a6b3c..0000000 --- a/docs/zh/cli.md +++ /dev/null @@ -1,266 +0,0 @@ ---- -description: "用 ducklocal CLI 无界面执行 DuckDB SQL:结构化 JSON 输出、Markdown 表格、数据概览、文件转换、dashboard 校验与官方 AI agent skill。" ---- - -# AI CLI 与官方 skill - -**[English](../cli.md)** · [文档](index.md) - -## 无窗口运行 - -`ducklocal query` 执行 SQL,不初始化 GUI、历史、注册文件、语言设置或 GUI 全局连接。每次调用创建独立连接。无参数或文件/目录/glob 参数仍打开原有 GUI;名为 `query`、`profile`、`export`、`check`、`dash` 的 GUI 路径请写 `./query`、`./profile`、`./export`、`./check`、`./dash`。 - -`ducklocal export` 是唯一会启动窗口平台的子命令:分析应用要渲染,渲染需要窗口。它打开一个隐藏窗口、绘制一帧,在应用不再查询后退出,屏幕上不会出现任何东西。 - -当前发布范围仍是 **macOS 12 及以上、Apple 芯片**,不依赖额外 DuckDB CLI。包含此功能的 app 可直接调用内部二进制: - -```bash -/Applications/DuckLocal.app/Contents/MacOS/ducklocal --help -/Applications/DuckLocal.app/Contents/MacOS/ducklocal --version -``` - -也可从本仓库 `cargo build --locked`,运行 `./target/debug/ducklocal`。以下示例假定该二进制在 PATH 中,名称为 `ducklocal`。旧版可能没有 `query`,先检查 help。JSON 和 Parquet 已编入二进制,不在查询时下载。 - -## 查询选项 - -```bash -ducklocal --help -ducklocal --version -ducklocal query --help -ducklocal query --sql "SELECT 1 AS n" -ducklocal query --sql "SELECT 1 AS n" --format md -ducklocal query --sql-file analysis.sql --limit 100 -ducklocal query --sql-file - < analysis.sql -ducklocal query --database warehouse.duckdb --sql "SHOW TABLES" -``` - -- 必须且只能提供 `--sql SQL` 或 `--sql-file FILE`。文件必须为 UTF-8;`-` 从 stdin 读取。每次只允许一条 SQL。打开目标数据库或执行操作前用 DuckDB 的解析器验证;支持注释、引号中的分号、尾部分号,不会只执行脚本的一部分。 -- `--database PATH` 默认以**只读**打开**已有文件**;省略则用新的内存数据库。`--read-write` 必须搭配 `--database`,显式允许写入/创建数据库,不创建父目录。打开失败不回退到内存。 -- `--limit N` 为正整数,默认 1000,限制返回行数;另有 2,000,000 个单元格的预算。额外读取一行判断 `truncated`。这不限制计算量或 DuckDB 内部结果缓冲;单个大单元格仍可能占用很多内存。 -- `--format json`(默认)是下面的契约;`--format md` 把同一份结果渲染成 Markdown 表格,供文档或 agent 阅读。其余行为完全一致:同样的 SQL、同样的限制、同样的错误。 -- 重复/未知参数、缺失值、空 SQL、非法 limit 均报错。参数和值分开,不支持 `--flag=value`。相对路径基于进程工作目录,不是 SQL 文件目录。Shell 路径需引号;SQL 路径中的单引号双写(`'O''Brien.csv'`);SQL 标识符用双引号。 - -**数据库只读不是文件系统或网络沙箱。** `COPY` 仍可写文件。执行前确认输出路径、覆盖文件、数据库修改、安装扩展和外部访问都符合用户授权。不自动安装扩展,不自动重试;授权后仍可显式执行 `INSTALL`/`LOAD`,已有扩展可能自动加载。失败命令也可能已经产生副作用(例如输出失败前已写入),重试前检查目标。 - -### Markdown 输出 - -`--format md` 是一种渲染,不是第二份契约:值就是 JSON 里的那些值,按结果表格展示它们的方式写出。 - -| 值 | 渲染结果 | -| --- | --- | -| `NULL` | `NULL` | -| 整数、DECIMAL、浮点 | 值本身携带的全部数字——`DECIMAL(38,10)` 保留其标度,`NaN`/`inf`/`-inf` 原样写出 | -| `DATE` | `YYYY-MM-DD` | -| `TIMESTAMP` | `YYYY-MM-DD HH:MM:SS[.ffffff]`,只在确有小数时带小数。不附加时区;原始计数在 `--format json` 里 | -| `TIME` | `HH:MM:SS[.ffffff]` | -| `INTERVAL` | `1 months 2 days 3000 ns` | -| `BLOB`、`GEOMETRY` | `0x00ff`,过长时以 `…` 省略 | -| `LIST`、`STRUCT`、`MAP` | `[1, 2]`、`{x: 1}`,超过 120 字符省略 | - -单元格里的 `|` 会被转义、换行变成 `
`,所以值不会破坏所在表格。零行结果后跟 `_0 rows._`;被 `--limit` 或单元格预算截断的结果后跟 `_Truncated at N rows: …_`——预览不该读起来像完整答案。错误行为不变:JSON 写到 stderr,stdout 为空。 - -## 探查与转换 - -确认文件实际存在后: - -```bash -ducklocal query --sql "DESCRIBE SELECT * FROM 'sales.csv'" -ducklocal query --sql "SELECT * FROM 'sales.csv'" --limit 20 -ducklocal query --sql "SELECT sum(amount) AS total FROM 'sales.csv'" -# 仅在确认此输出路径已获授权后运行: -ducklocal query --sql "COPY (SELECT * FROM 'sales.csv') TO 'sales.parquet' (FORMAT PARQUET)" -ducklocal query --sql "SELECT count(*), sum(amount) FROM 'sales.parquet'" -ducklocal query --sql "DESCRIBE SELECT * FROM 'events.json'" -``` - -先 DESCRIBE,不猜 `amount` 等列名。完整统计应在 SQL 内聚合,不能累加截断预览。CLI 不共享 GUI 注册视图,也不共享其他调用的内存表;需要持久化时显式使用数据库: - -```bash -# 分两次调用执行,每次只有一条语句;写入必须获得授权。 -ducklocal query --database warehouse.duckdb --read-write --sql "CREATE TABLE sales AS SELECT * FROM 'sales.csv'" -ducklocal query --database warehouse.duckdb --sql "SELECT count(*) FROM sales" -``` - -数据库锁冲突直接报错。关闭其他写入者(包括 GUI),或使用授权的副本;不要删锁文件、不要偷偷换成别的数据库。 - -## JSONL 与嵌套 JSON - -`read_ndjson_objects` 是换行分隔 JSON(每行一个对象,`.jsonl`/`.ndjson`)的读取函数;`read_json`/`read_json_auto` 读取的是 JSON 文档(一个数组或单个对象)。读 JSONL 文件时请显式写出读取函数,不要依赖自动探测。`json_extract_string(col, '$.a.b[0].c')` 沿嵌套路径——对象键与数组下标——取值并返回 VARCHAR: - -```bash -ducklocal query --sql "SELECT json_extract_string(event, '$.payload.items[0].sku') AS sku, count(*) AS n FROM read_ndjson_objects('events.jsonl') GROUP BY 1 ORDER BY n DESC" -``` - -叶子不是字符串、想要 JSON 形式时改用 `json_extract`。 - -## 数据画像 - -`ducklocal profile` 回答的是「该画什么图、用什么刻度、怎么格式化数字」这一类在动手之前必须确定的问题。`DESCRIBE` 只告诉你某列是 `DOUBLE`;画像会告诉你它实际只用两位小数、最大值是中位数的一千倍、日期在中间断了十一天。 - -```bash -ducklocal profile sales.csv -ducklocal profile orders.parquet -ducklocal profile "my orders" --database warehouse.duckdb -``` - -TARGET 是数据文件(`csv`、`tsv`、`txt`、`parquet`、`json`、`ndjson`、`jsonl`),或工作簿(`xlsx`、`xls`、`xlsb`、`ods`,其第一个工作表会被导入为 TEMP 表再画像),或者配合 `--database` 时是表名/视图名。带点的名字按 `schema.table` 拆开并逐段加引号,所以带空格或大写的名字可以照原样写。TARGET 指向不存在的东西是参数错误(退出码 2),不是 SQL 错误。 - -返回一个 JSON 对象:`target`、`relation`(统计实际执行的 SQL 关系)、`row_count`、`elapsed_ms`,以及按关系自身列序排列的 `columns`。每列包含: - -| 字段 | 含义 | -| --- | --- | -| `name`、`type` | 与 `DESCRIBE` 一致 | -| `nulls` | 该列为 `NULL` 的行数 | -| `distinct` | 精确值,不是估算 | -| `unique` | 当 `distinct` 等于 `row_count` 时出现且为 `true` | -| `min`、`max` | 以文本给出,`DECIMAL` 因此不丢位数 | -| `decimals` | 小数点后**实际用到**的位数,不是声明的 scale | -| `median` | 该列真实存在的一个值,不是两个值之间的插值 | -| `max_over_median` | 最大值是中位数的多少倍 —— 决定用线性刻度还是对数刻度的那个数 | -| `covered_days`、`span_days`、`missing_days` | 该列出现过的天数、首尾之间的天数、以及两者之差:`0` 表示连续,非零就是折线会直接画过去的空洞 | - -`decimals`、`median`、`max_over_median` 只出现在数值列,日期三项只出现在 DATE/TIMESTAMP 列。`LIST`、`STRUCT`、`MAP`、`UNION` 列只报 `nulls` —— 这些类型没有定义 `min`/`max`。 - -统计是精确的,会完整扫描整个关系,所以一次画像等于一次全表扫描。`--limit` 对它不适用:对样本做画像不算画像。 - -## 把应用导出为独立 HTML - -`ducklocal export` 回答的是「那个应用当时显示的是什么」,给没有 DuckLocal 的人看。它把应用跑一次——同一套运行时、同一个 host 模块、与 `query` 相同的数据库规则——然后把应用 `query()` 发出的语句和结果写进一个自包含的 HTML 文件。 - -```bash -ducklocal export --html examples/analysis_app -ducklocal export --html --out report.html --database warehouse.duckdb apps/sales -``` - -- `--html` 必填,也是目前唯一的格式。APP 是应用目录(其中含 `main.js`)或指向该 `main.js`,按 GUI 的解析方式解析;两者都不是则报参数错误(退出码 2)。 -- `--out FILE` 指定输出路径,默认写到工作目录下的 `./<应用目录名>.html`。目标已存在时必须加 `--force`,且这项检查发生在运行应用之前——拒绝不花任何代价。 -- `--database PATH` 与 `--read-write` 的含义与 `query` 完全一致:已有文件默认只读,省略则为内存库。应用就在这条连接上运行,所以需要写库的应用要加 `--read-write`。 -- `--timeout SECONDS` 为正整数,默认 15:应用停止查询片刻后捕获结束,或到达时限结束,以先到者为准。 -- 该命令会启动窗口平台:应用要渲染,渲染需要窗口。窗口是隐藏的、不会出现。 - -stdout 为单个 JSON 对象: - -```json -{"html":"/abs/report.html","app":"/abs/app","queries":2,"rows":212,"app_errors":0,"captured_ms":630,"stop_reason":"settled"} -``` - -`queries` 是捕获到的语句数,`rows` 是其中成功语句的行数合计,`app_errors` 是应用运行期间记录的报错条数。`stop_reason` 为 `settled` 表示应用自己安静了下来,`deadline` 表示被 `--timeout` 时限截断——此时报告可能缺少语句,HTML 中会出现明显的警告说明这一点。 - -报告包含:应用目录、所用数据库、导出时间,以及每条语句一节——SQL、列名与 Arrow 类型、结果表格,并在结果是「每行一个名称 + 一个数值」时附一张柱状图。`catalog()` 调用会成为一节表/视图/列清单。同一语句被反复执行只出现一次,展示最后一次结果。 - -报告**不包含**应用自身的布局与图表。应用画的是原生组件,柱状图的数值是在布局时决定的、没有任何可读出的描述——所以导出给出的是应用所依据的数据,而不是它搭出的界面。筛选、开关和后续刷新同样不在其中,文件里也没有 JavaScript。它是应用加载状态的快照,报告开头就写明了这一点。 - -应用的 JavaScript 权限与平时完全一样:`query()` 可以 `COPY`、`ATTACH`、写文件。导出不是沙箱。 - -退出码:**0** 已写出文件;**2** 命令行有误、应用路径指不到东西、目标文件已存在;**1** 应用加载失败(不写文件),或应用加载后失败(仍写出报告,错误记在报告里,stderr 消息会指明文件路径)。应用类失败的错误 kind 为 `app`。 - -## 校验 dashboard 规格文件 - -格式本身——block、属性、图表类型、SQL 规则与常见信息——见 [Dashboard(.dash)](dashboards.md);本节讲这个命令。 - -`.dash` 文件以声明的方式描述一个 dashboard——像 Terraform 声明基础设施那样,用 block 写查询和图表,用引用连接它们——而不是像分析应用那样用脚本来画。两种格式并存:规格文件覆盖「查询 + 标准图表」,人和 agent 都容易写、容易 diff;需要定制布局和交互时仍用应用。 - -```hcl -query "latency" { - sql = < 'NULL'`。 - -两个修法可以合并:`try_cast(NULLIF(amount, 'NULL') AS DOUBLE)`。 - -## 数据库文件 - -任何**存在**且不是数据文件的路径,都会被当作 DuckDB 数据库打开,而不是作为视图挂载。扩展名无关紧要:`.db`、`.duckdb` 乃至 `.md` 路径都会被当作数据库,能否真正打开由 DuckDB 决定。 - -有两点值得了解: - -- **无法通过指定名字来新建数据库。** 不存在的路径会被报告为找不到。请打开一个已存在的数据库文件,或者以内存模式启动。 -- 如果文件无法作为 DuckDB 打开,DuckLocal 会回退到内存模式的工作区并报告该错误,而不是启动失败。 - -在数据库文件已打开的情况下挂载数据文件,会**把这些视图写进那个数据库文件** —— 它们会持久保存在那里,而不只是存在于本次会话中。 - -## 命名 - -文件对应的视图以其文件名主干命名,并被整理成合法的标识符。如果该名字在连接中已被占用,DuckLocal 会追加计数:`events`,然后是 `events_2`、`events_3`。因此,位于不同目录、主干同名的两个文件会得到不同的视图。 - -重复判断依据的是路径文本本身,因此 `./a.csv` 和 `a.csv` 会被当成两个不同的文件。 - -## 限制 - -- **每次打开请求最多 256 个数据文件。** 这个上限针对的是一次请求中的所有路径,而不是每个文件夹分别计数 —— 它的存在是为了避免误把整个用户主目录拖进来时,连接被占用好几分钟。触发上限时,DuckLocal 会给出提示,并挂载前 256 个文件。 -- 启动时从上次会话重新挂载的文件不受该上限约束。 - -## 管理已注册的数据源 - -已注册的文件出现在侧栏的**本地文件**分组中,每个文件都带有视图名、文件名和行数。选中某个文件会为它生成一条 `SELECT` 语句。 - -文件行上的 **×** 会在确认对话框之后把它移除。移除会删除视图并忘掉这条注册;**底层文件不会受到任何影响。** - -**刷新 Schema** 会重新加载 catalog 和已注册的文件。 - -## 会被记住的内容 - -已注册文件的清单 —— 它们的路径、视图名和类型 —— 存放在 DuckLocal 自己的历史数据库中,并在下次启动时重新挂载,因此你离开时的工作区就是你回来时的工作区。数据库文件本身*不会*被记住:除非你指定了某个数据库,否则每次启动都从内存模式开始。 - -磁盘上的位置参见[设置与应用数据](settings-and-data.md)。 diff --git a/docs/zh/development.md b/docs/zh/development.md deleted file mode 100644 index 59b9bd0..0000000 --- a/docs/zh/development.md +++ /dev/null @@ -1,142 +0,0 @@ ---- -description: "从源码构建 DuckLocal(Rust + DuckDB)、运行测试、打包 macOS 应用,并发布签名、公证的版本。" ---- - -# 开发 - -**[English](../development.md)** · [文档](index.md) - -## 构建与运行 - -```bash -cargo run # 启动空工作区 -cargo run -- ./data/logs/ # 或直接打开数据 -cargo test # 运行测试套件 -``` - -DuckDB 从随仓库携带的源码构建,因此首次构建耗时很长,还需要几 GB 磁盘空间。dev profile 的依赖以 `opt-level = 3` 编译,这让首次构建更慢,但开发迭代仍然顺畅——之后只有 `ducklocal` 自身会重新编译。 - -**工具链。** 仓库里既没有 `rust-toolchain.toml`,也没有 `rust-version` 字段,因此实际的版本下限由依赖决定:`duckdb` 要求 `1.85.1`。CI 直接使用 stable。 - -## 被钉住的工具链 - -UI 工具包、分析应用所依赖的脚本运行时、应用绘制所用的组件目录,是同一个仓库 -`longbridge/gpui-kit` 里的三个 crate,`rquickjs` 也被 patch 到同一个仓库。四者一起钉在同一个 -revision 是有意为之:两个 revision 会让构建里出现两份 `gpui-base` 或两份 `rquickjs`,报出来的是 -一大片 trait 不匹配,而其中没有一条会说出原因。 - -```bash -./scripts/check-deps.sh -``` - -它检查 Cargo 不会替你检查的三件事:依赖与 `[patch]` 用的是同一个 revision、`Cargo.lock` 与之一致、 -没有任何 crate 在构建里出现两次(一次来自该仓库,一次来自 crates.io)。它只读这两个清单文件, -所以离线、即时。CI 会在跑测试之前执行它。要升级工具包,请把 `Cargo.toml` 里所有 `rev` 一起改掉, -执行 `cargo update`,再跑一次这个脚本。 - -按 revision 钉依赖,也是这个 crate 无法发布到 crates.io 的原因:git 依赖和 `[patch]` 在那里都不被接受。 -分发走的是下面的 macOS 签名包。 - -## 打包 macOS 应用 - -```bash -./scripts/bundle.sh -# 生成 target/release/DuckLocal.app -``` - -它会组装好应用包——可执行文件位于 `Contents/MacOS/ducklocal`,再加上 `assets/Info.plist` 和 `assets/AppIcon.icns`——但**不做签名**。产物在你自己的机器上可以运行,到了其他机器上会被 Gatekeeper 拒绝。 - -## 打包、签名与公证 - -```bash -scripts/package-macos.sh -``` - -请在仓库根目录运行;它会把 `DuckLocal.app` 和 `dmg-root` 写到当前工作目录,dmg 就放在它们旁边。脚本在没有凭据时会拒绝运行——未公证的产物在当前 macOS 上用户根本打不开,所以它宁可快速失败,也不愿意意外产出一个。 - -需要以下内容: - -| 变量 | 含义 | -| --- | --- | -| `NOTARY_KEY` | App Store Connect API 密钥(`.p8`)的路径 | -| `NOTARY_KEY_ID` | 该密钥的 Key ID | -| `NOTARY_ISSUER` | 该密钥所属的 issuer UUID | -| Developer ID Application 签名身份 | 当钥匙串中恰好只有一个时自动检测,否则设置 `MACOS_SIGN_IDENTITY` | - -脚本会按参数中的版本号给应用包打上版本,用 `--options runtime --timestamp` 和 `scripts/entitlements.plist` 对内部可执行文件和应用本身签名,构建一个带 `/Applications` 符号链接的 UDZO dmg,**对 dmg 本身签名**,用 `notarytool submit --wait --timeout 300m` 提交,把公证票据装订到文件上,最后执行 `stapler validate` 和两次 `spctl --assess` 校验。 - -使用前需要了解两件事: - -- 五小时的超时是客户端等待时间,而不是取消。超时后提交仍会在 Apple 那边继续处理,票据稍后依旧可以领取——但**票据只对提交时的那串字节有效**,所以不要重新构建;请对你提交的那个文件装订票据。 -- 只有 dmg 经过公证,因此内部的 `.app` 上没有装订票据。从刚挂载的镜像中首次启动时需要联网,以便向 Apple 校验。 - -必须启用 `com.apple.security.cs.disable-library-validation` 授权,因为 DuckDB 会用 `dlopen` 加载它的扩展——`httpfs` 就是其中之一。 - -## CI 与发布 - -| 工作流 | 触发条件 | 作用 | -| --- | --- | --- | -| `ci.yml` | 推送到 `main`、任意 pull request | 在 `macos-latest` 上先执行 `scripts/check-deps.sh`,再执行 `cargo test --locked` | -| `release.yml` | 匹配 `v*` 的 tag,或手动指定版本触发 | 构建 `aarch64-apple-darwin`,把签名证书导入临时钥匙串,运行 `package-macos.sh`,上传 `ducklocal-macos-arm64.dmg`,然后用自动生成的说明创建 GitHub 发布 | -| `gh-pages.yml` | `main` 分支上 `docs/` 或工作流有改动时,或手动触发 | 使用 Node.js 24 构建文档站并部署到 GitHub Pages | - -发布构建需要以下仓库密钥:`MACOS_CERTIFICATE`、`MACOS_CERTIFICATE_PWD`、`NOTARY_KEY_BASE64`、`NOTARY_KEY_ID` 和 `NOTARY_ISSUER`。 - -## 平台支持 - -Apple 芯片上的 macOS 是唯一受支持的目标平台,而且这是有意为之:打包路径是 `.app` 加 dmg,没有 Windows 或 Linux 产物,发布工作流也是这么写的。`src/` 里没有任何 `cfg(target_os)`,窗口层还带着 X11 和 Wayland feature 一起构建,所以构建出 Linux 版本是可能的——但 CI 里没有任何环节跑它,也没有做过测试。 - -## 文档站 - -`docs/` 下的指南同时以站点形式发布,用 [VitePress](https://vitepress.dev/) 构建。 -需要 Node.js 22 或更新版本;**推荐 Node.js 24 LTS**,文档工作流也使用该版本。 -在仓库根目录执行: - -```bash -npm --prefix docs ci # 按锁文件安装文档依赖 -npm --prefix docs run dev # http://localhost:5173/DuckLocal/ -npm --prefix docs run build # 产物在 target/docs-site -npm --prefix docs run preview # http://localhost:4173/DuckLocal/ -``` - -英文页面直接位于 `docs/`,中文页面位于 `docs/zh/`。这些就是 README 链接、GitHub 渲染的 -同一批 Markdown,不生成源页面副本。`docs/.vitepress/config.mts` 定义两种语言、各自的 -导航与侧栏、本地搜索,以及 GitHub Pages 的 `/DuckLocal/` 基础路径;还会为旧中文 -`.zh-CN.html` 地址生成保留查询参数和锚点的跳转页。`docs/.vitepress/theme/` 在原生默认 -主题上增加少量品牌样式,`docs/assets/` 存放图片,`docs/public/` 存放 favicon。 - -文档包固定使用稳定版 VitePress 1.6.4。其间接开发工具依赖目前存在 npm audit 安全告警; -开发与预览服务器应仅在本机使用,不要暴露给不可信网络。发布的站点是静态文件。 - -`.github/workflows/gh-pages.yml` 会在 `main` 分支的 `docs/` 或该工作流本身有改动时 -构建并部署,也支持手动触发。**需要先在 Settings → Pages 里把 Source 选为 -“GitHub Actions”**,之后才会自动部署。 - -## 项目结构 - -| 路径 | 内容 | -| --- | --- | -| `src/main.rs` | 入口点、提前分流 CLI、GUI 窗口设置 | -| `src/cli.rs` | 无界面参数、DuckDB 解析验证、独立连接、JSON 错误 | -| `tests/cli.rs` | 真实二进制集成测试,临时数据位于 `target/cli-tests` | -| `skills/ducklocal/` | 官方 schema 优先 SQL agent skill 与 CLI 参考 | -| `src/sources.rs` | 把路径解析成要挂载的文件和要打开的数据库 | -| `src/db.rs` | DuckDB 连接、挂载文件、服务器信息 | -| `src/query.rs` | 查询执行、结果序列化、导出 | -| `src/profile.rs` | `ducklocal profile` 背后的列画像 | -| `src/schema.rs` | 为侧栏做 catalog 内省 | -| `src/analysis/` | JavaScript 分析应用:脚本运行时、`ducklocal` host 模块、应用标签页、重载监控 | -| `src/app_export/` | `ducklocal export`:无界面运行应用,把其语句与结果写成一个独立 HTML 文件 | -| `src/history.rs` | 应用自己的数据库:查询历史、已登记的文件、设置 | -| `src/s3.rs` | SigV4 签名与 S3 列举 | -| `src/i18n.rs` | 字符串表和语言选择 | -| `src/state.rs` | 各视图共享的应用状态 | -| `src/ui/` | 编辑器、结果表格、图表、侧栏、对话框、标题栏和状态栏 | -| `src/perf_probe.rs` | 仅测试用的性能探针:为随数据规模增长的路径报告耗时、分配次数与分配字节数 | -| `docs/` | 英文指南、`zh/` 下的中文指南,以及 VitePress 依赖、配置与主题 | -| `assets/` | 图标、`Info.plist`、README 与文档使用的示意图 | -| `scripts/` | `bundle.sh`、`package-macos.sh`、`check-deps.sh`、授权文件 | - -## 测试说明 - -测试套件就是 `cargo test`。查询执行测试通过内存模式的连接来跑 DuckDB;导出测试同时覆盖 CSV 与 Parquet,后者会把写出的文件用 `read_parquet` 读回来验证。 diff --git a/docs/zh/getting-started.md b/docs/zh/getting-started.md deleted file mode 100644 index 3867d7e..0000000 --- a/docs/zh/getting-started.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -description: "在 macOS 上安装 DuckLocal、添加 ducklocal 命令、打开第一个 CSV、Parquet、JSON 或 Excel 文件,五分钟内跑通第一条 DuckDB SQL 查询。" ---- - -# 快速上手 - -**[English](../getting-started.md)** · [文档](index.md) - -DuckLocal 是一个桌面应用,让你直接用 SQL 查询本机上的数据文件。不需要启动服务器、不需要配置连接,也不需要注册账号——指向文件,就能开始查询。本页带你从下载走到第一条查询结果,大约五分钟。 - -## 1. 安装 {#install} - -需要 **macOS 12 及以上、Apple silicon 芯片**(M1 或更新)。 - -1. 从最新版本下载 [`ducklocal-macos-arm64.dmg`](https://github.com/JetSquirrel/DuckLocal/releases/latest)。 -2. 打开磁盘映像,把 **DuckLocal** 拖进“应用程序”。 -3. 从“应用程序”或聚焦搜索启动 DuckLocal。 - -磁盘映像已经过 Apple 签名和公证,打开时不需要任何绕过 Gatekeeper 的操作。 - -::: details 改为从源码构建 -需要 Rust stable 1.85.1 或更新版本,以及 C++ 工具链(Xcode Command Line Tools)。DuckDB 由内置源码编译,首次构建需要几分钟,并占用几 GB 磁盘空间。 - -```bash -git clone https://github.com/JetSquirrel/DuckLocal -cd DuckLocal -cargo build --release -./target/release/ducklocal -``` - -可执行文件是 `./target/release/ducklocal`,本指南中写 `ducklocal` 的地方都可以用它代替。打包 `.app` 的方法见[开发指南](development.md)。 -::: - -## 2. 添加 `ducklocal` 命令(可选) {#add-command} - -应用里的所有功能都不需要终端。如果你还想从命令行打开数据,或者让 AI agent 通过 [CLI](cli.md) 执行查询,就把应用内的可执行文件链接到 `PATH` 上: - -```bash -sudo mkdir -p /usr/local/bin -sudo ln -sf /Applications/DuckLocal.app/Contents/MacOS/ducklocal /usr/local/bin/ducklocal -ducklocal --version -``` - -这个链接指向应用本身,所以在“应用程序”里更新 DuckLocal 后,命令也随之更新。要删除它:`sudo rm /usr/local/bin/ducklocal`。 - -## 3. 打开数据 - -首次启动会显示一个标题为 **把数据拖进来** 的界面。以下任意一种方式都能导入数据: - -- 把 CSV、TSV、Parquet、JSON 或 Excel 文件——或整个文件夹——**拖到窗口上**。 -- 点击 **打开文件…** 或 **打开文件夹…**。 -- 在终端里写出路径: - - ```bash - ducklocal ./sales.csv # 单个文件 - ducklocal ./logs/ # 递归打开文件夹下的所有数据文件 - ducklocal './data/*.parquet' # 通配符——加引号,避免被 shell 提前展开 - ducklocal warehouse.duckdb # 已有的 DuckDB 数据库 - ``` - -每个文件都会成为一个以文件名命名的视图——`sales.csv` 变成 `sales`——并连同列和行数一起出现在侧边栏的 **本地文件** 下。DuckLocal 在原位置读取文件,不复制,也不上传。 - -打开过的文件会被记住,下次启动时就是同一个工作区。格式、文件夹、通配符和数据库的细节见[数据源](data-sources.md)。 - -::: tip 手头没有数据? -[10 分钟上手教程](tutorial.md)会用一个小样例文件一步步带你走一遍。 -::: - -## 4. 运行查询 - -点击 **新建查询**(或者直接打开数据——编辑器会自动出现)。输入 SQL,按 **⌘↵**(Cmd+Enter): - -```sql -SELECT * FROM sales LIMIT 20; -``` - -结果出现在编辑器下方的面板里。切换到 **图表** 可以快速看个大概,也可以导出为 CSV 或 Parquet。编辑器上方的工具栏有 **运行**、**格式化** 和 **EXPLAIN**。 - -一个值得知道的捷径:在侧边栏里,点击表旁边的播放按钮会生成现成的 `SELECT * … LIMIT 100`,点击列名则只查询这一列。 - -## 接下来 - -- [10 分钟上手教程](tutorial.md) —— 用样例数据走一遍 -- [数据源](data-sources.md) —— 格式、文件夹、通配符、数据库 -- [SQL 编辑器](sql-editor.md) —— Tab、快捷键、自动补全、EXPLAIN -- [结果与图表](results-and-charts.md) —— 过滤、导出、图表 -- [常见问题排查](troubleshooting.md) —— 遇到不对劲的地方时 diff --git a/docs/zh/index.md b/docs/zh/index.md deleted file mode 100644 index ece514c..0000000 --- a/docs/zh/index.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -layout: home -title: "DuckLocal — 在 Mac 上用 SQL 查询本地 CSV、Parquet 与 Excel 文件" -titleTemplate: false -description: "DuckLocal 是基于 DuckDB 的免费开源 Mac 应用:拖入 CSV、Parquet、JSON 或 Excel 文件,直接用 SQL 查询。不用服务器、不用配置、不用上传。" -hero: - name: DuckLocal - text: 在 Mac 上直接用 SQL 查你的文件。 - tagline: 拖入 CSV、Parquet、JSON 或 Excel,用 DuckDB 查询。不用服务器,不用配置,不用上传。 - image: - src: /assets/logo.png - alt: DuckLocal - actions: - - theme: brand - text: 快速上手 - link: /zh/getting-started - - theme: alt - text: 10 分钟上手教程 - link: /zh/tutorial - - theme: alt - text: 下载 macOS 版 - link: https://github.com/JetSquirrel/DuckLocal/releases/latest -features: - - title: 文件在哪,就在哪查 - details: 单个文件、文件夹、通配符或 .duckdb 数据库,一打开就能查询——下次启动还在。 - link: /zh/data-sources - linkText: 数据源 - - title: 数据不离开你的电脑 - details: 没有账号、没有遥测、没有云端。文件原地读取,从不复制或上传。 - link: /zh/settings-and-data - linkText: 存了什么、存在哪里 - - title: 专注的 SQL 工作区 - details: 多个查询 Tab,基于你自己表结构的自动补全,一键格式化与 EXPLAIN。 - link: /zh/sql-editor - linkText: SQL 编辑器 - - title: 从数字到图表 - details: 过滤结果表格、把结果画成图,并导出为 CSV 或 Parquet。 - link: /zh/results-and-charts - linkText: 结果与图表 - - title: 为 AI agent 而生 - details: 无界面 CLI 与严格的 JSON 契约,外加一个官方 agent skill,按先看 schema 再分析的方式工作。 - link: /zh/cli - linkText: CLI 与 skill - - title: Dashboard 即文件 - details: 在 .dash 文件里声明查询与图表,或用脚本写一个定制视图,再导出成一个 HTML 页面分享出去。 - link: /zh/dashboards - linkText: Dashboard(.dash) ---- - -
- -## 三步上手 - -1. **[下载](https://github.com/JetSquirrel/DuckLocal/releases/latest)**磁盘映像,把 DuckLocal 拖进“应用程序”。 -2. 把一个数据文件——或整个文件夹——**拖到窗口上**。每个文件都会成为一个以文件名命名的视图。 -3. 对一条查询按 **⌘↵**: - -```sql -SELECT channel, sum(revenue) AS revenue -FROM sales -GROUP BY channel -ORDER BY revenue DESC; -``` - -第一次用?[快速上手](getting-started.md)讲安装和首次启动;[10 分钟上手教程](tutorial.md)用一个样例文件带你走一遍。 - -![DuckLocal 工作原理:CSV、Parquet、DuckDB 文件与 S3 兼容对象存储汇入同一个本地工作区](../assets/intro.jpg) - -## 按需查找 - -| 我想… | 请看 | -| --- | --- | -| 安装 DuckLocal 并跑第一条查询 | [快速上手](getting-started.md) | -| 用样例数据边做边学 | [10 分钟上手教程](tutorial.md) | -| 打开文件夹、通配符、Excel 或 `.duckdb` 文件 | [数据源](data-sources.md) | -| 查询 S3 或兼容存储里的对象 | [S3 与 httpfs](s3.md) | -| 用好编辑器 | [SQL 编辑器](sql-editor.md) · [Schema 浏览与历史](schema-and-history.md) | -| 把结果画成图或导出 | [结果与图表](results-and-charts.md) | -| 让 AI agent 查询我的数据 | [CLI 与 agent skill](cli.md) | -| 用保存的查询搭一个 dashboard | [Dashboard(.dash)](dashboards.md) | -| 用脚本写一个定制视图 | [分析应用](analysis-app.md) | -| 解决某个不正常的问题 | [常见问题排查](troubleshooting.md) | -| 从源码构建或参与开发 | [开发指南](development.md) | diff --git a/docs/zh/results-and-charts.md b/docs/zh/results-and-charts.md deleted file mode 100644 index bea0b7d..0000000 --- a/docs/zh/results-and-charts.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -description: "处理 DuckLocal 的查询结果:过滤与复制单元格、导出 CSV 或 Parquet、内置柱状图与面积图,以及行数限制。" ---- - -# 结果与图表 - -**[English](../results-and-charts.md)** · [文档](index.md) - -编辑器下方的面板有两个 Tab:**结果** 和 **图表**。 - -## 结果表格 - -表格最左侧是一列 `#` 行号,之后是你的各个列。数值列右对齐,列宽可以拖拽调整。`#` 列不能调整宽度。 - -**不支持排序。** 点击表头不会有任何作用——请在 SQL 中用 `ORDER BY` 排序。 - -### 单元格渲染 - -| 值 | 显示为 | -| --- | --- | -| `NULL` | 字面量 `NULL`,颜色淡化显示 | -| BLOB | `` | -| GEOMETRY | `` | -| 整数值浮点数 | `3.0` | -| 时间戳 | `2026-09-17 04:21:09`——**UTC 时间,不是本地时间** | -| List / struct / map | 格式化输出 | - -如果你是用肉眼查看时间戳,而不是在 SQL 中比较它们,那么要记住这里是按 UTC 渲染的。 - -### 过滤 - -过滤框会对已加载行的**所有单元格**做不区分大小写的子串匹配。它是纯客户端的:不会查询数据库,统计的是已加载的行数,而不是真实的结果规模。 - -过滤在你按下 Enter 或清空输入框时生效,而不是每敲一个键就生效。它旁边会显示 `visible / total rows`。 - -## 行数上限 - -结果会在以下两个上限中先触发的那个处截断: - -- **100,000 行** -- **2,000,000 个单元格**——因此一个 400 列的结果只会实际生成约 5,000 行 - -之所以有单元格预算,是因为仅靠行数上限无法约束计算量:对一个高基数列做 `PIVOT` 会为每个不同的值返回一列,而格式化上千万个单元格会看起来像是卡死。 - -截断会通过一条横幅提示,其中给出实际生成的行数。**没有分页,也没有“加载更多”**——请改为缩小查询范围。 - -## 复制 - -鼠标悬停在单元格上会显示一个复制按钮,点击后将该单元格的文本放入剪贴板。这是唯一的复制方式:没有整行复制、没有区域选择、没有“复制为 SQL”,也没有右键菜单。 - -## 导出 - -`导出 CSV` 和 `导出 Parquet` 会打开一个小对话框,其中有一个路径字段,预填为 `~/Desktop/export.csv` 或 `~/Desktop/export.parquet`。 - -有两点需要注意: - -- 导出会**重新运行生成当前结果行的 SQL**,因此文件中保存的是查询的完整结果集——不是筛选后的视图,也不是截断后的表格。 -- 没有文件选择器,也没有覆盖确认。输入路径后即写入。 - -## 图表 - -图表基于结果表格中已有的行绘制,顺序与查询返回的顺序一致。**不做任何聚合**——它们不是 `GROUP BY` 图表。 - -图表类型会根据第一列自动选择: - -| 第一列 | 图表 | -| --- | --- | -| 时间类型(date / timestamp) | 面积图;x 轴为第 0 列,每个数值列一条序列 | -| 其他 | 柱状图;第 0 列作为标签,第一个数值列作为值 | - -值单元格不是数值的行——例如 `NULL`——会在绘图前被丢弃。 - -各项限制都会在图表标题下方的提示行中说明: - -| 限制 | 行为 | -| --- | --- | -| 12 条序列 | 多余的数值列会被丢弃 | -| 1,500 个数据点 | 序列会被分桶,并在每个桶内取**平均值** | -| 200 根柱子 | 多余的柱子会被截断,而不是合并 | - -标题始终会标明绘制了多少个数据点,因此在相信曲线形状之前请先核对它。 diff --git a/docs/zh/s3.md b/docs/zh/s3.md deleted file mode 100644 index 3349980..0000000 --- a/docs/zh/s3.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -description: "用 DuckDB 的 httpfs 在 DuckLocal 中查询 Amazon S3 与 S3 兼容存储:配置凭据、浏览 bucket、对远程文件执行 SQL。" ---- - -# S3 与 httpfs - -**[English](../s3.md)** · [文档](index.md) - -DuckLocal 可以通过 DuckDB 的 `httpfs` 扩展读取 S3 及兼容 S3 的存储中的对象。 -在标题栏的 **S3** 按钮中配置。 - -## 配置凭据 - -对话框有四个字段: - -| 字段 | 默认值 | 说明 | -| --- | --- | --- | -| Endpoint | `s3.amazonaws.com` | 会采用 `http://`;否则使用 HTTPS | -| Region | `us-east-1` | 按输入原样发送 | -| Access Key ID | — | 必填 | -| Secret Access Key | — | 必填,掩码显示,带有显示开关 | - -确认后会执行等价于以下内容的语句: - -```sql -INSTALL httpfs; LOAD httpfs; -CREATE OR REPLACE SECRET ducklocal_s3 ( - TYPE s3, PROVIDER config, - KEY_ID '…', SECRET '…', - REGION '…', ENDPOINT '…' -); -``` - -**凭据仅在当前会话有效。** 不会写入磁盘,并且在打开或切换数据库时 -会被丢弃——之后需要重新配置。 -除了重新配置之外,没有其他方式清除它们。 - -## 浏览 - -配置完成后,侧栏中会出现一个 **S3** 根节点。它按需加载: -展开根节点会列出存储桶,展开存储桶或前缀会列出其中的对象。 -存储桶和前缀会排序,对象会显示易读的大小。 -刷新按钮会重新加载某一层级, -出错后它也充当重试入口。 - -列表每层最多 **1,000 条**,即使响应表明还有更多可用条目。 -没有更深层的分页,没有前缀过滤框,也没有搜索—— -某个存储桶在同一层级下有超过一千个对象时,看起来像是完整的, -但实际并非如此。 - -## 查询对象 - -点击键名带有数据文件扩展名的对象时,会把以下内容填入 -当前编辑器: - -```sql -SELECT * -FROM 's3://bucket/key' -LIMIT 100; -``` - -这就是一条普通查询:读取通过 `httpfs` 进行,因此 DuckDB 的 -`read_parquet` / `read_csv_auto` 行为及其下推同样适用。 -该查询会替换当前 Tab 中原本的内容。 - -无法识别为数据文件的键名不可点击。 - -## 限制 {#limitations} - -- **浏览是只读的。** 浏览器没有上传、下载到文件、删除、复制 - 或创建存储桶的操作。查询仍会下载远端数据。 -- **不支持会话令牌。** 永远不会发送 `X-Amz-Security-Token` 请求头, - 因此临时 STS 凭据无法使用——请使用长期密钥, - 或使用只接受 key/secret 的端点。 -- **Endpoint 寻址方式基本是自动的。** 当主机名包含 `amazonaws.com` - 时使用虚拟主机寻址,否则使用路径寻址。对自建网关来说, - 这通常正是你想要的;如果某个网关需要另一种寻址方式, - 则没有覆盖选项。 -- 区域填错时会用 DuckDB 返回的区域重试一次。 - 如果仍然失败,就按原样显示错误。 -- 需要网络:`INSTALL httpfs` 会在首次使用时下载扩展。 - 浏览会向配置的端点发送 HTTP 或 HTTPS 请求(`http://` 使用 HTTP, - 否则使用 HTTPS)。这些请求会发送存储桶名、键前缀等元数据, - 以及签名请求头中的身份验证信息;浏览不会上传本地数据库文件或查询结果。 - 对远端对象执行查询时,会通过 `httpfs` 将数据下载到本机。 - -## 故障排查 - -| 现象 | 可能原因 | -| --- | --- | -| 配置后浏览立即失败 | 区域或端点错误;查看侧栏中显示的消息 | -| 自建端点报错 | 寻址方式不对,或该端点要求会话令牌 | -| `httpfs` 安装错误 | 没有网络,或代理阻止了扩展下载 | -| 凭据像是被忘记了 | 打开或切换了数据库,按设计会清除凭据 | - -当 DuckLocal 被以签名应用的形式打包时,加载 `httpfs` 扩展 -需要 `com.apple.security.cs.disable-library-validation` 授权; -随附的打包脚本已经包含它。 diff --git a/docs/zh/schema-and-history.md b/docs/zh/schema-and-history.md deleted file mode 100644 index daf9e73..0000000 --- a/docs/zh/schema-and-history.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -description: "在 DuckLocal 侧栏浏览数据库、表、视图与列,一键生成 SELECT 查询、修改列类型,并复用历史查询。" ---- - -# Schema 浏览与历史 - -**[English](../schema-and-history.md)** · [文档](index.md) - -侧栏有两个 Tab:**表结构** 和 **查询历史**(英文界面中为 **Schema** 和 **History**)。旁边的收起按钮(或 **⌘B**)可以收起侧栏;点标题栏最左侧的按钮,或再按一次 ⌘B,即可展开。收起状态会被记住。 - -## Schema 树 - -树从上到下依次显示: - -- **本地文件**——你已注册的数据文件,以视图名显示,并带有行数。只有文件名与视图名不同(如 `sales.csv` 对应 `sales_2`)时才在旁边显示文件名,两个文件视图名相同时显示所在文件夹;鼠标悬停可看到完整路径。它的子节点是该视图的列。 -- **应用** / **仪表盘**——你最近打开过的 analysis app 和 `.dash` 仪表盘,按名称排序,点击后位置不会变。点击即可像打开文件一样重新打开对应的 Tab;悬停时的 × 会把它从列表移除,文件和已打开的 Tab 都不受影响;路径已不存在的条目会从列表中移除。 -- **S3**——在[配置好 S3](s3.md) 之后出现。延迟加载。 -- 每个数据库,然后是它的 schema,接着是表和视图,最后是列。 - -表会显示估算的行数;视图则不显示。列行显示 DuckDB 数据类型。系统数据库以及 `information_schema`、`pg_catalog` 和 `system` 这几个 schema 会被隐藏。 - -**刷新 Schema** 会重新加载 catalog,并重新挂载已注册的文件。 - -## 生成 SELECT - -点击以下三项内容中的任意一项,都会填充当前编辑器: - -| 点击 | 生成的 SQL | -| --- | --- | -| 表的播放按钮 | `SELECT * FROM db.schema.table LIMIT 100;` | -| 表的列名 | `SELECT col FROM db.schema.table LIMIT 100;` | -| 是数据文件的 S3 对象 | `SELECT * FROM 's3://bucket/key' LIMIT 100;` | - -名称会完整限定为 `database.schema.table`,仅当它不是普通标识符时才加双引号。 - -注意,这三种操作都会**替换当前 Tab 的整个缓冲区**——它们不会插入到光标处。点击查询历史条目也是如此。在四处点击之前,请先保存你在意的内容。 - -## 修改列的数据类型 - -列行提供修改数据类型的操作(视图列上不可用,因此挂载的 CSV 和 Parquet 列无法改类型)。它会打开一个自由文本对话框,预先填入当前类型,然后执行: - -```sql -ALTER TABLE db.schema.table ALTER COLUMN "col" SET DATA TYPE ; -``` - -没有选择器,也没有校验列表——任何 DuckDB 类型字符串都可以,包括 `DECIMAL(10,2)` 这样带参数的类型。类型无效会以错误通知的形式返回。成功后会重新加载 catalog。 - -目前不支持重命名和删除列,也不支持编辑列注释。 - -## 移除已注册的文件 - -文件行上的 **×** 会先请求确认,然后删除该视图并忘记注册信息。**磁盘上的文件不会被改动。** - -## 查询历史 - -每一次运行都会被记录下来——成功和失败都一样——包含本地时间戳、以毫秒计的耗时、行数(DML 则是受影响行数),以及失败时的错误文本。失败的条目以红色显示,并带有 *失败* 标签。 - -列表显示最新的 **200** 条记录。点击某一行会把该 SQL 回填到当前编辑器并聚焦,替换掉原有内容。 - -没有保留策略,也没有清理:历史表会无限增长,界面只是显示最近的 200 条。同样没有搜索、没有过滤、没有导出,也无法从界面删除某条记录。 - -查询历史存储在 DuckLocal 自己的数据库文件中,而不是你打开的数据库里,因此在切换数据库、丢失工作区之后它仍然存在。它所在的位置见[设置与应用数据](settings-and-data.md)。 diff --git a/docs/zh/settings-and-data.md b/docs/zh/settings-and-data.md deleted file mode 100644 index 8bdff58..0000000 --- a/docs/zh/settings-and-data.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -description: "DuckLocal 在 Mac 上把数据存在哪里、重启后记住哪些内容、界面大小、主题、语言,以及如何重置。" ---- - -# 设置与应用数据 - -**[English](../settings-and-data.md)** · [文档](index.md) - -DuckLocal 在磁盘上只保留一个文件。其余一切都在会话期间存在于内存中。 - -## 存储位置 - -| 平台 | 路径 | -| --- | --- | -| macOS | `~/Library/Application Support/DuckLocal/history.duckdb` | -| Linux(如果在该平台构建) | `~/.local/share/ducklocal/history.duckdb` | - -这单个 DuckDB 文件包含三张表:查询历史、已注册的数据文件,以及一张小型的键值设置表——界面语言、打开的应用与 dashboard 标签页、最近文档列表,以及你信任过的应用文件夹。应用运行期间,它旁边会有一个 `.wal` 文件。 - -你的数据永远不会被复制进去。已注册的文件只按路径引用,并在启动时重新挂载。 - -## 重启后保留的内容 - -| 会记住 | 位置 | -| --- | --- | -| 已注册的数据文件 —— 路径、视图名、类型 | 应用数据文件 | -| 查询历史,包括失败记录 | 应用数据文件 | -| 界面语言 | 应用数据文件 | -| 界面大小 | 应用数据文件 | -| 侧栏是否收起 | 应用数据文件 | -| 打开的应用与 dashboard 标签页及其标题 | 应用数据文件 | -| 最近打开的应用与 dashboard(侧栏的 **应用** / **仪表盘**) | 应用数据文件 | -| 你选择信任的应用文件夹 | 应用数据文件 | - -| 不会记住 | 说明 | -| --- | --- | -| 打开的查询 Tab 及其 SQL | 仅在内存中——运行过的查询在 **查询历史** 里 | -| 结果面板的内容 | 仅在内存中 | -| 打开的是哪个数据库文件 | 每次启动都从内存模式开始,除非你指定一个文件 | -| 窗口大小与位置 | 固定为 1440×900,最小 960×600 | -| 侧栏与结果面板的尺寸 | 每次启动固定 | -| 结果过滤器 | 仅在内存中 | -| **主题** | 总是以浅色启动 —— 见下文 | -| S3 凭据 | 按设计仅限当前会话 | - -主题是唯一的例外:语言切换会被保存,主题切换不会,每次启动都进入浅色模式。 - -## 语言 - -标题栏中的 `EN` / `中` 按钮会立即切换界面语言,并记录这一选择。 - -首次运行时 —— 在存储任何设置之前 —— 语言取自系统区域设置:`LC_ALL` 或 `LANG` 中包含 `zh` 则选择中文,其他情况选择英文。无法识别的已存值会回退到中文。 - -有少量字符串刻意不翻译:`DuckLocal`、`S3` 和 `EXPLAIN` 按钮标签、`EN` / `中` 切换,以及凭据占位符。引擎和网络的错误消息会原样呈现,并且无论界面语言是什么,始终为英文。 - -## 主题 - -太阳/月亮按钮在浅色与深色主题之间切换。没有主题选择器,也没有可编辑的主题文件 —— 你得到的就是这两种模式。 - -## 界面大小 {#interface-size} - -文字、图标和控件一起缩放,共四档: - -| 大小 | 界面文字 | 编辑器文字 | -| --- | --- | --- | -| 小 | 13px | 12px | -| 默认 | 14px | 13px | -| 大 | 16px | 15px | -| 特大 | 18px | 17px | - -在标题栏的 **Aa** 按钮里选择,或用 **⌘+**(放大)、**⌘−**(缩小)、**⌘0**(复原)逐档切换——无论焦点在哪里都有效,包括 SQL 编辑器。选择会被记住,切换明暗主题后也保持不变。 - -你拖动过的面板尺寸,以及 dashboard 图表的高度,仍以像素计:它们由你调整,不随界面缩放。 - -## 重置 - -要重新开始 —— 清空查询历史、已注册的文件、记住的标签页、信任过的应用文件夹和语言设置 —— 请退出 DuckLocal 并删除它的应用数据目录: - -```bash -rm -rf ~/Library/Application\ Support/DuckLocal -``` - -下次启动会重新创建它。**你的数据文件绝不会受此影响**,受影响的只有 DuckLocal 自己的记录。 - -## 疑难排查 - -症状、原因与解决办法都整理在[常见问题排查](troubleshooting.md)页面。 diff --git a/docs/zh/sql-editor.md b/docs/zh/sql-editor.md deleted file mode 100644 index c950c40..0000000 --- a/docs/zh/sql-editor.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -description: "DuckLocal 的 SQL 编辑器:查询 Tab、运行与格式化 SQL、EXPLAIN 执行计划、基于表结构的自动补全和快捷键。" ---- - -# SQL 编辑器 - -**[English](../sql-editor.md)** · [文档](index.md) - -每个查询 Tab 都有自己的编辑器缓冲区。编辑器通过 tree-sitter 高亮真正的 SQL,缩进为 2 个空格,并显示行号。 - -## Tab - -| 控件 | 作用 | -| --- | --- | -| `+` | 追加一个新的查询 Tab 并聚焦它 | -| 单击某个 Tab | 切换到该 Tab | -| `×` | 关闭一个 Tab —— 只剩一个 Tab 时该按钮隐藏,因此最后一个 Tab 无法关闭 | -| 重命名(工具栏) | 打开对话框重命名当前 Tab;名称为空时回退为 `查询 N` | - -Tab 只存在于内存中。其中的 SQL 不会被保存,因此退出后会丢失所有 Tab——只有一点例外:下次启动时会得到一个全新的 Tab。 - -## 运行 SQL - -编辑器获得焦点时按 **⌘↵**(Cmd+Enter),或使用 `运行` 按钮。 - -查询运行期间再次按下运行不会有任何效果:**既不能取消,也没有超时**。长查询会一直运行到 DuckDB 完成为止,其他数据库操作都排在它后面。如果界面看起来卡住了,原因就在这里——查看状态栏,或者退出并重启。 - -语句如何被处理取决于它的起始关键字。`SELECT`、`WITH`、`SHOW`、`DESCRIBE`、`EXPLAIN`、`PRAGMA`、`SUMMARIZE`、`VALUES`、`FROM`、`TABLE`、`PIVOT` 和 `CALL` 会产生结果集。其他语句(DDL、DML)不会给出结果表格,而是报告 `Done · N rows affected · took …`。判断时会跳过开头的 `--` 注释;块注释则不会跳过。 - -## 错误 - -执行失败的语句会弹出一个标题为 *查询失败* 的提示框,其中原样显示 DuckDB 的报错信息。这条信息来自引擎,无论界面语言是什么,它始终是英文。结果表格中不会写入任何内容,但这次尝试仍会带着失败标记记录到[查询历史](schema-and-history.md)中。 - -## 格式化 - -`格式化` 会用 `sqlformat` 处理缓冲区内容:缩进 2 个空格、关键字转为大写,然后替换整个缓冲区。缓冲区为空时不做任何操作。 - -## EXPLAIN - -`EXPLAIN` 会执行 `EXPLAIN `,以纯等宽文本展示查询计划并附上耗时,同时把结果面板切回结果 Tab。 - -## 自动补全 - -补全菜单能感知 catalog。候选项按以下顺序排列: - -1. schema 中的表和列(最多 35 项) -2. DuckDB 函数名 -3. SQL 关键字 - -最多提供 50 个候选项。匹配方式是针对光标左侧紧邻标识符的大小写不敏感的**前缀**匹配,因此 `sel` 会补全为 `SELECT`,而 `elect` 补全不出任何结果。函数会插入名称和一个左括号;非普通标识符会以双引号形式插入。 - -关键字和函数列表是经过挑选的子集——并非每个 DuckDB 函数都会出现。 - -## 键盘快捷键 - -DuckLocal 自己定义了少数几个快捷键,其余都来自编辑器和表格组件,行为与任何 macOS 文本框中一致: - -| 快捷键 | 操作 | -| --- | --- | -| ⌘↵ | 运行查询 | -| ⌘S | 在 dashboard 的源码视图中保存 | -| ⌘+ / ⌘− / ⌘0 | 放大 / 缩小 / 复原界面大小——见[界面大小](settings-and-data.md#interface-size) | -| ⌘B | 收起或展开侧栏 | -| ⌘F / ⇧⌘F | 在编辑器中查找 / 替换 | -| ⌘Z / ⇧⌘Z | 撤销 / 重做 | -| ⌘A | 全选 | -| ⌘C / ⌘X / ⌘V | 复制 / 剪切 / 粘贴 | -| ⌥⌘↑ / ⌥⌘↓ | 在上方 / 下方添加光标 | -| ⌘← / ⌘→ / ⌥← / ⌥→ | 按行 / 按词移动 | -| ⌘↑ / ⌘↓ | 移动到文档开头 / 结尾 | -| ⌘⌫ / ⌥⌫ | 删除到行首 / 删除前一个词 | - -没有菜单栏,也没有命令面板。其他所有操作都是按钮:编辑器上方的工具栏、Tab 栏、侧栏和标题栏中都有。 diff --git a/docs/zh/troubleshooting.md b/docs/zh/troubleshooting.md deleted file mode 100644 index 50e7994..0000000 --- a/docs/zh/troubleshooting.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -description: "DuckLocal 常见问题的解决办法:找不到 ducklocal 命令、文件挂载失败、重名冲突、查询卡住、S3 凭据与 dashboard 问题。" ---- - -# 常见问题排查 - -**[English](../troubleshooting.md)** · [文档](index.md) - -找到症状,看原因,照着修。如果这里没有你遇到的情况,请[提交 issue](https://github.com/JetSquirrel/DuckLocal/issues),写明你做了什么、看到了什么。 - -## 安装与启动 - -| 症状 | 原因与解决 | -| --- | --- | -| 在 Intel Mac 上打不开 | 发布版只为 Apple silicon 构建。在 Intel 上请[从源码构建](getting-started.md#install) | -| `ducklocal: command not found` | 磁盘映像只安装应用,不安装命令。请[把可执行文件链接到 PATH](getting-started.md#add-command) | -| 窗口开着时终端被占用 | 从终端打开 GUI 会在前台运行。改从“应用程序”启动,或者把那个终端留给它 | -| 历史、设置或已登记的文件不再保存 | 另一个 DuckLocal 正在运行,占用了应用数据文件。退出另一个后重新启动 | - -## 打开数据 - -| 症状 | 原因与解决 | -| --- | --- | -| 指定的路径报 `文件不存在` | 路径不存在,或者相对于的不是你以为的目录。用绝对路径最稳妥 | -| 文件夹报告没有数据文件 | 里面没有匹配 `.csv`、`.tsv`、`.txt`、`.parquet`、`.json`、`.ndjson`、`.jsonl`、`.xlsx`、`.xls`、`.xlsb` 或 `.ods` 的文件 | -| 文件夹导入的文件比预期少 | 隐藏条目和符号链接会被跳过,一次打开最多挂载 256 个文件。请分子文件夹打开 | -| 某个路径意外地被当作数据库打开 | 任何已存在、但不是数据文件的文件都会被当作 DuckDB 数据库。打不开时,DuckLocal 会回退到内存模式并显示错误 | -| **未挂载 …:当前数据库已有名为 … 的表或视图** | 当前数据库里有一个与已登记文件同名的表或视图。DuckLocal 不会替换它。把其中一个改名或删除,或者从 **本地文件** 移除该文件后重新打开,让它拿到新名字 | -| **无法恢复相对路径 …** | 这个文件是按相对路径登记的,新会话里无法解析。从 **本地文件** 移除后重新打开 | -| 视图名是 `sales_2` 而不是 `sales` | 已有同名的文件或表,新的那个就加了后缀 | -| 文件对应的视图不是最新的 | 视图每次查询都会读取文件。如果 CSV 的列结构变了,点侧边栏的 **刷新 Schema** | - -## 运行查询 - -| 症状 | 原因与解决 | -| --- | --- | -| **运行** 没反应 | 已有查询在运行。没有取消,也没有超时;想放弃一条查询只能退出重开 | -| **⌘↵** 显示了编辑器而不是运行 | 在首次运行界面上,⌘↵ 的意思是“给我一个编辑器”。再按一次就会运行 | -| 结果提前截断并有提示 | 达到了 100,000 行或 2,000,000 个单元格的上限。请缩小查询范围;没有分页 | -| 时间戳看起来偏了 | 表格按 UTC 显示时间戳,而不是本地时间 | -| 点击表头不排序 | 没有客户端排序。请用 `ORDER BY` | -| 点了表或历史记录后我的 SQL 没了 | 这些点击会替换整个编辑器内容。临时的尝试请用新的查询 Tab | -| 导出时悄悄覆盖了文件 | 导出会直接写入你给的路径,不会询问。请换个文件名 | - -## S3 - -| 症状 | 原因与解决 | -| --- | --- | -| S3 凭据丢了 | 凭据按设计只在本次会话有效,打开或切换数据库也会清除。请重新配置 | -| 离线时配置 S3 失败 | 首次使用会执行 `INSTALL httpfs`,需要下载扩展。联网一次后就会缓存 | -| 临时(STS)凭据被拒绝 | 不会发送 session token。请使用长期密钥——见 [S3 与 httpfs](s3.md#limitations) | -| bucket 看起来比实际少 | 每一层最多列出 1,000 个条目。改用通配符查询,比如 `'s3://bucket/prefix/*.parquet'` | - -## 应用与 Dashboard - -| 症状 | 原因与解决 | -| --- | --- | -| 应用标签页问 **要运行这个应用吗?** | 一个文件夹第一次作为应用打开时,DuckLocal 会在运行其代码前询问,因为应用的 SQL 能读写 SQL 编辑器能碰到的一切。不是你写的就先点 **先看源码**;**信任并运行** 会按文件夹记住 | -| dashboard 的图表提示查询必须只读 | `.dash` 里的查询试图写入(DDL、DML、`COPY`、`ATTACH` 等)。Dashboard 只执行只读语句;准备工作请放到 SQL 编辑器里做 | -| dashboard 里的 `PIVOT` 被拒绝 | 不写明 `IN (…)` 列表时,DuckDB 会把 `PIVOT` 拆成多条语句。请列出取值:`PIVOT t ON channel IN ('Web', 'Store') USING sum(revenue)` | - -## 外观 - -| 症状 | 原因与解决 | -| --- | --- | -| 每次启动主题都回到浅色 | 主题不会被保存;语言会 | -| 文字或图标太小 / 太大 | 用标题栏的 **Aa** 按钮,或 ⌘+ / ⌘− / ⌘0。见[界面大小](settings-and-data.md#interface-size) | -| 界面语言不对 | 用标题栏的 `EN` / `中` 按钮切换,选择会被记住 | - -## 从头开始 - -要清除历史、已登记的文件、记住的标签页和设置,先退出 DuckLocal,再删除它的应用数据目录: - -```bash -rm -rf ~/Library/Application\ Support/DuckLocal -``` - -你的数据文件不会受任何影响——只会删除 DuckLocal 自己的记录。里面具体存了什么,见[设置与应用数据](settings-and-data.md)。 diff --git a/docs/zh/tutorial.md b/docs/zh/tutorial.md deleted file mode 100644 index 4a74427..0000000 --- a/docs/zh/tutorial.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -description: "DuckLocal 10 分钟上手教程:用样例 CSV 打开数据、写 SQL 查询、画图、导出结果,并用 CLI 问同一个问题。" ---- - -# 10 分钟上手教程 - -**[English](../tutorial.md)** · [文档](index.md) - -跟着做一遍:打开一个小的销售数据文件,问它几个问题,把答案画成图,再导出一份。本教程假设你已经装好了 DuckLocal——如果还没有,先看[快速上手](getting-started.md)。 - -## 1. 获取样例文件 {#sample-file} - -下载 [sales.csv](/samples/sales.csv)——两周的虚构订单数据,共 224 行。也可以在终端里下载: - -```bash -curl -LO https://jetsquirrel.github.io/DuckLocal/samples/sales.csv -``` - -它有五列: - -| 列 | 类型 | 示例 | -| --- | --- | --- | -| `date` | DATE | `2026-09-01` | -| `channel` | VARCHAR | `Web`、`Mobile app`、`Store`、`Phone` | -| `region` | VARCHAR | `North`、`South`、`East`、`West` | -| `orders` | BIGINT | `72` | -| `revenue` | DOUBLE | `4181.04` | - -这些都不需要你告诉 DuckLocal:DuckDB 会读取表头并自行推断类型。 - -## 2. 打开文件 - -把 `sales.csv` 拖到 DuckLocal 窗口上。(也可以点击 **打开文件…**;如果你已经[添加了命令](getting-started.md#add-command),还可以运行 `ducklocal sales.csv`。) - -会弹出通知 **已创建视图 sales**。侧边栏的 **本地文件** 下出现了 `sales` 和它的 224 行;展开它可以看到各列及其类型。 - -## 3. 看看数据 - -在侧边栏里,点击 `sales` 旁边的播放按钮。编辑器会填入一条针对它的 `SELECT * … LIMIT 100`——按 **⌘↵** 运行。 - -编辑器下方的表格显示了这些行。试试上方的过滤框:输入 `Store` 并回车,只保留包含它的行。过滤只作用于已经加载的行,不会重新查询。 - -## 4. 提一个问题 - -把 SQL 换成下面这条,按 **⌘↵**: - -```sql -SELECT channel, round(sum(revenue), 2) AS revenue -FROM sales -GROUP BY channel -ORDER BY revenue DESC; -``` - -| channel | revenue | -| --- | --- | -| Mobile app | 290549.76 | -| Web | 289544.8 | -| Store | 240067.6 | -| Phone | 82511.2 | - -现在把结果面板从 **结果** 切到 **图表**。因为第一列是文本,你会得到每个渠道一根柱子,高度取第一个数值列。 - -::: tip 自动补全 -输入时,编辑器会先提示侧边栏里的表名和列名,然后是 DuckDB 函数和 SQL 关键字——输入 `rev`,第一个候选就是 `revenue`。 -::: - -## 5. 画一条趋势 - -图表直接取查询返回的行来画,所以想怎么画,就把结果整理成什么形状。每个渠道一列,就得到每个渠道一条线: - -```sql -SELECT - date, - round(sum(revenue) FILTER (WHERE channel = 'Web'), 2) AS web, - round(sum(revenue) FILTER (WHERE channel = 'Mobile app'), 2) AS mobile, - round(sum(revenue) FILTER (WHERE channel = 'Store'), 2) AS store -FROM sales -GROUP BY date -ORDER BY date; -``` - -第一列是日期时,**图表** 会画出随时间变化的面积图,每个数值列一条序列。规则和限制见[结果与图表](results-and-charts.md)。 - -## 6. 导出结果 - -趋势结果还在面板里时,点击 **导出 CSV**。对话框默认填入 `~/Desktop/export.csv`;按需修改路径后确认。 - -导出会重新执行查询,所以文件里是完整结果,而不只是表格里看得到的部分。**如果文件已存在,会直接覆盖,不会询问。** - -## 7. 明天还能找到 - -打开侧边栏的 **查询历史** 标签:你运行过的每条查询都在这里,失败的也在。点击一条可以把它放回编辑器——注意这会替换编辑器里原有的内容。 - -退出 DuckLocal 再重新启动。`sales` 仍然在 **本地文件** 下:打开过的文件按路径记住,每次启动时重新读取,所以 CSV 改过之后,下次查询就能看到新内容。 - -## 8. 附加:在终端里问同一个问题 - -如果你添加了 `ducklocal` 命令,CLI 可以不开窗口直接回答——写脚本或交给 AI agent 都很方便: - -```bash -ducklocal query --format md --sql " - SELECT channel, round(sum(revenue), 2) AS revenue - FROM 'sales.csv' GROUP BY channel ORDER BY revenue DESC" -``` - -去掉 `--format md` 就得到结构化的 JSON。入门请看 [CLI 指南](cli.md)和官方 agent skill。 - -## 接下来 - -- 用 DuckLocal 打开你自己的文件或文件夹——见[数据源](data-sources.md) -- 查询 S3 兼容存储里的文件——见 [S3 与 httpfs](s3.md) -- 用保存的查询搭一个 dashboard——见[分析应用与 Dashboard](analysis-app.md#dashboard-specs-dash) diff --git a/scripts/pages-redirects.sh b/scripts/pages-redirects.sh new file mode 100755 index 0000000..a8003a2 --- /dev/null +++ b/scripts/pages-redirects.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# The old documentation address, jetsquirrel.github.io/DuckLocal/, as redirects. +# +# The docs moved to docs.ducklocal.app and the product page to ducklocal.app; +# links to the old site live on in READMEs, issues and search results. GitHub +# Pages cannot answer with a real redirect, so every page it used to serve is +# a small HTML file that points at the new address — a canonical link and a +# meta refresh for crawlers, a script that keeps the #anchor for readers — and +# 404.html does the same for any path not listed. +# +# Usage: scripts/pages-redirects.sh OUT_DIR +set -euo pipefail + +out="${1:?usage: $0 OUT_DIR}" +docs="https://docs.ducklocal.app/" +home="https://ducklocal.app/" + +# Every page the old site published, under both its English and Chinese +# addresses; `index` is the site's home. +pages=( + index getting-started tutorial troubleshooting data-sources s3 sql-editor + schema-and-history results-and-charts settings-and-data cli analysis-app + dashboards development +) + +rm -rf "$out" +mkdir -p "$out/zh" + +# page FILE TARGET LANG: one redirect page. +page() { + local file="$1" target="$2" lang="$3" + cat > "$out/$file" < + + + + +DuckLocal has moved + + + + +

This page has moved to $target.

+ +EOF +} + +for name in "${pages[@]}"; do + if [ "$name" = index ]; then + page index.html "$home" en + page zh/index.html "${home}zh/" zh-CN + page index.zh-CN.html "${home}zh/" zh-CN + else + page "$name.html" "$docs$name" en + page "zh/$name.html" "${docs}zh/$name" zh-CN + # The addresses the first Chinese pages had, before they moved to zh/. + page "$name.zh-CN.html" "${docs}zh/$name" zh-CN + fi +done + +# Anything else under the old base: the same path on the docs site, without +# the base and the .html the new site no longer needs. +cat > "$out/404.html" < + + + + +DuckLocal has moved + + +

The DuckLocal docs have moved to $docs.

+ +EOF + +echo "Wrote $(find "$out" -name '*.html' | wc -l | tr -d ' ') redirect pages to $out" diff --git a/src/analysis/mod.rs b/src/analysis/mod.rs index c992cc1..45e76d6 100644 --- a/src/analysis/mod.rs +++ b/src/analysis/mod.rs @@ -17,7 +17,8 @@ //! src/analysis/watch.rs the host-side reload watcher //! ``` //! -//! See `docs/analysis-app.md` for the script-facing description. +//! See for the script-facing +//! description. pub mod apps; pub mod host; diff --git a/src/spec/lsp.rs b/src/spec/lsp.rs index dd64317..e029b81 100644 --- a/src/spec/lsp.rs +++ b/src/spec/lsp.rs @@ -457,7 +457,7 @@ fn validate(source: &str) -> Option { } /// One line of documentation per attribute name — the language rules of -/// `docs/cli.md`, not localized: like completion details, these read as +/// , not localized: like completion details, these read as /// vocabulary, not sentences. fn attr_doc(name: &str) -> Option<&'static str> { Some(match name { From 20e8ff1c2274f7af2b561097beadbd708e70e865 Mon Sep 17 00:00:00 2001 From: JetSquirrel Date: Thu, 24 Sep 2026 13:24:23 +0800 Subject: [PATCH 5/5] Point to the docs at ducklocal.app/docs/, not a subdomain The docs are served under /docs/ on the product page's domain rather than at docs.ducklocal.app. The READMEs, the two source comments and the redirects from the old GitHub Pages address follow. Co-Authored-By: Claude Opus 5.5 (1M context) --- .github/workflows/gh-pages.yml | 2 +- README.md | 8 ++++---- README.zh-CN.md | 8 ++++---- scripts/pages-redirects.sh | 4 ++-- src/analysis/mod.rs | 2 +- src/spec/lsp.rs | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 65fc352..7a8fbc5 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -1,6 +1,6 @@ name: Redirect the old docs address -# The docs moved to docs.ducklocal.app (source: JetSquirrel/ducklocal-site). +# The docs moved to ducklocal.app/docs/ (source: JetSquirrel/ducklocal-site). # This repository's GitHub Pages site, jetsquirrel.github.io/DuckLocal/, now # only redirects each old page to its new address. diff --git a/README.md b/README.md index 253b9fc..42eca69 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ DuckLocal logo -**[ducklocal.app](https://ducklocal.app/)** · **[Docs](https://docs.ducklocal.app/)** · **[中文文档](README.zh-CN.md)** +**[ducklocal.app](https://ducklocal.app/)** · **[Docs](https://ducklocal.app/docs/)** · **[中文文档](README.zh-CN.md)** A local-first workspace for querying and exploring your data, built natively on DuckDB. Point it at your files — there is no connection to configure, no schema to create, and nothing is uploaded anywhere. @@ -59,7 +59,7 @@ ducklocal check dashboard.dash # validate; JSON diagnostics, exit 2 o ducklocal lsp # language server over stdio, for editors ``` -See the [CLI guide](https://docs.ducklocal.app/cli) for conversion, stdin, output, app export, and safety details. +See the [CLI guide](https://ducklocal.app/docs/cli) for conversion, stdin, output, app export, and safety details. The [official agent skill](skills/ducklocal/SKILL.md) teaches schema-first exploration, SQL analysis, and verified file conversion. Copy it into your target project's supported skills directory; for example, from this checkout: @@ -72,7 +72,7 @@ Inspect existing destinations before overwriting. No global configuration is cha ## Documentation -The guides are at **[docs.ducklocal.app](https://docs.ducklocal.app/)**: [getting started](https://docs.ducklocal.app/getting-started), a [10-minute tutorial](https://docs.ducklocal.app/tutorial) with sample data, [troubleshooting](https://docs.ducklocal.app/troubleshooting), [data sources](https://docs.ducklocal.app/data-sources), [S3 and httpfs](https://docs.ducklocal.app/s3), [SQL editor](https://docs.ducklocal.app/sql-editor), [schema browser and history](https://docs.ducklocal.app/schema-and-history), [results and charts](https://docs.ducklocal.app/results-and-charts), [settings and app data](https://docs.ducklocal.app/settings-and-data), [dashboards](https://docs.ducklocal.app/dashboards), and [development](https://docs.ducklocal.app/development). +The guides are at **[ducklocal.app/docs](https://ducklocal.app/docs/)**: [getting started](https://ducklocal.app/docs/getting-started), a [10-minute tutorial](https://ducklocal.app/docs/tutorial) with sample data, [troubleshooting](https://ducklocal.app/docs/troubleshooting), [data sources](https://ducklocal.app/docs/data-sources), [S3 and httpfs](https://ducklocal.app/docs/s3), [SQL editor](https://ducklocal.app/docs/sql-editor), [schema browser and history](https://ducklocal.app/docs/schema-and-history), [results and charts](https://ducklocal.app/docs/results-and-charts), [settings and app data](https://ducklocal.app/docs/settings-and-data), [dashboards](https://ducklocal.app/docs/dashboards), and [development](https://ducklocal.app/docs/development). The website — the product page at [ducklocal.app](https://ducklocal.app/) and the docs — lives in its own repository, [JetSquirrel/ducklocal-site](https://github.com/JetSquirrel/ducklocal-site). A change here that changes what the docs say needs a pull request there too. @@ -90,7 +90,7 @@ cargo run -- ./data/logs/ # or open something straight away # Produces target/release/DuckLocal.app ``` -The released disk image runs on macOS 12 or later, Apple silicon only. `bundle.sh` does not sign what it builds; `scripts/package-macos.sh` is the shipping path and signs and notarizes the dmg. See [development](https://docs.ducklocal.app/development). +The released disk image runs on macOS 12 or later, Apple silicon only. `bundle.sh` does not sign what it builds; `scripts/package-macos.sh` is the shipping path and signs and notarizes the dmg. See [development](https://ducklocal.app/docs/development). ## License diff --git a/README.zh-CN.md b/README.zh-CN.md index a357f63..b707360 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -2,7 +2,7 @@ DuckLocal logo -**[ducklocal.app](https://ducklocal.app/zh/)** · **[文档](https://docs.ducklocal.app/zh/)** · **[English](README.md)** +**[ducklocal.app](https://ducklocal.app/zh/)** · **[文档](https://ducklocal.app/docs/zh/)** · **[English](README.md)** 本地优先的数据查询与分析工作台,原生基于 DuckDB。直接指向你的文件即可——不用配置连接、不用建 schema,也不会上传任何数据。 @@ -59,7 +59,7 @@ ducklocal check dashboard.dash # 校验;JSON 诊断,有错误时 ducklocal lsp # 面向编辑器的语言服务器(stdio) ``` -转换、stdin、输出编码、应用导出和安全说明见 [CLI 指南](https://docs.ducklocal.app/zh/cli)。 +转换、stdin、输出编码、应用导出和安全说明见 [CLI 指南](https://ducklocal.app/docs/zh/cli)。 [官方 agent skill](skills/ducklocal/SKILL.md) 教 AI 先查 schema,再进行 SQL 分析及验证格式转换。复制到目标项目支持的 skill 目录即可,例如在本仓库执行: @@ -72,7 +72,7 @@ cp -R skills/ducklocal /path/to/your-project/.claude/skills/ ## 文档 -完整指南在 **[docs.ducklocal.app](https://docs.ducklocal.app/zh/)**:[快速上手](https://docs.ducklocal.app/zh/getting-started)、带样例数据的 [10 分钟上手教程](https://docs.ducklocal.app/zh/tutorial)、[常见问题排查](https://docs.ducklocal.app/zh/troubleshooting)、[数据源](https://docs.ducklocal.app/zh/data-sources)、[S3 与 httpfs](https://docs.ducklocal.app/zh/s3)、[SQL 编辑器](https://docs.ducklocal.app/zh/sql-editor)、[Schema 浏览与历史](https://docs.ducklocal.app/zh/schema-and-history)、[结果与图表](https://docs.ducklocal.app/zh/results-and-charts)、[设置与应用数据](https://docs.ducklocal.app/zh/settings-and-data)、[Dashboard](https://docs.ducklocal.app/zh/dashboards)、[开发](https://docs.ducklocal.app/zh/development)。 +完整指南在 **[ducklocal.app/docs](https://ducklocal.app/docs/zh/)**:[快速上手](https://ducklocal.app/docs/zh/getting-started)、带样例数据的 [10 分钟上手教程](https://ducklocal.app/docs/zh/tutorial)、[常见问题排查](https://ducklocal.app/docs/zh/troubleshooting)、[数据源](https://ducklocal.app/docs/zh/data-sources)、[S3 与 httpfs](https://ducklocal.app/docs/zh/s3)、[SQL 编辑器](https://ducklocal.app/docs/zh/sql-editor)、[Schema 浏览与历史](https://ducklocal.app/docs/zh/schema-and-history)、[结果与图表](https://ducklocal.app/docs/zh/results-and-charts)、[设置与应用数据](https://ducklocal.app/docs/zh/settings-and-data)、[Dashboard](https://ducklocal.app/docs/zh/dashboards)、[开发](https://ducklocal.app/docs/zh/development)。 网站——[ducklocal.app](https://ducklocal.app/zh/) 产品首页与文档——放在独立的仓库 [JetSquirrel/ducklocal-site](https://github.com/JetSquirrel/ducklocal-site)。这里的改动如果改变了文档里的说法,也需要向那边提交 pull request。 @@ -90,7 +90,7 @@ cargo run -- ./data/logs/ # 或直接打开数据 # 生成 target/release/DuckLocal.app ``` -发布的安装包要求 macOS 12 及以上、Apple 芯片。`bundle.sh` 不做签名;正式发布走 `scripts/package-macos.sh`,它会签名并对 dmg 做公证。详见[开发](https://docs.ducklocal.app/zh/development)。 +发布的安装包要求 macOS 12 及以上、Apple 芯片。`bundle.sh` 不做签名;正式发布走 `scripts/package-macos.sh`,它会签名并对 dmg 做公证。详见[开发](https://ducklocal.app/docs/zh/development)。 ## 开源协议 diff --git a/scripts/pages-redirects.sh b/scripts/pages-redirects.sh index a8003a2..33fd605 100755 --- a/scripts/pages-redirects.sh +++ b/scripts/pages-redirects.sh @@ -1,7 +1,7 @@ #!/bin/bash # The old documentation address, jetsquirrel.github.io/DuckLocal/, as redirects. # -# The docs moved to docs.ducklocal.app and the product page to ducklocal.app; +# The docs moved to ducklocal.app/docs/ and the product page to ducklocal.app; # links to the old site live on in READMEs, issues and search results. GitHub # Pages cannot answer with a real redirect, so every page it used to serve is # a small HTML file that points at the new address — a canonical link and a @@ -12,7 +12,7 @@ set -euo pipefail out="${1:?usage: $0 OUT_DIR}" -docs="https://docs.ducklocal.app/" +docs="https://ducklocal.app/docs/" home="https://ducklocal.app/" # Every page the old site published, under both its English and Chinese diff --git a/src/analysis/mod.rs b/src/analysis/mod.rs index 45e76d6..1345247 100644 --- a/src/analysis/mod.rs +++ b/src/analysis/mod.rs @@ -17,7 +17,7 @@ //! src/analysis/watch.rs the host-side reload watcher //! ``` //! -//! See for the script-facing +//! See for the script-facing //! description. pub mod apps; diff --git a/src/spec/lsp.rs b/src/spec/lsp.rs index e029b81..47f2c87 100644 --- a/src/spec/lsp.rs +++ b/src/spec/lsp.rs @@ -457,7 +457,7 @@ fn validate(source: &str) -> Option { } /// One line of documentation per attribute name — the language rules of -/// , not localized: like completion details, these read as +/// , not localized: like completion details, these read as /// vocabulary, not sentences. fn attr_doc(name: &str) -> Option<&'static str> { Some(match name {

English · macOS 12+,Apple silicon · 开源免费(Apache-2.0)