From 3cedcc239c6e61f15abbd0724c009abfe52aa41e Mon Sep 17 00:00:00 2001 From: WRXinYue <3322543587@qq.com> Date: Thu, 1 Aug 2024 10:41:43 +0800 Subject: [PATCH] Initial commit --- .github/workflows/ci.yml | 75 + .github/workflows/gh-pages.yml | 37 + .github/workflows/release.yml | 37 + .gitignore | 62 + .markdownlint.json | 7 + .npmrc | 3 + .vscode/extensions.json | 13 + .vscode/settings.json | 57 + LICENSE | 21 + README.md | 13 + demo/.gitignore | 27 + demo/.valaxy/typed-router.d.ts | 45 + demo/components/LogoStroke.vue | 62 + demo/locales/en.yml | 2 + demo/locales/zh-CN.yml | 2 + demo/netlify.toml | 17 + demo/package.json | 20 + demo/pages/archives/index.md | 6 + demo/pages/categories/index.md | 9 + demo/pages/collective-sponsor-onetime.md | 61 + demo/pages/demos.md | 11 + demo/pages/demos/2024-02-02.md | 8 + demo/pages/demos/2024-02-02.mp4 | Bin 0 -> 2129958 bytes demo/pages/demos/index.md | 10 + demo/pages/docs.md | 9 + demo/pages/giving-talks.md | 48 + demo/pages/notes.md | 9 + demo/pages/notes/index.md | 5 + demo/pages/podcasts.md | 110 + demo/pages/posts/draft.md | 25 + demo/pages/posts/hello-valaxy.md | 35 + demo/pages/posts/install.md | 15 + demo/pages/projects.md | 495 + demo/pages/sponsors-list.md | 12 + demo/pages/streams.md | 129 + demo/pages/tags/index.md | 7 + demo/pages/talks.md | 37 + demo/public/_headers | 3 + demo/public/admin/config.yml | 18 + demo/public/admin/index.html | 12 + demo/public/avatar.png | Bin 0 -> 901548 bytes demo/public/badge-code-style.svg | 1 + demo/public/banner.svg | 1 + demo/public/favicon-animated-stroke.svg | 1 + demo/public/favicon-animated.svg | 1 + demo/public/favicon.png | Bin 0 -> 5579 bytes demo/public/favicon.svg | 1 + demo/public/logo-dark.svg | 1 + demo/public/logo.png | Bin 0 -> 10623 bytes demo/public/logo.svg | 1 + demo/public/og-chat.png | Bin 0 -> 480915 bytes demo/public/og-icon.png | Bin 0 -> 3401 bytes demo/public/og.png | Bin 0 -> 484437 bytes demo/public/robots.txt | 2 + demo/site.config.ts | 96 + demo/styles/README.md | 3 + demo/styles/docs.scss | 32 + demo/styles/index.scss | 2 + demo/styles/vars.scss | 2 + demo/tsconfig.json | 18 + demo/valaxy.config.ts | 134 + demo/vite.config.ts | 4 + eslint.config.js | 9 + package.json | 27 + pnpm-lock.yaml | 9513 +++++++++++++++++ pnpm-workspace.yaml | 3 + theme/client/index.ts | 1 + theme/components/AppLink.vue | 20 + theme/components/BaseMeterGroup.vue | 41 + theme/components/BaseSidebar.vue | 57 + theme/components/CalCom.vue | 56 + theme/components/DevTools.vue | 5 + theme/components/Footer.vue | 14 + theme/components/GitHubLink.vue | 17 + theme/components/ListDemos.vue | 34 + theme/components/ListPosts.vue | 131 + theme/components/ListProjects.vue | 95 + theme/components/ListTalks.vue | 89 + theme/components/MeterGroup.vue | 81 + theme/components/MeterGroupLabel.vue | 36 + theme/components/MyFooter.vue | 34 + theme/components/NavBar.vue | 99 + theme/components/PersonalIntroduction.vue | 41 + theme/components/PlayButton.vue | 222 + theme/components/Plum.vue | 150 + theme/components/Portal.vue | 36 + theme/components/ServicesOverview.vue | 20 + theme/components/SideBar.vue | 220 + theme/components/SkillsList.vue | 36 + theme/components/SponsorButtonCollective.vue | 14 + theme/components/SponsorButtons.vue | 39 + theme/components/StarterArticle.vue | 71 + theme/components/StarterArticleCard.vue | 32 + theme/components/StarterAuthor.vue | 48 + theme/components/StarterDate.vue | 21 + theme/components/StarterFooter.vue | 55 + theme/components/StarterHeader.vue | 18 + theme/components/StarterHelper.vue | 26 + theme/components/StarterNav.vue | 45 + theme/components/StarterPostList.vue | 28 + theme/components/StarterToggleLocale.vue | 13 + theme/components/SubNav.vue | 33 + theme/components/TalkDate.vue | 19 + theme/components/TextCopy.vue | 21 + theme/components/ThemeSectionTitle.vue | 14 + theme/components/ToggleLocale.vue | 13 + theme/components/ToggleTheme.vue | 11 + theme/components/Tweet.vue | 24 + theme/components/WebVitals.vue | 87 + theme/components/WorkGallery.vue | 40 + theme/components/WrapperDemo.vue | 37 + theme/components/WrapperPost.vue | 126 + theme/components/YouTubeEmbed.vue | 20 + theme/components/core/ValaxyApp.vue | 10 + theme/components/core/ValaxyMain.vue | 36 + theme/components/core/ValaxyThemeApp.vue | 54 + theme/components/core/layout.vue | 50 + theme/components/demos.vue | 33 + theme/components/icons/AnthonyFu.vue | 10 + theme/components/icons/Elk.vue | 21 + theme/components/icons/Slidev.vue | 7 + theme/components/icons/SolidLogo.vue | 48 + theme/components/icons/Unocss.vue | 18 + theme/components/icons/ViteLogo.vue | 31 + theme/components/icons/Vitest.vue | 23 + theme/components/icons/VueDemi.vue | 18 + theme/components/icons/VueReactivity.vue | 13 + theme/components/icons/VueUse.vue | 13 + theme/components/qrcode/ImageMatrix.vue | 58 + theme/components/qrcode/QRCodeCompare.vue | 50 + .../qrcode/QRCodeControlNetScale.vue | 20 + theme/components/qrcode/QRCodeMatrix.vue | 148 + .../qrcode/QRCodeMatrixModelPrompts.vue | 82 + .../qrcode/QRCodeMatrixModelSamplers.vue | 77 + .../components/qrcode/QRCodeOptionsSelect.vue | 38 + .../qrcode/QRCodeSelectiveLayers.vue | 28 + theme/components/qrcode/QRNotScannable.vue | 26 + theme/components/slides/DarkToggleButton.vue | 14 + theme/components/slides/Marker.vue | 3 + theme/components/slides/MarkerCore.vue | 5 + theme/components/slides/MarkerPattern.vue | 5 + theme/components/slides/MarkerTips.vue | 5 + theme/components/slides/VueUseFn.vue | 12 + theme/composables/config.ts | 11 + theme/composables/index.ts | 1 + theme/data/talks.ts | 319 + theme/global.d.ts | 1 + theme/layouts/default.vue | 3 + theme/layouts/home.vue | 3 + theme/layouts/post.vue | 3 + theme/locales/en.yml | 1 + theme/locales/zh-CN.yml | 1 + theme/logics/index.ts | 62 + theme/node/index.ts | 79 + theme/package.json | 43 + theme/pages/[...404].md | 3 + theme/pages/data.ts | 27 + theme/pages/index.md | 43 + theme/pages/posts/index.md | 11 + theme/scripts/slugify.ts | 25 + theme/styles/css-vars.scss | 27 + theme/styles/index.scss | 306 + theme/styles/layout.scss | 15 + theme/styles/markdown.css | 253 + theme/styles/prose.css | 496 + theme/styles/vars.scss | 23 + theme/tsconfig.json | 25 + theme/types/index.d.ts | 119 + theme/uno.config.ts | 48 + theme/valaxy.config.ts | 142 + tsconfig.json | 24 + 171 files changed, 16886 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/gh-pages.yml create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 .markdownlint.json create mode 100644 .npmrc create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 demo/.gitignore create mode 100644 demo/.valaxy/typed-router.d.ts create mode 100644 demo/components/LogoStroke.vue create mode 100644 demo/locales/en.yml create mode 100644 demo/locales/zh-CN.yml create mode 100644 demo/netlify.toml create mode 100644 demo/package.json create mode 100644 demo/pages/archives/index.md create mode 100644 demo/pages/categories/index.md create mode 100644 demo/pages/collective-sponsor-onetime.md create mode 100644 demo/pages/demos.md create mode 100644 demo/pages/demos/2024-02-02.md create mode 100644 demo/pages/demos/2024-02-02.mp4 create mode 100644 demo/pages/demos/index.md create mode 100644 demo/pages/docs.md create mode 100644 demo/pages/giving-talks.md create mode 100644 demo/pages/notes.md create mode 100644 demo/pages/notes/index.md create mode 100644 demo/pages/podcasts.md create mode 100644 demo/pages/posts/draft.md create mode 100644 demo/pages/posts/hello-valaxy.md create mode 100644 demo/pages/posts/install.md create mode 100644 demo/pages/projects.md create mode 100644 demo/pages/sponsors-list.md create mode 100644 demo/pages/streams.md create mode 100644 demo/pages/tags/index.md create mode 100644 demo/pages/talks.md create mode 100644 demo/public/_headers create mode 100644 demo/public/admin/config.yml create mode 100644 demo/public/admin/index.html create mode 100644 demo/public/avatar.png create mode 100644 demo/public/badge-code-style.svg create mode 100644 demo/public/banner.svg create mode 100644 demo/public/favicon-animated-stroke.svg create mode 100644 demo/public/favicon-animated.svg create mode 100644 demo/public/favicon.png create mode 100644 demo/public/favicon.svg create mode 100644 demo/public/logo-dark.svg create mode 100644 demo/public/logo.png create mode 100644 demo/public/logo.svg create mode 100644 demo/public/og-chat.png create mode 100644 demo/public/og-icon.png create mode 100644 demo/public/og.png create mode 100644 demo/public/robots.txt create mode 100644 demo/site.config.ts create mode 100644 demo/styles/README.md create mode 100644 demo/styles/docs.scss create mode 100644 demo/styles/index.scss create mode 100644 demo/styles/vars.scss create mode 100644 demo/tsconfig.json create mode 100644 demo/valaxy.config.ts create mode 100644 demo/vite.config.ts create mode 100644 eslint.config.js create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 theme/client/index.ts create mode 100644 theme/components/AppLink.vue create mode 100644 theme/components/BaseMeterGroup.vue create mode 100644 theme/components/BaseSidebar.vue create mode 100644 theme/components/CalCom.vue create mode 100644 theme/components/DevTools.vue create mode 100644 theme/components/Footer.vue create mode 100644 theme/components/GitHubLink.vue create mode 100644 theme/components/ListDemos.vue create mode 100644 theme/components/ListPosts.vue create mode 100644 theme/components/ListProjects.vue create mode 100644 theme/components/ListTalks.vue create mode 100644 theme/components/MeterGroup.vue create mode 100644 theme/components/MeterGroupLabel.vue create mode 100644 theme/components/MyFooter.vue create mode 100644 theme/components/NavBar.vue create mode 100644 theme/components/PersonalIntroduction.vue create mode 100644 theme/components/PlayButton.vue create mode 100644 theme/components/Plum.vue create mode 100644 theme/components/Portal.vue create mode 100644 theme/components/ServicesOverview.vue create mode 100644 theme/components/SideBar.vue create mode 100644 theme/components/SkillsList.vue create mode 100644 theme/components/SponsorButtonCollective.vue create mode 100644 theme/components/SponsorButtons.vue create mode 100644 theme/components/StarterArticle.vue create mode 100644 theme/components/StarterArticleCard.vue create mode 100644 theme/components/StarterAuthor.vue create mode 100644 theme/components/StarterDate.vue create mode 100644 theme/components/StarterFooter.vue create mode 100644 theme/components/StarterHeader.vue create mode 100644 theme/components/StarterHelper.vue create mode 100644 theme/components/StarterNav.vue create mode 100644 theme/components/StarterPostList.vue create mode 100644 theme/components/StarterToggleLocale.vue create mode 100644 theme/components/SubNav.vue create mode 100644 theme/components/TalkDate.vue create mode 100644 theme/components/TextCopy.vue create mode 100644 theme/components/ThemeSectionTitle.vue create mode 100644 theme/components/ToggleLocale.vue create mode 100644 theme/components/ToggleTheme.vue create mode 100644 theme/components/Tweet.vue create mode 100644 theme/components/WebVitals.vue create mode 100644 theme/components/WorkGallery.vue create mode 100644 theme/components/WrapperDemo.vue create mode 100644 theme/components/WrapperPost.vue create mode 100644 theme/components/YouTubeEmbed.vue create mode 100644 theme/components/core/ValaxyApp.vue create mode 100644 theme/components/core/ValaxyMain.vue create mode 100644 theme/components/core/ValaxyThemeApp.vue create mode 100644 theme/components/core/layout.vue create mode 100644 theme/components/demos.vue create mode 100644 theme/components/icons/AnthonyFu.vue create mode 100644 theme/components/icons/Elk.vue create mode 100644 theme/components/icons/Slidev.vue create mode 100644 theme/components/icons/SolidLogo.vue create mode 100644 theme/components/icons/Unocss.vue create mode 100644 theme/components/icons/ViteLogo.vue create mode 100644 theme/components/icons/Vitest.vue create mode 100644 theme/components/icons/VueDemi.vue create mode 100644 theme/components/icons/VueReactivity.vue create mode 100644 theme/components/icons/VueUse.vue create mode 100644 theme/components/qrcode/ImageMatrix.vue create mode 100644 theme/components/qrcode/QRCodeCompare.vue create mode 100644 theme/components/qrcode/QRCodeControlNetScale.vue create mode 100644 theme/components/qrcode/QRCodeMatrix.vue create mode 100644 theme/components/qrcode/QRCodeMatrixModelPrompts.vue create mode 100644 theme/components/qrcode/QRCodeMatrixModelSamplers.vue create mode 100644 theme/components/qrcode/QRCodeOptionsSelect.vue create mode 100644 theme/components/qrcode/QRCodeSelectiveLayers.vue create mode 100644 theme/components/qrcode/QRNotScannable.vue create mode 100644 theme/components/slides/DarkToggleButton.vue create mode 100644 theme/components/slides/Marker.vue create mode 100644 theme/components/slides/MarkerCore.vue create mode 100644 theme/components/slides/MarkerPattern.vue create mode 100644 theme/components/slides/MarkerTips.vue create mode 100644 theme/components/slides/VueUseFn.vue create mode 100644 theme/composables/config.ts create mode 100644 theme/composables/index.ts create mode 100644 theme/data/talks.ts create mode 100644 theme/global.d.ts create mode 100644 theme/layouts/default.vue create mode 100644 theme/layouts/home.vue create mode 100644 theme/layouts/post.vue create mode 100644 theme/locales/en.yml create mode 100644 theme/locales/zh-CN.yml create mode 100644 theme/logics/index.ts create mode 100644 theme/node/index.ts create mode 100644 theme/package.json create mode 100644 theme/pages/[...404].md create mode 100644 theme/pages/data.ts create mode 100644 theme/pages/index.md create mode 100644 theme/pages/posts/index.md create mode 100644 theme/scripts/slugify.ts create mode 100644 theme/styles/css-vars.scss create mode 100644 theme/styles/index.scss create mode 100644 theme/styles/layout.scss create mode 100644 theme/styles/markdown.css create mode 100644 theme/styles/prose.css create mode 100644 theme/styles/vars.scss create mode 100644 theme/tsconfig.json create mode 100644 theme/types/index.d.ts create mode 100644 theme/uno.config.ts create mode 100644 theme/valaxy.config.ts create mode 100644 tsconfig.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..4f7476a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,75 @@ +name: CI + +on: + push: + branches: + - main + + pull_request: + branches: + - main + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2 + - uses: actions/setup-node@v3 + with: + node-version: lts/* + cache: pnpm + + - name: Install + run: pnpm install + + - name: Lint + run: pnpm run lint + + typecheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2 + - uses: actions/setup-node@v3 + with: + node-version: lts/* + cache: pnpm + + - name: Install + run: pnpm install + + - name: Typecheck + run: pnpm run typecheck + + # check windows build + build: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + node-version: [lts/*] + os: [ubuntu-latest, windows-latest] + fail-fast: false + + steps: + - uses: actions/checkout@v3 + + - name: Install pnpm + uses: pnpm/action-setup@v2 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + registry-url: https://registry.npmjs.org/ + cache: pnpm + + - name: Install + run: pnpm install + + - name: Build + run: pnpm run build + + - name: Build:demo + run: pnpm run build:demo diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..0c7773c --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,37 @@ +name: GitHub Pages + +on: + push: + branches: + - main + + pull_request: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2 + - uses: actions/setup-node@v3 + with: + node-version: lts/* + cache: pnpm + + - name: Install + run: pnpm install + + - name: Build Theme + run: pnpm run build + + - name: Build Demo + run: pnpm run build:demo + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./demo/dist + force_orphan: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d17483c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,37 @@ +name: Release + +on: + push: + tags: + - 'v*' + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + run_install: true + + # after pnpm + - name: Use Node.js LTS + uses: actions/setup-node@v3 + with: + node-version: 'lts/*' + registry-url: https://registry.npmjs.org/ + cache: pnpm + + - run: pnpm run build + # https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages + - run: pnpm ci:publish + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + + - run: npx changelogithub + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a41a398 --- /dev/null +++ b/.gitignore @@ -0,0 +1,62 @@ +# custom +package-lock.json +yarn.lock + +pnpm-global + +# vite plugin +components.d.ts +auto-imports.d.ts + +.vite-ssg-dist +.vite-ssg-temp + +dist/ +dist-ssr +*.local + +temp/ + +# local env files +.env.local +.env.*.local + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Dependencies +node_modules/ + +# Coverage +coverage + +# Transpiled files +build/ + +# JetBrains IDEs +.idea/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Misc +.DS_Store + +# plugins +.VSCodeCounter diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..9644e48 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,7 @@ +{ + "MD013": false, + "MD022": false, + "MD024": false, + "MD033": false, + "MD048": false +} diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..84342cc --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +shamefully-hoist=true +ignore-workspace-root-check=true +strict-peer-dependencies=false diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..d066795 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,13 @@ +{ + "recommendations": [ + "antfu.iconify", + "antfu.unocss", + "antfu.vite", + "antfu.goto-alias", + "csstools.postcss", + "dbaeumer.vscode-eslint", + "vue.volar", + "lokalise.i18n-ally", + "streetsidesoftware.code-spell-checker" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..50c9609 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,57 @@ +{ + "cSpell.words": [ + "algoliasearch", + "antfu", + "beian", + "bumpp", + "composables", + "instantsearch", + "typecheck", + "valaxy", + "valaxyjs" + ], + "i18n-ally.sourceLanguage": "en", + "i18n-ally.keystyle": "nested", + "i18n-ally.localesPaths": ["./locales"], + "i18n-ally.sortKeys": true, + "files.associations": { + "*.css": "postcss" + }, + "svg.preview.background": "editor", + + "stylelint.validate": ["css", "scss", "vue"], + + // Disable the default formatter, use eslint instead + "prettier.enable": false, + "editor.formatOnSave": false, + + // Auto fix + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "source.organizeImports": "never" + }, + + // Enable eslint for all supported languages + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue", + "html", + "markdown", + "json", + "jsonc", + "yaml", + "toml", + "xml", + "gql", + "graphql", + "astro", + "css", + "less", + "scss", + "pcss", + "postcss" + ] +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..942d887 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 WRXinYue + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..cabe2a0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +
+valaxy-theme-antfu(vue) +
+ +This project is a port of [antfu.me](https://github.com/antfu/antfu.me). I am very fond of Anthony Fu's style and a huge fan of antfu himself. Many thanks to antfu for open-sourcing his blog and providing such a beautiful one 💖 + +You can find the theme documentation here: + +`r*)8VTEXcWUKHj^UH6f0S{9Sh`cBc&HwE*xG`)}QJ)&X+36)DA zaPC!d3%ii=MMyH1bjpRM+fG$ig5&Qa!R@fH5uLl=ibcT+kq}&rdn}Ru&GLlgmeq$52rwO3*KmKb zQ+Y|YfZ2*O>S@-hZrvLcAbdB_SD2u&F@~kiQ)1|!j{ieBPKO;^ve)R*Aq&8%l`M+6 z0|bFHNSsr E8fo zOtgDzl4$=}FC*eezs{}VOF@RtO;gI73QF?`=T;<`h*P0c=@#sR^K$K* RA{U=rxZj_=F{f6-n$`?Bt2}sqgK2hepb|A#;Bv M_d0;D-fr2ODiN-O@#2^k%xUh6iV!oOd*a%92Nuv{_M z^xe>;wkyjR&K;FtvqWQgsf=g+xxWuw(W2m-T>xu3$l>PX>WYnqa_bbKlcdFq;0Ynu z5oTdsHR8LG;#y&E-mMjQN#bsD&o;9=K 8U>#wBASYQ%6; zMJ{~PSQ|$O$n{Kf0}N-3s8&4e;X$$3f|2d)Tvu~ngj?gF&yINt0me9Kj8LuZEB1M1 zcxgny`>zR_s#Z@dQ**`J10{b|t>e1>_3*px;a-~RFs^WzX`WLx@2Z?g3(KDg`5DPy z?Ku0(xyAnRA|zx;==pnEmuzU3Ja-{|yw*RQ)VH%?hgY)OD4B^Tl?LZR+dMJtL*k8S zQrvR9%|{3A`WwuD6ge(EMs(4ijSYN^&cu<19XZgy{6M)7F?ik+t=qq~qD4z=6-( mWX*YcL=P< za)yVCt;Pkzvp02LrmV5U$dJJU(IbB1*I)gk@mUr96MdCFs!UBe5iNfYl*t(W=0l+3 zl?Zlm0Xfobr~8 <@K895;En=~D}d;1N4)XLDGwK4Z$*g w(>N#30u|(Fdr`u--{ 1YO& z1{TWE>e%|{&in~+H{0K6lev(NT=cs;@mDef>aRPA0ep0~pAv#p@wIjIvKZ{=M-TS% zD!WF?$^!X{=^a<{l$}wJ6}w~VWuUNuuhX&3M{Va9ScIZ7aASEYo-)&B8IAt);uxT6 zsANmr(FpE4gIByT;8k5Y_~qDCA47j!MOC7-O^$^{OHplyZ+m`=CQSLa% 9J;K>* z3gwFm79y z4&?x(@rA{lZl?oBHUVjcP^o5CC{A_}gi`(*W2skQ%-egto$s!k0rpIuzE#fP?W-Ss zk9}J}eZbc9^dJ-f4Ss?r N)O6mKU~LH)%%IFpG&GJ@27^dTDTxl5>DrFum}~i zRH!nsU2$Q--fLDOIDg-MI8Xfb8_(c*Hjnz-7-uG{5C%^qyF-R&S2C>?rZbf{gX_RT z=93RB4nau CJ25iFDo3H{Z1`HVwIE)r6W`JV0PGDUkBJH-KP0lgv`rd`r%Wy zH>3X3%KI(VmqTf1q@?EKfJ9kP?W_1q%>3855StOgl7Wm-_<3vHZWafYZuvfwTA6!> zb_1McH%eaI+-crbH@37CW`bAb2Kj;4>@~76^Is%V5&i^1e|k9rY4;P*lk^zW9EeJV zE&m%^EDBd9>vgsr{?-GGO^7Y=czaTC3Xc_#k-t%>M@C3Q=M5K|B)^FyM^n0w>We3& zkim|E xFKElm+ZX4XG8IOtq+iK6E%je~-1>LU4 D_#Vy~W=iB_~X_%C-QjlD7+X8dLGBLgEK9=-Qwz*Ag2qI$+E4eNt9bdR=N2qPt&2 zX*=#ZHk!&>*1vP$Bb`Awja2qh^ohr!rMpU9u6-JD_TJ10i^yg#D`Hv@{!piuo%X5d zf>nN|)huP) cLPe4R3|`xBf4XwlVEfj{yy6~99FcyQ)0Cg&p#sKlQr z5gK?9pp&C6sS5KAl3?k{lh!?G|Ls+Fc>UEOB$Q=d7w)VJ*L`*XB|XNTk%^>hKsszY zj=6S>wp~A*VW;98nGlOquy7LNbqkKTh(*35W8lv59H1C4^Nzc!jh)Rt3X7`481i@i zG#*=g_k-}CImA7zbRBzMgz1uynrd9o(U|B-QjA%@1!KRzF_hIy7r&ta%Zw&A2cgU` z2Kcs5)@V&t9VCy7DoEC4yw6C bik#sCy+$tl1rhy)SZ}T?1nMRiFZY%`5K!&lGQ7vU5*H0 z7OXv<^LQ(R6w}3)k#BVtX&K-w5%SbH)hUx(0ZxpkL;dU;b8gV)p7+|aO5ecpQgR6V z7rgFJB{AXebx;v*m^OIXOXb;3_VSdAN+H&4_V>vj&>PraRY#_+;K`~tVyF3R_7HLw zl;%QM+nkcqd9@=zO3o@R+`tYqem6uJ7L&cZ10hw35<=xXy~r&H z{iexYbzFW$0943zw* JFR$1T!m=9=FHjb@0M{> z&=9AfFhB22bo|isXN_y9Ze2Dn<<>sju5X#l7Wi |x$96T?$=kn5#?6>gfCo# z_Wjq^`#6kBE5U9^UZY}37If{%sXI~1qjFR+d2RE0JVn9#iR0KWxUI(|w2vwh}vEyS?M$+33fR@z;MH;nHMZQGw=OsBY}T5`5eRfw)qluuM$=0%(^ z*Z_8*)|92vmW=Pz7>h)XmC+=Sm43_N ;~T;R#j;!P|xstav4`0mK(kvybbhwarv WFnP9)ap uyu+Fe^ YZkP(f&2pG_!Ib zz~e$5($--h?4z?+`Pmubb3Y Rn;rb9s#eZ(!172DtDC?q?X7ZJ^i@mtPLG_IG|JiJ-La)J$Ip zkkf2=S`M7=B~#w|nlXBN>m|q-FRu$us3ata&f@tCE0bp&$?n5%oPSvB6s?Jx7ZitX z4QHE3w1M;mCd80ExOFQ5IhS2tRWwZQ*L%!fqJjP@o=Dl}dqzYjNNx1*md=fH-ImPF zZD}94wYu$%YFjP!0lh&Z_gg6*(u+KY_(MSRCo2IfRO!B3VE1VGD}CFnsNWp 9ZWYP2JimiBO8O*xag6B;5u%Fzh~VHz!CMev6b%Vy z)<1fMDv)!&UU+L`E|6(YKI}tZDBAMr`DEk-kHb)9TecO1YQHtwQI*!|qMqD8M)jFs zA+NHZVLWRnFZX{AlCOV3kC$x&aCCov{Syl{d3>~IY@rI^bRnO%EF!T?ejIb6pu1oA z^k=jL>!#p*=Anq{e$&$58*w;uNsi?o_xdf`!~jivV2{z9GRQl0&K{*iJbS3NlVP2* z7*RpG2DbdP^M?7?O24MJL>MJf>dH$o6ulCed59G`Rg4->@!0OHHR&b6_(s(l$c=hr zCmhN4b*{}s&5-zkD3!=Ev6J 7c{7r%q^LCeB|7g0RHP zB;;j1+#zwx=b29-*VNEuav%Np+9NBfL^6!F`+ ZtSM@ vG zim{TM`Ep#6G)vVAe8=wumvY4F$}jV#a@3v%JTaXOn)kd{hpP4RK|8W>Z+2moWHbE> zlW1FC7zlcVwC~eG@3< aW)K#XxEW4 zW0oi6jlf-W2p-?eQpjo)grykpl0!C!)k)d;@zSs^yvb(rUvcuVhi+d`XD+mkm*k|3 z+B62((-uixZhpSjZSun&CnTB^yceqOf*tATW6rYo&+_Ri +1}KO?~7v?X $%gT*A(YhRSqB^B)*1Y&QC0{(K710RbH}6TvAi>>{H^A;uE6MMe&mBQ;H~ zATuV4&jlRUgZ9b=DhnG(JW>6&Suun548FbF9mmvHIW{%Me21hcLoAf^4{EH*EyL9g z3nd Y(#E6Yw_v{!2rWSR=P~JQ2Dwf4o|A)pk|^>1UgYN+ zsTNj6F Y!p z841S5Su6u(`d{yB4w6tfjNM7k@*&e76Bb$cb zHRjwvrQFmHFIS*}H@o*0L{YKxWXK7bLu0KH5+p`&wtA!Y>%eoN%`a5zi{$qL>e!Q} zZ!(swj`~gB;Ys(FIhoR2_<$Y}n(u@q;B4~nYb106nMRiU(TDHGE!-co6FBuQv;U4j zey~QxSY%se;KhuAEr0C#jSj2GfwgY;s|z>3*}TkD8X;HhcT`r%8j2cD1`wJJe#A$+ z9PR9 <1%0dPYp*QoDYXPuUkZ;x$%)SqVU$!Qq|w%k;iHZsAC`XZN_pffPuRY) l%Z&jZ;xLR@5hZtcK81jUL%N&`7gytlcj(yauMui(i=#xO**(R`|;OUa8 C4hV_<&rx17vC7Xk-w*2!3WFblWUNL6r$ zr(T^zC*tU&&+NcCF-XMB6ER!Z+Z7 MzyI;@_&5%>h8_cdfl-)w zv2;DMqWN>)lgh{+c*MLN=`FtDC%jr!Lf7IvtFY#Aw+ SMhJX}Dq;b;631Rh{q7SXUq-yw) ^nRoik7`4W2^2!VF(bYwQo{ibL0rqItjZGLzTtV5yvG)%V_ud zKard&5ii3w3X&Nc#31_*uNQ)_sAIs3`~viRydmkw{%RzbZKZ(+`R!L|HNYg=I{ z^0Bt+K}xH_?Tx!?+IFQ+4_C`@RGLcaD8BW&GlpFD79P5WL=*|5AVBGLg~)s`c3sWg zj|t<7A~De^x7@$nVEOU;l`3sgDnCqRmnjn5T04#qs{%+Zkt{$iB9s3_cm@L}Ankb; z%A5`hAAL@{Oh~W}=BbmAL$` KFT!yEG^M872%X7HdB^jL1sh5_g&S3?XYGc z2J|$1Erb!eB$2kgvmzwtL1$Ge;&_ED*^FXd+;(7!KW^>sjChNgu$M)NQ>L#uTou)z zw=$j9{Aug%TSHx}oP5gB!6O@)E~M-?SC3iU<6Wk`Hd+z!&NmU^Yb3mZTBY9|6uv1s zvMq+%TXj$A?953#26dhZg?=Zh@Pr{0@gBL^4UBr_Uzc~ekHTw1%czj`UQKXM-cd(# zcE&PqX~MUA-9&Q={0bv!0cM{4Pn;u2U{@0Eyu7*#KT(I|@QNi7nS%?DpfL@i2)#tH zRF92s*>-h4YI(zV0sUAP%wDhJXSQ>wl=(W~F_-*1GGTF%V7j7EhAjQp#6CL~N$|fh zg>gWb$G1p&Ox0lQd^edNi)J^w`*RX@jWp$^ICR712^NL2c|u600fgu&IHUVG&?iIi zvb|1-U5d-iPy|hHK%Yhog$unC>kDx=5HXl0D4I3|3lnpw8cj{4z{1{?hox^FmC_ zIy2WVvn#rQK1LWIE${s$HfGAHMlx9pG+Vq}meOgQpuD ziMo2 %o|QUX3*=4gI{PRcu8?d90&7eW6*9L)Ch2A2S(;Xc{oMpNGzn^Ual6>I_m zodaT;KjU*=UR}6wzc^Hi#>K;)JoFMzXdc087Ku3crxSuRU4=QdFp#xK(4987v*1ZE z+6(H>I5c}9#`vQ7c6hVzQxdIYNmQ|-YVDdPQNnu|ADr{>x^4ea6HeDMe}28_4y2<{ zDdHBZ@`lR^*v=>8WImi^nFMa}Vwc-FbvX3uA0%)7Suln@L$QjChL^qSZ2W~s>cEU_ zIdCwyfe+KH&6oXi;!WHJ |k=f>bQU{ei zvV%Zo7?g= u_#G zs5^FMgjlOx5~QHhb-lO*qx&;>6rKgs#%T9l+ IXkZwT4&pfm4v9d1Dj@N5aL1e1Ml*+dHFq)g8}4>&l wT3#E?L@hwi)Dj!XS{@K(+Gu+;a|Fdn$;qz!idl!;XGuj z^)~(z3ukQ@Vi{g^_c0nh-1g`h?r=ZUBrN3=Z;|42BP7@{+!mcodQM3A&^-6>CoHkU z?(ca0*HuHmfRPZBx(AW%A>&cHi`%93BDpj#N 0W(0%zahmiZ-j`i4062uGG`Q2cY%aXyng>rLC=ey{w>CF z$=}Z?L4P7%mztg}=lf@P=b{(ziktC0b}CO-Ws*J;jcY#6SZ}aNHnlq{;Xwx&wxEG1 zooHpLa$QuDH1Q1OKHiPcc)~nw5R#R}aj_GLx*Yyn`_6h)hcckm8F4SVjaPxVH!=RW zvIsp?@Np?bc{lu0s@tMsnoK@{Ogyavan(JEWuDyq65lB0l8KPVi{5I6Hf<_B6WnT& zKB*MPmNCWpGT=e|+YjI*vz0913RI^~tj+L%MPr6h5Hn`$vb|??S zAT~D3f?2_BRb8^8WHPHDSP$_>M-@brkxNLW76B>aCQrW9SMOizd3Vj643e1c(tynF zn8bc^7ov`to9E*4kQPr85PdXsmY-;{f*Etc@X_xKyL;E!2y4N6OYoo11xk;kE7lZ} znfhsHr*5?vQ7|||+c`pS5xHmL(AUSVv{}Mr&e485+?@jF0>|pU)~$oh%*DkS5G_W> z-k7hOwLhF1K;?aKreE>m#?N5C`)XVHp&@O?Fu2dJm#nM0?iC1Cz@vqrhqUA95<^Ks z1SMZQ7g}~!B}Y#15vQD#d5Q*pPca*ulAMg=|C|I>A?P_L-F*;4*5s-+j9-OzVy-vH zU@ZST wVE?g3(Id#|;8*$KTS!R}v`sU@MxIolzAYAuvrWGI zeH)XE@Uyh;IRKlvKi{4?UoGqx_mktPAyw#}0!9BU$*$q;wfVJ@GzJ^@;@ZX&G2O|n zb7`1>w4g5nDi{V9{ZQ0UaS>?Q&^+>`6G$A!Q7PAX@H_kGc()UG4v3g1W<^YG)J?@Z z(x@-AS;-zx%9RT+U+{}~ (FRdIA+l5zqjv7NZg@aq;g z$qLR=SB4CDcW7KGbtS$S5hVrAcFf~^o8P1-g9Nt@*098I%|5ppJ)Aisc9Lg2Nm_g> zPn5Hk#0W;S9RV8=bSO48q;u+dxSixpVCiv;)<&rTMhGkSTFJfk?E3isto9x{6<|wc z(fn7-TXabnIBgr@!u@FThGBa_wCNOtIW=bR$;Epm*9oSYTso+%-jCbh8}*lHG8{?a zF^#SBWtLEkyD1R-L+LZ4@{x6wlv%+jBI4mvDxF8U_WlJv@(Mp(fS!3?(V!u7uPcuh z={dlfrTb5Jt4r-BvQFVWo$l&0l-0t_c+kpO1}xtxzRBG(LSS&C=BG*-mtxS=MHOjn z3~UKT7iH{zet84tcYvduc#~q7>gdhW-ZM0!x|HU0rOR{z_7tULW}^Cub37S4^ghs# z->&_LFA5s|ZR9etpRv`kaWfmIspTwup^g%)%@t@Qefxz`t(LimYr-C(`qbA*@*%_B zSPpdnEh;%DpY8DiT;vu2vTN@{jwQ>gWM?nS^|JUrbs<-CS$b8j# OADhu#|I6(?O~6T zJ~=T5*U K3wGD@y}v>X?i=Cc!0+x-|D|UWG@5_(sS8fhne7mM z5PjO^U#$x6jZl|I fmEE&*5mtSHR&_vn^wh%zXGy#KD_lRd$>{Zx9 zNG5k`4_^gc{i0zVzi)U^M6eN18v4d+djnWg|G6zJjQ2!WycS!9{PC`iJyLp&L3yQk zqCHE#La}mH#_ 8;ln#uR z0#LQx_BZTE%JcRPU;UzXRqeA*SXu*`){{(ffrmlWXRi3eZ-AYZ?i2BNCVX5cMzdAR zdyr*R5Uq$VulVE!QsQ);bU&J)O)*9n*zcxfW(0L}C~8&&6k7Z-B#?YeODmfY$FF&~ zd${-Vqc=LW4v%=Z3wmZ<0T+uOv4!UdJ`X&>#0`>hM4f+4Q;_uV>6>Vb+s;>_-;!>o zi)&Xy57;yUE~HfWvWvN`x1sxDuNaz7oTZy4I5*p!hp?@Zf|!P_k$nyD9aE<5r~IN` z`y^`~g!6%bMv8}j&}5i^E%2sCC>gD_B-%_#k$gG%Dg~ncm7VvwcsO5w &~rIKWV5&!PkDUAmvw6_HG|H zX-RcN?Di4lIv%FxeO4t;v*RpH&^SPB`#4=UKF6<@1&`&th4d8xfhE)%fe{A^Qxmyf z2UFzcf!)cr<0ME&DHHinr(WZ*kX|aw8-jD9$48j=ilYU9^Yo07wfWMA*F!@a_r> z&{Pox;ID3R(xSg#=PKG$U$Wvh=C8=>hyPQEodjAzM)YYG2>Xalupsr;#DM{)q8G5e z;~k*bF-C9ivN2QSWkl(E90)nZIa>nCw?svUg$Qfj>|3a5uqq_>?LRI!6<=tG9eWcq z=5yS9sJbm;ExM^=TumSYu(w~H@nQDkUCtr2yz9}6B{TbBlieV6DW9G?DKR1Un+wdv zayG#eh%Yc(p}TA#`QGh|DtG+>R$Q8F(L3|0$tQDhk!S}RjaRdj_R_U%W?MXSufe|h z4A=%J@7ob}v-d%{ -X@)J*sXI$ 63v?AGT) zWz_XZa+9Q@Ljkwa!R?t7G_6L>KHI})_A(E;1PLPVLr`kiz5~pqUy8_~-{RHH#x?d3 zj9`Bbvk*dX0{DJnjVl1uwy}1rtG%i7QTREE ;Mg;sBMrf|OL6dViR@s5@tTR`E1;w4eC%>E(7!Qq_!6L}V0Bk}u~6)8*lNn4oj zcLa(PhDHg_W%2*}$D4nx=yv(Cf}#riY?FrA+yG9;6MU7!DPBmZ^mSXd#9N 3+_v^tarVo%*?J=ROpr?LY0W0$n1;09a~?vYv{pZ&%M{?oaj3aSf^FLLgVM% z?(4zo{t _!nLX z_cR@ep-crQxN4Lua#Oa0RbMcub}yn>d1m-QKk`kVLax4-*OA Q{g=cHMRxyqYDUxzwEC7$%N5!KyVDPHVdPZYgKvK_g&`r`uG{=R7uEBMZ z8oG3~SuQ1tSd%`|WV8gmpYrLSc`f^SJT?f6OpzKI0YTrQNlD@LKZ!D)-v*cO8dg06 z!t)~lnY6-Y9Q7-u4dI{NnHdsKl*B3%5Ukqc@orNaz_mco+G|( rVsWpwx1;gt1K&3++fOegX-7w;yC_$hmEbG!IGd df$QgMSjlcO*kQg98 zvSz&Kxy&PB6#To&aY~g(>X2Q{=aQ85Ov79a9j)kYR-}qTB%!GMx=6*n`5W98ua?lY zy8IWgTBEnWQe5t<0OtwQ`yI4%yWI#UWe#?Zu`}zPtXy8`6F|dL!tnr+cyQFz*3g{) zlZJZhI{u92QSJQ2TuS%7rZphNVsDqTv}+EtrNVL r4bO1Hzoj3sX1ML%5Glgrlt< Iu$mleMLRsO3pOt2k+Gl|dQV&9jX% zIzOxza+^MrVXU8S1OJpx1%{)rDdV|mAs^5<=_HeFz3I~yykQDf*F@*oEgZ{_;An7O z+AGOoh!=`=FKeas0SJdHJKb&BBVvbgk7^Qm{M U)10fD1f`(keG|*4b`lE!jOOMawW+7{mDT=~4ucv+|2cjcwQydBxLX{c z`!$p97d_8s;Mpkfkn95i{EMy)oCg8hFLJoB8`g;U|H3%ZR1AObfWpj$4qNkF_ z-{EBQ^3^Ek73AHa!i2U@C@FWtL%lO4IuM*OHC&C{5(iGZHs5}Tvk!knq$iBChsznn za*S3WhW{{WHie@FI0p!+qQ jQmtcN?dpVVD&1FU^QBa{ zF(VBH&T|@iiW(7AHoidAs-j>$rpn;3gbWA+$kJs*3mFR=R(9H}{b&F7kJe@UwDQSx z1PKy*xKfjD;|1zSzL<>ce^>{|%FzaoUC3WLc07XXsUcfcW*|b?o^+R&lLN5xa3lEs z7vtU=B7_RHal}1$B?r;Tk|fj<<|tV%4L(rYzn@(PethocFr;h%zdI{>U)K; 2kk@@%9gu1CY7#N_F>_&!pR#m=nF7dxsXFr}TMjq78oTE@*xAfJJpan^(MH1A|M zF}$@q_4i}n_ow~+KyBneb+Hha FOvI_&-mfPiFYU}{r2W8im4UQIEXkw z2haphO~S?W`h_KaQoj=$f;;zl{SM2c?Q~67ni}ghqq5q`wIiPv7&D?Mr`9XaJ1N74 zHgjdtH;k`TyWuxpb?d?|Mj6&z2ot!D5dh0?^?tHpPuCILG6JEQ>UOD@g1X{K6^z<8 zOm$U|U*snix6!52o2~Q3ERiwPXD#1FoWp0$>ijN7jVCFEAJcK*2XaQYsj0>tpXc85 z#r9mdpEp>_&0%Ayd>8jJG6I2F2lGWt!jUh~2{9>;QP|Tj7WPqa%K^aDM#p-Pq->hk zHO5V_CE7j;5%1q$kM#X0BM}d?9HBm2**>}eg;XA;ecPE1OfnLgXWk2r+0^@Au3BCJ zz1l-HJ-F(7!v*3-mR`3(s8=v^0rZ9o6UJ1-u^|B@gXs5bU&mnv&;QAr5KsQN$kR4h zBWce^rxY~22P{IUoC2YsRKnA)##d_tR)N>g+g}6ce5Q}}t2#(|oh5SiV%tfb@$i;1 zX!yx$qsYK8ifq}jPuDYVJfkO#VmrOAG6eGMt=(tq2|O0^SLW42*-=k65&=mUrgCaS zhN89(9t48S=9z+(9Xf {J lMQ=9b9&~ zpyZA7;QPmwGu!@ntb(%e7&HU@sST(oFX7(`68|NhNU{n$P8Tfk&reU`!M9nkjV6!( z#pp%O2m(>{66GTm!OdGxFHl4!z<&8Cpj~P+#A#hYS;>KP(>KA!WPQq^MNkm}^)3Y3 zfY6J6=u2IL@MJhp|E@+!BfkpqucdaK3Z5rYh9AR8SkWNi^j+j{2Whi8ozZhbOjTr# zu!WJD@Fsu(Pa(DmHf8LEU=pLIQ&q_^gV_LshA-NGTAT##DD0Zth-?uMf_^fh>e3tc z&R$nK;Gv2rQ}KyZcC-GWo55x4Q}}*%VU-c({vhM4^nbh-xdqz_O2=b1{EGMk+({C0 zFcdmLBf+VZcVDvZxz!rFQ;5VQS; hz~$88D4rB;c2V)U;=9KI}KLRm_WHpkLdL!Qd? ZIq2Tgv%xu`m-&tKJneA_i}G3P=Do)~&ji3dmUzw$bM%Xua4+ zP*Hdu^kFsHMe8gb0BC@4{-O`)<@LF)p*S@G^8p)B(DhS_nHfAc?Xh|lX!l9t1X+BK z{#{(XU8Mcu&QkOA&hkyYVJSo@sqaOK?#W3~1dMep9JnA544I&Yf%hx=Sq_7wv?AJ3 zyBZ+9(HC##pQtWPgeJOza|7!>w<}u9hHZj$LX{m5*f211VL8N*g&~7 d0_ol5x zK1Q@TOlKA0`tPOeS<3jHhTBthp%!CX?oe)##Cwfp)=a+EZtJf{KZoeJ89T$cvf{0- z$?1bs^*qTSIiH_}ps8(63saEdkgc?^nGhI2D*l(a#pqLQY`!<0# &;VaZlpO2C@myXT#(N3DxQ1G|3Rt+lEBjLgQC#@ zOD==$Mp(|HQQafd=^!}@NGuJf!jgWJDU7|)Bz=!o&DpUsp_1MMRpCa}D4d!bqO#qqQ)|;b zm;T>KRJL*t@|QpRhHOT6)vAA *4RwR#!Xo!i3d9AihZz3Z0<-OLssT$UH$;z0DBEuMiyT#igC|V|*O= zIdm3Rp=UoLJyCZwXKZ$a8pQ7^mM{P3+W?s(H8(O^MW}1Of1m$W;>y9i3OKkE;Q>P) zMyc)Z9hG%PI^0mR;a_4QyQ%*zgsj{Xt=`Jm8OG2Q#S*X;76!Unaj@_Fb$#6=2t>MT zoiP)$GfF%>C}vwc7gFA2cyRx_HjaMktaA=0c;(XA_nhSai<*?XR(*a!lO-(nZe@oz z
TYRz~`k=zX# zIagdd?dn{umNw`c@H*Ax*PnZ9Uz!8)`w+jFbt)MAeO{jWCH2<`Q*z4?Uc2jRC8D7C zXX_n$)&U^!Ea(<`20 ?#TClvC!9AcUcQuE*-A?v9Xiu|AUlRaQAGi~J%e`e zEuhqjqxF}jO`T7&Qtv^*b2+^$s@7F^rhno*B5yd2H2?A|M_iwgpr zG2*OOl<~E>@#=!%ezT=q{0|8Plh8AfDxRw!d8!idU9~HnTP+mmof(Fxf$EEx+%_|B zvr;Ug@_7mW7tgU6AiPVD@$iotW^0i{8FZQQp0V)6k~qkAjM&@QwkmF>C$O7o^O^bn zLUeN5BM=~PHiVvLag5o>)LM;*JXYVMN4BGH%|-lYL65RpK^)5-GeFURiHPVsaD9N7 z=OQD^E#32f?~Kpy-|ZZF(=h$V6bAz>6fbwjayU-}RngAheTlb@jXYvf%^|D 86Z?U%(6-**#NspSxL(r= ziT1(P>5gm5HUG4av?BR*tO-bi2jjeFF7C}Kkj%oNuZtaG-wSFfv%l`jEj`mDcV+#z zvxR<<1Z2XHM+PII%(zDl`P`*vqQ>ryd!aw7KHI{4!59lv4y1youvGF;cm|`HQ} V5W!uR<(!Im08ZMWEF5L 8a?2>yc54PGRc8ddlf9p;HW%^;7CQ;?ITYgqfBhe zePW&x?HaNDeB5wygE&T>HWLND)Wlk{_#=rgtXv1oFH2r3z8@1VTFBA~9MoEAP4Z+> z_EPU2E9iiW@+q;d2ftUwZmR?Yw}7$*4LHnaRWU}h402_g_tX0py-#=cQmALsDXALF zjG7j|ajvxw9Y{uHuXr7(hNIo?Y&U}UhK|lFSrcN8vPGyrOuz)X8?saJ{Uxe>z(^tA zfu6~p$-6?`D*v&dRJd|O87JKJd{tb}0>*XDBfGxlj1oP)tawSTK1mREaH}9Ia^m*@ z>b%*wPHTiq^QaTK)tlEwG#SgfDkm9-)!wgz$px9qEQ+WOH^r(h;~+{$SOO`h8x=;f z>PLNYOeA>{*7BHSM(FnadN({;+gPef&0^l97b)DXqdRZ?YKpm)^lrhpejD3u&GwAf zNh{yrq959(zFp$E +)mKQp46t`b{6uX5xY`xe(|;}J_rox& zFPn-q-KI|#a+&{qAg{8jO=)U-feQ@+cL$ujU(Ae(EomqhL9{6p2IZ??H+(!zuzKwI?@V37uNZ3$yuJ5 J-E#i%fP?9^ z>GGxyUMgfyb1_ @pUd@~J#4>?D3{jZc_^2HRhQU%eU WCte#69RM}h0ByrANE>DROYYrfE&8B*PCTvq+ z7$zTVB>}RmMrDmEoV#&OB_v$FvZQ4fZ)oj-Q1s2e0ugoJu7d@-&yR7SE5xF7Ykcc% zF}w~pPS5G(fxKd&5(xvVq}ZGeIhE?5L{@0SIxBu7Wkd2cdc5|lV^0%}ps+DzI9uf1 zr@XSSky}Y%vKn?7&@c53q3~kL#+>tkW{d{n(pU9kXu5bS|;GAhw21|~dD5& rgFvZ$Zm(K`KQCWHslLI$Jaredj7FPX|&BgeChLyxg6-% zePVujJP*=B761au?T!I}HCl`#LR&fJ1xd(Fweb0eOAwQ-8t<&2wBidKoO#Nj=If&h zZEe7gQO$+T;8yqGZ<~k%EUTsc*H{$h#L77FJy0jYgvoS!JoLUSUkkpU<=N;t`YfMN z2v1dQu)8ZWTW@F=j#3Uo^HLT;i`I#MTB*!^ zP^uBhETXc%CRhD@+398BkL8UZYfSp!IF2`fTRR5TWv}iQohS7?Pwu6Np;17uJG&G` zi*-%!{^{)kVrS^ES!Hmx?x1gP)J-N?GL!t&p7<|J{5~ZRWZXr+Aq_(sG1>T(D>{3$ zh6O9Q1VQNd7|l^uwW}!?dLh4;1*Wm0@=!{$Glcf`fd#ijUjJFYaM}+?AnJM`r(uzI zw9iz=aDDBf{<#`r{3$p&Bv3q`KN_EwM~l_HN;uJ}hbHmV(6eU8h4(_4`clrHciVXw zjUbEw9Z8{(>^{>>4!B%Of+amwh>ww+3bw7E^UAYV#6WX6vJQtd-P4wvzUj hIxIxPAvXGtuZ{Uds$WkE@Q0u{{tzb^4 zjcpkFSb?b8A)h&HuvhVpSxWm$zx&ZJo?!D^#U-32QRCs>1)t3ccEF#5@iq!BBivl1 z*4wGyp_)Wlm5pYNGD vtGi4nkpdYY2F*noQEK+`sFo3L3J=|N5)R z_~gZFS;oZ0^&7T1m7=)QoIVR%42VC8ii&!hEQ#==Q6?~0M1@b*4z$yllsR~>$sd!x zsrg>k$46x1y$;9MtA?hNQ56nnFchj5aw@!5Iwi%FNCyH3Ql~-{Um`Mc3pkD9)TQ%9 zgr{CWWoHH wSR_}h$IU}26~%>RXN6i z*v|54;pmlgBc%%$_OEeb79ps>wuEZ;@L)ErDiBhNr1`m`{?8D|2CG^+bWHg^5A=SK zMY^P6^lhIhB)+uwL%mJa*I}5?a0e|uc+|4Vo0AEUNyKlXA1&GdhcpA<7q4|VlQe~j z6&pole;z`fzs8;CqDckoR;g-+jSKz8i6AmQ5US}=711yGn$5U(6Xd19V7qBAxjN{4 zc=d7-fv`&F9l{F6bQ~tGll*DnZ_abDr7 ^p>whL|^YECX?`5XaboQ~zomf;yDY zU0h@5UA~_St^8LigQoM_Z&bNMc0JfrDwj~K@1(0&Yh513GQ~v1cTn^4^T(LWVq1Lb zhlQXXcW^jm4ji9`2z(jA8x&S0Xh$j>YJ*a|p*E?PgjloYd1J5NEKFM2mS)5R{T13T ziAl{i^%^&XCbqIh0SUxXNk+MGdwNwC@)egpSvK$wL0Y?HznM2*uJuD My?3V-EyGl 2xqC{kxnj(X^{E{Pq$ZFCPF_3Q&Fz=U|Yp4HE6Ljc>F=o3s={e3s2 zB{2m)`HaLvQtgzhgD)}G(pwqKeh_7Rt$=Dy0+l^o8#z(vbKj}Muhbvtb2=KgqXx$6 zNb@&8&0#X)x%H9mftuKibGuc6)%W_WO@=;<(as1Ftcfz&b{=S^Lp}cy4y !Uii6wkWZbOq*~!apRTw(HY0a^!dFw1@r+j4Zil` vZkmzSW2e+XlbtNXFW z%szjeu_DjRx&}3nZ}XxKM~VR~mDW_E%X49*?dkwRRd)SBV~hNmTbW1Se7xOkIWX4~ zX7Whc1-Xd>nckC+HhfRB#dasc@Yz1Q+i>?>_m=jdZ<<>+X}@oouF=pUV?1#cX19Fl zGG!3@7LEh%O--iw%96@EcA?8joZR)d-05ydwYA9{g^%~(IvTjMi7^BQ@bza*)u=nM zLcP t-aKAwfW#hp5^*sJ$03HaamTkW%7a(aIUS5b39y@h 0J_t*R38TlZ_=0juZeSiHeT)A~%>DFxGT~3tx$OVl-7J ^< zrHGPI;7l$0oNbn6e6E^(98pz9rpN%0a2e}~kG^(TqES1(h|36JxDj#uc^U)oRf>oI z6^KumbMCU{SRho7Sep-Fk=n!4w3r~h5}x0TH|`h#i6N4t^{PKuO )TT7vY< zN6^<>Z0dPzyYagkhY=+uN_jeyU-JRdRm0duyFN1W{h?8JWuhiNg20^>8$lSFbsJ9A zXYcFKMy+DW`eJ|;iLn!&Ki2$_9JeYFEo{7;adGhV-%2W^W;fBQ=tA2)MhrB@+yzqt zda4UZj&I{iZOxp3fBKckTjcq;C3!9n%vI_b9@hRpWX mXOo0 zHacEy6a2+ud(TM +5ogm>S1KQ4*j$ZXi)&=rZ- t*9 0#gBSMh@PRq21)xMJ!vq(FgIM`{V}3-U$eaSmdHA1JAocff$+NCv{-GDo4Ee zLA^#!MP#e=!ZQ6Nj11`-+Xs@!(BF6W@Ka1)eht&7?MC|G?Uvii!?3IeIpXp7!wNrl z$OTz9Wp1$}la%g7WvK@`0qND3^Wm5{W&uVbd}*M#4-gBOZ^#g#K>v$_Dd=Cwc=WVh zbcGqM4v|p7wTXjZZk*d*eJ1|%?kSE;VQb^w5r41W_vN1+#s-oZcCq8#i?oJsMR!Nd zrBqAlH{~>nKd|0TG#@MXB5B819pPBy9{emt+?6L4*8gEO!Wa#uo$i0$5a{K9u0h9x zj?E1SV=D!_kSDr3qVlhhQF<(lT0UtHff&EAz>O#z$$yEG^mpXL6AD}w%wib&~1SttWi1%Zf(alshdFiNQm;jRFm+M=cv z2{m{GlV>apa1zLmcj 0*Ay z>yEqeS0XX<+urCrZ>BJ;G%|xR_ue0B^t2d|Cyn8-?wTM7=YvfS(^X!2<5R3oc= DA5Tm1o&MQXJ|qoduIAWgy2sUaUcaHsf* z98ICji)d(RgtCN`K%VW@;#M?+lm61?urmViu6T=@XT_>S{8|=d53L1C0YvVA@bbVu zCVA|1h|iulkF;WO)=3jj@l~>_5#lWm#m;nXR{zkpn3AjhjOQ1*SD_?&kyhd*`Tn`@ z1qzkW3}w?cjJ`xI7eM??i#%KP0^7Y``H6_tgH^dV%$#zv$9{JmQ18`K#tnig;C;~| zy~Pu=wG^k }bm52ayCxm;KOZQTK3W7KHEQb6Hcc47i*mF(12DZKF_=M{vo?Di1zg`X z@eRm@I?d@l|77!tg+6=MQciM{HtMbRx@@i_v28VfCz+@wm@9;#(-YBsV_*Apt?wkb zloo0wHPsxfM5}7mEqmb#r$fEh{!itlCU5LXBgS0n^q$`4^lK$GRzj#nGy49bUDz8n zejl!r0fyq-X)(+Lm;9n-k~)HWrK5&MTynxw8A5IGkQ-6=GAOloxmpe~I4(swrED_5 z_3bXXIhR3);kQ>04OEC1J20#Z)oxSp3t6AG)1XaJS`rT?5yC~Ne85)fA+jMS8IHt= z)b}j_L)OO)RX%sG@pv~!*}x^6RC-Y~b?PHFT;h>*{bE*ZF(H0?S-WHZ(SFKyh4qj3 z$w6iCo1&|=&7CXR35+N|-=%URLM{J?&RFKh^E;eKWTTIU!o nMgRwnb9*?f^rvTN2S%HNFe(!8I8! zjd=gJJEXc*Q&~wt9O3hq5WT(v0C!khFn%JcC~ozoV=m|uSV5)lf|T2YVp7L_<6$eZ zfU&NX>$1Fuf_<)V?hQhX^Da*UQ0muq&(D#UH&92~&f9VzJoM`rONjHR#1q&GKTkBN zqQmNC&FwlDKp~fCP FFnPAj zy!4_FFbWEMJGB)`@=OjwziY~%V$HVEn00gxe~AN(tryk6bal&kST}N$9Lq;tNgS_6 zO^$VNXB@-)y7@^iUZ0`4u&p8Yp#;q|CO$Ki{5i9;(@{K4T@jP#I Q%P1J^4fshgDh9NYMY^|}$rVE_N3g9?j)*D<;1lmis;e0*7M z!aNbNQpG0diT7zLtS=;mwD{L!eJ-8heqq#DAMN_IhJb-1nv2<+rMGhE{5TQV48U|1 zTlX7=*Kb^!&A@SQd*lsN>PvldNFEN_br-L;1JV|ZV}HYtNH|B7{IG4TUV(rwwI>ZK z)}Z1ERA^G}eDNYMqlcSm@x%JaO6_2qr^U`|HB{PGicPE(>%ozUM5qbppavtJ?)!$H zcJAut1WP8iHJATmOh=mSkq@;3=2TAXodD(SCqFfJAR=m6%KT*w8)}|H<<4aF1W$`D zk>87sjI}rc2DVnLE0}qs*_T`uR3YcHcO%)K
0z@p^Sww z!myzZ1(J5YCqHVGUlJ-cgVQ4{rkIGcF%$F)qJG-~+qJ3)A07@Rn$)OgNDF0+9fTvY z1&q;d>VB=a94?&CI=fMitqHLd1=j7Fyjez`&0oqH<>UTt`_LI~#oT z>|4JUKPpf4@%b>wIGuBD nJqD^zj(;;U28aiBSLzfaEo2 zE=KN!>AiPys+Bcq-=M*~T->D CuHx4vPptt z`OV kPcBU R zpxdQSme)Smv-g*|!lW6_t-r1n0+Y~_M@}*KLRkHZBeXjlXE84Ot!Gwov5vbt+z3C1JwT&N>fWcz3*a=XqqtmGZ3j&@ z`{cOL!e0r;L|~PcD%ASijkyt2)QZ~wFG=>57wCdA@HtXXcY`kAyf-gD-D_GM6jGFa z_+Px?tPskeuZQQlWFW)C4hiZAbxD`FpivhtjG0Ne=-v2gtoP@4H2T5IgXESivWleN z!#&W`#SCDl-l$fiFVfD1#T?pzn~PA3Iu-sSSG2e+{TNeyPon9IG8|LRf`HmzkgxnC zyN>E4Lc{3;Sl38XuCmZ2Hlq%@WG*54v#!#*!(R?~xePZ-qLJErY$Bwr|0?yxL9i6u zi4#ooOx(p|?i Qj8h zdnjDb)<3dzW!L^11v^+BJmItttt)dcOD{=2eLKo<;IzCjW8gDQb%QUT9~P>YNn8bS zZ0uwW99-vEE$^+urw8H?+!3~~8 *adJyf#R3k~NUW91%!TI{l#p>0&a0-f5ncy`SxyV9L+ z9)C^OEf=%I9%E4d5;#lFt-VZ#YnK16R)TkJ`?=xbt0lO&hi#W&3(R;y18*IB9HX7$ zQdhFMP3)PM=f5rHePYDd4L45)N$@{)vZZIB@F_pp+Erfq^CZm5 af1)zU-uV1Wau;FZ;?9}SW4e5d-%c#n3uF5*Z(DhaTS1xb>)*Z3d$U7C81g{FMf zaIrnqcyWKW-=~#7hKG+rY2y3ywhInLkA`|VSlVVbVey-s^y%Fnqo!JO+0pUlCvcT% z4+r0X-&}2n>KOGLoFf*|S$5xbC^|djMrw~O&MDG#@|?)go_Sjq`fv?Ac_|z!VNlz+ zZSV`p0;gvLSE>$3UC5>8%#atkTsU_J)6kWzm+Wv)#yNNhS@TY{`*jJ*_|VZ}d^+is z@(cD1eyHKxSfjLuQ?Ii$_>w5X`W@ZZcVC3{?CDp3hCjDv$==F}6R*bl*TDXBSq|){ zpu^us)E0!81eY82)mi=jeeOY>y+`>Ho9U_rt5QvnCsz^bs8~s8h^Lu>lX 8L+{(Gq=dQzwH3!nGDNf*Izat)Civ+oaHcXer%^iiR7oePp(% zwp4nAc_Hz8YG}+d@^rRHTlZ0it!R3-dPMLDdQT_LY&vv**=_#b9 lQS&40_wk&AQqGDINQD^L)?K^DON*ZV!FagXoo3VO7yV9*_VYU_$)`m9(` z-`xeUHo4crcLfQo@3l*+KclZTUHRDep8AC|Me!!vZ_{gHD;T=ccdVz#09ukXB}^df zj4)s7e`m$vJx+yeKL01@k*I@B>rKzNKG0|`u+Z~deR97Fh9|z@($mmSi`@0*B V&R>x+`8k)%}q
2jTn#YcGj;ZLDsXP{K2iv)4#cIpeyx^f5s?iTCFyZD^^LH=p4;`;HG8!< z9s9C?t>;M1F_(EHiLkAe)1l?vT&uUCV>4G66jM7*Hb0XKTlLdAr&~GZzD2NOV?WY# z3I*^0a`ov+!urP046G)9jzEE@u5@0tXvK?}-};NX%!I`*!QJ24EnBl`zfV&k 1G2m^cFm?Q!>lCxym?YZ_^+Dn;b|$L*)lK8%Z~o&8sqivtKg7K7HYk zwY_L{n%AZO0}S2wSN2Rbmeswo7Rh*Y?aT;nDM<-R318wD)f>E)jE@p;E+!z842XE( zYQzlc1h<{#1@$`f;3VQ?8O~xt7l5}%j*#xI2q7~~xuzu&3+>k(@1R38arR)&ALVQW z;+U0i=X$I6x#h4{SZvLa(ad0nZJD4T9`8?3k&{?&b=>zGqfv7zgrGn!JCdwJQ@=cr zFenu%2e%fX_2yXLwUl@fryku~u9qJy!g;{_=--M%(r&J05mx~IoKK8hg&UzRaQ1ST zL%nK|W-<+bW>kSH59{?XS^ak^4MZ_Z1KaMVLkLRgQ0pEpAu~%bqCDuKY?j#pMW| z4wU$!Cym8Pep9P~8jWx{0o3LV5_ZG(WJ0Q$sf7s)Pr}ieC~pJwIAg3Z0*i$SudIZl z(3!eu T;PF0GVJWeT!ys*;dz$86@#X#T0t8Gtr$= zO3a*Bea?ln27v`=)?ZLn&R5->HnQ_;+H(FK`1MpwEcA*8nD9%LeQHLyl3FXuh`Bt* zoG=AAE*lZvA6sjlRFYJf6^2y(-71B(Gaf(Wl!kQKFstNFTx9 WM#zAm%nL%S(Aj%q~87AuNiSgjv?9uyAZBFnYsy&!HwG0-?dZ7^yb? zkNVibkUzqPKuXages!3M1ZfTf_P3S|Xda0_^bPZnejnhk%jtXpRFh?|sOz&-{M 57RzaJAZ>=9i!w%=KA^Z8UwP^A?_Ax z%FDjmh(Ffj)GA7sRjoil5Z>ifo4!z#^Q+6L(-)7J`D_HcAsHmw`i?GL5v@M!n}E^V zZrTN{fiha;&dY^WC$(U#z_}~r0Gm~)EM#GV1|R@Pz?e+#V-(0Y1@ui8^2WE!8Ba{YDgii zeunZcw@V1gYrB28RY+^V(NY(o>r{d( 1qVje$jfd^eU1tN5tABku}egH|rGY z<<)v%#o+E;=o6Et2PqSS&8O5!{JngnW|NOvYigQLOV2g(?@*m*X*nZL*#EKYwIyfE z_X?B(*&rO16C6rc%}h>kmJ0_z!}k?4!FP4YD14*jhJ7~Bfkuem9j`q(n~+}f92lpP z80o4mv5#l LimMAWry&(Tu^3so1{?H^iIpuH5qf^5qpb zTG})qCLfw$-0y!1y0j5;)w0Ow(k<~^_3V{|sev#uzpbHg`~ ?LNpX>ZoodoL}}*x|!<@+V19SntBW{oK7L7NsHMelUw`$sGR?XzW4rQ ztiy`9GHv|NKYAB~KOa!t5`pf@z07S|gRZs(FmmvSZH4IL03IM<97wOj3X_o6j7Ah) zVv^ahwS~HnN=4)apyf!tsC8o0DWXbBXj4o_jrQyO0!MDD+htp7rsIb_=S%?FSf{Fa zo)_KdHvJ|OGNSV|br9QjH$25HP 6-y)E{i=f=OK5BDS*&cJ(07*c$zk$!B>qVkzVQAd!x>CsQ>j_nrhk;5f zm&hk+t9Yol1AyN=T*Zwbbt{+Aj`z4`G>3n>M|sq%g*p+kAM2i6wP= wi?sdv8^I>!s@f0G^)=V1(R1&)Yju}{V|v-h-i2_CE|?Dx z*thdJJ&|D|*Ooq}=?6(yfM{`x^j!*0lmdmJV{lB#Ij4=4YqhlrDdpU7oTf0@l49{< z=$W7=;`3EOy36tOTo6|^nDwm45bDfO=%cM~bC$t0%{4JfCx5(!n_Ju)pzC9DJ2tNR z)Yf(&Y|+S~ElVH_K;Pgkoo8$BQ5v*6p9~k1w#sIJC^vn4+ DMR^S_MuVqvqI|mCZ zMJT~Z@nN*upXFS{J0a@NKhM>s3~$iFa>Rwpw{COAJVVx`ylT)Y){)(Qji4BOT_#@q z=#{gt3AP)Y?D$Y!v0J=HCe1BzcRuZcarR@?y50q_%;0mSDd7FL7d}nFo#J<8fy{S} zQ;*B-qc9nW!y?&ejudZ089$L~yskgZ&ejaD;NPd}WtSCKO2zOvXiTtEuQqlQAMze& zkzU1UkgbaTebn~MJE0>u`ar3RyR<`L$IIM5ZX$H^f!vbbMM-zx)na$f`=yFoJdu0- z#onUXb@QL_lndjGl@sze+b4DsOhNNB!Xd9)`$IED<4;d{R+c>;Z$;I2bmGXz?AsYk z4U0Cu?p#P OR?o+P@JjRo#d=BIwc*snbWqg^~hEhO!%Y)cdbmV z8LNhWO0j{CyVsOmMy$kVZkuSSSn%&naE^*4WY5Kd^O93SOS2BqCUOBzGJn<4zJcq^ zovbq|mzI(gzb7rWhzqYnW(bwlL+AC&xvQ)z?h#1!=`_~U4so#6Hr)pb7j_BbZ5OcQ zzN&rqdQi{l^>`Uo!i^@&X?e3$HvdVulRm8~46hvKVi~fYI^8CSbP#R9=-6C^k |XAGLy4hN4n!;s>jVH2DSSKLyXK>W 5hzd)W?^281-3_e4C_Sl! zRADRJ#Dwmq8)6>Xt9^HQk%DNf(V$bA?Me0s>E GExg?hfasb0Nj94ehzp_UGt>j}dYk<%B2X`@ zh?OpSK{M-#prY|5o+SxI#IzmbSyI9DVps^+%pkT_6J&tW4fYaZk5C`)lIt4jS;2sG zQ49bD!-!Wa$`?&k$ejL32Tj yi=E=u(C!fU-XCqOT_a#81VHGj2Ae@`i;y6l~M3g6!Rk-MlDwI zrJ&mBbTUc7(zQ`XGq-#*i|ITMND;ULsM1+za3dz?HiymiZ5bQ|iaxiryi#QoF&I@K z8Xz%(KcNvJz1*M9kF68nX|Mm$jaB#dXH>FCXvHDWcz? -<2Lrg*VBhA}N zrvwZ|wM&Y8DhAzTHZWNU0OTxX&?~UT7LE!aLE#WfKgQT2ul%qQ|Jg0aL@2MLU7t)) z;+K^)LTq`B)KQu26}PL?t-_G#pmQ?bi2W|JQ>PQhq#GbYY`sjKY0g3y(Wbh@<5dHK z4d-!kV2nA-9g;);w+vUftko%JZkDt@f($4<5P```Y7pb6oU`GQ{^ &UyZ!eFcLO-B}nrgfL6g2IMB#7X13kFPI`snuM?eN*hl6q${gXudtO5~b2+LT zi#yFz*7w|IdeKKoteYBlha=7kyxJ1TVVS)XuCb>cIt{}!70u-phu~o#%WPRh5*+m_ z@;pa1V9_7K8Y?V{Z{}a1=t>T-FGEvpoDUwqo^QNqyt@5_8oN6N1^vA_7sk{%Cz*N{ z*v eeP&HqDwC=%yy)QbSavSUWZXg;O${Q@~X1bkpS4%@Hc&+V;6)?`245rS? zrR;18v-EKQ=LrCw3pP}{Ss4S)R*O>!KPX%cQD4t6x8xZf#r~LGv@1bNebBT ~(U`Z7?E*{j9d20qzkjr18Q7FoqrU MA7=G~AP z@pu`Y2`o{GqjJ~hSWJOPj|C!$star*VqV5nsE)fKz)4QY1^U#E*32pS8f58t1hRPJ z=3m+gX=;68{AG$m; DSzCF&2X=q40iK#$r^Nb7t2f>WP=! zWEJv&e!UX8vD_bRdLJ0uL#a?&T^^75{tqAdWeoh zGCDVFF&*_c8JDi20)1i{_U0Ci20a^LoSrTTdavEj6Amem>XFTR-h{YlqafBwb#?(H ziZdxr3u$2>a(i@yFCpXFh~-Rjx#cBpzx$*IMHNe8*Gv0E9^fJQa}h9`HS-Xoh)E zLP){+HBDFHfDM1Ke>q8-11ov4rL7?D!uV-Ekys}a25I)*^Nh7)lJHt^O*(pc&jWZ4 zrkqTFVlYaLXWT3%N_Z0^G0;>43ymXORyAF|nK3C+<&xRBjPEJ+r!WS1CLNH6S9(5n z@h4ADkn1U=MJIVr+l3<8XKSr +?V{=C zT!kmxcnUl^=%bA-%mmogozxq6v5-6Dj~pamJWr)O!jud14SgFs=<$Tv9$nf(SWnBc zJhv~AGjWP=nL6+~%c_&Ubs~%Wg#d{Um{5xL^tnCa6GDQ>PEaBG1`I{r2?5pFkDIqV zm7kxIF>-z-3%Z$4=3ij+V9w+ySSAmBJ p^%j7b^yvNADhD2i5Qrze+Ht6d^2Jk}q9UTb1<2=S*@9hp%zmh*lGi))^{ zm; N11qX?f#Z1h4K?<3p