From 0f1cda1171dcf1d1a7b01ec75a2d966a04ee3786 Mon Sep 17 00:00:00 2001 From: Corentin THOMASSET Date: Mon, 2 Sep 2024 21:19:09 +0200 Subject: [PATCH] feat(docs): added documentation website (#72) --- .github/workflows/ci-docs.yaml | 30 + .gitignore | 3 +- packages/app-client/.env.example | 3 +- packages/app-client/.gitignore | 2 + packages/app-client/public/robots.txt | 3 +- .../app-client/src/modules/config/config.ts | 1 + .../src/modules/docs/docs.models.test.ts | 41 ++ .../src/modules/docs/docs.models.ts | 19 + .../src/modules/ui/layouts/app.layout.tsx | 38 +- packages/docs/.vitepress/config.ts | 135 ++++ packages/docs/.vitepress/plausible.ts | 17 + packages/docs/.vitepress/theme/custom.css | 19 + packages/docs/.vitepress/theme/index.js | 4 + packages/docs/package.json | 23 + packages/docs/src/how-it-works.md | 59 ++ packages/docs/src/index.md | 31 + packages/docs/src/integrations/cli.md | 160 +++++ packages/docs/src/integrations/npm-package.md | 32 + packages/docs/src/public/apple-touch-icon.png | Bin 0 -> 4725 bytes packages/docs/src/public/favicon-16x16.png | Bin 0 -> 346 bytes packages/docs/src/public/favicon-32x32.png | Bin 0 -> 634 bytes packages/docs/src/public/favicon.ico | Bin 0 -> 15406 bytes packages/docs/src/public/humans.txt | 4 + packages/docs/src/public/logo-dark.svg | 1 + packages/docs/src/public/logo-light.svg | 1 + packages/docs/src/public/og-image.png | Bin 0 -> 137646 bytes packages/docs/src/public/robots.txt | 2 + .../docs/src/self-hosting/configuration.md | 39 ++ .../docs/src/self-hosting/docker-compose.md | 119 ++++ packages/docs/src/self-hosting/docker.md | 107 +++ pnpm-lock.yaml | 619 ++++++++++++++++++ 31 files changed, 1504 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/ci-docs.yaml create mode 100644 packages/app-client/src/modules/docs/docs.models.test.ts create mode 100644 packages/app-client/src/modules/docs/docs.models.ts create mode 100644 packages/docs/.vitepress/config.ts create mode 100644 packages/docs/.vitepress/plausible.ts create mode 100644 packages/docs/.vitepress/theme/custom.css create mode 100644 packages/docs/.vitepress/theme/index.js create mode 100644 packages/docs/package.json create mode 100644 packages/docs/src/how-it-works.md create mode 100644 packages/docs/src/index.md create mode 100644 packages/docs/src/integrations/cli.md create mode 100644 packages/docs/src/integrations/npm-package.md create mode 100644 packages/docs/src/public/apple-touch-icon.png create mode 100644 packages/docs/src/public/favicon-16x16.png create mode 100644 packages/docs/src/public/favicon-32x32.png create mode 100644 packages/docs/src/public/favicon.ico create mode 100644 packages/docs/src/public/humans.txt create mode 100644 packages/docs/src/public/logo-dark.svg create mode 100644 packages/docs/src/public/logo-light.svg create mode 100644 packages/docs/src/public/og-image.png create mode 100644 packages/docs/src/public/robots.txt create mode 100644 packages/docs/src/self-hosting/configuration.md create mode 100644 packages/docs/src/self-hosting/docker-compose.md create mode 100644 packages/docs/src/self-hosting/docker.md diff --git a/.github/workflows/ci-docs.yaml b/.github/workflows/ci-docs.yaml new file mode 100644 index 00000000..08f8f4fd --- /dev/null +++ b/.github/workflows/ci-docs.yaml @@ -0,0 +1,30 @@ +name: CI - Docs + +on: + pull_request: + push: + branches: + - main + +jobs: + ci-docs: + runs-on: ubuntu-latest + defaults: + run: + working-directory: packages/docs + + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + - run: corepack enable + - uses: actions/setup-node@v4 + with: + node-version: 22 + corepack: true + cache: 'pnpm' + + - name: Install dependencies + run: pnpm i + working-directory: ./ + + - name: Build the lib + run: pnpm build diff --git a/.gitignore b/.gitignore index 64b285d8..afdd4882 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,5 @@ logs !.env.example .wrangler -coverage \ No newline at end of file +coverage +cache \ No newline at end of file diff --git a/packages/app-client/.env.example b/packages/app-client/.env.example index 484dafa4..576f314e 100644 --- a/packages/app-client/.env.example +++ b/packages/app-client/.env.example @@ -1 +1,2 @@ -VITE_BASE_API_URL=http://localhost:8787 \ No newline at end of file +VITE_BASE_API_URL=http://localhost:8787 +VITE_FALLBACK_DOCUMENTATION_URL=http://localhost:3001 \ No newline at end of file diff --git a/packages/app-client/.gitignore b/packages/app-client/.gitignore index ff044969..ba6e890d 100644 --- a/packages/app-client/.gitignore +++ b/packages/app-client/.gitignore @@ -26,3 +26,5 @@ gitignore # System Files .DS_Store Thumbs.db + +cache \ No newline at end of file diff --git a/packages/app-client/public/robots.txt b/packages/app-client/public/robots.txt index a0c0cac9..e2f49e2c 100644 --- a/packages/app-client/public/robots.txt +++ b/packages/app-client/public/robots.txt @@ -1,4 +1,5 @@ User-agent: * Disallow: / Allow: /$ -Allow: /og-image.png \ No newline at end of file +Allow: /og-image.png +Allow: /docs/ \ No newline at end of file diff --git a/packages/app-client/src/modules/config/config.ts b/packages/app-client/src/modules/config/config.ts index de7675b3..2ad8baf6 100644 --- a/packages/app-client/src/modules/config/config.ts +++ b/packages/app-client/src/modules/config/config.ts @@ -1,3 +1,4 @@ export const config = { baseApiUrl: import.meta.env.VITE_BASE_API_URL ?? window.location.origin, + documentationBaseUrl: import.meta.env.VITE_DOCUMENTATION_BASE_URL ?? 'https://docs.enclosed.cc', }; diff --git a/packages/app-client/src/modules/docs/docs.models.test.ts b/packages/app-client/src/modules/docs/docs.models.test.ts new file mode 100644 index 00000000..4ff1f6c2 --- /dev/null +++ b/packages/app-client/src/modules/docs/docs.models.test.ts @@ -0,0 +1,41 @@ +import { describe, expect, test } from 'vitest'; +import { buildDocUrl, joinUrlParts } from './docs.models'; + +describe('docs models', () => { + describe('buildDocUrl', () => { + test('it creates a url to the documentation', () => { + expect( + buildDocUrl({ + path: '/test', + + baseUrl: 'https://docs.enclosed.cc', + }), + ).to.eql('https://docs.enclosed.cc/test'); + }); + + test('it uses the default base url', () => { + expect(buildDocUrl({ path: '/test' })).to.eql('https://docs.enclosed.cc/test'); + }); + + test('it handles clashing slashes', () => { + expect( + buildDocUrl({ + path: '/test', + baseUrl: 'https://docs.enclosed.cc/', + }), + ).to.eql('https://docs.enclosed.cc/test'); + }); + }); + + describe('joinUrlParts', () => { + test('it merges url parts and trim slashes', () => { + expect(joinUrlParts('/part1/', '/part2/', 'part3', 'part4/')).to.eql('part1/part2/part3/part4'); + expect(joinUrlParts('/part1/part2/', 'part3', 'part4/')).to.eql('part1/part2/part3/part4'); + expect(joinUrlParts('')).to.eql(''); + }); + + test('multiple slashes inside a part are preserved', () => { + expect(joinUrlParts('/part1//part2/', '/part3/')).to.eql('part1//part2/part3'); + }); + }); +}); diff --git a/packages/app-client/src/modules/docs/docs.models.ts b/packages/app-client/src/modules/docs/docs.models.ts new file mode 100644 index 00000000..6e99ca14 --- /dev/null +++ b/packages/app-client/src/modules/docs/docs.models.ts @@ -0,0 +1,19 @@ +import { config } from '../config/config'; + +export { buildDocUrl, joinUrlParts }; + +function joinUrlParts(...parts: string[]): string { + return parts.map(part => part.replace(/(^\/|\/$)/g, '')).join('/'); +} + +function buildDocUrl({ + path, + baseUrl = config.documentationBaseUrl, +}: { + path: string; + baseUrl?: string; +}): string { + const url = joinUrlParts(baseUrl, path); + + return url; +} diff --git a/packages/app-client/src/modules/ui/layouts/app.layout.tsx b/packages/app-client/src/modules/ui/layouts/app.layout.tsx index abe8e322..f3cced67 100644 --- a/packages/app-client/src/modules/ui/layouts/app.layout.tsx +++ b/packages/app-client/src/modules/ui/layouts/app.layout.tsx @@ -1,10 +1,11 @@ import { A, useNavigate } from '@solidjs/router'; import type { Component, ParentComponent } from 'solid-js'; import { DropdownMenu } from '@kobalte/core/dropdown-menu'; -import { DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '../components/dropdown-menu'; +import { DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '../components/dropdown-menu'; import { Button } from '@/modules/ui/components/button'; import { useThemeStore } from '@/modules/theme/theme.store'; import { useNoteContext } from '@/modules/notes/notes.context'; +import { buildDocUrl } from '@/modules/docs/docs.models'; export const Navbar: Component = () => { const themeStore = useThemeStore(); @@ -43,21 +44,48 @@ export const Navbar: Component = () => {
- - themeStore.setColorMode({ mode: 'light' })} class="flex items-center gap-2"> + + themeStore.setColorMode({ mode: 'light' })} class="flex items-center gap-2 cursor-pointer">
Light mode
- themeStore.setColorMode({ mode: 'dark' })} class="flex items-center gap-2"> + themeStore.setColorMode({ mode: 'dark' })} class="flex items-center gap-2 cursor-pointer">
Dark mode
- themeStore.setColorMode({ mode: 'system' })} class="flex items-center gap-2"> + themeStore.setColorMode({ mode: 'system' })} class="flex items-center gap-2 cursor-pointer">
System
+ + + +
+
+ + + +
+ Documentation +
+ + +
+ Enclosed CLI +
+ + + + +
+ Support Enclosed +
+ +
+ +
diff --git a/packages/docs/.vitepress/config.ts b/packages/docs/.vitepress/config.ts new file mode 100644 index 00000000..d8055538 --- /dev/null +++ b/packages/docs/.vitepress/config.ts @@ -0,0 +1,135 @@ +import { defineConfig } from 'vitepress'; +import { getPlausibleScripts } from './plausible'; + +const basePath = process.env.DOCS_BASE_PATH; // undefined for root / + +const createAbsoluteUrl = (path: string) => 'https://enclosed.cc/' + path.replace(/(^\/$)/g, ''); + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: 'Enclosed', + description: 'Send private and secure notes', + base: basePath, + lang: 'en-US', + lastUpdated: true, + srcDir: './src', + outDir: './dist', + + markdown: { + theme: { + dark: 'github-dark', + light: 'github-light', + }, + }, + + head: [ + ['meta', { name: 'author', content: 'Corentin Thomasset' }], + ['meta', { name: 'keywords', content: 'Enclosed, notes, secure, private, encrypted, self-hosted' }], + ['link', { rel: 'icon', href: '/favicon.ico' }], + ['link', { rel: 'apple-touch-icon', href: '/apple-touch-icon.png' }], + ['link', {rel: 'icon', type: 'image/png', sizes: '32x32', href: '/favicon-32x32.png'}], + ['link', {rel: 'icon', type: 'image/png', sizes: '16x16', href: '/favicon-16x16.png'}], + + ['meta', {name: 'theme-color', content: '#ffffff'}], + + + + ['meta', {name: 'og:title', content: 'Enclosed documentation'}], + ['meta', {name: 'og:description', content: 'Send private and secure notes'}], + ['meta', {name: 'og:image', content: createAbsoluteUrl('og-image.png')}], + ['meta', {name: 'og:url', content: 'https://enclosed.cc'}], + ['meta', {name: 'og:type', content: 'website'}], + ['meta', {name: 'og:site_name', content: 'Enclosed'}], + ['meta', {name: 'og:locale', content: 'en_US'}], + + ['meta', {name: 'twitter:card', content: 'summary'}], + ['meta', {name: 'twitter:site', content: '@cthmsst'}], + ['meta', {name: 'twitter:creator', content: '@cthmsst'}], + ['meta', {name: 'twitter:title', content: 'Enclosed documentation'}], + ['meta', {name: 'twitter:description', content: 'Send private and secure notes'}], + ['meta', {name: 'twitter:image', content: createAbsoluteUrl('og-image.png')}], + + ...getPlausibleScripts(), + ], + + themeConfig: { + + logo: { + light: '/logo-light.svg', + dark: '/logo-dark.svg', + alt: 'Logo', + }, + + siteTitle: 'Enclosed - DOCS', + + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: 'Enclosed App', link: 'https://enclosed.cc' }, + ], + + sidebar: [ + { + text: 'Enclosed', + items: [ + { text: 'Introduction', link: '/' }, + { text: 'How it works?', link: '/how-it-works' }, + ], + }, + { + text: 'Self hosting', + items: [ + { text: 'Using Docker', link: '/self-hosting/docker' }, + { text: 'Using Docker Compose', link: '/self-hosting/docker-compose' }, + { text: 'Configuration', link: '/self-hosting/configuration' }, + ], + }, + { + text: 'Integrations', + items: [ + { text: 'CLI', link: '/integrations/cli' }, + { text: 'NPM package', link: '/integrations/npm-package' }, + ] + }, + ], + + + footer: { + copyright: 'Copyright © 2024-present Corentin Thomasset', + }, + + editLink: { + pattern: 'https://github.com/CorentinTh/enclosed/edit/main/packages/docs/src/:path', + text: 'Edit this page on GitHub', + }, + + socialLinks: [ + { icon: 'github', link: 'https://github.com/CorentinTh/enclosed', ariaLabel: 'GitHub' }, + { icon: 'twitter', link: 'https://twitter.com/cthmsst', ariaLabel: 'Twitter' }, + ], + + search: { + provider: 'local', + + options: { + detailedView: true, + + miniSearch: { + /** + * @type {Pick} + */ + options: { + }, + /** + * @type {import('minisearch').SearchOptions} + */ + searchOptions: { + fuzzy: 0.3, + prefix: true, + boost: { title: 4, text: 2, titles: 1 }, + }, + }, + }, + }, + }, +}); + \ No newline at end of file diff --git a/packages/docs/.vitepress/plausible.ts b/packages/docs/.vitepress/plausible.ts new file mode 100644 index 00000000..49ca2be8 --- /dev/null +++ b/packages/docs/.vitepress/plausible.ts @@ -0,0 +1,17 @@ +import { HeadConfig } from "vitepress"; + +const isPlausibleEnabled = process.env.VITE_IS_PLAUSIBLE_ENABLED === 'true'; +const plausibleDomain = String(process.env.VITE_PLAUSIBLE_DOMAIN); +const plausibleScriptSrc = String(process.env.VITE_PLAUSIBLE_SCRIPT_SRC); + +export { getPlausibleScripts }; + +function getPlausibleScripts(): HeadConfig[] { + if (!isPlausibleEnabled || !plausibleDomain) { + return []; + } + + return [ + ['script', { async: '', defer: '', 'data-domain': plausibleDomain, src: plausibleScriptSrc }], + ]; +} \ No newline at end of file diff --git a/packages/docs/.vitepress/theme/custom.css b/packages/docs/.vitepress/theme/custom.css new file mode 100644 index 00000000..7fa5205c --- /dev/null +++ b/packages/docs/.vitepress/theme/custom.css @@ -0,0 +1,19 @@ +:root { + --vp-c-brand-1: #000000; + --vp-c-brand-2: #000000; +} + +.dark { + --vp-c-brand-1: #ffffff; + --vp-c-brand-2: #ffffff; + + --vp-c-text-1: rgba(255, 255, 245, 0.92); + --vp-c-text-2: rgba(235, 235, 245, 0.6); + --vp-c-text-3: rgba(235, 235, 245, 0.38); +} + + +.VPSocialLink span{ + height: 18px !important; + width: 18px !important; +} \ No newline at end of file diff --git a/packages/docs/.vitepress/theme/index.js b/packages/docs/.vitepress/theme/index.js new file mode 100644 index 00000000..508d8b4a --- /dev/null +++ b/packages/docs/.vitepress/theme/index.js @@ -0,0 +1,4 @@ +import DefaultTheme from 'vitepress/theme' +import './custom.css' + +export default DefaultTheme \ No newline at end of file diff --git a/packages/docs/package.json b/packages/docs/package.json new file mode 100644 index 00000000..6fb6b83f --- /dev/null +++ b/packages/docs/package.json @@ -0,0 +1,23 @@ +{ + "name": "@enclosed/docs", + "version": "0.0.0", + "type": "module", + "packageManager": "pnpm@9.9.0", + "description": "Documentation website for Enclosed.", + "author": "Corentin Thomasset (https://corentin.tech)", + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "https://github.com/CorentinTh/enclosed" + }, + "main": "index.js", + "scripts": { + "dev": "vitepress dev --port 3001", + "build": "vitepress build", + "preview": "vitepress preview" + }, + "keywords": [], + "devDependencies": { + "vitepress": "^1.3.4" + } +} \ No newline at end of file diff --git a/packages/docs/src/how-it-works.md b/packages/docs/src/how-it-works.md new file mode 100644 index 00000000..b7c18faf --- /dev/null +++ b/packages/docs/src/how-it-works.md @@ -0,0 +1,59 @@ +--- +outline: deep +--- + +# How It Works + +Enclosed is designed with a focus on security and privacy, ensuring that your notes remain confidential from creation to retrieval. This section explains the entire process, from creating a note to decrypting it, highlighting the end-to-end encryption that makes Enclosed a secure platform. + +## 1. Note Creation + +When you create a note, you enter your content and, optionally, set a password. This step is performed entirely on the client side, meaning your data never leaves your device in an unencrypted form. + +## 2. Key Generation + +A **base key** is generated on your device. This key is crucial for the encryption process and ensures that even if no password is set, your note remains secure. The base key is unique and is not known to the server. + +## 3. Master Key Derivation + +If you set a password, a **master key** is derived from the combination of the base key and your password using **PBKDF2 with SHA-256**. This process adds an additional layer of security, ensuring that only someone with the correct password can decrypt the note. + +## 4. Note Encryption + +Your note is encrypted using the master key with **AES-GCM** encryption. AES-GCM (Advanced Encryption Standard in Galois/Counter Mode) is a highly secure encryption method that provides both confidentiality and integrity for your data. + +## 5. Sending to Server + +The encrypted note, along with some metadata (such as the expiration time and whether the note should self-destruct after reading), is sent to the server. Importantly, the server only stores the encrypted note and metadata; it never has access to the content of the note or the keys used to encrypt it. + +## 6. Storage and ID Assignment + +The server stores the encrypted note and assigns it a unique **ID**. This ID is used to retrieve the note later. Because the note is encrypted before it reaches the server, even if the server is compromised, your note remains secure. + +## 7. Link Generation + +A **link** is generated that contains the note ID and the base key as a URL hash fragment. The URL hash fragment (everything after the `#`) is never sent to the server, making it a secure way to transmit the key needed for decryption. + +## 8. Link Sharing + +You share this link with the intended recipient. The security of the note relies on the secrecy of the link, as it contains the necessary information to decrypt the note. + +## 9. Note Retrieval + +When the recipient opens the link, the application fetches the encrypted note and its metadata from the server using the note ID. The base key, which was included in the URL hash fragment, remains on the client side. + +## 10. Key Extraction + +The base key is extracted from the URL hash fragment. Since this fragment was never sent to the server, the key remains secure and is only available to the recipient. + +## 11. Password Prompt (If Applicable) + +If the note is password-protected, the recipient is prompted to enter the password. This step ensures that only authorized users can decrypt the note. + +## 12. Master Key Derivation + +If a password was set, the master key is derived from the base key and the entered password using PBKDF2 with SHA-256. This process ensures that the recipient has the correct key to decrypt the note. + +## 13. Note Decryption + +The note is decrypted using the master key with AES-GCM encryption. Once decrypted, the recipient can read the note. diff --git a/packages/docs/src/index.md b/packages/docs/src/index.md new file mode 100644 index 00000000..9760c932 --- /dev/null +++ b/packages/docs/src/index.md @@ -0,0 +1,31 @@ +--- +outline: deep +--- + +# Enclosed + +**Enclosed** is a minimalistic web application designed for sending private and secure notes. Whether you need to share sensitive information or just want a simple way to send encrypted messages, Enclosed provides a user-friendly interface with strong security features to ensure your data remains confidential. + +The name **Enclosed** is inspired by the idea of keeping your notes safe and secure, like a sealed envelope. + +## Key Features + +- **End-to-End Encryption**: All notes are encrypted on the client side using AES-GCM with a 256-bit key, ensuring that only the intended recipient can read them. +- **Zero Knowledge**: The server does not have access to the content of your notes, making it impossible for anyone else to decrypt them. +- **Configurable Security**: Users can set a password, define an expiration period (TTL), and choose to have the note self-destruct after being read. +- **Minimalistic UI**: Enclosed's interface is simple and intuitive, allowing for quick and easy note sharing. +- **Dark Mode**: Enjoy a dark theme for comfortable usage, especially in low-light environments. +- **Responsive Design**: The application works seamlessly on all devices, from desktops to mobile phones. +- **Open Source**: The source code is available under the Apache 2.0 License, allowing for community contributions and self-hosting. +- **Self-Hostable**: Run your instance of Enclosed to maintain complete control over your note-sharing environment. +- **CLI**: A command-line interface is available for creating and managing notes directly from your terminal. + +## Why Enclosed? + +In a world where privacy is increasingly hard to maintain, Enclosed offers a secure way to share notes that prioritize your privacy and security. Whether you are communicating sensitive information or simply value the confidentiality of your messages, Enclosed ensures that your data stays between you and the intended recipient. + +By leveraging client-side encryption and a zero-knowledge server, Enclosed guarantees that your notes are safe from prying eyes. Even if the server is compromised, your data remains secure and unreadable by anyone without the correct decryption key. + +## Get Started + +Ready to start using Enclosed? You can [try it out online](https://enclosed.cc) or [self-host](./self-hosting/docker) your instance for maximum control. Dive into our documentation to learn more about how Enclosed works and how you can take full advantage of its features. diff --git a/packages/docs/src/integrations/cli.md b/packages/docs/src/integrations/cli.md new file mode 100644 index 00000000..1879c87c --- /dev/null +++ b/packages/docs/src/integrations/cli.md @@ -0,0 +1,160 @@ +# CLI Guide + +The Enclosed Command-Line Interface (CLI) allows you to create and manage secure notes directly from your terminal. This guide will walk you through installing the CLI, creating and viewing notes, and configuring the CLI for different use cases. + +## Installation + +You can install the Enclosed CLI globally using npm, yarn, or pnpm. + +### Using npm + +```bash +npm install -g @enclosed/cli +``` + +### Using yarn + +```bash +yarn global add @enclosed/cli +``` + +### Using pnpm + +```bash +pnpm add -g @enclosed/cli +``` + +Once installed, you can use the `enclosed` command in your terminal. + +## Creating a Note + +The primary function of the Enclosed CLI is to create secure notes. You can create a note with a simple command. + +### Basic Usage + +To create a note with the content "Hello, World!", run: + +```bash +enclosed create "Hello, World!" +``` + +This command will return a URL that you can share with the intended recipient. + +### Using stdin + +You can also create a note from the contents of a file or the output of another command: + +```bash +cat file.txt | enclosed create +``` + +This is useful for sending longer text or data generated by other commands. + +### With Full Options + +The CLI allows you to set additional security options such as password protection, self-destruction after reading, and time-to-live (TTL) for the note: + +```bash +enclosed create --deleteAfterReading --password "mypassword" --ttl 3600 "This is a secure message." +``` +### Options Summary + +- `--deleteAfterReading`: Enable self-destruction after the note is read. +- `--password `: Protect the note with a password. +- `--ttl `: Set the time-to-live (TTL) for the note in seconds. + +## Viewing a Note + +The Enclosed CLI can also be used to view notes directly from the terminal. + +### Basic Usage + +To view a note, use the `view` command followed by the note's URL: + +```bash +enclosed view +``` + +If the note is password-protected, the CLI will prompt you for the password. + +### Providing the Password Directly + +You can provide the password directly with the `--password` option to avoid the prompt: + +```bash +enclosed view --password "mypassword" +``` + +## Configuring the Enclosed Instance + +By default, the CLI uses the public instance at [enclosed.cc](https://enclosed.cc). If you are running your own instance of Enclosed, you can configure the CLI to use your server. + +### Set the Instance URL + +To set your instance URL, run: + +```bash +enclosed config set instance-url https://your-enclosed-instance.com +``` + +This command will configure the CLI to use your instance for creating and viewing notes. + +## Updating the CLI + +To update the Enclosed CLI to the latest version, simply re-run the installation command: + +### Using npm + +```bash +npm install -g @enclosed/cli +``` + +### Using yarn + +```bash +yarn global add @enclosed/cli +``` + +### Using pnpm + +```bash +pnpm add -g @enclosed/cli +``` + +This will ensure that you have the latest features and security updates. + +## Uninstalling the CLI + +If you need to remove the Enclosed CLI, you can uninstall it with the following commands: + +### Using npm + +```bash +npm uninstall -g @enclosed/cli +``` + +### Using yarn + +```bash +yarn global remove @enclosed/cli +``` + +### Using pnpm + +```bash +pnpm remove -g @enclosed/cli +``` + +## Advanced Usage + +For more advanced usage, you can refer to the CLI's help command, which provides detailed information on all available commands and options: + +```bash +enclosed --help +``` + +This will display the complete list of commands and options available in the Enclosed CLI. + +## Next Steps + +Now that you're familiar with the basic and advanced features of the Enclosed CLI, you can start integrating it into your workflows. Whether you're automating note creation or managing secure communication from the terminal, the Enclosed CLI is a powerful tool for ensuring your messages remain private and secure. diff --git a/packages/docs/src/integrations/npm-package.md b/packages/docs/src/integrations/npm-package.md new file mode 100644 index 00000000..2885d881 --- /dev/null +++ b/packages/docs/src/integrations/npm-package.md @@ -0,0 +1,32 @@ +# NPM Package + +::: warning +This documentation is a work in progress. +::: + +The Enclosed lib is available as an npm package. You can use it to create and manage Enclosed notes. + +## Installation + +You can install the Enclosed Lib using npm, yarn, or pnpm. + +### Using npm + +```bash +npm install -g @enclosed/lib +``` + +### Using yarn + +```bash +yarn global add @enclosed/lib +``` + +### Using pnpm + +```bash +pnpm add -g @enclosed/lib +``` + + + diff --git a/packages/docs/src/public/apple-touch-icon.png b/packages/docs/src/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bcb28fbf8b1d7e53ca7ceabc689b2def01add9ff GIT binary patch literal 4725 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 literal 0 HcmV?d00001 diff --git a/packages/docs/src/public/favicon-16x16.png b/packages/docs/src/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..e7dccdb63a3c5790d19e770711a3afb4d5dea216 GIT binary patch literal 346 zcmV-g0j2(lP)Px$6iGxuR5(wi)4eOkQ5eSY&x5ik6B%T{v#=`$3oGTVl;QCo7?s_qr0fQh*S~;8 znJHzFoy=tL@;f@eI?u`P>5(&@?(@B`>%Q(&^UqVu-p^ni-P!#UHu0MGO93Oe$2Fdl z!a+>p0`oZ}1uWqNo%l=u%Q(ghZgWTqC<}92C3qWKxWrsx=`A#A2QYvuj3%lA^sE(N zI2J$t64Dn|qTMD1(?yp<3}F{*n2o+uP9-1|^^Esu>#N^hdhRd s91y0ykBJt5cO1m|{Pf7z_RpXD8yB@d5j`nFK>z>%07*qoM6N<$f;d2vO8@`> literal 0 HcmV?d00001 diff --git a/packages/docs/src/public/favicon-32x32.png b/packages/docs/src/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..84c4f22724fffa6dbe06b90c3e880760c5b89f10 GIT binary patch literal 634 zcmV-=0)_pFP)Px%G)Y83R9HvFm(NR8Q4q&JFQXtgQ6$u^u-XKY5Y(>RM4+NbKd2z2bwNu*Faqn} z2*jdN5m$kT3*87&D;L&Yu-3IGt?oDG!tr{~z2_X?m0bB&$0%s#G+ywf7jnFebfD^zvpwC!|g75*10WZw*EbtEa zTS4*!xZ?aC4B-Qq2JYI0oxsnUFep{G3OYd$J^=T^xIdV%egU+GX%W#N+aqNFs&*M&a{7Bp3Y1Dc*EL|r7q*adO?vx{PSQBkarj!a~6s9(jPr?Dy?aHPE}>cb4^oD%X^CuH|iELD}|2 zou8djdQ~_^xIp+pcuxp9>g=zQ?mmHWkEhi3QfH5j?tHOYxLx?Z1hIIjv%gGAyGz9< zRbn67GF)fRy<-ev9)K!|vG;Z-tFcSK&TySqDC^$8ALd?Tw_e~LSKSkJcjp9p%n>if zOFppW{#MDE>SS(C3V!}is|{~ITMc)GXM<O}w>(fx8GjO6b zR|#6Z56eo`ZcGI8^Acg6kRqQ+*`5pR@O_}{qdyg&mmDgh#Q0w>wR8Q$_nkmqV&}k-G>iFsi z{?q_AZv+ZFlg9Op>aj7HO>91SUa%XIqUyI{;>BLHE{&_brKiIN&`7;~O%~?XMr26;z%uSvTiwEDV8!6)XV(h$ru5bKp z6fFLj_bcz;?3!G+T`Olr_nW{V-E%=L|bWTjwdp;-TI z`R)dwKkUJm3cO48%Rgi6)&0&P8Xn3p1HBpGa6K+e2*d9rO2Sa)Is<&yTqJP54!?17 z=A?f~i#SzWV}iX?s+uL&$ohR@O1MohUSen8qW>f$eWQR6ngG zB=5v-V{Mmzl>AFee@zP?*KU!VQxXyXq~ON~QRnP)oX}K!Og{cW&7VCA^nl>~-rqF% zfXBxVTG%7N3VO{%Dd!#l_P1erMEPmdIi1o@cJ&$9G$P+v2f& z#FlOOjo}$pQ0x;+q#9{Rrs>x8CaK6B$|?J}-?s!s?bf*0n`THz(F=KABZSw`WGk=c zcMGghvEuE?4?YGh_sYRu!TTn5z7NJew^Hqj=g5tpd%jxWY{NIxRe~4Bc{dJYXU>rK z)YxUxlY`v&`CqObj&m0doP_5ea@S$yQc@eBh|z6Pt!T$Y0Vd9ZvMmg z;q+qjhkFDjgeG%FW`|`i zdj2bnXkq_m{i=(#s{crdpY!#*iLrA%UkIlNO=Y(ACzf}q6u%aHj>#?H+{C)<$EdR> zvIpi!Tk%)%&^InTA@FYGT@h|D9hu=0g3tNSh`D40#zxz<&owKbqQdH4`&oP1D cnp2)%(_Jh(-Z@8wp$s!H%)l@M|LY9=1A!OB+5i9m literal 0 HcmV?d00001 diff --git a/packages/docs/src/public/humans.txt b/packages/docs/src/public/humans.txt new file mode 100644 index 00000000..e2d90924 --- /dev/null +++ b/packages/docs/src/public/humans.txt @@ -0,0 +1,4 @@ +/* TEAM */ +Developer: Corentin Thomasset +Site: https://corentin.tech +Twitter: @cthmsst \ No newline at end of file diff --git a/packages/docs/src/public/logo-dark.svg b/packages/docs/src/public/logo-dark.svg new file mode 100644 index 00000000..c9003115 --- /dev/null +++ b/packages/docs/src/public/logo-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/docs/src/public/logo-light.svg b/packages/docs/src/public/logo-light.svg new file mode 100644 index 00000000..ff063dae --- /dev/null +++ b/packages/docs/src/public/logo-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/docs/src/public/og-image.png b/packages/docs/src/public/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..0400fd1f3baaf0c0b108b2f0157ba158c696205f GIT binary patch literal 137646 zcmX_nbzD^c^EIi2NH>CXOM`TSv~)K}EP}9zunW>icgND8q;$yA-LNzW(%lUL&-L?t zUcWz0e=>E}+nD>(u;EG1`NW?%$~C==iaNgV>jD|&~h)+6!^Ar9mqEYKAR3Q>m@tST0hH`ya|-_ zye)pZ$o_h_2al)l*>%4?Xf%ihH&hd=5G8OY!qWbE#qnS>CSxYxb|G*aX|8R=}7Xi@974y zY_WU>IUf;n`5GeVdk8XzKHhfGJf47|v+XtT`=ehPG`IbV;eD(7=1+H}_lawpLn#{O zw}bjH-w*I=XO%zTulEhU_uA~9(UMnvj|Q%k&Z}+zq7YN>PoX$*io{&0G^Jd6YI|sS zx)Q4(Boww-=C!M+AcYQwaOR9Hf4x8aeII!_;yFE-N-d>8o9(#a+f5EDM4RK?iKKuN zuP)uzyWH11L1lb!mOa;_?Cu@*?~JomPB*!Hy=v6zK#`z8hvIBpg!(b?-WKCfTxq?q zOSonzyRFK=^ajP6t;ffYKr=4K!r%tOhNSXIk^8m@PRuAn5nR4@mDN_-jlZnO(uHvc z8p7*A!e=?*)lN12YKjy?ZZd0wS zKh|0gHidC=Kk*c_ZW_1Rj;5geY;C8%B0qD829xD1o ziKiKthnZrn6Y;1ticBS*GpZ|N+#4~NRdVNT^n})8n|Jp9iHUJBlrRQoi?z7GcTeNt z$M)=Wl@Pw0$D}Pd>mV%)Cu%t?|<@atcuTqgr z2{^u$vHxVAlpC;7_GjbEK7agUHLjcb=NqxHtn+!INRTcL+5HqT@N_JXXcmqGXoc5<%YgY@6l7*V+gGs6fgt{o}QKTrVHOiq_ z!*2vnhKT~(K|S$YMmin~)T?$qVeDKmk)!q2zm!sX*cfeT1~bxmU<;|g$vNuJm3yu2 zE8!5u>^-C{wPQRISgAZK&l69G5s~D_KkoKcYb0~;_>MucFGexos8>=^%!A@NAykH_ z860q=u^d9brlwSl+RBtKbZ+q8Un~%s4W|ziRfU$(k)ToUiusGp5Il9!hrd8RpYt4E zRQ;FNb+6!ZR&%tz$RBM?VsXfJIDBNtM4`e$Gh3W8rnIThl7#iW7PJ}72pI$?Ri->o z9v+lULBqpnp<7^Qf5C+Pf^+Z^tI3w>>Nz;@cDk!{Lv;?^+NX9)kNhx^-Xe~Y75z~` z%fx+Bvml3>aqB_)O2*_eU4!W*Qx#-azQ0js2;(V$KBMJ~_qW!AkhFQaQqwOYWrL7ZR zr{Rj%c9vb*Z0W)jh388pc3aZ1>5N8{e#@Cx8A}v!{dgfojgt7LG|>u1uSPnnow-^B z^ARROedReq-KDD*F&05;%owb~UahK1g&ApzHew`fmWwy4G&iS}7KE?{6HKi|hF47| zy$zn0H&WMqAL+?3WhUFhZ^WY<@(EYahesngDIm4aJKC#j+p|7B^CjUScQG!E$0hED6X8#9pByGm4}nH+^rl~nxwFVA5Y0lM0b!L7^_ zoVJi#v(ktQ&eUsvuXKdOU0_q!kO|&}aE9okozj7#YB>Bke?15;RS_T#R-#Jke)xWG zH2D?xOxqB7xG%3|Y{1xxn2%7N27fQ?uN|SEN$ChViBPNXYGAbHz~6C7PQ~c+c@h*5 z0JQpjwTN>7uEbPDeb#!?{W}@DdI+rpsIVv0ybjUcY}abY4vZ;wIatw=vb=a9w1uPU zRk8MdVx#c|Jp(Ao7`O%tH^Wa%g4y+v-#<-4@**v#v~uN0cb9d$kPc-$W`-HJUvu4s zHU-BQu)%z@i^U(L+9un`c&^QUvwxvqMvX~EjSz^Tn!is&{H$j0e|CrEGYSC>>=FUt zQW|wVSJ{BC1`4km8UKF&FTz2fy#Qo|2p462#c7$N@Cn7Oo%cI=$>#b}Pv@b}QvQPt0SiFdK)#g!v+6j~Pildy}=v z7rVi3Sw>^zuwuJqB!3goNKLFvQzq;x)zghBaTt~N*}T+KF6pVGCxb?=_=T;ydbZ|H zl6Cm@L~)i` z`0T+2A4^OsnD)6U5^-@8wwPDAFiqZsg)a4zVA9rYhi5w3SQM_cor&8BS$YG?M)wru zbJIX-=K-D+#Tf07<#TFz5)GKq#JbIMgQ5mKo+}pO%)C0cA(Ax*+%ffgYZ;}x0*~KI ze0efxFd|8UE2b~h!DI)T^LsGMehaS7#@_pI!PltDf{^{^A*}GTU8|`BRcTSwlyarJ9eqImG z+dO?t%NcR3UsodZ>-*Posw|kEuvDk1%l?(L^J~4wlx-{OlgPbb&$ThJCcD7bq%p|` zKDdcNY2sK4A-gl4=F>Y~3+C}H@FJ-I54J}AdH%zTbD#`tfk8kFHI-zFrOn0+bYG&ueU0%=Y;#mnpkr{oR;F~n`c{T&c zFGke6)-ME`dP09NqLTDBKRQPxdqjm-N)o_sI64SFMP`;Vr|ZyGhmiTIhuHC6E$(m< zI!mwbV{o@!XZFSO6IK%HM@mxT!ogpswps^I&+wd6!Qz6BC6oc_fAz0}9ExLlY7uSz z4#l&U3%k|;B@j~$qketfFy*glI62=uA<^kDZq%uccTO3~Z&@4x!bNXHGyK|aWey5d zU<+dgP2`8myO)cD$-<}QApTXmxh-R4=Dr`skE{N2`F!)Yzcrs3nI~pA4{7RO$Q=j6@z3vYiG|FF(&`2$6h9cHWUO@W~ z;P4!}D~6v2d~;Ya6v?}ou4Qt9ylp0GFDWj(9YXDJR&^81nIZ0~C=xUX^`~b=Suo!* zAc25X=v$jOyvWVZ!rH3A9H#CU#yQ*Q3P*LFD78?=PcoK^mI_3Cq)+1cGjflXyI!6$l-RvY!mk*hfHZ@zr79D$W^N#*4Hxet6`6iI`(tU{ z1_#(=em0h%UQ{#ENWK(~%*Vr+_q z926r-DD*^J#ZEOXDHCWMz} zU~Id_urZ5kWa~KbwYJizb`CGev7X9kR`*_g56>(9M*PEGQ7!E*>|uh95>!?EoaAaa z4V+u+cbZVPCj3fc=20`4!0JXRI`cY+LRN%S0_1RGF(S5;_2js)dkMg*0RXV%z!U(& zlnhn;iHHzTwLwe{P?qX(G*y@2SyxNrC2%OPOeGW98Ch|6)-NLh}k*yA-1fS;LPPSPsU#*<9kcaye>av4IKFcFG*{LgVj z>T7=&t~jJU7sn_A_+jQNgnApGS5kn^Yj7R&fK0qlMSsbS$rO?IO)BiD`BdC=xLJ}* z?XFOno=0iD+ov-=a{|f6ERP6GqEXrXt1gVz0jg@HM5f>psS^n=$-EHr;oWN6ye~f* z3Gi~Q926)I&x_YNx?`Jf**UZnV2zq7CDe!bov0F^Xxcf1vX0$IHU%9?`yR?O6k5DI z#Fy~A+Bk%TPtt7pH5KAA2<-^LcKi2i8Z20-`s2nRF;y@(%YM^=FE41ycGvUKgKD&Hn z=q_Qo5ItYezj*fkSut3wyrjTNJfcC7GfxqXd&7~P8TrA28r7zATIh?S7xUq+|L5M5 zjz)*6ttwTY15%~d(y|&d!FayPVISQyZ-IaJV6auI^YcFf0We>{eV8r+Bzz#W3L#{N z6_KRxokQ;y-Mz=vpuBO{>OtqO;?V0KKIq0a!YgO{;mIWlB|6(sJEX}1d6OX^@;zQd zGs-LzcJB$=ut4G(vCv*cHp#5h`1!@a`?6%Wfv;`E!>8gcQlluP3_VSFwwGE2s|LEe z)bVJFYlCv>jKx}8JUOcT1Ntl8=OaI2*nTS7`%_-k1mp64N%h_75l<*R_K!c2c50Z8P`M7+3?JwK>xrN!N zD#{4?Lg;U})6e8THl|umnyx)9oTpG|*J%oJMOrpXFEu5u#%JY)_N~rV>p&hib=O19 ziUG4W-7xOxI%b=O3L!!{7^ z`t2y8<;Gv*Ws@h;Hl9(}NxE5X6BKJ3*KQXVwFvXJ$A1_I115_GKsN;|tcrcx^9;2@ zdvDEL*H@)D>cl^PzDi3;EE;qh`8}VB&o=t~{k6=T= za`bne`xq`zcZFZE^emoF*-E?_U1~*^4;o!>&0JkTU}4}cDtPj~jQOrpzteE;%u%xfd!5%SJi<5I|{|H+?kki@! z{|d`L?etVkfE0z%9Oq6VILms@w%JCEeIwqXHx446I4?hz6s#Sqyn#bm>*ma|yV`n4 zPtvsIJq0gbJXokI3-VNmkN=7vz~90DMT2ug4KBL0={kH&@ zVYdlDK*0I{)Vne8>GKInplC2pT;b`!b&x@ zRSDoo^sbsw8`zPNE+AWir>QuFLmAXx8tSY!b$lqf5XI9dhb&EQEv?YKRQZqX0)E&K zkU@Y)cGe;)1NHOEC^=ETR5A<0b7YzTYGO55C}-b5w8L3YEUD>Q=&SPEheo=pF3)bK z&*u0($Bw2qACKpqHCRMvj#cZ3jWyHNe3bO2=hb6T_C5`Yt#s44VHg{!+82L}sk30HO!VBu9j zO(x_T-EbfTZWr1^ziwxJfo(oB)7N=efU3sns_52N_$@zkd3p8j&sUO6*0{ecQj^Fw zXC(eTb}I0^*LliHQV9(!vH{y+VKu-=+wKOYLv*(TW*J!wto2IJkNJqS`GJP@CqKlR zd}o5JE@ZS>&{*Tc&DWutA3ECuqo1V>@XhqeCZNGD-XMGFre|+*ybWkypkEmvcPmMq z`wLS_-0?|T*VU!)&{?lSpPQ1fvKk7y9^rWT17++O++RA%8r<)r!T4Nlgv8XTVxv)D6Fh0r9|3DhB z+uBH)2@O;wNQAgF&oR)Cw(s*^bf#3p-#GkvyWWxM}N6zztT9s zUD3{`XX}Q_e{3a=l#S|Rcad|<_T^WAec1d{_7LA0rFu~6{!tPoZ8O@89$Tatq4c*LE{1k6=`IYWTX}0Gs)AL1c%c`jT0R$Vkktg#YvB=c#-oeD=NtQGhieQwenG6>0>#{`SZ{>7q-0UnGU>mW4G9N|_W79Lo%Zt_4uh%F+B@nX#<3hf zWt`ld9hvoQXF z`Yrx#QBj0fVgIM#sC@qcO))Gj*<|2iwSxO=r4!yF$dcR24n0CS`5&4Ou#GmTtAT~nPp?FP3 zsK1phoY|VpN*Hce3_r^)|BGdu%~O zx!W8=zr|M}LPURE6Z1yn;5Ej3QvwP=^3DH^?_0coaV{Dy(f^nwE;c!rvv{Rx=y>9} zM)3RLFEm=E=(Ms`=j&fF4Tosy(t8J@Ojx`L=I|;XbIq&Gcz7`U>}12wV`utgE5pU( zqqf)t&+gg3siA)~WTzPqCD11k$mL4hF9Sz~kVFp0xpK|1rzn6f^Yy4cuV{|$MK^dMD%(0ZY2!XXG{1=S~?*i!JgIX#tJdP z)C|jtfv=f}i@0{a8Tl*>jV~@HfR5RMpyj{vRs2>0)rw~EVq4habj!YgNt68QQrGdj zL@Z6WnG#kg#UyD1`?X520dJKCnD`X`7ZdH_xE15erwQ0qkMN%$@|`soMGt-1PmklnB-v%@GDXmYEy!2jZO0l;-d%CR^DX*o2&zBr?@ za!P$W{YRFwa!LH{t=0YqighwVeXh2*JUl4Q3M-KP@?sLQUW=XXq;b)-i#XT|6?=!V zI3>QOhGG^)wjLq}0#k4lnNeSQc$jm398nkw;acw)B%sTC>E3HP#ZOSytnlNXFYE=h zLLB>MMgoWLItxgm*Uf}8uCChC(e#8FT&)3Lp?Mx9L;Eh*oiLzfV8EC0RCVq+EhlRf zJnjNCd+N>W|Jq0ZNOoY3IFB8PNUZP_a9H$X1FCJ^_x5gCshf$ZJH5jHhnqlgBbCJLj`ND#b6%&5RDCKQEky2!Hba=L&kw+bdcb; zgDq;NH3@8nCj*U*hjf5)VgMof0NLgMsDZPnIDt{S7jbDt?-=T#dp5LLj_V`Y1XFaib0j^3wJePv*H z601A@SPXuk5;dg+B*-j4@Bb0~Q=oS0K5b;)A^G<(d~30CwK8c4!0gErl1?Gy;C0*G zwkF_Nr^olqj}KL=?RsmNC~wn|@1L)AF5ZVetL^Tq_d`S@Z!&5yS$OTzTGS}1*oiMh z=&<9@QJgh8J=J(UUrM8?%yA>+PqQSpqtMb|i+Hwtp@B?+>J+ND?KDwuQ+Hs{m^Hs) zdF=kiV8YIbJ2A@8{h{>5fpomQeaZnbwU=$T%^{MwQT{cZmoDFo_lgNM$d5&Yj^UQ% zXTw}#{ugKvfA!;T-;{b=(z@JP;B0&r3{gyY55UVu;M(>9gH#+C;nB1FFCw&shV+=U zP?W!@BudV53ZPhNE%S$^4!S9Is7K1Hc9!wla8RwAIrq3$IAN~rblMkk4ZO!o;8H;U zu@-r)jZua81EElQ%@-pZ6?Xj>32l?0^;@Ou5V&3c~mQ?4z28WFHnjUBxi5_7QvBt|*CgefNSk7qKC!)K!gwb3_! zVJ&;v3)Gm6DO0Zf7@aP8zWep-72u?P%3ByYfhDPxSy@r1g;j;#+DWOcIdn8%8}-jo zy()8Z6rlV4`au5XKsW3JLxZJD0hlw?NagreJ z{^<+YvpKBVUo+Nfa%Q}J2O&9TNFcMNsC|Cu=&KqY<#IxO9jnrDDrq(+Z5 zy$iKtfQ}XhmNT(QC#Gq9%UGWWEt64g*ed+l6K30(c4nit`iIq21HFoLlmwNUaL%mi zqRx2$9(BLGDp?*LC-9!nB~}so(Oc{irtB&f8x^!5S{eI|^L+Zm^HRTpbcUE6e{xGa zK8r?kjWWx#?sN`y7<3@3^kVBvd23BNnOlX2_hsusd=f+-*0C;g7B0KB@K^Mrt%nJM zr{92AIxI3uK%nB$oC_krL#U4dr<#30$qoI_k6*^+V#s=@Zdl6wzHEztOx~ot!-LDV z_qx!SFLY2dSXd)qS!gehPABe@8$#>IZ7pzI8-K11nxogxg>3CU1vz$buiL^bQ9J3s zz9Q3~Vb7pcmNOqQfYWIO*7uRoqh54ciCxD(hkm15u6a&!9nqA<1T(9FOASGGrOmvu z%1g4FFqg0W3J9-0NA!_%fh!I^9>4MWZC{+v%sB$s4nVGb%z+o+Xa0-)ehrKr9HI% zT4Fx8ybjz{IB7iOqtY(j&2Mt;A7**Uuv>V&l(VarY5o2ZgLWySo%gw3X;pJ@z6{2- zXMO2w@wfbKS~!q6{Vj*iBh$dJ#p|oJ2n%XU<{Ud?Hy`rm`3R@uVEbZ4VT!IkhWh`; z1pI$h0)GLxe-WfCr|F}$Mzn#C0C6(=Am!X+)|c>_#8&kg8R1Y5A+4`Vd1}@3wI6EU zZ+bt%mJYDRNs!M!485f1VM@7=+sg0RbFpwNx! zP^xFH(MP5u&Rn=0vuKdrWekqbPyKekP^>1`%{FvFFyTt{nNZfP=xM1KI;@LyN7~Ba zv>xz9g@gwYko~IX|6A4hXMI0t@@uP3Ih*+{$i?diVxe=0gUb?g*CK(ScVowY&u6DB zr!dj@M(7H!u~%1bVR45Qt+EpKAs6pE4d|vLJBW6D#>D9VtjzJyy$VKY&GL_z1P<`OwB}(Ra z?;RuAgOkczZQiGMtw=A0p|SeqS4GqFKfldvg$NHvpS4yu|L8W~6-#!~my{d~`wKW6 z5a3RD0eva~T-LMs{13Z|%augDjnCZ%J5iEI-#7jEv*r*tIP$a-P^{SeEj{sq`W(sR z6;HBRp{Lw(z`yDl*4^5|Sf5KMHUk@U)#-hhuoHlBd%Ik0`3vhBnTE7VC9~V{!)BF@ zGQ71I2Yi0NfUy=UYZ&~Mtz>Usu#}b1YIVbv#kiKKeBW&n$ut~&;U_|vRx2d7p%e0p zwG#O(SReNcs~fRv%pJ7J*YwG^Sf3u(H`o zFDs-jR#!s-85Joxb$) z607Yya&@QLc)tI($FddoEP)2a8t3f0%5RwqB`o$|%jom4#Xc%l&g|d}aJ{GWcnj3I zA~3Or0KG3pWm{}4t}U9CeLSGY7X zOU`1$Xwx6G`>coWP`~qQM3~jG$!|%s(po>__dgdZb$Y2At$)?qEN{XSLWTz|UyLvD zgJ1BBZDsyO%`d%twd-H_#n46A!z0y#L<(to5arzNlFiU%=a1fFoJl+gO^ob&xnp|B zD}d@-(E%1)C2$gT{wXo*v6s@Nr5cg8{`bK0JPBS!C)^<77_ZM^pLnMePDtq0PBxQ7 z^ZIp+$8JNlRt#b@u9$=~j4EY(Em<{tI^+xZ6bDXfl$pom!`tw{On-+EZpB2?WPivmO;VMF*M@0gC#m=VY;@Q}+Xhl2&MW`fse3L%LWE?oDHJbRBqY_aR z=&mf~p#QQY-g{Bh9WTx4O-DL((GC)(uBz$;l;$BoRs=__iuo!hxOT$Xy{rvm8Oqyl z*xI%xQ<%I2cr-%_gNsC;$V)!6)her_I9uAx&nFvPF@7pvh$`4D2MIodc2B36tYnI@ zAeI#0TogvJ%mM^s8x0txdVOIOg|xA1%rwN2K|-rgcF+J#$?B# zpp3t!UA52MWS=uGgBH!O+0h{w@5A4jy-ITbYPF^ev_GKm#BuFv5yDR49wHB46hwWZ z8fEk)NjKlMy&WhG)B95K&CPd)F!8F5g-~8G?Kk0*34Q{R!(52_sn90- z%k1>y-pQq=Pe(C(^n%7Fk`1O4jO445R_YY3Rwy8$m@T)rkgOHDiWgr*0#7M4tvs(N z#^^gS6gPfPev({3WgjUNq)^0^iYScCeL9CfV|`N3I8q82m#$M2+$2m{hx>xKqTpV+=(8yoU=Kd zVu<=UWKAk8fI(TU6ixK~>}kI9zJ$M)Q5T;u8U=RItkd40^@{ywsPdacIBw-KRPK_M1JbNZeVP>u+C+UafDu%=&gLPKgk{JayKwq*)}12% zGH-vX6WuDJkzg#pf!V94Ah*haMKOpH2PZOJ8sj28qc5~|As5Y#rS z`!=sRIoGQnD-3_xtLf{lZ;UK9EUBvK*tGPIayM}(au~-#C*R2vHE4dxVK13cM(kT70oN5><#0uILT%DF9d0c0uf$sy zQzFk;!XkEXc0fw_5OZ;*(IbVCg`*#h zDrjKVopU4kdNhq$5D`kJu3I76=&I&KjxSkgSHM%}i|Z(xgpuYCuv=HqBZ?+undLfm zIzt0^%d1Es6hg*?oNH>eAMG}DQA_4o%KUXH1oh=Js6_dXk$ z9Mi}3PnSB2MQ4mYzhDG4zM8AqBA#k}NznWkE7dE!U?y zA!zsiC5XUC7b<18|{Bvn)2Wn)>F*xD!RKpvo^n^NNRPjpcT%@i?vj)kzt21&lkM0)3?`$bQyw;RZ38Z84XZDGd2{Ay+~M9#L={wHcg*5Vich$=r@jp4cprHKh$8(_CpHNQT`CfA_(oiRHc_x`!utCT?4ou4q1Qq}C% zH#>oX3)q(S1q0RZ6zCE?lkKbW`QALCnOo@Vv}-kDu0CsX-H zpA*r%i;wz=NZC?KCuFQca55oZ{X}G8vxe~klI=eS2Iz(rjb$^(;>v+N`{MJpZD<|h zSM=*Z?C?Uk=XV!vy3rI`FldRq1(Nbe6y{pAtc2sr0jV2 z?y*1Al7tcb{hDcDqz4wZG;I!-A&kBd2{llW=HB~Ck1xIlvMHTbgl@yDO}qiv9t@+m zVB~iyT4)kWZ?U4Xntt1B-R(1j*QF$dLrzikAtD9O+@XSWr8rAs0#K*EPew6L#eLm7 zj2;m68y{eeEUkM_Fr39CArAT3X&Ix+Z0wuRI`qj!4CO9*oT!#0InLxtbhiG&pfr55 zF*QWImP7>QnH+VV*6?TZ5&2^*R+XLI%hH>d?) zfdV%8HSL)~;5Sb7!LVmy{BZb@c|OAaRSu@zNF@Q`7R8fnc2y@ z9waJQ}PI~K$CqR$G2t?sRfK1W^&d>inq2$}8KBkt7 zk2y$XUkn~seM@_O=qS8aKfdWe=OtfUm76B4HdsYMO-}qFolNth|5f{gnurMTnn1hQ z>jG@){)K&E=U5^*dqDw9`9f7l@}3r18Y319{5aG^oo#<hwS5=Xqg#GsUjKe%8KZVGm@*uCu%f3264xkCgy9n>~j^jZ>jes z4VhNuub(p#I`-u%PF@ShohfHY;8G6)>M4xkf6nv66A5%Fg}?@-6Fa&$(?H*yqdE8k z3VXc1`m z@LdQMw7L_>zrd6JqSkGj<@YPu?^bjAyVuacXXj?Q=Wf}Hx8pV043!+1X3&qYVu9Uz zis2!2dv-Tyy#B+#t6&7K;8&tbS|0^JbPq+Q)x*f(N1(@JCm{HX*;wo_urm4Bns zfbhHVsHVb0rbHWw041xWT=!vx_3tD28>U=itaovjV1EC)Z_%&t6)5n*=F@m({e3W{ za-1PH+DHa$$RHCt+nH0{8A7ggcv`a{ej|y&^%yIba1m&AYk=l8RDRa*fGF8#e?)Ft zwiwP{*d__7mn{f@zOE`Mw|(XmufH9#&eONq>bDw+CnH>a1aX;cY~A!xOu+B$xSneS zmoI2%B_pC>%-Z;3xRkvFg}M|H1{vR8qkpt{ktVc7mg;6lS#@TCBg`Gp@&^Ld9gFzX zHPZzSZwj6G;%?g|eimk#7-Iy2MEOx1v$vC7oN?5~TmBdwuc@5%R@g#t4ZY zVWt*9Fu)GSF(E)#e99FY5Ow!%_cbY5qhb^4vw^pRutr__0lAY}AApw=-nS#DtkTMP zd1P4Q5g3d->ACu}myH?`ZeT)9aPz7UG<)x-61!UJk87;{G*Z~ROA0%%=qEMPB<7i1 zS}@5my9LIwk!_{sIJks3o)h{_h8kHGL$Q6F`8}Vcn%M85cUNewiFo@-@60EaTq+ho zGHhvnt&A=+6sh-BIemaoVd@2B;^J&Gsc4oU?T|_ygBAJ&mH13NmlNg=)mzGn0Vm}+ex7Q*{#9@0 zzfZgrhq<-d*^h^o2!wQ}W_O^C(&LISlye9<|2VVfX!7D;8J>8~CEil0zuGegc#l~AfCfng`jm(KD^Mvtu)#3lgmi`MSsqXrNj;kYudCF ztxT2aY>A3(2i3dQPapU>a8KkWw4|q!p%S7Fw#JlkTk(Y8D>1ns8&0xQzX~=3bD}v! zxLxu8NTJf{b%SeJ{g}EhsYUa_*`eHevrf-Cd;V3WAgKu>Iq@g6S){PFZ-IUQvpT^? zPBL23=!=;gNl5S`&r@RV^^SiYkJ#Egoxd)hqJuH+7;{2>jR$B8q7u!$iT#~+^|#+A zoPo+XO0)s?!wY<2b0#LHR$%RDd;Oj0tER=F`*5DVxNrMO1S$f{`jEfT0Up9*-Ppex zxBphZ5A&kG#P|?X!_V|L>PfbQ=jk=I%kD5oX*V*$z-s*JC3ae>Cz=I!{&!UyF}mA) zsh_VIY?`mnwEo;)OgaQl3p-lxfy4vFXgz_ae6t}^v*6z5DK!z;-UbDR-WUbWLMK&G z)E2h=z$+?WGQL`{DSQPc**UsxZR$lBEv)W_EHMm-<%j;J+45lgU4AHHXFx>8j( zJJdY2uv(k2(3%w|qWff;uY+d-&6>Q+6vvYEywj}_elI-RXbCoNT>)uN#v|G#kU}Dy zkPS!0_II`5=o((``bFh>b%xsGwbLegtuGuVzyFwjjUW+%LZMqXsyPC+m`fRU_+wp- zS0%6eO?ZySmwg28U>6e@^REVml21BjPHO_pBHkpnn^0mulG@_5(Wf|yT{lLbm+Nm< zWJ2kT{m)zr9=Lfk+!%N$ zHu#$$^|+NCcqAS5^`dp&Eu*oOZq1uGeJJx?dTOKoj#A!gSk4?hKdH2%maIDd)xs35 z#%nHRgBt;ZqynZNTs~&$-V?`rdcS2!@>pKjl{UdFfA`jGx65@yQ^x8Dl4+&4m)Kt(6Yw+drX(lhTt9FO~W@N8KdL9T%R=TiKQ>nW?E>0DN#rA z`-0Yx|9EohSJvlqk_$he0j))2Bi8I`m|Ap$U9i-bvXdo!OQ%ThVtx_{LAT5X*iF}6 zg3at3m#kYO!`3@mWXbw-6&v#xIjH3>!ot&tBt!*I+Z5wyucLsY)|>L154a< z+r%%gMao0ln?<~cMU7KVQW3Ot;$acKU*1#Yc$ElfqH2872^nThByfd8o6s_>!@Sg{ zTi`-&%fIShIHT<+?N2u|1X7S%43tujjVqgxFLL3>gEmq{_c&lI5U+znoGrNGW^8k? zJyLCS$2+$IA%7jP@0P&BbeF7p^;zgPxspX)e2z-!z#`}}A-9z?2yb>L4Ww&`pxnAg zf_j-Evr`7Jhv10x{)npZR>kFap5NVS(vBH!F((uNm<5?AoXJ=B<6}7>JE{@J{p|1^ zDd(NnZjDFSzD}; z@Y`o4Y<2GJ8W~QK48+H6`pjB{>8?4v*>v;6@Ocj;Mg<{6Pg$~Ohz%dmkb<_h3&qAeQ0 zA686xnv;Nb_Bw>H&5@GXd^82Q3=}xUj|V41$FQnb+S9Wh7rv*e&f#XKwP^XP7!{tT z)b*kf_9_u-e5F?k>FDfEe9bp7-)-I5LP}8sEY*@;izP+HJ~R+4;e&Omi}X>HP2*LP zoK#!P@*;J@^~UXkACPx-jMJ%k)yPfbY1-u?ST@40)I3HW7%(79*YDgMaNp%z(m4Xc zf$8V}Bk8IFntI%}B1%iQk^>280g2I_O6O?lme@v@baxDCrMpMBD4inR9fQ$)`~AO* zUF~A$Z0DRk?^CbbH-f7_D`Z%+sbbD&=gG+*+f<7>RxUuspe&N3Ud!Jg`CYMlp zhxIsl)4=LYRl)F36{NgVp_%unN zKIb)!l1aFFfq(aO4%ib^x8b}idYsi$s;rZB)fzZp(t>#<;zxB9%I79)+Md7x;vPCg zzY@NGuauzp`^B!UmC^Y!CyaGcrmsHEQ|U`hyo!s!+3m;Tk-krX{Jq;`Ee!~y-WK}~ zRm-REHcMIM4aL(}n0gH_5y}6U=k-qz(J2P+KJ>*E_4{V+&THIqKCNRN6S#3RUISl8( zl=#{VE&N9aHv#pX#}358B-0Oq ze#G;I>_jiCQW3Y~Iu;%|1U%doK&-$ctJ}X_m-tNj;JuNoqe8crEP|GSQVHdIKS}I+ zRz%m>gp4&JQrL10$Mw2Dp@g86#whE|ma2~DK=dnK8{jGde0F=6V5k6C?GRk@SYgr7 z)IljE#)!?MAR3VBY3N&B+zAbvj}5Q~tDmz~JOWtVQ-6DBLb0h&qA{8hDcjSnQ@;t4 zAQRxVDp8536D@ltPDRtNX3a?$sdo#f63KZy)c)y;4%U`lS3N0nrVC42-j5?^>xcjH z;Ou@`DP`$ex7S8=L#(VmQY@CKo0=kus|e(~@wSo)wc$Nsyqo_7ME9=JgRB}!$)y<8 z4e+-%2%ARo#p_n~7Hr*7u09Vg8G&}8*L){;_5V;)Pd@4~)w?lNI1UAyUSj(iwQ}yh z72D0WJK9OzxoWfi_n{yPH-Z`u7?%7HMnmf;F6YcX#{}6^@~lXB(_XK8`3y`_^*&cb zXZ-zd;D?$RzQsM^N<`yS#k{Uv$pt*I@Tg+ud0M5{2e3BkSE4bqq{G0mf4D{~>IHn% zu*pzXlH6xL+8^z_!Ag(kbZW0H|LUqvJ@R3C>f<()Vz7>08zqINlBL%ZAR>#9tzqXW zq6MIMrdO1&%FR51n|T%?KETNK#Ok%SIKR@3;$MIs=s!N97jVSk&}ltiKDk*_lkUQg zdtEq?5fX|YnR>5p%_KFNE3l{&J98VdEG=J&)RQEzSy_(CiFMjq7+;|Ieo*7V6^@Fm zsfn`%-T*hsJ%wd(EdKpf6HG=K`{trb`_!x-XLT@C=qYuwvKmp`t<~A2^er?*7SE07 zywjBE4O6qZ_W~)r!j1643cTKJ$zQ%xs^s>Q2!PY{!SO*rsy z8nY?0%P#ir>cQoKA21Dg6*auoU|UQ1PVQ14Ux6(~&G&nGB!C?$%A5R)TM}Lo`^TOi zo5v)TbZ}yA*G;jK{a7704Tan+!X0_t5m$p5M_;2TYvzt^OQctm$rQ~w-9F}Im0E=C z=pi;sDGO*eNmr@Dc>X&OOW5|G2y%H86WlB;Oy;dF!}LRgXZQnJfTGVVw=}8Q2OD#y zAxegM+SY@t+*OAIS%%pjY~Wg}M9XGR()Xp2z)>?Xb#bI{Lgc1)g+{$9RTlr|Ou@I; z1Et1c(T6D)Bc-a}1;JZDIq_fmLp94FP3Z4H!aSEhTQEReAE8Zyh(WmaQ3PLN?KTFr zRhm8rSC|{swrE7z1EG61rQNq2i#2?FsXq#hN6sH#c2HvIutO(S#ZDKLNX7rVOiduNZRD zJ($wF)@s8bosE&-^OPgw%Y5rtbRP|Ac;Kn&)Qm<2`Y)J0M)_B@BU|1{LWK6z{#g{D zuuX>Etf~qJ>be&^1ewmrnv&)N2?X;czza}fh>m&+VYqfhW#SM}XJh}Raxb#+rMaQu z-@`90sGAO;aEK&qo!c**=#76YppD(fLHt-Q7;TVOe?f?!W8tT}(|UEYY*CzZth}!D z(X-C`*GHpnwZXP;Hxuk8S~3+mYFW4@zaK>1n|1s2*uhpQZb$6~=StA0&n*N%qrJh* zeEqg+hT4*(=GGX6FN$w6$fHBizM9PC7)i@7X~1f5TLvgjH)lHa1q5NwO4A)z-ZZ&3 zE79;o1GWK<`=oBS&1jI? z;~Gzmb!--K`6YiMy`50uuOt)G&?Sql&e_L`oV1DUkJNI2R1=2E`lHx$si|Jjy4|+y zEgeG!ldI)WIz&Ea1G?YhWgk1(QvIc5a0L##kUO_r+}m(r63OuubkDP{^$d&|Zs$4+ zkF?Z^%~5-z0(~>~eRV!^618~H*KQV??I2S=rR!-DPJMv`*>{3PIy3Z^}3=%1rsgX!?vwYxJ@3c*#$ic!0~oMKoVW^J~zW z2drl%Q5XAbm;3Z~0w3UfIZ~#44Rd{e_6u6G86~CDrZ3G)cn>C$uG@UM4#o|Jsu#k< zD{O}SJ#?}PO6Cl4xnkWv6Rn5um|!=+(1!$)&-U+j2}wPq?}f;J<{Y1daSYs`=tnseV@6DFJEdUU7LN*cB7DG1UlXC>^CiU?0!&`^)^ zfx(vy)mH(-9Z(bE=<^OVU=N022NYHPgkV6LhtGk|&GAM)acfGU<||wKBNQ~DYA(%j zQY-y@cf8x34E2?!bU*rf(hd4PC+Ps_Q*!kGTa^<#TKT(wtD#&4e4^kELn3qzJ8-OA z-n-kXY>gtK)K6Y}Ld3ZN}E@?rLPP3`{iJ_D|wOfK-m z$Zv!YW!v$55_@+YA+=Rll4S9+4iNZi-L|FEIf29qcFiDLD}u;+psZ%L036mNM()VMB9*_f()VqrpU z2JJ1AO2Im=4)j%sU;xR-1yl%(m^24993FqrMfW zMlb({t%XUYy5y9y0fw4CmYb3z3WY6tt)Y&|U*#(m>uJiUo^Q)?2>m$gxdSpg#>p~G z_O);vun_48Ei>{=T!KQhBR_-Voz~vFm68W;HOQICFu@aq8YHT2v)(1GFB%y!`MSy$rhMcmo+-6x=7e(KFw2Nkqw297c7LS*C2M}pyVUpbvV!Gs?wU+@R62vAF3h8Vja~-0SYqem(YXVBJdNr|WMuT5T6A zlKLrdaVEAC(+~P86%Cm5{O(p^nhqD`LSi*gb#^&1>Hs#(zMc1SM-@x270Fy_{Z1yrfw)z``vThJ*69 zY$ZxCg(PE7w`;&*MXBw)EyX1(9K(x&Gp|k}+LhoHkgdkZu<~#kRP>DP@kAwl$a|U~ z85IsK;ARk97>b`*rm<}Z+0nl+x!li9wh=;e!t@qTiXpP{RdF~83|!t<#=xwMVM^?g zqS}w8Z1h?gSM#FbSlHv)drV>HAIO%P-xD$eb8t)LC%2C<6?(sBY;w~GOs;PWYmc;z zmr$bqEBqI zArRcvmS;i*l!IE`1)C)+w5)i*BRma}9orRmM(1LgWkulOdP| z{{$q^SQUg9f2J>h!>bH>o&k+S86l%-1#=psogQEHl0k)GPAy;7^W2>7)_3xaq6x{J zLZV^mgd}s)1|Gh@)Z#9N|1-4>Hd@hiUd|f!ZWYU@DK~UCbXa%BzO}ajaZM-c+IEzs zS{|K2d~)lRbaTH=9N#g$&kD=#FKtU!9Rn`xaNL*JJV(-*X*)&IH zu$aZsKJGaf#mtvWz%I|g{@=+RFQc*M;d0+%65F9kSbV#%bb~Z-K~m)xPpj$@@mmLR zQ(_ecdw&_!U&H4jPY5olsmAUC6>M@fOmyM#-;LMJ%W zO50@{_MhCe;;P8kKUVMcCEuujIUfE+hry%e!nKYqLxkP(IiKXSQoUsL5C< z4@88rRJS%S514om(BX78I~|{Z-bRH;*5=$Do`<@VN`L7hjbQ(Nxb#=zqyc;qs)J?^ z_{_V%$T-;5P6Xf9cJw}22%iiG(YMJH>Ls)b=lgFwfBF4wnA2OU5^Bk{;YUC%40K_M zG6WO={SJ1*r`6(am^a2y;wd#-Gr8+a1}ts2AqN&ZM!ROb`<1Lg3cM-t7KY(1CrVO}qv~6V z`81gv4;(^X{qb7}^yTW~&j}H3RItuhK1?0R;TK?QNoE$=^$GG`V;iQbPugLc~ zB*CcxW^T=>#0VkMlOXcNeJlA;th17BX&3j*`-)cxW zLM$%4Ae{X>d14BM^5It$3Tqm`i5|hQy4Gji`vOg#7-EIB6?HQ8LZGQffkh#QO+84+ zYL3@3cm_GNIw@r+i#|)ZIkWtB@r4t}mhVXRneox4KaMElMn1H$MHunJ)JM+g)4TKU zx*A5}m@~k^{)SKc8AI(-ln%aQ@vRz(ws;BLO=E6>62)T{Z-9ly${p;LC0;w)mWun1 zR^h9=zg4J8-3Cqz`J1tp+>S+k?Dejq>P21gujK%1=gLiw#A{>CmF!gkIm~OqcHlY=hxU!@x0) zA04ay5(unUQY_{lcV^Duy7W|X=bRy6Axy}&XX?J{OLUK?4`Mv(+`ZJHuGE(??M@Ax z(8ky5nlRjqUe+<>wv4oH7Eb8rOIK%RlZs$VvQ*1{;rft1?sjrnpiAOjJY6(rxo7A) zj%f_5+qqDb2t?gh$>6WDoJ^fg4WT?sS>ENc`;JA?^A^YbcLoicY~ezZSBrYFl(Nw=08a=p8^^_#gN&_ARpXJW>7M=vgY6F7nI~NLj`hGmR*5Bhql}@* z*12HDogmAZ0`Dy2=hoFzOdxNr-_$8tgKW(9ToGM*!RW~tb4*79ed_gLw|jwK)K1xl z;--au$dh&(eRO{2D;IP}Wl5|THW2gvMaFhxYfzK+>!s;Zx-nSiw$8`zLbwF=NN)oV zkB?ul0g5Y(xMb2#Uxzs|*qN1AMl6_y`}wZ))PK%tE7FIj`{Ph#j!S*_hL>%&MJ}h; zOdr9Jacjbi>hb?;L)~-Fy<5`c>Jz0mwBNG!+qQM^xzb^k>rE&QAl%7a; zF%-G#Nb3k14&gfiPP$0UnNeY(1a0><6%-cEys=V_AWtfC-l|C~XSqCV4V^wH4I$ur zO7%6#bhpKV5E(PA%p}m4O2h%j4Yqiqy3AcD08Z0)l2wT)civ=aXrjLSwzZ;hw06i( zqIQGV8S;T6pVqr-77MUK1`G_ep>xt9Lg8w(chpQ$#GI~a{uSV=N7(l z2hUo08nqU?Kro7*GpZ{)Qb{5jMD71H=L7|LHZmfv$=ZysuPVVZ@3h`%2TayYTHGRs&6^>4#1kHY9@y^S-_Sc|V% zVsI6!yi(#N!DMB5v|Dd1t>mocvYa~>EO#7Y-vk4oiw9=5?J}_?fvsfA?i86)QNw@o zQy+@O^P`-dttg4@2d3(@u-w#{8yqt}zDrHc%d?ZG;^Mt~rn{LaL~@~5k%NBLUW>yv#lIB1nCqFGp^;$%U|~18?1*MG9tVQxWNR*I{nJFZ4PB}7H&B6k0zF1IlbGF- zga=w665`ZqUnLl+=OcqaWJY74{ppuiK~%h}x=ZptjjABt>9}a_Q&T^>^afrOQKDUk zKlt;bX8bBV_=^@&Yzr|Kg-9A9^xs8>#4pK`LW5I3$=wp1kL||Q6<>WMc716+PZuD1 z*nL-iJWn#M(nHo4DqSES!T_TDtccd@w%#UQ)jdU_9!iqw#9dP3jrSc>JBY`uBZTY3 zno@cA9k9esfsUP|GC>>`(8w$sH@6`RRUYQv(g$Q3O1+}AhN(8~@==v0G)MMR$7X-C z?YSa+H@Wv^W7%p~;Uw3fK13z<{3F$jIuvYj38*%x^w>^1D3e&2-sh)<`-zI?6b|1h zTt;msJ#1$$2rq>L(kxSMaZpATs^-L;Sl@`>r8`<2SoNe%Hf{*e&3DAtL_wB@sWY@F z@Mq+xkWFM)8?+4VG_IM&cHefuk>c|IVH9}s<==LZYZFS=@G;5GnM7aGx zx42AC=YD!$BFKsWO1`}HX|BAHV5y%@vj$?Rm> z$TaXAV;P5G?}Mh(l3=A>iTp_s6)&R>i_zcC5)>lDiu7KgQhz7?mMQ7-RoUCz^dE3t z(*EW6!xzyWaX(tfK87Vo9ID>K_1c7Ju$|$Tvzi<#^9@^WA9-BI!oh>1wx$sqdi-JJ zK~JM87Us>S6&kAx^ns#;`oFwF*Pq!d{&P1QHct{vZTx$$#S_~hfK^h|26jGMrou{E z*vIw{Thg#S7MoLZJ|BtCh6$tK$k6#)=LscIYW8u>2ut$+8NF4 ziVYIo&?k9pmH0mxeSH7U^v&>c&8u}FQ==0J! zR?j<6z=(iO_tU3%aeFuVMAeFSG$^!IC!nsKc~Uw6Ro071b`@u=p;f1*+~CU|Dgo)z zVq-Z%8&!K}-T*kRhjZ_TtzR5shli|EPOSURXm-Tzmk>Il(yxt8@$YoUq1Nx*5sPJ^ zKUu#>oko<=HB3#dq>0g9L>GCsdfq2GnpLi{FYFa>+0ZBF4^9}cm;$m4E{yxNq#MAc zC|_F zK1}rP7$+9|=I;8nxknCF;joD0SJt_rdDSazb%EdFFA3!M(Ldq-`-}ZDd9xHgH|Z-G zL#{jOwMD@&Wf$$MC=pHpJ1Q>`VxisUa1@nZ|Ew-+u^dmhYziD^Kdp)LJ=_!Nyb#I# z6H5^Z7Rct9c1TW}RybitnOudFtc{$FBu$zK!V`5DS>zeFsiMQ({MS3;7q|DulsBiS zQXgq|)J8>Kjb3=-dkPCcaOunFo$?0>L#7w$D=a@NYakFE(Izn^nwcjfEKyYFoJ6)9 z=<^DN+5}_qv%O-(WPkVn3Aoz<$(Ido1D2mRWXbmiLjbPqf!cJ@nx4{$!Fn`v*=&3! zb3%l@r;{?7$`+MDk;A+k7;j?=5a{<45vsF9Xb~M1!|qIorA6$2Ne=6N{MyeoB?iX* zewn8=0viWgK0^~%8isXVG z@Dtan!XDCD8T&u=6wL5<^$Qy34CH64H{n<6oAjzKod{^iMhoJ#h9S`JBq7kzv6;+L z*%4D8AloSQ%5bQdWFo3;AWGp|25Lq!|G0^YAi1_Kc~-P^Ll~K3;&_)DFK6?}@RIb5 z-sJ4e_lyMcO^3bYUVL_n9`S9xNXqL)n0bDTaWWCi7>H8!(E@cGA#hP!DItKj0rF7s|Y9^a2$D^$0H68WR&ayNLJ2A=R+JzIOs#t_##GZs3+J5`9#O`=B@J)64jr_7=|50wjOCO z8EJ~)l)%7KUMa7}2)DI^H{0+HFG4rlc&!C5l7g@5eh(W3x#BM|R35ewIwrM8xg+{D zdgrgZLuQu(Fw7ZZ4~>{P9KW9Neh;HgSrWW#ji7eG;$U~#qZ)js_(fG#KTbiTKO~~& zO%3*+G5-6qjWIU?PlJ275xiWt)Q>B?FBA?@kh1omH%{>}5HKWPAJo3@!BQfo`1U*W}^CK&HWZlX_zLgIK7%k_HEpfI5EqXok@6&&ORwqvwa> zn5+ZN940y^)vXGdGZ5Da3?u3K5MCuv4v)2E`$R`5m+zi3EnU@Pum3f^y7&d3_ywY$%kPXIjWI~|*5skg z|8kEw_qwkdPXviVv5#9NW4_1kWsc7YC|8iaE6DqH6kHWQUwo1a!EZE*d)&(Kepo(v zSl+ij+M#`1qxJK1?l!nKRm=+T{e2+Pu^~cMwGf#o(0_$Uk4tEe97|~vU|Ae5<1n)XSL_@g^V_bnJ2tch32B5p@ zexyotCcsnT+67M#)MB4@QklTiiBRrD_#9E`)7^Yt?5uG_xGRlsF@&uz`fVSNJsysU zA;BCrWB=P^u~$I*u&c?MI+Ql+XO|IY%TjTauUdYV=(qlud%yWEH=_Kyso~}_W6Y=6 z+s9(p2+P0{^rzw9YIf+70vy%P5FuYDu8ChdEzJr1sN_DVc8F8JuwE%4BZj7 zpNj(N!r6uuhqwpr%E$}?UnA%|M_FGAc`;M)hR676HJleju+ue#BuOi2_(|MNtQw#g z4A?6p*F82C#afcg!dFI7QjH z{JxZbiX@`IWVsDH#k`Hc`hl|<&Sp-0z}-acp5*!=7T#ze-_CjQ+{%98pCO7Ckov*y zhF|pK-ZsKNZVdx??&A7;mMs#PCn>Wsr3)oK;<2W8`+TlsvG5`Qz6cmTvvC^|8&p2H z>wLN^Q+T03(D7F)C|uolUsHYM0=S~73VOcyob^RskNYLf)Z~Gg%fmSS!zYg?Y#0tv zQ9~6IJH4Q?Vg?iUqyG)p)7B1BqmNJXHo`8a;z34)0;*6=)c5HJ3yy=Pt@s&uAV&yD z)MA#-YCzn%f+j3`63_Qm4WbuWS$AGVW3cVAW_=-G{FW%0W`L3-=yyNP-IzJYc6;A! z_v_6f)qxe&B$Vvq+wEgH8XvRRaF|PxOD2+Y(5h~6(&`C3{2=zrtJw=5E!4gS8Nm2M zarSk3TcYmhZyJzdc@p1S-Z}yLn^C+*FR{wx!T5GwhR~a8>n&-;_9FOnRQ(!e=OmVy zk)`T#IX|6CMz!+j-;D1J)iIDSKLOhNPUC;5oYI*GjYgDH!tOIz{6ju}n26nF9irgX z0kYjc-sO zC^Q%{y5-tJhgRDh&O1*-xwLj1gIKO_a-VKWK;Kn~*u7ORC4M^9nLy&9XwGz%Hw$Ba z0wPbE$-w%ps)vTo*#=dIYPw!Pp3>SIBOEV|mjLEvHE;e3`b)H^jVM7aoD6KS$Fn%` zI8A%ZT`DE3V%QhB6|DB*kRCE|M=N8fd(Hu&%emACG543uBG|`FC%@)eqbl~Kaltcc z&P?SY6If*Yi^7{T2c;!DaW|y~=UU)vR1fy#qIiu&A0VlkDaFtn$O6vVuRz3 zA)n6FE^v$K?k=7p;nfH0!#(86@&4NQKvmdMm+!)xI;F`*Omn;jCcrA)Rcj|X5xdYZ zCRZ-hws$HE-(Ad>4*w}}15$6A0&S)^zJQ-g+KN);g8>xp@R_f!T$G6GN(yH_pBDo9 z4r#iX;TRe8SZCCoXVmINyQ&~rio}_yzL9<6GzzV0c7YI8OG&uHsbNop#_HR?vcA6|pQ=8iPB@xw!b=rYNVOXA zA+kLZ8P9D5t^7!?bZ+cwdY$91wHF87g2*e*ZbH@{j!-*!zFiT!XUklKkvI|R`js>Z z()o&`H7x4_Jp#@jc3))D#A8k>vtBwRPM_B)SB3NIXG45t#(pB8jlXWvL4gp z1tt-AiLMWzvbnhbPor2|MI_LKdbueC<&FqwcYAO(T~2c7nTk2s_%KzFuEh#?y(M}j zitFM}G)V&IYC;sLP5yB-ZNm_%w4QzdgH-cCg1I3Acp6c|H|#XC%Zwa@@fPs2u#g>9SLGgXP+pfR#V)Xs9Nsf09J z^Gjj<-rZ`!_;AJeCz;!;Pwp6VGf`VvPe}~_?Adds=iS@X8f@ea)9zU1i7~*r`^uBs zN^5-Da8gCmcFRUg0_i2Y_FlVZW~tI6+4W_be!IAHhD3#F{jB#|UEkz8Wz%ROgQwM+!UH@Z&SPX) zyzVk)P^Y)qna)usSBO@$`XUT)|3x!~z&AJb>VY-tW_(C<1DvTkli{Jmy0WZj^U#{U zGT;voFDkNyl9+Ml+K3zMHn)$9cUoJ3Za|<{a4l za1J!PI0yD@Z$TqbuM%{w&fA%)4j=V#u_}?rM;HM_2yN*ONPm6~pNiNaN3J^yt>opj zJNtH!oM1KX>~N-NHdXdU`Mt#(I0c5D-Ba;{0_>+w+U1ttg@T5spYCmQ+$UyeXzNYp@o3W-mWkx=y7_ zJFb?UhlESG$6a5awrhP(tZ@Wrt$$3&^A@@}c>&A4x&r+YWuGhNsF({RUX?Y8eYMfo zJQ2qT#;p7ewELJwHl8~wf0s-?_RBpNtEGLiY=ao+ucW5+wd^RNI~UrE?q0z@Fr}_i zFA>+Kw>|GgP_~yI=Rg7q`y?5^;rbF0z3y(Gf@yEoQAz_-X`K2rG%@~S((c3?aEBaKJa^7nwn#AlbulzHp35aDYICjfho3SDiJ3Gr z<^X2h1E;*$rUl704a9X`7*IEHaFs08VATIR+u8KN5?ZTh0oj!U6L+h+uad|eP*t`p z31wW;PE#~U`B<20qq@prVBNwVbIYsw8lk*!h;bl|_Ps`WRb*rR;;h!j3sK@czXG#M z)ho&~N=QtB=r_{8$RUr*^ElDxnsH@}Np)3$k30wuoT@KQF|N*|4*2~x4IOYJBr`K) z)yjo6PEo*w`DQ3Uiox&QL-d+XdsdbMmjzF&2sJcYy7q^{jT7gB_6x<5S(hz^=0i%5 z^`su|D-w#0V~RN`)ZE=fwXYDgZH4LV*FwPSTI?cu#>@JthWtm^EOC>-9=~Y;T>GbL z`l)Y}&kz>QuVJ2KWz%QjSeUsDjgsYCV)l4+3XN`&3xCow@^XDr9}AC~Ow+9a)*1|8 z`#%(*v==?se&_G}&oi=7V8`k#Xmg3G?oB>s5R2F0b96Fa*(@issIF106b^l^)g%;B zy|_*ZS&QuLDRkcvOG;o6wv_TQJl)Z087f z5p#H8nWf2lg&nO-;7J?*gq^q>**x1P!}X&J@gaJ~G~b+qon9thO56GV_R5%bZ%0(CyNSrm9;q19K~h6C zNf}YrvUf|Tg!PvFRV5*VVaQwRTaHAW+VYUDAzNzym2+IwzK4@pf;$nfnA5kI@eN{J z!@$N64Gj`BoVW@@tBSd5xq;`vQl+lNV%6NI`yJ;**(GwRJ)NMN>@&l=M-GYd7`kdZ zONXk`FS~*8q&Mm+<@A^6>PLt)9Pp5jN!`>G-~kmMl9Sb2Xe}hl9d30mC2V|#w!THn z#ONFfvjVz1qy^kDT!5L|gQ{ng8I>7anRo=&^#SGPpiL5*Mw>O^JJ zS*6UIE(gn+scMHY6kG9+*^7IN+lzbF4VsOsYeIJx_{Ml5zZ!0K8Knme;Nfn^p>J^% zr!2%b^BVR9V}l|#RL}pk*Y?~Iy%D@c`|F49O8ORmx5O}Xxg5l1>rs4j;uAq%T?B0> zKQm{d`Lt9ofBk**9MO?U5&9;PE$nzNmOaA-|5X+$`}}%!K?z>Gu1J7J*e%-XkE?y` zYDW+e!cjiT&@@Pf44$Nu-saIluC7Lo z?lSqUM4Y?Xl3EnDrf0J|X5@(i?7Mo)Ue&wC=#@$SJmg?%Z>;2p>%EgRi%2(M_*p-E zX&`RV@!O!U*UEkTyq#%T2ZS+3i`;W=KN~o0P~QDcBUTY^;rB`;r^5nwo=eh_(BOxr z^r7w)_@nsn-t1}(zLVh z4ACh9OmBAO#c!9Md|*({e@$1E4jWW%JF^^d`4uNCnb4LEUF^S#xs_Wxt=OXpB3t`1 z><_bco}T*4N+iY#m`HzT%~Xzl^o~Sxy;Pp2dZ%P2i=n9(`VF6EVNaQ7(wyzk zoq@yM*5eZ28Th9ITQ^73U&fkm z)_O)<%Tq}29E^Z7X5gJ?L$%{PVEM z7BN(~i^TzWmwdM)otef4(G&tLdKODHd%dM8kbIw6nB!z)Q1M{JhFzJHH4i7J8-hp=k>M);?-eB*JBEX&Tw(WZ-+PnGICe@h9Hh~ z>36jcJUp(i^Rw)Hbmy} z&B&{c{J4C{OO^uxJYsZR#)>X&H=~pgtF7;0t3o(#n8}$P!jPpVSlM8@B%p$j12ATC zfU&)X^nXH%r#$Nk9hU~_cu(^wt5-}OR0R5sW-vDVV2W1)_G)l*68Hnz!&ASLgJ%v5 z43QDb^=BvcohS{e@9|AU0&0l>U8i=CWTCoER}cP4>}Wt`A3Og0rFFON9VmBxyiy_o+{}#+C{IFB zGku@hB#qDrFTubry7nRnt+T{NW^c|q7RqQ-U6HF>i{^Y3{<*Ro?wbh7lI5y{QG+c` zk+|e4^fk-SBRUyXf(Vy?7lr$ng|C>K&5y&&wwiki`dr|wPfa{*>NAwwZudZ z!vp(g;b{t$*Gl3^Lk~@W3YV)K~9+&lR3NN6I-Aan^Nc1;nXo*|I2l54g-y z5LrF-anB@FpJSascUlaB9zH1PpGEVO>md*L-bua>wO2pnPlK%L_?0PQ{^R2Qbh3bR zVB>RWK?}Xg405DsHo?Bvx~2#x>gIdC+s@ZYxoBd` znXBNi$3$O4nnbO{4YP9RSgR$w+F=bj?!&&350C=tNE`8nYe8xzN0xmp{XX_yUj1=z znC0ZIj$SGE8>-N~ra9skf@IuWR78eDiL_a5r~!em-=Thn)|ZYu35`XTuVoZ*>w=rO zeMhvr>rRb=9(1v2-O)u)=lG5loNLJ6M-w4?LB~Px9*maPFkM}WYZB$Y)bdX1PwdJp zpO6fVliZ!xcZq^2$9-|}xop5Z<){~hfD{WdWM(JPP6J)apVC%M1_f6CrS0kpm zDg!ugqV7m!otSiH$tL!)P7RzGJVgJla`&iKHsDawbcR6OXGh*|Qyym0b+6N|umsc0 z;d%)m!&*)&#d5kNUP(g#OAL)Rsk%2QLTzhU3+CzDx4SX}l*sH?kP@d4oNMw5c#;#bT<#WfN(UuaHK%>=}-ba{`-f>-}nx*V{ zBv|fsT^+N{+_0QA#@sM$Sx4FXbE1zbR~`-C@n@>3YRPvu33`Mv?;K|MEm)`{MEd;azu5(dekucm>nIeyY?!B;wgH*?1^L`3@L|n zee`5vV6S-gl?3b&wR(1P_M}T+!MvZap&u$gKEuZ0)IffoKT~%YWpcm1|HMHuj>e8F z$4x_^{~x5z_5ahogBlKH(d?rvMMjiazujBl+ABzP{#6=H9f8#ivt8~16POK`4Sw!S zahU(IFE>{9u0V_rp2#O+U*DlZc(yEn@I1e+oj6a({R1i-R7e`~{HRxQgD|2DbDIy6 z>=$_5!ka)k%)SUsmNzyy=A>>k00F>d?b6$fYR_UvD$Dxtm;Gu?n zI+>!NL>`FJzgC!%dN11ZpU*xrWIJ-n#MLs*tsyo?boZrviXIgs*k>OyNb`OF9-x23 z;Aw%rH#-m&;^V-M!#$zYzH5lSsC)C2am`m zVtQCo&3lDqGEU&aT!qfO;K-tr;ji>g4UgDyP`}4OYig4pFgW*)hfOa*y>sJ% zYQ40YC$)O~fbINN@?JV@&MrQfK0WrG$-0fY3O5_m-|KgI+fPol8$ z`Ig-)%Sc6?%jZ~q{*OEUkK0cRhjS2iNp6V`OK9L+JHtPH2sJoaiqZS_RWX-aMCM@RuU&K+#TO z)V=pkPK+ThdvJS*8E+U-8_6$3(9n@a$`b>T?7FYUM(Y^c^_)e?D|2<}szOjphPYj= zA-4p?E4gODgk_j9C~}ww7jT#FwK${p%{kO^>0vT+lrAmH`F z`8xe)h$96h$kslfosG$tF3OIm$vyW!IdA!Xsp7!zKjm*9Y2aq+I+odPEILK@9J9t? zLs3?okIV2AdoX0UV)o#0FT>SpsZBmbhP3fTV-htOB+U2>_`@Z+3)C;LV|-@>Jp@gr zk8>Rw|F59kZ;f)Hz$mbtXx@*<+{}4g_rDq90>ru4;ex*VlA*zz|F}Q``hHRX)t01I zgZ~BOioZ<)1tHtYxloI7LOpbv)hLv64_fFHj$ab+wk9_O4KG993T_d{y>$2I3DnHT zrW;lG8g6!rT2TZysAlO_`1Fr`HoUBi6}m{1v`+i7SKfliZiQsICj zQ4yHjuJra5YKWL9Ik|zI{A7rB8>%(TU%T8;&wKzdujIu`Q7ZJ^jr+?S--AjB=uHx^XF?uZqklzEQ_^aWT3+Z zJ>gQsR*s_wJJZUXku=$@AzEtDaRx>{B&WisU+IyIyVd~8Nh0B?Hv zvSH7pF{W;q68hVh>MD2uo&a#sw=}0aU1P(fdSSAm{WrBc-~4vJ)xv}6L>q@fImW7V zHoYY!t5+jZa4^#oxE8#| z+v!nFywaHOooM_HCw<|y!?1TQDF;fkvm2SclgB;i2F*#oHBB>3yMvG<+F>Cg`bY&x zA6&K9m2B{px!>R|G7b|07t*s18R?}dg5d$dvgHElkjP6kWWXWM0X6NM&(K^By^7PUg1@})iYEjT*Mvvh0J86;;5edwsu^pJU+cF)_x@3#P@?scsX8( zHm<(N3qVwAxW<6RSMNOVZ&U_l;$XkDZziFTl=^_Miv2~cY1Cn$&yXSoEKBbm!*3M> zCdcqC{e?H(mN!r`_0&jc&hXb-GI8zAS)BhpD|z%UGS)h|A6p2`L_{bI>-QHKGXw(FY`yLl7+?K$~-?+tJe@XavJL zIQ@lu7*Vk)r<8Z04A}$zPjpFM-uCzdsXm2NGwA|*$lv`TyW`#^^SIFiyO#rimDH;{ zR$J19nWQl5OS)=YS_eWK?2(AOAmW9WacK2uJ$-iy#C3!F3CLHyGb%)2W@&|WmWtHg z6=1>#3}gHrfX-S(#FTtAw0&&G@<^YkW+$G2|9Ud5qh848QL{gaRYbs+b2``5S^!i3Z z?;ec+LbX>oh_69wm}8% z=Fn+(kw#Jt3i9wLtO9fwO)v2lpv<*AXBX(Fz6vZ9#b0WF)ujp^VZkOmzymum+HU3F z3r54WJ?)0e_0G7=wamg$6%y7cSkm}>LE7ygyYMf;`*ynoX%M2vTKsN7)tQbU7powt z{cTaiHocMC`RB8HL(~ZBlfZ|azuVSv&;}yZhuljxZ^iQx2phsw>N6Uh6WYRFp0A74 z_WkOw zmsT&N9xX~pc5o=$eRg<#Xr8WPy>HZ%czX0UUq`#zkV>n#F+aUC!O3#Udw zCV{B6)_F}`!CEJJwAce^aT`$v;JRU(k{C-#cYf?@Z*=O5#tx&+exd8)#WiZjc%%t| z7<2^#lH3^6>ZC?bjLilrySQ%mZ>pOOWlgrK5_hN)Q3vDn9e!i`89lb2Keg}gA4!pj zm1C{fCz&42yB%5xWesl3;>H-Gt4fGqlgPFJ<85l;sgE?3E6UFAC^aGUUp(Wb^o%`Z zD3_&pCen`T5=%Ys&Py$w7Yh%&bZN^9%DpK#V4?l~<4-1$W``%?R4(J~Z#)qwvdRUA zLCL>oP$qZwMBW+B`v?s z1jz_T=l&%tRf5FmXF^ZVm-aJ?6dDnLtpNoQoH?P_siXl#bYiC>GAh_G~Ti+ zKN|T-O5scRyWfARzah5ERk>s6tZ&vc4m>SrM#TCB7_20x3euz@QYC)J0B#hHOcj&j zpoEGXkto*brlgauT7wT@nHlLg=!$TLir9T0MxeNC+Aa42S@p|p9lDaeq28zb5E|pY ziI6?&gS3yOHP|n%%qi1J#yFlO@1!9c%p}<|S?{v_TYu%vnZ5_%harA`%?H1S!vv${ zN!Z)}1-!!+ul~6VFQ!H^E}bMcn5m0dNH;lA8|qVj$b7Bkh%OZ6gfrv-O?Z74HdCAU z3{!5N?o`fb<$(ZOhYtwPAz%q!g-FxZP|MN7;31c_oknnIp4Qv+(D5T=7swO35_VJdV|V$fkGdiWHR_yAqK&dI2;*29X!+8O=C#Y zD!)z3zrynOHv3hYY;+)6;a~nqVa7=d?-xJaD((-w?!+Qx%~Wwd6hcZ!*4K^Y;4Jm* zL3dOC+!-tJ#R;}LPdk?~D&R8N&xJ#JVe9Xrx(gSE4;fR}fjyeZTyoq)I`}V* zL688;%?Cl*g)iK*(-0X+p|y2fJ>vvi5PElmY{8gKkvPR43oOD|gf^r|Kr zjOhBq^7}>iJFe61JRv*WmsU5!ira+K9FV0NyORSdy*udThHT@KYyvWna3X(wK>);& z26U5vFl-D_ZdI~NdX?Fm&Zpgy&v@*9IrUyl)jGM*a>*=7P0gspvvhlI=;eE2Ub`+| zG_9Q%JdNK&WY}U0ASAR?S@l3#*Rpa37@rW!;&iy=Aly-15Qgcy)Yh_chi003EMwq@ zQvmV&W_UO_RGbGu$b_W2`1KPeWH^vd%@R!@Ybq zBW*}sYP*kvX3;WWqILOuI0=P@fq-l>lvETk3$Ll8xx*1t zImrBfK9ZXB92#Yf#4avG0Z1R;MOw6HYfd(?mIoohu5HrOQ$x>fv*08v znD95TQT3*+4$Y{Q3{ zf44i^3~6*~$0*~OF&pQZF?Ll6AGeng{spBAdFFiNrD^=_)gC8(dp;|q-$W%*Y?_{~ zWcos6Km77Srs09W(Hwap-gS$sPw3m8i6=LX4RZg64CI=5-w!HT%pJ@lCWnTsad1pU zZ~+aKP9ljou-a0#SHqg(#y43zr1jJII`X2I??POrF!@r6#%~XPW4cd?+@P98%~4e# z?O{wg2w>g%#PCcXMJNL*u(gG-E|WRa0G)fOBQ+XOHtzES7p7uuV&6Vp~$b zkOdntY^ME)Y>dbXyQRGgC1^I&c32 z4cGZv3}}RrT~bgn{DNO%_`3E<(O8AxrEpyEHM+(Xw5s-P85Rzy%0E5nDE+x)6SMIF zx^yswx0p+KRAwbT0O=eEX@3;X*vK;c%aN^14acO;^63q_SCE^li2dt%NLz^LSO@ns z{<=**7(@snAX^bK>oAS>V6*L3%Q!??vXVJhTg(jwbyF1t``mW+R_oGSmH%Rz-3sWS4=f?-h zq)f)r$s->uMZfy4xZ3fzM68yNDkXaEV#%K5)iQ_$ler}p`*R^!;}=~v64k>fcuW!r zRKqNW{0+ntd6AW0kWMf4Lx%H{?&%Fe`!!jfJn`b{z;^f>p8A3&%|4I~ZA+oV_uRbDQ^I8AB>S zn<6Ag~zrLPz4-o|p#y}7P6#bK%`=l9GT|hihr)YBBP;HQM z1yeY)GbV=*%VS9p%pPTkFbZJkjzAn}tYj-8p;+y}PR&eLW}*lDCTKz;gZppfR^|Ch z>kIA+D*zpix*^zrl6fc1HHB=eoxUGpr#Ef6_>|vox~;?IfpC?EwH4tqxT z3_((s@HT;t96TDizhCq0!XKDz%4-Tfp6gij?{`RP_CY)YLyr`YmqA1j%aoc>D4b7# zi1{kGDusKhMN-oy{sk}Y!@D-2oK#N%1P+QZ`0?9wojY00d<@nJp%FEUAC4xvDeR3ib!ukNi0v>K^EMM>teBA3lR@u_`R9~sANKv<@+Y0P9|(qbg;Hd1WWTTO2-q~{4^&9n<{M~SI!x^ySo!KBJ8r;kujeD2Ntm9^&gPCV z9pajb8A=3Q1h{WY3IFI6)~yC>0<#aIwq9Gc447kaOd!7&m;`E5SDJ%p4(h))^5goY zM^je3!_?W4%1==k*;Fv-TEDvh4+oE$F5k)8=9BBi^-cq-LkBcR&+BfcbBBL^_&SvF z<&%h0IeQ6ee*!D+WD1fHGPB{-h>TQf2y8P#eWC+!`twvs;;1gLt-g=ieIc zsCjciyA;@}+d~{ymhYo4uowlA2eeQu2~Qftyl5miYsE83FG@ZM0rxFuK9JY%BIB)m zzW&%C77w>Bz7Kn6bpnw(*=Zbbed~Ag!~$6bX|ao+pvBfyf>NCH6iD}Sng*=ikzsg< zzn6~F`aK^Rp=^_;50&2(EO4%~H(=|kqX>2xOsZmS7{4!Cx>{ELmUd+|FkcDp5 zNcr2B_Rgu|4`*V2jCULTW@BjiUmu54VUu`LZ$~%|zVQE+*zmR=wK4p;F(q{MPL9Wd z3Xn|6InLTD)5hPlQfEH>ZBRhkv25kshF476UUHAvFF}tSGU;x~tH~FaRf?94)46k~ zcbnIN*;z|YSL&Qe0!GhyP@_hmYKB-={7Cv|WB7zk7(+rp!|IcSFSM0-5|*WfjWU1G zhU-}3OU+Nc#0mdhm{vq8YIjVhk-pp+V*yxQB&#sr&23*EDJKbqIx8v)p#a@~oJOxE z!rEjv-DVa+uCa6R{IF^DLVFG&Yk3QMHFNzNPV*PSz)HoauE8JUiH*(G4Rg9@Oh{r` z3fsl|*Z3f1-FC-{e_*sd;pUyW0E;rEv!4XA8Hy+G*Zcuvsztk+QIj?b-Qnk_fBxop zp7hpzYAb_6fuZB`le)fgImv zXy=fniIDi5l()>>;Y#3-FUO3q8Mdf+W;hZuy;MdO)Oe$$Xe$<+Om7wHH=Gvelg+=7 z-Z;!(mR9JtAf~+7+56wXpDb=EI7=TCQyikoSa#Rp+F zeofufG#A|yo|s-~VM64!@IA7U+8KqZbE7%!)Wwl=8%cgrQMB#)(Zy$|zuB}E5Hfss z*T@;;dHSn}Gn)^y-fWVz;=fI##N?62tV?7g#1SVBVhm0?mOL*a zg~wfs#m8wgUYVbF)SY%S@dXd3S)Ke>K|)_=DGmL$GBZ?GhkE2~l4|TwiTPW}=B^=h z)d)xXi3YgQ*ZWpAZ8jmfOXC>%Lom=yV_Eu18}`woV-#`Rpcxysa z;)(~p{!aX+Gy+bac6Bk3eD_<@S&8e>yQ+#?SWo+FsCgu5A2Wl8ekP_IodVoa#=_&> z?RtfAn+CYK4q91WIA6Pf8SXFQzVlSiZli7;tPWTbk z=*jW|Aex@fE!}=iIysA_Uy!stY2d@U?Ml2=!zfr$?HQ9YE(UN8bci?f9Cu$YDlRNZ~A<5Io_$YAiP7cA!;86(5LxP$CKqP~PySjYR64caqm_BoWg(Z= z1caL9{+BObM8Ka8VV$fB($-~i-FB5#ms8G%Wkuv50N^vd8iHdiF#D~=g0UWhBX_Oc<&8*66$Lpzo>Yf5mSLn!*j@epcj!5J=L`mO=|pTlP!g0! zw2hcSct%{7sIx8C$ZLg~iDp@yuOcvTIz_A@*ov2=F_^;x^g+$g(mhiCT z_gjkDoNcvX&!o!YMTHcphxKbqtlFHC3Cli(iJM@Wx-U%it(Btjjz00FLw3trVHa(Pv^8B&M3 z16IO;!;aU5x5t~7j;9tC!?(u;!Fs zq!PTsjBpnOGwjUC>Lt(|i7w2JV!HMqSC(cb?{O@1T%}al?pZa`Gr0Gv! zoa}ZD)K%5-c5~eEdaUwxw(-(p0eeh9S@k+>_`s|pa`9f|i{kfuNX9+o>x}QCipqc1 zG~ZVR-$QnQ_dk8gs|TyaTy7~~??B~cRs}GjvbQ-P@_Lz;{bPIULa*aiPbK^HrZC(0 z^`F_Wkm9L|!V@}48Xayh-qP=l1~&}`*@});L-#+B78wC0TA9 z)hHSMmGX|w#Bu}wQyoQVIuvFc*)(km#A-vNjW`(7VnZ5OsWjPQ!_s%SYFs93G{KXk1_N0xll9ToNj zKF$^j-xfP8_P#;Qlofk>-rHM#7Ny7U9stlnCfic3T-fnL)vpx;szC7oQ)ZXRi3q?Q z&Xms1sMLB)_t$YIIkJS;5#tjnzB_3&Fur&mony=I9Z$BO2&W~6 zFGts|6YAZyc=Q7wOHVa(Bngca;0I--bj^QE;AX~8itW5C!M)t5yxkxQmA^h`zg**n1nNJKzmsY>m3tRK|0^Id58y#c zeuW(Mi#P>sUl8rgF%KZ+0a+geh}tS#sEOduf*0^#ID6nX&OIM#UP&RGAuyb5T686y zIL7AN?srudUiCAh%0z|+E(8c3pcoTMAW-2jxNm453L)`m3b(c_0L#NA%q+Ozmm#8V zxL?x5lalmgOW;sJLHf*}d)(E_g3YnF@1T~u4lnwecjqDyXAy{^3G3Q^++YbeW1Fu+ z0u&8zPm;T0pn1;cZA5FtU9LTh>AB-vN^Ej&OuZD~QIr63w{A~&GhhBb@cPHgL? z;_bG>N6J79LG=4eU&lQmZ^wj%&laK2mIv;sG|AV<*zU$OP1Oumv&zpP$wO%NM$rV1 z7UCY^$7#dIX(;Y#Yt;9DRj_O665Wh}r3@{bw5F(G;JSJ&oZccdM4|2dQxDfEVv1~m zI}y2WJG>l21@0UDYI<+CDNy~COj7^__?$K`&CVI#Sc0X=h(T3}R#nY)*t#B7VeqL< z=PLry!mt}O5|DFUUU6PqZoF~t&}t5G)Iw+_^+W70nT!K>lUTt5F9O)jjkhP?wd;^_ky77@9r*O`U%c7J9j49A+1P1Jvjt z36sPToxt^zK9g@)0~;!iFUS5wkB4)-(tf&vLB%3(M2GxM!a}*k=M(a)Dpg=7Px6O> z^X6yXx4n(l#}9dGj2?89RX^NhkgvA)J8m0Z=g+`%1janko&VKk;o&vLRz1Q~h|8@q zP+okSQRR&DG8U>$bg@x8uZMY_e5uQM}o7FphcQ%pu#9_a(Y(;z%Dzx2lD5?r_|zByN0`J*3?C=uhiOfVWO z0oO6N)})Mk@xE+0phL&wVKY;=HtyknY9(qVvC6V z8pv}_NUH>GIX;Chdn~D};fD?S2`gcJmh%LEjd?{PrLYzX#&C+6*J(z#<}uH}!db!* z&N+{6R@0QLvoHAjI^g{v|3Qq#XjfQct>$UM%c#C-A?6Mj`^)+HOIruTzavG+**+bVTG)A~qx(uA z|Hw@}9OnDv@OEkg(LcsLlc8|#Ah^&U?5G(E!z-Q2@K6%8S@3Y7e;~ucx&Vlr6!Cp{}4!0(Jp#o)ojv zjuYq)B8IwTOpCVv(9V6mm4F;IZ53JsD-$Yg#c+7|oH+}hdo>}^qLCpWJNIeJwU)b2 z!FXySCiVvKI0kP1#RP8WQ96#(5@TRgQo8Rb6`; z;6Hz<-KTiT^_{)Nt3{})29sEFePHRQ*32Sx?fBYTsky8x*g@=Dwd>epAp&*um6MzW zJoH66zEwf%n}Sd41eI1M*NHRVAL9s3*X5VN0k6hwXG?`mPD5iP-rCGGPG;C&q-R$P z@r6Eu2T44LL`FzNKUa#eUXE|IV14F)>010j@z_zXB7e5;T(|1rP&+su@9Gw$AI31J zBl5ZU<+NF7U(0X<}Vc37JS_8T)pTwRZfnOri^Ej}VUCskz@r_H^w2i5SWi z%*;yf8U7^riP{0%jzc_WK{(B(I%U=-3XuOaRze+8-1j%>{+d-%#$Ws4lcqXeyn2E5 z^vc1JWRfg0vjHGss3W#DKCFpEO@2VM|AN#VpG=H=%I%--%UKW$18rJ$?qJ^N?bAAE zTWuO4%LDOB>&Fw!M`?H>=Y~ur#^hM7xH+v)KIaf0hZJ<-Fvp=L?PWaTdA}`if2jU9 zD4Dm;9{g!?wbETgnVjzC-q5A0Au}JcBk1_vw!D(a$0CfpKOgcy__l2*LlpOanqw)__h4jBJ zKK`|sO^E3^hWEjSjdBJiSpBcNfDYJ1z)cyAk^{gk6*x<&3X6 zaLT-gf0ZF$M><)_N$0(6Et{h`?=Qwb&*UXWq9J2JYFJs~e+(?Am zPWG_Ib2aQKv{Jkza2dw7I4b5eFhXQqC1Nske(mTF9G8tb3Z+^(pZPDxvx%`2a~`

~0Wjf_YVO<2?1?-I*_t=&I*4$OC0 zpcsZpx#V|I)M%xw5;1DR=RI5|LLMDF??3Yl){FB|TUy+-ZntA$H7t`n^`<;G+`_En3VHbD9v`s0*`S>#;V}Vm231Hjo|X# zVlZX0zim=H2QIX?&_!DBDM-$KD^(3ea6YAY3tG4=)LIV zI@eMdV#XL7OMsUKx0!Sx7Ku_coFz43ObH3?q=l7myQ!m1;Y$CO{0P6FAkw1JtQBAM zQ5zHz%^5o8@%`*34%>U9cdUHVBj0WGUqtlHKi9NI}OFT({M%+Co=z5F)!Y8Z*GJdjA|67{ze`2JGq`YXk# zU_b7mOYR-vIMIAV>7igGb0WJ{U6JSPb}YIbLO_L+xvF(V9;X}kS0~;=P!1XFjpj&G z%4So;30bGbiNtk8*%k^EXu=<_V9=LH=j8+EK_}L4P+?wSTW)(7aw4%P5o76~EXcAb ztp|o*ZIDMGDd-o5lr^jaAOBNmxGgJTf4)29>qvbZz~hM9{B=(mJws-1Z_uu3z|?nva14QCxJWqc7gYZ~QHk%DiYTSIU2vw@HGi#Y zXhWeaP#Cw0i>15KOifsPQq!;E22xj-^CSZoQ6F&73|p}&Q=P89&e7WO!eLo{dPx(x zw#f3`XeP)8Nn6^t2P2^s>IVwH*p3%)@a#DO)VKFM&!gkO;d1)U*t|0Q(v~P~W71S~ zlnQ$hO^I++!;+ianQ_*26oQ0N0+0dm_ z3c*_GIb+FTwo`-;vVIcTZdQ=MlA)?Io;Nxu83e>ekjt@NJF}ax)9q6dIzKT0;0E~{ zX~qH>F7Xm>zy|zx^n6?%`I!dd20BHUQS!?eT}FM)x~cYI7D3PcrO<3yMJ!Nh66WSw z+lPr=VFG*TvEIy{th~~!KR>MwlA-oNKF;@-1&@FxR$zC2N&`fIdgqItflAIrm>;me$oN+s~i|TMT)L`yBmuaqdG>iKu&Sq|uFc@*>&Jf8*lE@~`RW#_le<JuCyA@IuMA|`HRLyU37-T=d>dz++R*k0Q{Da$}yNuzr4quy51)KiWN4NDAl zmim~Lt&hNPj#ai?0GtrIdV(&VZm4->4YNqSWiz?FlqVi!95aNci#P)<9N-Bnl_KRRZRyQbc-|1&`SJT9@qX=rU$WX_ zUfuAr1mxJ9K-5CY%BYgyMlqsKavrZ(qr1Ql=hrzm`!?>y77Oh zc$~0@k^xxz2f79otg|?Qp1;i{G-@0{_!JGF3#%%u_cfZ4DT43yW3StI*R8_r?Z|~5 z#XZD7IK+hkWJx+ALy0Tms{au1RM#O^{qk|E)&Dz3)g%BoswT+H04l}MKGQ7K?(w$< zHx_j2rtj>_J7er^M|p}dBPK&9=@6`!1Dr>GkC?(b^WCogdr)C2a}y!0%HqN{QP<0= zn|NwQ*T{ZWXNKQw)Vjt6%E|77;5CslHIC-Zn+{+F!vQ}bC0t>DN=I=~CbP6To74CU zIb#)FIG9$Sx?Vb%y4=Iu(Xju*dMlWoUnBvNRJDF%TBP8p>sYCIpzS(%L8d@eSgDKs zC!`7PD`-s5ws3GP`%B4JwuK|Px}mfHElAtEor`6NGD)4wW3XFCc&&<~HQ3UfI-7lA7vCnw zek#p($k``z+KS@ucG~qgNg()&*;^+ZzbM$;D6txK z8k~H|fLtR48~X)FbkUBliH&|SAFTk_A4DEVKfW>J$(WhTYUFdhokr^*qaMH7J>{(% zU;xLb#m3o8BJmVq!YlZ0Q}sN1?Z`d;-$rWH<_^F+0)e;*;gRUSzQW_PW@g8>g$u*6i#on z9kHCOdfQVxD^vcSxoZ`8(Pt(h3x9qkyZn3s>BIa3y>H$d{~`L>V5G9Nv|7QU;fkN3_G_ zd`=DJn-Yh!>~E+dQ{yZ5PcAf%#ay&52kfr$XM&_r^X9*@CFHBsasiKOjmA0!1$B9y zwLZx%h3P4U&ur=Ss^7Fj6J!=+6KDavhFHfzKTkEBgfnxsv;%p(QHI)O>MFkKyK;ft zSmE%!N%ql9a~D3uUeGn@LPgaO{nl-IAp2^%eYsd-5}-Q*^2>oSZbf0w_FHHjW_S|0 zE$k4BD>G;JQJ7vY<>$*d1MLEmtvQ^l!a_8nrZ;nt1)dCJ*x#+EpzB-83fl6;+{(9| zW>D*SN}`kS;VkY3U2z7p03yG|qRp|+EfVb<34s6;V-8_1SpaX=ul3LgK z6YIAM-h&A}@0z(n3);$Zw30J1&6hog*F6(4IAqp&!t7l?8m-Teo6*!Q|J%j@{lyO! zH%#rpvaPrJYW&XBHcu<1inVynqn`rA$^ z6|Rsc?XL+0q`$J_-~OmH{J@kHd~tBH1S4!^VCjaqqR6t$<2niNH>E{--c6|TuZ&}0 z=981P-98uy#9yj~I?5(^erW{ns@tSbBN%9Y{CuOg&9o;oQ<4yorFXj0vqB3T^859p z>jvmaYlpZ;$>u7#sk4+)weR5i)gNw0w*YBbQ2ooEsP**n!`#Mk!1K&}Zw%#-Nd~PPW8J zooAxW4jnwcNcECR>=BzJq>)J35^-I?NQn2?n<^3VU&t&RN& zqMmvzc@+^W+U_YGK!@XGfq`ohMeWhY_yT&n2W@C9Y8{h^^xQY8Mh9u4QEj_neD=8{ z^mV*^TKpx9_`;z}A^8H$Jfy8`_iwx6`i5L33vXGcwGBMwIZu|&WS~(nlT<9iuAq3+ zLd67)f+Dh_w+5eM7QmX=zvIGslRmp*wg4+8#c&%Iuqs9`-zL^Q5Wl6Eo4>p?KZ+zB zo=vIZDW>*uL{jgOBGiN>2UCA7=;CBH5=FKyqGhE~vkp&vZ=^X2Qv7BYAx+_4^*Ra~h8MUFXYznL)k*otOqklUjYz3-;XABs=iNp{8 z4xA$lS}Ob9&W3m+6Y!X`{#POqUHpp*-*{&4GxAjan4(s;*F$$WGKbzXUy~zh{9gP; zb>^}DBSHF%b7>`86<-IOmw(2C`qfTgiAs6qjS0RSNQSEmaDv=(bfZy zvLZuNsNt1j`<~H8zoFm^aHH)bZQ0L$TLj?_`|w!ZET;xmJuO(s5F?@(t{A3bi{Hs zqb|cP?`EER?H{IlujdajgUubJvd-NH1eHBmMBBk{(+cdF?OR+wf_q(0+cbq^4K9fc z6SPwN(S$5jkiOJ0QusJWdjhA3W9fE^q<*yuAdndCzJ&wxuWtQIryS;*c!wndo^{$T zx={;Z{JOA97|k{m%%%=yQJoZD6bDcyI^U&0o`Tb=Uz5BU<*UbsmYPCoqb_PX)rX|4W8h^ln4LcIHS1)buvr1qb4>XHMI zY5dY%O9gk>*?nw^%A=&Uae2ZP>9P&IKI(O+02v z@NrTU#+@Q5gE;*CGT_M4DzDBC0-_6|dr2YtG)gJ$>Gi8~IveKcyt5deBd1<oqbP{YJ&rnsl4vov?ofiMEv?7u8l+@rSF2LL5ME}mCrw}3BY?*>n>i`3S? zBUOn(|Lh|Guf{%7Qe;}%N3jlE7{-7I?;6sjiN_gdC4(~Kev)pZ5-QIAPd<$U`_T?w zJBR5AxCu({C0N$Gp_=^Ma27J=#3sf-DzbE854*72{LDD9?~%0?|F-Kv)xTj(SY=7u zb@y=&Dx$s*|3nfC;2PM4Y>ngfw(E%F#H;m|^*H6|7`*BE)?P`6oOK$9JHbG~E&|5g zcE{%gY|RK?#_3^4)`8O#l|fVHxSn=+V#wJ`onfwRioiPic7)fWVO7KT?6thP8vjuf zWiZXD`?k_PC#su8?^E z+qtmLcc9IkbK%YR!ke}3%K^^3KWXj}ke~fUE)dV^MSEAvI={O{o();mY-$pwbYl1B zu75|A)aMUBhFh=(c59AM-0ZDNb?7nsPa$CRDhb(T*_}vJl0OaOM5m zt;~=8kQ)95t0(K@-@c!2vXGs0!?0l+#V4*ZY1glL<(y+zSGsObGa{LdIcNd8&DaaX zeBH$KSmrHSl)0m|})WFtm5hf$CI&I91 zyl=j4A{KBq$$Q80E)y%3J%3I>yx~XnsivhKt1adC34j23=nvv->CXsU~yZ@}xFdO!SNC#$Ia9G$DHmCY))l`Gy~+&T&UicuuIqt5Wo zMTqo8!;oEF?=|l$%wuEBe%UB4i46Qgk#>VnC0@O7tYhTotJGUJ7m#pK6&+4u+Rkb2 zQxD4O<57If%0yK=tS98n=~w%HbSTXv`xHkQ=20}j7*}fo;{YTe_7gp_>1T;AM0Xkm zr@ySUm&8CXoN|0MP5=zgc_r2#>eTy12IfI{fJ!g{-L?E90YlIHN0kbT`(t-dDxOa2 z11>uOBFngT>u71B8UKYb#hr15Zl%{?sMp~1_j%q)YWtg;^5GOA9rcIqi0BD|?k$qY zv_|*5tnY9z>F}&kI$(q4c*dT8tb?rOpr1y$Ji1}UW2-=a^jo@h(S!7%+~slJ{n@t9 zNS-mG)0$cHrDyL@y|FuHpO|VNjD&yi>&$9-eAh%uryIG4EZ9#xe7zUB^C^1nqh(eD@&h0OviQ?$GJ3 z8EFYpJBsc|-zz8Vma9w3<<*}@t83RsiTd_s1q199Ow*M(jFqKx$D=R@Vzis|w=DFq z^v(mgofsRPQGl-7%as+pW1pXdl-iap8u|8vF2V=l48f4K#F-!8I_gGevkkORJjZ2{ z<@G3WBJUZ3WlM9@UM90evi=I! zX}9(>@6yDEk42K=s_m;9JeY^81jRiZjA?pR`*1I6_bYXgN5a&lh0T?o-A_(fIf%#y zq1`}E8plh|pKj3#l!?>WfxY5nlZ9mPMPH|grZvR!(5zZxxczODI#GAc;XRak z^Xq+E1idUO1!YagG#3i@G!x~t%O|wUQC!`U?J&|3SnZ&yw#!=xB<)g(sBiX&JolXY z9J0UUR}_CR+vgK@^kx~kniAp@r!8d|pxeuG7WF3G%KZrsyxuf8E&;@>ECp6V%pBaz zmJU$!MttJD&GhsEf_@THay(IX<#GbT0*t>{`LU zo2V%=iQ=Qh!n?eV9WfBtKURVHyqSsbfB_;FSFqUV zGVHVo2=p6oGa2_!Tw`e=jMM&{o>Q7epeW@-1mL%^BiSxwKWgD z)<(Ts`*LNg7>+jEr;4t1Q@?pBAwqlmGH6@Z<$12bSE;F6my8?V)a^C>3#8Af99F)H z9I30sE|d4mTX_#PTBq;@c#zHG-`nRUeAk(U3+5NCBu|})ookLx?@?caxrWi`7B!0z z0lU;^?;@nHolJXuVJO#%y-b!8+tDs#4spBPlC9hu85@gbXf+SxZa@9lF8V6zOhPg@ zNJz#fU}jKg?!_^VBC~@`Gd0;#?Ik5`=jNvpX3P1oKHJy-?FdvRgS+p{rak@h$7)UCw7>D4i8FauDIFei zE4|_;wF+ss4&XX_kDLRJ9<=Qo#m?XS*p`DFzK;8Q$-rBFN@CsnqOO-5{;Kt93@z%0 z`P~J7+%gaCPncQ-l2`0KztC4f71w95I zWU7Kd_YH|npW+9AjJ)#mpPh%S+Z+mKuR2Gjr6iY}B{?eY=m|)#1_VJXU+@2a;pgYlsdUbtJcJ<>q z>oT^!p*C_lgV#uMbiTR4S-wly$y0N4sd`4;3G~RW_vFw6k8b_*e8;!bL?&#C;=}AN zSqWZ#bNx!(>vY?&d%hbrx@!D5Yo`xCw(pa!hoAp@*9BgkzC@_pApElbcQJFt`or^U zPfI?*4uuLt7_MZ@JDRR9CkKMczWu%#N~B$+B2JnwW)*`dCp3Tnxu z0EA9#q9e}ud3hrEkUCZ-Tl}1y$pcHVwL_1V^0jxvzT%B-U!qnJiqC%p2>)+5EsYpBL=vPyv7g!{k>jt})z`p)Ew&!lV zm|I%)eyWxF>rG#~s9842b7wognh0zaT+sHBQF|;G-1#H2Tyt zM#%nGf~Xqym{F15yBzouVSPtMt>gvaS4^m*eyHtzz`03!HueAtpFTV6?Rk)#>5O4^ zhpbX3D;ZJmkWAk1$x+btzd~38MJT{%Ub;jtDnVp2-L}yHDq?qyknP63$FT#9M1JjW zNVi7@kC%?~UM2ow?N==Za1?DnrUSBxPPk++`3AKDR8-7?unNFoWE)i21wtpNM|Iq} zGQZX7x%$)_!T)x(5IYvw>~<$5Ujyiuy#9B=l`dZdv+0$lANN($S#tk7g4p%m(3|4a zfAFUJ17JWSqCP6X3@p^n_ItObG16aTKP=L&Y_S!NNnZ7cI5w>Ll4yABMel_!Q*{fH zObc^fUM6|5gKLY-AJ`saD(WfD6>-j0VGyi_ItLTX)?2M3?wf2JN}9bqW@f-egS304 z?$8Bf&)J@VoEk(&qA9Kmk>;0nc7f_S^(+H{gPKY7z*O-iIChau)*5|iF9Op_q8shn z5HVC2%fgN6axd5~l69#CN?C*$?8z9WPfSpk-hKZLr)MJlJqx87ftkA%f3@aE_L1Xu z#`4J@xx%TS1ahcrXg&&%J|H!haS^9K0lC`UEf6XKjBuS)jO^><-uZpF2Rg5VDmpUxxPb)ag&UwaTUzJshl!}n$fA)vA)bRxs=&m zYY@3B$Pl3^I0)RbojB!8S7O8h29azo{?_AIw1OPzA!Jvob*j!h)RivM-KRyz&WByT zCNi;>>v+#to~(hPn-$!bsqRi%(5Ju3-)Q>v`uRA*wz1kFV9^u9-1*%rJ=#xI!!&>y z!!EIuN?Q#m0PX7W|EO(%_;G6O_hCbZPP~|lZrW~M#B$L3>0Gg+;u(8Q{0W}7F{uj= zP8!{kGar%eQTMm}Did)e1ayB3$}|l$oA;xe7AWNWv9OcdG0CD(Th7<-XHMi5Hr zy~@UNMs>HrR`NFWpLu0*`jZVLL=fVN>)n)*x^ac){l7xaGlu_qj{v`dA!9QbKzeE1 zo-xT58-g7Lq*@J`8_n%*2VDUMdj@d+UjFZHlLoltb~ksUQkgcfF$9ox4$OzEEz)D` zQIfhwY}Nr14Mj!pIK;^t9u#-gztWA4eR^vhG29jf-V!@3Q+vA$!!Xy4c|5|q9n6yQALKT5gdx~H$M z$!fEKfhAqio}y)5$YeLtPjX;D(fx|b7=ox~9nztWepn|%;Lep2{0P`k`r9|h0VM9V z*M(nFOKLr=6Z7s|BEF4Ryzs9Uk}%KaI08XA>l#_t-j}nmbRRj_M0e=b@GL_o zD@u>T@@0(2-zhQnj-bi^G|BWW`kCYqqwx_sATt06YbQg4Uq|eb5Ik8C4AlkWGA&cR zmZa)n=3Zks#pXOJu(?4Z{D;TP+-r|P<2KX(D%S|R#>kql6qc0qB`UCqUCqY*2*PC);};`yAcPI_VyftpU727FQf8X|4z^muBT-rsw6i` z;xMYb`wbUQNe60!`q%TMA`cJXd(W?MB$IzDkdhV%09#t_!a9Fyle>%!?1$G$9WZE!)|1^N) z&$@94W#7&EwlfCov+KxX={mL_x&dw+y+`>GOeBF;bux_(Rt|MLkZzTMM#x|yk2eT;Rinub#|EsdxDb_h-_^7t>(M2#NQYI z#&Gq65Jy9Zie1cQV*a>JDNvJm|HdbD)Y4Ojj5=@@G)QYq2-zBMv%XSMgk2*vd=?Q{ zZr=TfWTsH|T3nmuB&J73rJ2c*X(1!t|KgcslNj~8csJ&xu$eqpKiw%)ZK6AkzNH8X z#kDc9slDrwdeIH3h+ACXc!~S*^t6%t6IH{alFs_JpIcU&!^8fa;5k`#TvGGo+z$KO z%GlSdkycipFMrCXcf<{wP+FY(m+xqE6_2U^=I?Ftx|CRc<#xi-S$%u?mVfPWJ+H2W zt!m64NI5ux=f*!|%=WWiI_OwTq$S9=<;Y!eYFcCS+ZT7RkIJlm-{ExNMhOpt&6ulW zICwfy@~SL<4-^cmzb5dMA$*YG0AZ(*_utGPdf$z9;}92VTx!2p-nX&Zf{BAq{GIw# z>_OPCoZmk4*x0+o7FjsZ_s99MOosgJhBd%z!RHo3#12chsBqxKnu+@dZGK!sBrZ)t zx^Z0k^rG3xyN}la8HOQXpe{B*C6KbG>T>EcAd{oOfQK8FnZh&x-eTxQ$ZwTp`hnK# zN5YJ~fLt~VGqYri5^gQkZwShxnTa?EqQZ8|)^jVcR~dWN=7bj?0dTl(F78M($=J*m zSmMoIM-2S_e?cS}S+hM7HuJ3GyGb0?R zhL!}7m7w`E?g%+ z1n`ZpFRTU7Ve(`tp_4z`3hPsgZWXOcxiD5gvgIl*8V>zQQPd7gJ&|=)*mhKbwZqe= z=t9q*kKP|HJbVzV`+3M)AHGe-O<%gM-#w}3rmjK^T8$q6k3(wy9OmrBNSAFc|H95; z_Whh-n$7mLn$$xi)IK!qhL7@xKVJ*}UDGgZbfZ|GQL>Ki^xO`1tt>uc&L;S{h;n

j>k9QNFkR)lfjXz-|PH1v5lC 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 LD@m0}82bMoRU*)% literal 0 HcmV?d00001 diff --git a/packages/docs/src/public/robots.txt b/packages/docs/src/public/robots.txt new file mode 100644 index 00000000..6f27bb66 --- /dev/null +++ b/packages/docs/src/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: \ No newline at end of file diff --git a/packages/docs/src/self-hosting/configuration.md b/packages/docs/src/self-hosting/configuration.md new file mode 100644 index 00000000..c312bbcc --- /dev/null +++ b/packages/docs/src/self-hosting/configuration.md @@ -0,0 +1,39 @@ +# Self-Host Configuration + +Configuring your self-hosted instance of Enclosed allows you to customize the application to better suit your environment and requirements. This guide covers the key environment variables you can set to control various aspects of the application, including port settings, security options, and storage configurations. + +## Environment Variables + +Enclosed is configured primarily through environment variables. Below is a list of the available variables, along with their descriptions and default values. + +| Environment Variable | Description | Default Value | +| -------------------- | ----------- | ------------- | +| `PORT` | The port to listen on when using node server | `8787` | +| `SERVER_API_ROUTES_TIMEOUT_MS` | The maximum time in milliseconds for a route to complete before timing out | `5000` | +| `SERVER_CORS_ORIGINS` | The CORS origin for the api server | _No default value_ | +| `NOTES_MAX_ENCRYPTED_CONTENT_LENGTH` | The maximum length of the encrypted content of a note allowed by the api | `5242880` | +| `TASK_DELETE_EXPIRED_NOTES_ENABLED` | Whether to enable a periodic task to delete expired notes (not available for cloudflare) | `true` | +| `TASK_DELETE_EXPIRED_NOTES_CRON` | The frequency with which to run the task to delete expired notes (cron syntax) | `0 * * * *` | +| `TASK_DELETE_EXPIRED_NOTES_RUN_ON_STARTUP` | Whether the task to delete expired notes should run on startup | `true` | +| `STORAGE_DRIVER_FS_LITE_PATH` | (only in node env) The path to the directory where the data will be stored | `./.data` | +| `STORAGE_DRIVER_CLOUDFLARE_KV_BINDING` | (only in cloudflare env) The name of the Cloudflare KV binding to use | `notes` | + +## Applying Configuration Changes + +To apply your configuration changes, ensure that you have exported the environment variables in your shell or included them in your environment configuration file. Then, restart your Enclosed instance to apply the changes. + +For Docker deployments, you can pass the environment variables directly when running the container: + +```bash +docker run \ + -d --name enclosed \ + --restart unless-stopped \ + -p 8787:8787 \ + -v /path/to/local/data:/app/.data \ + -e SERVER_CORS_ORIGINS="https://example.com" \ + ghcr.io/corentin-th/enclosed +``` + +## Next Steps + +Once your instance is configured, you can proceed to explore advanced deployment options or set up monitoring to ensure your Enclosed instance runs smoothly. For a more complex setup, consider using [Docker Compose](./docker-compose) or deploying on a cloud provider. diff --git a/packages/docs/src/self-hosting/docker-compose.md b/packages/docs/src/self-hosting/docker-compose.md new file mode 100644 index 00000000..25bd6a15 --- /dev/null +++ b/packages/docs/src/self-hosting/docker-compose.md @@ -0,0 +1,119 @@ +# Docker Compose Installation + +Using Docker Compose allows you to define and manage multi-container Docker applications. For Enclosed, Docker Compose simplifies the process of setting up and maintaining the application, especially when you want to include additional services or need persistent storage. + +## Prerequisites + +Ensure that you have Docker and Docker Compose installed on your system. You can install Docker Compose by following the instructions on the [official Docker Compose website](https://docs.docker.com/compose/install/). + +## Docker Compose Configuration + +Below is a sample `docker-compose.yml` file that you can use to deploy Enclosed. This configuration includes options for persistent storage and automatic restart. + +```yaml +version: '3.8' + +services: + enclosed: + image: corentinth/enclosed + container_name: enclosed + ports: + - '8787:8787' + volumes: + - enclosed-data:/app/.data + restart: unless-stopped + +volumes: + enclosed-data: + driver: local +``` + +### Explanation of the Configuration + +- **version**: Specifies the version of Docker Compose file format. +- **services**: Defines the services that will be run. In this case, only the `enclosed` service is defined. +- **image**: Specifies the Docker image to use for the `enclosed` service. +- **container_name**: Names the container "enclosed" for easy identification. +- **ports**: Maps port 8787 on your host to port 8787 in the container, making the application accessible on your local machine. +- **volumes**: + - `enclosed-data:/app/.data`: Maps a local volume to the container's data directory for persistent storage. +- **environment**: Defines environment variables to configure the Enclosed instance. You can adjust these values according to your needs. +- **restart**: Configures the container to always restart unless it is explicitly stopped. + +### Persistent Storage + +The `volumes` section in the `docker-compose.yml` file maps a named volume (`enclosed-data`) to the container’s data directory. This ensures that your data is not lost when the container is stopped or removed. + +### Customizing the Environment + +You can modify the environment variables under the `environment` section to customize your instance. For example, you can change the `PORT`, set different CORS origins, or adjust the note size limit. + +## Running Enclosed with Docker Compose + +Once you have your `docker-compose.yml` file configured, you can start the Enclosed service with the following commands: + +### Download the Docker Compose File + +You can download the `docker-compose.yml` file directly from the repository: + +```bash +curl -O https://raw.githubusercontent.com/CorentinTh/enclosed/main/docker-compose.yml +``` + +### Start the Service + +To start Enclosed using Docker Compose, run: + +```bash +docker-compose up -d +``` + +- `-d`: Runs the containers in detached mode (in the background). + +This command will pull the Enclosed image if it is not already available locally, create the container, and start the application. + +### Managing the Service + +#### View Logs + +To view the logs for the Enclosed service, run: + +```bash +docker-compose logs -f enclosed +``` + +#### Stop the Service + +To stop the Enclosed service, use: + +```bash +docker-compose down +``` + +This will stop and remove the container, but your data will be preserved in the volume. + +#### Restart the Service + +If you make changes to the `docker-compose.yml` file or environment variables, you can restart the service with: + +```bash +docker-compose down +docker-compose up -d +``` + +## Updating Enclosed + +To update your Enclosed instance to the latest version, pull the latest image and restart the service: + +```bash +docker-compose pull enclosed +docker-compose up -d +``` + +## Advanced Configuration + +If you want to include additional services (like a reverse proxy or database) or manage more complex deployments, you can expand the `docker-compose.yml` file accordingly. Docker Compose allows for flexibility in defining multi-container applications, making it a powerful tool for managing your Enclosed instance. + +## Next Steps + +Once your Enclosed instance is up and running with Docker Compose, you can explore further customization options, integrate with other services, or set up monitoring and backups to ensure the smooth operation of your deployment. diff --git a/packages/docs/src/self-hosting/docker.md b/packages/docs/src/self-hosting/docker.md new file mode 100644 index 00000000..8950ce5d --- /dev/null +++ b/packages/docs/src/self-hosting/docker.md @@ -0,0 +1,107 @@ +--- +outline: deep +--- + +# Docker Installation + +Enclosed can be easily installed and run using Docker. This method is recommended for users who want a quick and straightforward way to deploy their own instance of Enclosed with minimal setup. + +## Prerequisites + +Before you begin, ensure that you have Docker installed on your system. You can download and install Docker from the [official Docker website](https://www.docker.com/get-started). + +## Basic Docker Run + +To run Enclosed using Docker, you can use the following command: + +From Docker Hub +```bash +docker run -d --name enclosed --restart unless-stopped -p 8787:8787 corentinth/enclosed +``` + +From GitHub Container Registry +```bash +docker run -d --name enclosed --restart unless-stopped -p 8787:8787 ghcr.io/corentin-th/enclosed +``` + +This command will download the Enclosed image and start the application, making it accessible at `http://localhost:8787`. + +### Explanation of the Command + +- `-d`: Runs the container in detached mode (in the background). +- `--name enclosed`: Names the container "enclosed" for easy identification. +- `--restart unless-stopped`: Configures the container to always restart unless it is explicitly stopped. +- `-p 8787:8787`: Maps port 8787 on your host to port 8787 in the container, making the application accessible on your local machine. +- `corentinth/enclosed` or `ghcr.io/corentin-th/enclosed`: Specifies the Docker image to use. + +## Docker with Volume Persistence + +To ensure that your notes and settings are preserved even if the container is stopped or removed, you can run Enclosed with volume persistence. Replace `/path/to/local/data` with the path to your local data directory: + +From Docker Hub: +```bash +docker run -d --name enclosed --restart unless-stopped -p 8787:8787 -v /path/to/local/data:/app/.data --user $(id -u):$(id -g) corentinth/enclosed +``` + +From GitHub Container Registry: +```bash +docker run -d --name enclosed --restart unless-stopped -p 8787:8787 -v /path/to/local/data:/app/.data --user $(id -u):$(id -g) ghcr.io/corentin-th/enclosed +``` + +### Explanation of Additional Flags + +- `-v /path/to/local/data:/app/.data`: Maps a local directory to the container's data directory, ensuring that data is stored persistently on your host machine. +- `--user $(id -u):$(id -g)`: Ensures that the container runs with the same user ID and group ID as your current user, preventing potential permission issues with the mounted volume. + +## Managing the Docker Container + +Once Enclosed is running in a Docker container, you can manage it using the following commands: + +### Stopping the Container + +To stop the Enclosed container, run: + +```bash +docker stop enclosed +``` + +### Restarting the Container + +To restart the container, use: + +```bash +docker start enclosed +``` + +### Removing the Container + +If you need to remove the container, stop it first and then remove it with: + +```bash +docker stop enclosed +docker rm enclosed +``` + +## Updating Enclosed + +To update your Enclosed instance to the latest version, first remove the existing container, pull the latest image, and then run the container again: + +```bash +docker stop enclosed +docker rm enclosed + +# From Docker Hub +docker pull corentinth/enclosed + +# Or from GitHub Container Registry +docker pull ghcr.io/corentin-th/enclosed + +# Run the container again +docker run -d --name enclosed --restart unless-stopped -p 8787:8787 -v /path/to/local/data:/app/.data --user $(id -u):$(id -g) corentinth/enclosed +``` + +This will ensure that you are using the latest version of Enclosed with all your previous data intact. + +## Next Steps + +Once you have Enclosed up and running, you can explore [configuration options](./configuration) to customize your instance further. For more advanced setups, consider using [Docker Compose](./docker-compose) to manage your Enclosed deployment. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5257ad3..b3c866b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -208,6 +208,12 @@ importers: packages/deploy-cloudflare: {} + packages/docs: + devDependencies: + vitepress: + specifier: ^1.3.4 + version: 1.3.4(@algolia/client-search@4.24.0)(@types/node@22.5.1)(postcss@8.4.41)(search-insights@2.17.0)(terser@5.31.6)(typescript@5.5.4) + packages/lib: dependencies: lodash-es: @@ -244,6 +250,71 @@ importers: packages: + '@algolia/autocomplete-core@1.9.3': + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + + '@algolia/autocomplete-plugin-algolia-insights@1.9.3': + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + + '@algolia/autocomplete-preset-algolia@1.9.3': + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/autocomplete-shared@1.9.3': + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/cache-browser-local-storage@4.24.0': + resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==} + + '@algolia/cache-common@4.24.0': + resolution: {integrity: sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==} + + '@algolia/cache-in-memory@4.24.0': + resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} + + '@algolia/client-account@4.24.0': + resolution: {integrity: sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==} + + '@algolia/client-analytics@4.24.0': + resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} + + '@algolia/client-common@4.24.0': + resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} + + '@algolia/client-personalization@4.24.0': + resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} + + '@algolia/client-search@4.24.0': + resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} + + '@algolia/logger-common@4.24.0': + resolution: {integrity: sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==} + + '@algolia/logger-console@4.24.0': + resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} + + '@algolia/recommend@4.24.0': + resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} + + '@algolia/requester-browser-xhr@4.24.0': + resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} + + '@algolia/requester-common@4.24.0': + resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} + + '@algolia/requester-node-http@4.24.0': + resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} + + '@algolia/transporter@4.24.0': + resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -511,6 +582,29 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@docsearch/css@3.6.1': + resolution: {integrity: sha512-VtVb5DS+0hRIprU2CO6ZQjK2Zg4QU5HrDM1+ix6rT0umsYvFvatMAnf97NHZlVWDaaLlx7GRfR/7FikANiM2Fg==} + + '@docsearch/js@3.6.1': + resolution: {integrity: sha512-erI3RRZurDr1xES5hvYJ3Imp7jtrXj6f1xYIzDzxiS7nNBufYWPbJwrmMqWC5g9y165PmxEmN9pklGCdLi0Iqg==} + + '@docsearch/react@3.6.1': + resolution: {integrity: sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==} + 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 + '@es-joy/jsdoccomment@0.43.1': resolution: {integrity: sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==} engines: {node: '>=16'} @@ -1492,6 +1586,15 @@ packages: cpu: [x64] os: [win32] + '@shikijs/core@1.16.1': + resolution: {integrity: sha512-aI0hBtw+a6KsJp2jcD4YuQqKpeCbURMZbhHVozDknJpm+KJqeMRkEnfBC8BaKE/5XC+uofPgCLsa/TkTk0Ba0w==} + + '@shikijs/transformers@1.16.1': + resolution: {integrity: sha512-mfbe4YMov+1eyIBU3F6BtaPmLgDkRQaVse8xsBlKTVAcNF3cbZMRCyUz2N6gJOMKLJiv9T5gapBPbRxrDMuoxA==} + + '@shikijs/vscode-textmate@9.2.0': + resolution: {integrity: sha512-5FinaOp6Vdh/dl4/yaOTh0ZeKch+rYS8DUb38V3GMKYVkdqzxw53lViRKUYkVILRiVQT7dcPC7VvAKOR73zVtQ==} + '@solid-primitives/event-listener@2.3.3': resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==} peerDependencies: @@ -1615,21 +1718,33 @@ packages: '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} '@types/lodash@4.17.7': resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/mute-stream@0.0.4': resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} @@ -1651,6 +1766,9 @@ packages: '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + '@types/wrap-ansi@3.0.0': resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} @@ -1801,6 +1919,13 @@ packages: peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 + '@vitejs/plugin-vue@5.1.3': + resolution: {integrity: sha512-3xbWsKEKXYlmX82aOHufFQVnkbMC/v8fLpWwh6hWOUrK5fbbtBh9Q/WWse27BFgSy2/e2c0fz5Scgya9h2GLhw==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + '@vitest/coverage-v8@2.0.5': resolution: {integrity: sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==} peerDependencies: @@ -1851,9 +1976,82 @@ packages: '@vue/compiler-ssr@3.4.38': resolution: {integrity: sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==} + '@vue/devtools-api@7.3.9': + resolution: {integrity: sha512-D+GTYtFg68bqSu66EugQUydsOqaDlPLNmYw5oYk8k81uBu9/bVTUrqlAJrAA9Am7MXhKz2gWdDkopY6sOBf/Bg==} + + '@vue/devtools-kit@7.3.9': + resolution: {integrity: sha512-Gr17nA+DaQzqyhNx1DUJr1CJRzTRfbIuuC80ZgU8MD/qNO302tv9la+ROi+Uaw+ULVwU9T71GnwLy4n8m9Lspg==} + + '@vue/devtools-shared@7.3.9': + resolution: {integrity: sha512-CdfMRZKXyI8vw+hqOcQIiLihB6Hbbi7WNZGp7LsuH1Qe4aYAFmTaKjSciRZ301oTnwmU/knC/s5OGuV6UNiNoA==} + + '@vue/reactivity@3.4.38': + resolution: {integrity: sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==} + + '@vue/runtime-core@3.4.38': + resolution: {integrity: sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==} + + '@vue/runtime-dom@3.4.38': + resolution: {integrity: sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==} + + '@vue/server-renderer@3.4.38': + resolution: {integrity: sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==} + peerDependencies: + vue: 3.4.38 + '@vue/shared@3.4.38': resolution: {integrity: sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==} + '@vueuse/core@11.0.3': + resolution: {integrity: sha512-RENlh64+SYA9XMExmmH1a3TPqeIuJBNNB/63GT35MZI+zpru3oMRUA6cEFr9HmGqEgUisurwGwnIieF6qu3aXw==} + + '@vueuse/integrations@11.0.3': + resolution: {integrity: sha512-w6CDisaxs19S5Fd+NPPLFaA3GoX5gxuxrbTTBu0EYap7oH13w75L6C/+7e9mcoF9akhcR6GyYajwVMQEjdapJg==} + 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 + + '@vueuse/metadata@11.0.3': + resolution: {integrity: sha512-+FtbO4SD5WpsOcQTcC0hAhNlOid6QNLzqedtquTtQ+CRNBoAt9GuV07c6KNHK1wCmlq8DFPwgiLF2rXwgSHX5Q==} + + '@vueuse/shared@11.0.3': + resolution: {integrity: sha512-0rY2m6HS5t27n/Vp5cTDsKTlNnimCqsbh/fmT2LgE+aaU42EMfXo8+bNX91W9I7DDmxfuACXMmrd7d79JxkqWA==} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -1890,6 +2088,9 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + algoliasearch@4.24.0: + resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} + ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -1969,6 +2170,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + birpc@0.2.17: + resolution: {integrity: sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==} + blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} @@ -2162,6 +2366,10 @@ packages: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + core-js-compat@3.38.1: resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} @@ -2675,6 +2883,9 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + foreground-child@3.3.0: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} @@ -3140,6 +3351,9 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} @@ -3222,6 +3436,12 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minisearch@7.1.0: + resolution: {integrity: sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mkdist@1.5.4: resolution: {integrity: sha512-GEmKYJG5K1YGFIq3t0K3iihZ8FTgXphLf/4UjbmpXIAtBFn4lEjXk3pXNTSfy7EtcEXhp2Nn1vzw5pIus6RY3g==} hasBin: true @@ -3639,6 +3859,9 @@ packages: resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} engines: {node: ^10 || ^12 || >=14} + preact@10.23.2: + resolution: {integrity: sha512-kKYfePf9rzKnxOAKDpsWhg/ysrHPqT+yQ7UW4JjdnqjFIeNUnNcEJvhuA8fDenxAGWzUqtd51DfVg7xp/8T9NA==} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3749,6 +3972,9 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rollup-plugin-dts@6.1.1: resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} engines: {node: '>=16'} @@ -3806,6 +4032,9 @@ packages: scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + search-insights@2.17.0: + resolution: {integrity: sha512-AskayU3QNsXQzSL6v4LTYST7NNfs2HWyHHB+sdORP9chsytAhro5XRfToAMI/LAVYgNbzowVZTMfBRodgbUHKg==} + secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} @@ -3844,6 +4073,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@1.16.1: + resolution: {integrity: sha512-tCJIMaxDVB1mEIJ5TvfZU7kCPB5eo9fli5+21Olc/bmyv+w8kye3JOp+LZRmGkAyT71hrkefQhTiY+o9mBikRQ==} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -3916,6 +4148,10 @@ packages: spdx-license-ids@3.0.20: resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -3984,6 +4220,10 @@ packages: peerDependencies: postcss: ^8.4.31 + superjson@2.2.1: + resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} + engines: {node: '>=16'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -4016,6 +4256,9 @@ packages: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tailwind-merge@2.5.2: resolution: {integrity: sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==} @@ -4328,6 +4571,18 @@ packages: vite: optional: true + vitepress@1.3.4: + resolution: {integrity: sha512-I1/F6OW1xl3kW4PaIMC6snxjWgf3qfziq2aqsDoFc/Gt41WbcRv++z8zjw8qGRIJ+I4bUW7ZcKFDHHN/jkH9DQ==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + vitest@2.0.5: resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4353,12 +4608,31 @@ packages: jsdom: optional: true + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue-eslint-parser@9.4.3: resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' + vue@3.4.38: + resolution: {integrity: sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -4497,6 +4771,110 @@ packages: snapshots: + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.0)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.0)': + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + search-insights: 2.17.0 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 + + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + dependencies: + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 + + '@algolia/cache-browser-local-storage@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + + '@algolia/cache-common@4.24.0': {} + + '@algolia/cache-in-memory@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + + '@algolia/client-account@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-analytics@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-common@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-personalization@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-search@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/logger-common@4.24.0': {} + + '@algolia/logger-console@4.24.0': + dependencies: + '@algolia/logger-common': 4.24.0 + + '@algolia/recommend@4.24.0': + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/requester-browser-xhr@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + + '@algolia/requester-common@4.24.0': {} + + '@algolia/requester-node-http@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + + '@algolia/transporter@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -4815,6 +5193,30 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 + '@docsearch/css@3.6.1': {} + + '@docsearch/js@3.6.1(@algolia/client-search@4.24.0)(search-insights@2.17.0)': + dependencies: + '@docsearch/react': 3.6.1(@algolia/client-search@4.24.0)(search-insights@2.17.0) + preact: 10.23.2 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + + '@docsearch/react@3.6.1(@algolia/client-search@4.24.0)(search-insights@2.17.0)': + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@docsearch/css': 3.6.1 + algoliasearch: 4.24.0 + optionalDependencies: + search-insights: 2.17.0 + transitivePeerDependencies: + - '@algolia/client-search' + '@es-joy/jsdoccomment@0.43.1': dependencies: '@types/eslint': 8.56.12 @@ -5546,6 +5948,17 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.21.0': optional: true + '@shikijs/core@1.16.1': + dependencies: + '@shikijs/vscode-textmate': 9.2.0 + '@types/hast': 3.0.4 + + '@shikijs/transformers@1.16.1': + dependencies: + shiki: 1.16.1 + + '@shikijs/vscode-textmate@9.2.0': {} + '@solid-primitives/event-listener@2.3.3(solid-js@1.8.22)': dependencies: '@solid-primitives/utils': 6.2.3(solid-js@1.8.22) @@ -5701,6 +6114,10 @@ snapshots: '@types/node': 22.5.1 optional: true + '@types/hast@3.0.4': + dependencies: + '@types/unist': 2.0.11 + '@types/json-schema@7.0.15': {} '@types/jsonfile@6.1.4': @@ -5708,16 +6125,25 @@ snapshots: '@types/node': 22.5.1 optional: true + '@types/linkify-it@5.0.0': {} + '@types/lodash-es@4.17.12': dependencies: '@types/lodash': 4.17.7 '@types/lodash@4.17.7': {} + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + '@types/mdast@3.0.15': dependencies: '@types/unist': 2.0.11 + '@types/mdurl@2.0.0': {} + '@types/mute-stream@0.0.4': dependencies: '@types/node': 22.5.1 @@ -5738,6 +6164,8 @@ snapshots: '@types/unist@2.0.11': {} + '@types/web-bluetooth@0.0.20': {} + '@types/wrap-ansi@3.0.0': {} '@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': @@ -5983,6 +6411,11 @@ snapshots: - rollup - supports-color + '@vitejs/plugin-vue@5.1.3(vite@5.4.2(@types/node@22.5.1)(terser@5.31.6))(vue@3.4.38(typescript@5.5.4))': + dependencies: + vite: 5.4.2(@types/node@22.5.1)(terser@5.31.6) + vue: 3.4.38(typescript@5.5.4) + '@vitest/coverage-v8@2.0.5(vitest@2.0.5(@types/node@22.5.1)(jsdom@25.0.0)(terser@5.31.6))': dependencies: '@ampproject/remapping': 2.3.0 @@ -6072,8 +6505,78 @@ snapshots: '@vue/compiler-dom': 3.4.38 '@vue/shared': 3.4.38 + '@vue/devtools-api@7.3.9': + dependencies: + '@vue/devtools-kit': 7.3.9 + + '@vue/devtools-kit@7.3.9': + dependencies: + '@vue/devtools-shared': 7.3.9 + birpc: 0.2.17 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.1 + + '@vue/devtools-shared@7.3.9': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.4.38': + dependencies: + '@vue/shared': 3.4.38 + + '@vue/runtime-core@3.4.38': + dependencies: + '@vue/reactivity': 3.4.38 + '@vue/shared': 3.4.38 + + '@vue/runtime-dom@3.4.38': + dependencies: + '@vue/reactivity': 3.4.38 + '@vue/runtime-core': 3.4.38 + '@vue/shared': 3.4.38 + csstype: 3.1.3 + + '@vue/server-renderer@3.4.38(vue@3.4.38(typescript@5.5.4))': + dependencies: + '@vue/compiler-ssr': 3.4.38 + '@vue/shared': 3.4.38 + vue: 3.4.38(typescript@5.5.4) + '@vue/shared@3.4.38': {} + '@vueuse/core@11.0.3(vue@3.4.38(typescript@5.5.4))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 11.0.3 + '@vueuse/shared': 11.0.3(vue@3.4.38(typescript@5.5.4)) + vue-demi: 0.14.10(vue@3.4.38(typescript@5.5.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/integrations@11.0.3(focus-trap@7.5.4)(vue@3.4.38(typescript@5.5.4))': + dependencies: + '@vueuse/core': 11.0.3(vue@3.4.38(typescript@5.5.4)) + '@vueuse/shared': 11.0.3(vue@3.4.38(typescript@5.5.4)) + vue-demi: 0.14.10(vue@3.4.38(typescript@5.5.4)) + optionalDependencies: + focus-trap: 7.5.4 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@11.0.3': {} + + '@vueuse/shared@11.0.3(vue@3.4.38(typescript@5.5.4))': + dependencies: + vue-demi: 0.14.10(vue@3.4.38(typescript@5.5.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -6112,6 +6615,24 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + algoliasearch@4.24.0: + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-account': 4.24.0 + '@algolia/client-analytics': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-personalization': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/recommend': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -6184,6 +6705,8 @@ snapshots: binary-extensions@2.3.0: {} + birpc@0.2.17: {} + blake3-wasm@2.1.5: {} boolbase@1.0.0: {} @@ -6377,6 +6900,10 @@ snapshots: cookie@0.5.0: {} + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + core-js-compat@3.38.1: dependencies: browserslist: 4.23.3 @@ -7054,6 +7581,10 @@ snapshots: flatted@3.3.1: {} + focus-trap@7.5.4: + dependencies: + tabbable: 6.2.0 + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 @@ -7513,6 +8044,8 @@ snapshots: dependencies: semver: 7.6.3 + mark.js@8.11.1: {} + mdast-util-from-markdown@0.8.5: dependencies: '@types/mdast': 3.0.15 @@ -7602,6 +8135,10 @@ snapshots: minipass@7.1.2: {} + minisearch@7.1.0: {} + + mitt@3.0.1: {} + mkdist@1.5.4(typescript@5.5.4): dependencies: autoprefixer: 10.4.20(postcss@8.4.41) @@ -8018,6 +8555,8 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 + preact@10.23.2: {} + prelude-ls@1.2.1: {} pretty-bytes@6.1.1: {} @@ -8112,6 +8651,8 @@ snapshots: reusify@1.0.4: {} + rfdc@1.4.1: {} + rollup-plugin-dts@6.1.1(rollup@3.29.4)(typescript@5.5.4): dependencies: magic-string: 0.30.11 @@ -8186,6 +8727,8 @@ snapshots: scule@1.3.0: {} + search-insights@2.17.0: {} + secure-json-parse@2.7.0: {} selfsigned@2.4.1: @@ -8211,6 +8754,12 @@ snapshots: shebang-regex@3.0.0: {} + shiki@1.16.1: + dependencies: + '@shikijs/core': 1.16.1 + '@shikijs/vscode-textmate': 9.2.0 + '@types/hast': 3.0.4 + siginfo@2.0.0: {} signal-exit@4.1.0: {} @@ -8287,6 +8836,8 @@ snapshots: spdx-license-ids@3.0.20: {} + speakingurl@14.0.1: {} + split2@4.2.0: {} stable-hash@0.0.4: {} @@ -8350,6 +8901,10 @@ snapshots: postcss: 8.4.41 postcss-selector-parser: 6.1.2 + superjson@2.2.1: + dependencies: + copy-anything: 3.0.5 + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -8383,6 +8938,8 @@ snapshots: system-architecture@0.1.0: {} + tabbable@6.2.0: {} + tailwind-merge@2.5.2: {} tapable@2.2.1: {} @@ -8694,6 +9251,54 @@ snapshots: optionalDependencies: vite: 5.4.2(@types/node@22.5.1)(terser@5.31.6) + vitepress@1.3.4(@algolia/client-search@4.24.0)(@types/node@22.5.1)(postcss@8.4.41)(search-insights@2.17.0)(terser@5.31.6)(typescript@5.5.4): + dependencies: + '@docsearch/css': 3.6.1 + '@docsearch/js': 3.6.1(@algolia/client-search@4.24.0)(search-insights@2.17.0) + '@shikijs/core': 1.16.1 + '@shikijs/transformers': 1.16.1 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.1.3(vite@5.4.2(@types/node@22.5.1)(terser@5.31.6))(vue@3.4.38(typescript@5.5.4)) + '@vue/devtools-api': 7.3.9 + '@vue/shared': 3.4.38 + '@vueuse/core': 11.0.3(vue@3.4.38(typescript@5.5.4)) + '@vueuse/integrations': 11.0.3(focus-trap@7.5.4)(vue@3.4.38(typescript@5.5.4)) + focus-trap: 7.5.4 + mark.js: 8.11.1 + minisearch: 7.1.0 + shiki: 1.16.1 + vite: 5.4.2(@types/node@22.5.1)(terser@5.31.6) + vue: 3.4.38(typescript@5.5.4) + optionalDependencies: + postcss: 8.4.41 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + vitest@2.0.5(@types/node@22.5.1)(jsdom@25.0.0)(terser@5.31.6): dependencies: '@ampproject/remapping': 2.3.0 @@ -8728,6 +9333,10 @@ snapshots: - supports-color - terser + vue-demi@0.14.10(vue@3.4.38(typescript@5.5.4)): + dependencies: + vue: 3.4.38(typescript@5.5.4) + vue-eslint-parser@9.4.3(eslint@9.9.1(jiti@1.21.6)): dependencies: debug: 4.3.6 @@ -8741,6 +9350,16 @@ snapshots: transitivePeerDependencies: - supports-color + vue@3.4.38(typescript@5.5.4): + dependencies: + '@vue/compiler-dom': 3.4.38 + '@vue/compiler-sfc': 3.4.38 + '@vue/runtime-dom': 3.4.38 + '@vue/server-renderer': 3.4.38(vue@3.4.38(typescript@5.5.4)) + '@vue/shared': 3.4.38 + optionalDependencies: + typescript: 5.5.4 + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0