From df20a8849c014106b41e1a6da437fc6fdd41934c Mon Sep 17 00:00:00 2001 From: Meng Sen Date: Fri, 25 Oct 2024 18:37:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=BA=94=E7=94=A8=20Shiori?= =?UTF-8?q?=20=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Meng Sen --- .github/README.md | 1 + README.md | 1 + apps/shiori/1.7.1/data.yml | 44 ++++++++++++++++++++++ apps/shiori/1.7.1/docker-compose.yml | 23 ++++++++++++ apps/shiori/1.7.1/scripts/init.sh | 15 ++++++++ apps/shiori/1.7.1/scripts/uninstall.sh | 10 +++++ apps/shiori/1.7.1/scripts/upgrade.sh | 15 ++++++++ apps/shiori/README.md | 49 +++++++++++++++++++++++++ apps/shiori/data.yml | 14 +++++++ apps/shiori/logo.png | Bin 0 -> 19505 bytes 10 files changed, 172 insertions(+) create mode 100644 apps/shiori/1.7.1/data.yml create mode 100644 apps/shiori/1.7.1/docker-compose.yml create mode 100644 apps/shiori/1.7.1/scripts/init.sh create mode 100644 apps/shiori/1.7.1/scripts/uninstall.sh create mode 100644 apps/shiori/1.7.1/scripts/upgrade.sh create mode 100644 apps/shiori/README.md create mode 100644 apps/shiori/data.yml create mode 100644 apps/shiori/logo.png diff --git a/.github/README.md b/.github/README.md index 6079c8887..24e71afee 100644 --- a/.github/README.md +++ b/.github/README.md @@ -144,6 +144,7 @@ | 🟢 | | Redis | https://redis.io/ | 从世界上最快的内存数据库创建者那里获取该数据库 | | | 🟢 | | RssHub | https://rsshub.app/ | 从任何内容生成 RSS/Atom/JSON 订阅源 | | | 🟢 | | Sentinel | https://sentinelguard.io/ | 面向分布式、多语言异构化服务架构的流量治理组件 | | +| 🟢 | | Shiori | https://www.kimai.org/ | 简单书签管理器,旨在作为 Pocket 的简单克隆 | | | 🟢 | | 思源笔记 | https://b3log.org/siyuan/ | 【思源笔记】一款隐私优先、自托管、完全开源的个人知识管理软件 | | | 🟢 | | Slink | https://github.com/andrii-kryvoviaz/slink/ | 图片分享平台 | | | 🟢 | | sonarr | https://sonarr.tv/ | 智能 PVR 适用于新闻组和 BT 用户。 | | diff --git a/README.md b/README.md index 5d094e128..56aca7ad6 100644 --- a/README.md +++ b/README.md @@ -127,6 +127,7 @@ | 🟢 | | Redis | https://redis.io/ | 从世界上最快的内存数据库创建者那里获取该数据库 | | | 🟢 | | RssHub | https://rsshub.app/ | 从任何内容生成 RSS/Atom/JSON 订阅源 | | | 🟢 | | Sentinel | https://sentinelguard.io/ | 面向分布式、多语言异构化服务架构的流量治理组件 | | +| 🟢 | | Shiori | https://www.kimai.org/ | 简单书签管理器,旨在作为 Pocket 的简单克隆 | | | 🟢 | | 思源笔记 | https://b3log.org/siyuan/ | 【思源笔记】一款隐私优先、自托管、完全开源的个人知识管理软件 | | | 🟢 | | Slink | https://github.com/andrii-kryvoviaz/slink/ | 图片分享平台 | | | 🟢 | | sonarr | https://sonarr.tv/ | 智能 PVR 适用于新闻组和 BT 用户。 | | diff --git a/apps/shiori/1.7.1/data.yml b/apps/shiori/1.7.1/data.yml new file mode 100644 index 000000000..61789ce10 --- /dev/null +++ b/apps/shiori/1.7.1/data.yml @@ -0,0 +1,44 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + envKey: PANEL_DB_TYPE + labelZh: 数据库服务 (前置检查) + labelEn: Database Service + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/shiori" + edit: true + envKey: SHIORI_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: SHIORI_DATABASE_URL + labelZh: 数据库链接 URL + labelEn: Database URL + required: true + type: text diff --git a/apps/shiori/1.7.1/docker-compose.yml b/apps/shiori/1.7.1/docker-compose.yml new file mode 100644 index 000000000..686da5a5f --- /dev/null +++ b/apps/shiori/1.7.1/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true + +services: + shiori: + image: ghcr.io/go-shiori/shiori:v1.7.1 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + env_file: + - /etc/1panel/envs/global.env + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${SHIORI_ROOT_PATH}/dev-data:/srv/shiori + - ${SHIORI_ROOT_PATH}/data:/src/shiori + environment: + - SHIORI_DIR=/srv/shiori diff --git a/apps/shiori/1.7.1/scripts/init.sh b/apps/shiori/1.7.1/scripts/init.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/shiori/1.7.1/scripts/init.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/shiori/1.7.1/scripts/uninstall.sh b/apps/shiori/1.7.1/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/shiori/1.7.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/shiori/1.7.1/scripts/upgrade.sh b/apps/shiori/1.7.1/scripts/upgrade.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/shiori/1.7.1/scripts/upgrade.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/shiori/README.md b/apps/shiori/README.md new file mode 100644 index 000000000..16efbfb8b --- /dev/null +++ b/apps/shiori/README.md @@ -0,0 +1,49 @@ +# Shiori + +Shiori 是一款用 Go 语言编写的简单书签管理器,旨在作为 Pocket 的简单克隆。 + +![Shiori](https://file.lifebus.top/imgs/shiori_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 基础书签管理,即添加、编辑、删除和搜索。 ++ 从 Netscape 书签文件导入和导出书签。 ++ 从 Pocket 导入书签。 ++ 简洁明了的命令行界面。 ++ 简洁美观的网页界面,专为那些不想使用命令行应用程序的用户设计。 ++ 轻便便携,得益于其单一的二进制格式。 ++ 数据库支持 sqlite3、PostgreSQL 和 MySQL。 ++ 默认情况下,尽可能的, shiori 将解析可读内容并创建网页的离线存档。 ++ [测试版] 支持 Firefox 和 Chrome 浏览器的 Web 扩展程序。 + +## 安装说明 + +### `数据库链接 URL` 配置 + +> 名词解释 +> +> `username` 数据库用户名 +> +> `password` 数据库密码 +> +> `localhost` 数据库地址 +> +> `port` 数据库端口 +> +> `database` 数据库名称 + ++ `mysql` 数据库链接 URL 配置 + +模板:`mysql://username:password@tcp(localhost:port)/database?charset=utf8mb4` +示例:`mysql://shiori:shiori@(mariadb)/shiori?charset=utf8mb4` + ++ `postgresql` 数据库链接 URL 配置 + +模板:`postgres://username:password@localhost:port/database?sslmode=disable` +示例:`postgres://shiori:shiori@postgres/shiori?sslmode=disable` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/shiori/data.yml b/apps/shiori/data.yml new file mode 100644 index 000000000..55c674062 --- /dev/null +++ b/apps/shiori/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: shiori + name: Shiori + tags: + - WebSite + - Local + shortDescZh: 简单书签管理器,旨在作为 Pocket 的简单克隆 + shortDescEn: Simple bookmark manager, aiming to be a simple clone of Pocket + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.kimai.org/ + github: https://github.com/kimai/kimai/ + document: https://www.kimai.org/documentation/ diff --git a/apps/shiori/logo.png b/apps/shiori/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cc713a7079f57acfaa0e886e4b5ae39c11bab64b GIT binary patch literal 19505 zcmV-1OwO~3P)1yswG? zAZSL%#nDK;rVG#UT{+@<^F-Y_;uEs_Bqk{Qidf<(l8CzSM9~~k3=tWKNW~Lrh)Bs1 zsfkESL<%Bu6Oo5M^1ptLsF4DHcpDLCC8Am)-of!)U143_VRNnh07qOkPy8N^xI+q+ zcHfL`6>iqw69Bp3SO)+I6}hQN3B=Q2qQD=`(a+~4_b~bud@2z&{pmwQ5p0tlgC`5m zQ3dg|t=MX>G+S(q$9#1!5x>D~v6q>x_IidX0YU-_6T;rrUAyQx1)oktNk@w?E8f(D zh|(q`nEDb?PvR-*ud_or@--DJar}-lhpVd0;oMSQ->|jJ;d1=-bvqHieQjNRMOCB6 z&p0apGbl_58=1yvO=hfN)L&Ds!?5{E+(RLS!W9o`#IuQ6jxMlEj;q~eLV5S z-&9s_-po1~fCx~SAZvNaJ)?Y_|BC6UiB}SF6OO%<3PJO`xz_e|k;VSqFILBIg;p!i zIuL*mP?#VaqfI()M2zX82??gGbiHm0%8@00ZGJ`dn+lb0#f)wH_p(j{5DX|x2w7S2 zCR4gzcMB02rls^WDLMa*MAVgaE;x>#h+kcF*s-FxuFlI7tthChGP4c^&=Dw12pJi% zhPYA2=&Oh*DJQi@KaTvD5pglBb3yy?#21^b_EqLu`(Yx!xS+DSgmor>wm@NmB&9{_ zBGRLD1BobQLbtfothngwh`0enq+^{8f{Q2qz}h;;(iJt<#hYEOMk0RGq8dvD>s$aQ zLScerWW}5Mr|Wh9$S@k>GL42Tj<`hDnShz%{EDjOM6@BlvT70QFaU(Y1Sy!FnwXNE z+9QYK>Hp}+>Nfz#T4%1cy*;zC`qN^o&B;0pgfA2(FfqMv@~G@yaZhs`cRuSZ5IT4w z=avJtPd&18|MP|Q^>};*M1{fx(d48g4&aEpE^n~mG=E+6^+bfVjG?3Umee}lFSJ_s z7Flgy6kF_dtOJ4kp)f&ES@EW!>3ZGexhYAbh@%Tx=K)!A6xG_^EVkM==2uqDXB`IQ z3xx?mm8Oq~O4mn@NYh8ePe?FblCF=umPod1u!6+!Je4h~shzv1rgl3KZCzATyMc8k zkPj3l1VvW7@xnWk62@nm0+(8Qu+9TONA7tpE~uzlUQ${0N+Iho5b{u%&?%X*hNzs> zq(?>>qq8Notrftrc-oY|bMIXx71bpuPUt8UCbU~dtU)zBCFza~lOdNQ4rh}PO8i9p zikX$wcNSDsRk98Pp#_BrZ8p*vr5qg_GbJY_aWcno=dsQM&q|?3Bdb3gT|bNlhHX5sDII#c!^)y;NkiZ!%lzJ}I`=dsqho=|W*bv(ogs zn2Sv@Vr4Pb;)y@}#_s(y*48;zEvl(q!#WR04+;~Glbf1&_Q+Vn zm7|R@HxN-@)_DL};E5I#R8*}tTkId3tu{OBJRl7yObEy@8e(!&k{%pojDCuB767T> ziGDAr*!x(1W%Y8_S%5thW|$kDO!Q((-zU=)rl(nF0gx(Asa{pEZTEy3m3#KH&I0V9 zFvHa7=xD{rE`}TOdL`cMS8-!m=K%--&Jt_w^X9{i@6Fh`XAkQzAU+gkn8{5^yf954 zdCPOt-Mk z0w5P<_0C@x)zr?*udI5FbrujF3RC9t`XnZgh>pHvl*w=h5f{fg4}cu;MBf)wRDHSf zuzmh7Hk*%i9uNi!Q^uBEka)>RMUQW>#w&n06e{haOV|89wb*Ju$T|xI9|}{3a*~q< z<@QNj%n_H!ItxHJDswdCoU?k+7xRk5|K=5Q34Z1mJ_MUoExA?a>;*wbB0SH%d z8uj^ky%Kx-72LsMt9>u)JP;f>!<2!n1Y^&vxGv9TC78x?L(=Y%n1pm$B9VAItu`_tjytD@o@Rh2h3LcCe~S?V^EkO zDmNwRlDuAt*ZWo6?X0r^K-=&{JAbj(&V9C`W=65ahMiGD3<@&@H4I6c?Keh0L_})V zSpc9z%4h94bn}d@73*0Cfwn_ohLD_;#9`A@dlcd^5de8GTWp^{RK9akd4tQ%It!c{ zX32(#xdZ#=PVJd6pNKT9vj9MF^wwzyW*Vc~^^=tn)zYaE2*i{q+%w3Gt>o zC&YKTEImqhIqN(CAP}A^7S`0RT6nNF_v-_-yIIG9=AkepDkmi=YkF!@E)kv0Itu`Z z#$9Bw{X4(1D!ykl2WOZPvu^mn57VO}v7-n;nB$3dj$2)QFQw;wJjZ9S&I16_#uIPZ+TdJp*PlC|S!b)qgdhfR zhRMjA>8bBd?U|5I9Q9(I1puUvBTm;a))z2>nL)E zGfaV{>2=EgoZ0Wa5k^Bc>ns2uLmVYs*3~%5pi)#8TkVysSmdDeRJ`z~Rf z1pvZYOfRkSdd}he(d=;UWgSK?P?$kfdC@s*IpPMh&H(^GM2gG=(~ZRQC1$IA7wa%` zfWi!d>3zHPed)B6`EeTcXx3Q(0FI%~G(}%HAX=;0>~O9=ac5D^aP72lmLeac4PJ5Gx z$4poN2u1qb)TB={jD}>^K|&4AFx#o&qO(8hs?khlodW=%Wa8I+% zP?&9$6=xbW?~J~$chzWaWSs>7ptCsQA~RwQ7o_VW;}_M`{>(a0D8QtjHuzz1+C!sE zft^P1{Q>|vDj&DL>=Lupjztbyfiuig$W2L_dUImj>nKYAkg=}4b=o28ZI0!KJYGBN zFj9rWY{m3GiG6cZdi=;b2LOQ3dh4{wnX%D_=2X=bv(6$_D9jdQ7^Btiq^IsCA~owQ z003f$)2J`XG)1`=>^qFoYz7Lm8JWf??b0FXwL}!jItu`Rn0iMif=sKD#j+7671iy>;3Pua4`|qr__c{-DRlIt~+Idr3AoCGqau)E@t4 zodW&K1%z3gY! zNrWW(dze3^^!Ny62>>7@PCKfLVMX2`Ln`YeLXvf1{xBr%-+p8C&8%|(0EB~SUDB4M z>2+zWa|lJYg*m-fVxLjQ=(}0x000OV9C7^?oS8gO8AR_yP=d4YS(v4%C1ppu%Eg6!wZ+=Qr7V8|rCaYPpnXv}_4@1*_ z;fOnvbrt}Ca931ozh(SyWgoN75iGKL4zqlG>ig6faVhH@000o!;pA$CN;|Kp)?#6u zB^YFLNp|s|^ndv4q9?M>0RRC1Gp$#bZ!=<})U0y^gDeU&Z;&B%bQi-LtaAVW!0|ZZ zPXBTE;OANA2!@cqB%2l)shHdE^co`4v(5ql04L-9zH@n^vSO?KPu5vFBjnF8-%RiQ zo*arF06@;BrzXCerq`)h=je=(o+Z0vNZO;B#^{hg)mNT9oFZnu#ySQBnQQvP|NJh$AkAbrt{s5KeAt z;)^*ciC41D(Hcn?=1cv1-;=J7oXk20000P$>pDHP$2S?V2Fb2BE7`)#O-afcWsIKA zItKs%h-b;rv|m|gXo(~Xv%fwZAYXpSTc^O|_mRN}a^ zS?2%%0P#&oFwSC~p*fN)%&hn><5_0_001`9qjVQ!#2TVm=Qxq%3UltjK2N4c=`LrT z0{{TnSu!+zYnooyg>{Z&Nvbe&Qj&&ENa*q;>l^?8z!pc8@ayn1K4hKaSduEt>8VLY zM5JV$0{{RdfTJsNQ4*v3+o&#@wJD^TlinrF@j1pbQn>TL9pY8!uN|me5musICvl={#j2F5kacqBLzFW zf6p%RS8NyT_^kN%SF?^FS=s%1Z2GX~U}9CHr=C>?rrW7x#hZG~JEQLoDHJyZm+qbU zr08>+V8?e{JY2A2L+5b`-6(RwH-a7C^Z7h-&v`?zVdXW;H(3OR`z< zre{%>007VyS@B(FupFORVP?ce>n0=^$FUk8002S@M-=(PkhHs5jnAwwpXi@(2N4&? zYJ30y2tAp`=x0VpMKQUZ$fPiHk`o7yj50pXVr&2a2wfae*XK`9ekolaA^MXQObT;) zYL6vEl*D3e000PW1EL}y%!==Fo7m%uUYN^<4H`=vC5SyP0078GZc5Um(aGYDDQaQn z^-4+^Y0!Kv=9mBgAVVCDSaRAq?}$01sD(MAi(v}Ziv<9HVDS67+cJy>omk_ER+yQw zhBHQ)qVEuEJOBWYJymW>(u-mZCR$4XH+WHH790D$oF^`L&DtNV3aZ#}}+Hb5oNZ5bD?f007O&Fh<{!VKl@Dacn^fGdCq^c&0J>Ng<96 z007Vujwoj7;Pg*~IJO{#nPG~)Oo-zG005j4N8{4;I%TjA8}!0V)9Z|*VhxxX3jhGD za1-K9mk0ZxK`+dUO)-}eQA)6n3jhGnRu`FKg1*9B&v%6Z;H^(v1n`F#!Mo+Kr>=B}3A4gL%lH7AD7WH;cU~H2?rWb2y?~f_c24 zm0N}}T9uocI4)Sn0{{T%tRIG?T@kEf1+6eg#Tup%al?akJOBWI&KhNmo)fHN1*I@E zVq#P|sfn2E0{{S0lMt-4%%BuzZff_tIpPFeB_03(pd&^Z4KHUHqhmXJoS+ouC{uJ$ zXCeUr00a-$XH=}=`pzDu(}kI5G&Hq#x6U31002NJc}7E8XOGe8!W@~BG_AA80000G zl0P>3hRj$)kIo!}>&%;{$D1z6Iiv4)M5OJ^al(N%=V{gvM5P)wg2)gp*zvvpT`JhI zgUR#NXXM{n*6#O({J$>|I#P`sE!g4xyDG@PeXC%{ml}W79`ek6k9CZY$JIMm=+|t# zsH5*!b!PC49`R#QmTjZDXe{dpvJxuaPp|oBq7D>hsQmM>qUfC(_!BOCn>V5`gMg3H zU6>ZBizsh!x;pay4quW@)9a!$jM4w-==%Wx0K_&S!PMd9TRU8s>3ZFH98qFN-wyx) zAhtBUuEX1Yb*3=mJNjM#000&`(_I}d%&hp1pVk5Z0I-lAr5lkMYcO@>y&WpdtK&^W z)1q_}I`Uos004%%zSKYYm5#izLxnj&ue+Qh(sks$0000irAO%|cI15>D$JaeMByH= z0ssIISWZe}W_#b$?!wGXO+1t1xC`3*J^%m!smM)9y1%{eY5y4}&tSbYj-LD004=}i9h3w0quBw zy9)El(|XM4?E13+002_J`@EN4os!h%IXUgUB%9IxNB{r;k~ONWFKlyR=BD)M)8RM( z000t{o0{0>ZExCKm^mrkb2^*|002OexQRK*iEY|gx=n?d6>sX#aoqoPIu`%{fV6N~ z38uWZys%A$nXcFUgNO{Bjs*Y!ATa}?BB!?Hb!{rlOrs&8(}@5803<3+9}#`3*POC2 z)ASL#%-Cq`OacG^vNa*zbpEMcbIQU@*GHa39N`QT003kwO&@v6#n{_&Nw#Nj;s5{u zNLKGtz2KCq_DqN~;rYuTa6Wt&>j!V|1%qezjVdnX!heiAWdpR3KZ5MB#6F`!}@s3m^bMhmA5uPipP!trjLn zTw>4@fqZcsDTkdW_%OcmKLsBH0K!sIYhP@&FmqCq`UO1>$d+>W2;!n+1Ruw@ey!kR z06=)kNlxtB($`un%n9+vIF9Ht!BTf4l_|pZD4b|w21RukMMMPv0JQc_Try%8-g9RVPv-Ddc zo)>%^00?g*;-arFpoPTsG-5PTc}0OClSu8%zFvTRF}el)@-0y)s!^AK?{ zv4W4|UGgoF*DLrq004hEsRvIg%)FGI2GQa`$WxEMN|bRt-!Bwp8~^}1(uGkce(t2g z^pXE^(Go#O(>#n`b9zcrtJ|9ZG*Ml11F0{&T9mOo z|6MA|H~;`gaUAu}Nl6-b?B|Xv%uJ&}OB|ilssP7Q3^;?dQ|}jTJl`*7(Z&J*IBJwB z>bMig;|nv^a1jxyMNb7GMLlr}k)qX&Zi32Rwo$aP00554jExy{?B7rLsmBczIS+&w z<(SJ!bjpzCAQsNKRh&CPoz%kA|_Ae)%Cg{Y?0-;8A{w1Q0=b7_{sN(?u9OJl6 zNRBJaCt?j+(c?hKP+fbYsArda%>m*M9TaUm0Du#v>2=DZA0JnkUQ@KVrwQc;f*8G$UOf@%LrfzY8-fA=bbVoy{y2NS5l_8%T58U7}9(aewt0 z@%yVq8xH`WIazUC2Oa%b_4j9aPWb(qAmpegP9e?YJ479mKUhPa|I8P4OaOppaeVsG z505!z;JP!40}{n0r;_H{X19eClxOL8M2#-d#{~drM&i*Aj=jc)=P%(nn%nOo((Ab&4^Y=Z>taxJ&woyO| zxGr&|&3l%VXABm7Y~Pm6i@vf_5Nr9l76mooNODfKyQrALz(HVR9$z`2{ki zQj_+n*`zvmBn15YWc(Q$E2AEGcr6~~eC(#t5~u_st3X`ahPjZZv6{Gl4wNdN#kY;-c0q8b^c z>2mA_nGixWTGBo;om3Z%VV$H!?vLLk|Bh{}V*mhj$_PbLcNI^39P1#^eu^RIkoK`B zND-I7I!cRt8-FLyqR&~!000OAzN?BO>cu(+w1GxL$|1u@k#;(1uAfMxRKC;$M#mY~Y+(<6a+ELtE{{(}ct zM`#n?W+UfAQ;FYI!8!^6fDrTw1^J^{r+}7u7k^FOl0w!oTIcsu<8x1=ECE2)6g*FQ z)*+x3ZZ|a+JjpsmtK6T?CEw~|)-eD81f?J%=`1!1&2zcP{prW7QykCdBk!6LYPjJ_ z@_hIf>ofoWf>RLB;gW0!@P7Lhk;lV2#^2oUy-AJJA0|FT?y&*@be4kS2!$B}nu^K! z&)ZqY2$Z%f`+o9#v4C|F002=bcp?Mq5YRUM?OOtuL7DM-12bWLzhd)e00=({j!42w z#=wc(ugoSEj{*5Bx0CCMN624}XDk6AJSmQDA`PK|KX`yV-!Bq(%-X}`yzh4Mty?YX zxBviBq9Woo*gQJ4xL=)3e1qf2nz91&SM4G98!wV?-6}!H0RRXE3L*}dWJ8eWgSW`P zeXC%{_if%t&iigdSpoq3MM1cS8Jc{)K%oi2{m$#;x_=6h-6qKK0RTdg;;%mtio723 zeEU_<4(BWTlN@74kmrl}K|3Y@fLt_{rF5Q#hj#N8F7Na)cv~GczB-#+4@?Q1xdH&d z$rMC93NwWH|0oS?*4!aJU*MTa*R#{f``yC8BI*DD&^#3p=O)4e?4iu_(L1CZcqS{bLWty1#pL5*jdAluekJA0+ zCxQJn0fffa*OPnh9Knw7-?TxnV*|8AMMQYmPA=T;zyu)O>1PpXG(^0g+@E|zzE#Co z0~W;Ps3*@{T*&}=Q4vpdSQ$?~{C|{ELk!006R}B96CUEm?W- ze)}cs2mk=GqvD9_S%;7l{o*3l5kPDr{l2OHc7-?tfn+$Yya0=dNQjE(sE!kVdqw%u zYFQ@$xx&9&08A;&7F#Xr5C8xG66aNzYwi14rvLx|khsGNjtJ8z0RRA6!4qGl;EDFI z4gvrGAaQ#Y9LF7EodN&=K*~6xLkfjbyDxCI2><{9%~DwG)ruM0D%`}=LDpda005+F zhQ+p5apXh3l64pW008OYD*q}>ZY%330002e#cvA~W{Is1XP5v004*pvT)!(&n1zSy z{j9?P002l;q0Q!3unqwL01ygLm;e9(Z4f9-p7@=tg8%>kNK^$KEliH+57ub_005+j zC;oRjT9`#v+g2jNE~Nkf04FH1*#D%Xg;{K=Zy@3=tV00+07y-t#lD@6pY+33Fw6r0 z03cEPdOEf+H`hCNGtC1403b0uk=tys?Vw`|v)s|JnQ1Bj004>Mcz#>4wcgeAvFhk2 z%N?%mOjF5(d+r?85#UtR8q!>I1Cd6y z^@W$Rjv+cl&)%fDln-^hn+`}3x6b1;P+&J zcBno2!Lk44;IR^rEyd|)lIG^ySjS+F(?^l^nHNaWFO78+fDpm|eGl{R!dz45*vS*^ zWtIs*Ac{dlDdO1|SjUhI)wv@{oAV4Q(oSa`1wiuFSRJKDKmNNgs~g>Zj;EiQr2-Iu za`;HnJ@*E2(J`!}NQ$CoZ_++GofHGkU>yZO(yHB!8;*W_;tYT@GmX*biysLf_*55< zqlmm2nCQ|1F4jbfzWvC*dnfTV`&q{UkfceQc07LcW8D1*SyEmwhP018fwDXW!{zcI@9zx`$a*YyU>nL;yjc zy6oz}qa%v=1X0KJ@2VvCM{kQVmh0JE@(VpVN24L_!_!Iik4eIg10a1iv(QJ>IHfYJ91H$m0=qAccaoQ|=|r z!?{E%wXkCWNEA=Bve;s4IQDZV73MDvcd4kU06IaNH-pqyOb~xyzn?q{J|upBwYbCn zx|-aJ{v*m*>hV`mM8PYfj0GSyztlQ@JMnWT6=vbVgQ5ij=nVBOcamzB`553vKoUv{HUZUe4*aTonb@g?mePlW*`ww6; zzQ1BSxt@5G$=I#&mu(`~)7j+TC(`62ZA9Sz2krD{iL_dA#sm=Aj6GGKHuw1!*OFaX z>tKJ~383j;(!Tvjd*7p^Nb1RCeEOjRD8b_k>`sAqK>J$;8Kcs`5od! ze(n`O3@a@S&8~XaVqyMbwc?U2FvoRIBJIqVn2pcZ+o|!1$B3^z#4JNwc)$IU+#iZN z^+4G#og&}=jJV`fQO5-kT1)-c@@^#@{U~H0fL29Dl6uk|6#33PQgn%962ZT-f}Ho> zO8(02OvZ07&wu8Nw@lwry2!v5YDz|r_W%SRzoezFv{;z=6;-Qv;;|Szh)&UT=JN4Z zq?t5@C{oWPgTH1!Ij7tZn2j1TJRWkt{yce>FBNrIMRFgCcru@~1+NC~aRP+0{EF%q zTKZb6`(YMa>hU}#h)Q+wxWH0(oYBNIN8`*Vn2z5Wp3goe-`bNNArqYHoO4O{`g^2E zV>2-eAQ*})wiZ_;X|*uT7Mrwh+<>eoM_owT?59ZCKb>ig#uxL+|K|p#89IaCSwXHR zA0yx9jiQgONIi{oFTF#`jPpew8=%v8YACka8(R8utA)wq(Gm~|m(oWP`&fE@Tuk02 zGT5-k>m^tA{p8OqzQi7JqDj4w_k6J*Ty=w_2D@ z)>!M81vL@CUli%52cG5AJ~)kS5RZpk|C$zz52s-txcaiS(4@h~&AhtogUUFP@A^A#H2Da>y zBYsyUH9kF!_`__bBq#@-MG-kqAKCS!dm@tz0H;#UTZ+mZPDg96Ib~sPw$(XFJ0>$zu$+-}w}1lLrSu7W3tx70Grpy-xJ+WQ|5Ji7@XHJcAoi<5nhI%Q!J zapF(41KH9%GMyrFpCwKo#X1W4)~zDnitxGP;QxI+xu*S-X$Ivv=aKH+1*ABwKhqol zC*p`sIW_*2g}JDvb{FyVbI?*jSW@&KK)O%ABeg_!y6~q`yCxBD zw=>J2=$=Trx8{=i##@+W065XYn%W;u^_n)EVG`w6R$(D_=rC2*^`v|ALsG=WvyKwr ze(z0cl;F-IV)1X^Las;dB5G*$c8%aPx7|(p?^hC+n8Y*(03A6wEI-w2+Ekc)8%|XL zPQ=B;lIHOzNqf&jtfL&^s3%w6Bjovf9_u8`1-2{8e=_hrVJbowc%(>k*8^;GKzQTn z_qM#OO@&!dS+$6GEMfp{r=B#0BLDLPsV}{Zh~rqtA->K^j;k&r-|Au_o@X6L5}Ljj z4fjtWzVB+x0q|| zi`w$qHWy|=MfGQ$N(Hi~NKPef?z4fj1u1Eq{S5gx{>D0nWcmLnCD+4uvyO3uQc3E| zvPk#dr^Iz-v#lG1mtsr(SH*R8-nP89&4p>U+T6sS`Z*N{PpYe~4g8Q(^h#zO<$s*c zzzPd2{Ff!MaQd;l=AWtIw(H6F>l)TkLIz)FA?JO!kxxQ9wP+^ZPP%!ENO{2} ztfPQD?ORw=`$k(|+^)iWc<v2k;pe0pHiC7W<9NRLf*POB z4xBYXJGmRl_0ZJ7bE;CI=$=Rs(`S(Wr`4o9H-mK?kdYF*JG3bV<|owTdH?*Wa7uHcuqB{R#(!Kcaz^*p{9bvZEK5XxM z+WnKyY_&UzYU|p3lN3Uqa@2*S|7jJeub99(O0ybYnMJP0?qwZAwp_UnQKLkE8PVKy zE9sZ7Ate?(fOg8S*xT-ZsXKJ4V7At?*^L%Nr5rk(BEMKd5l zU&K0!?0LWY>d01T-Znk1Cc231r${$%At?r)#X1Uv1b$nwwZ6@heU9o-VHQ+Y%_p8v znli=3Cs4$zb0}i=Ys48%tm8B*uIIeq2n>dv9UClwJ!I-IGZ7%DWW# ziw;=u zJf@7OE*wJo(HF6f(lVEe8ec9T_w&!PP7>DmI!oZ5vA1wJ>nN?$Mv(5sw@5wt z4oPeP0MfAVKy8Pg^ytiV$Ffem7bHY=~!+{@D1xEr=*!Ug>?V^II!Iu01<8O=o?iXedD5<+CPcszax&jqNB$Ewz%FYffZB~ zseM^TX`RbSj_bw~IkA+n)VN>DKeAx@n9Es5X_ex%{uKGuvcRQe_sjX@uiU{p5-_r; zrsKC0JM}ojl*-lgAB!=!7;x23~ZyF{hv(v>2fnoaue3rTtQxvb-W zNJ=WIrgY~0ohr;iBAQvT7yIu>9M?6DB4)o%x)4_AfD%!j;X9#*qLK=_#Wm_zf@MQ zqSPM#&Xz9-K%*h`KPHiCu6uX&2wGYpC(H=ZLS~ z%Q{NOMMehhfeFnqW+ahMnrpeXhKuh;>PdHydaSe`J!y?^`xf#n_>g>N;s1Yz;5&Qu z#)xuH?+B2otHm~d*!5u=VQj;`wT?Pzg%+~oS#G)Zn9)ov)v zHfcIji+JHpQp9&-9i>w|-+e`%|I8CkpCC`X2_TJvYh} z{a7%M3C&aVODD~P(@5DbopqFU4Q!qpie>37Tu!ck zJuaWJgm&Q%A0+3)cad-XTGmlIjf;*6Eb^|t^)6DJIhb`EXx{c#G^N&falXRHZ{4+H^oy|H%@Zk)z{nTpGJ~5M2BSy1M5;We$ zUz7W@xy0|QVjTtkQe?GH9lyTp-C!Lr=<}uv`u4p4pS`=k8tmhSBQ7SE6lV+~MfyO} zTzdnNG6XMUxt!!#zJxrV&zJ8H5)@{Kaov+hGv!`V4LgrW7s)zKaJb#%{(K(!w{Ice z>S7`v9w1<0ugh&tEBSp?FpnAZpTKKv^)i^n!Jg{U%SroiPRQTuam{`jGYg?bO}|7n zKATJa>uw~?)CX9{2@Z{hG!t(Re8|@xqQ=*rC*LncME=lwye5>btqXn^3G!sF{rur` zIVC?)h-1s0D(iaE-up1?7@g*?*hY;7{|b*q2yliO6pBGZDI)vnz*3HKjNu_s4l%cq*mo=iLZ1mx#zw|{!M?djsl^|=Oxd_?*<;((B3*VFxgFR z6baoZV&+SM$5Fhi&4F7M_~kOViY#@4Jl-hSVu`saNf+j(CSkwK76cX?$bL#TKM=e{ zE2y#HNg|JjbrkX8lB^)O_-;oQI*|F&biCb0?)Uy3*mM9Bgo1%DjQa07K{h)Tbai3J z@H2|}DBVaQ#|RZ%_oTpL1Ii)ikox?KiS$vdBLx9Z-lCt$yJ8vnidV7@!ww2lI4U)1 z?tPe)XATbRBqDcwot3<+ipW>GE^yY#nQA@FohSXC(YFRNqyPXtdoex=Ogd( zCFJ>H0r_`gp^vsu#MoYlTv#sHYIB0`U$gAY{!fjJi}{z(<46q`pAfh|+4M(l+#kL} zo&_JUjv*Z=Own+OJt%U{Cq!E5Z-gFf-c{znwrT!tTUbYttjpGKRTNsSyims%e43Wo z*6=f# zxq)BK)RXTdiiu?%Nm3M?=S?BYlEm0qq{wQsWyPCD#c9;3LXX9g>Z)sxEM0fQsPXMr$@g=oH!BAS9*>7SAHGe#RYj!Dc_vVt;l#J;5AuHVCF>Z{!P7Rg#lBzY zVMHm+oNc?GN!RNxPLI-^BgS}w(`ZTe#s{QG?aMleVEh%^$g^xQdB6IUbrgUW`O7zx zbMm#M=s$qex7eja9i!9y72B!d|Hf0}6OUp?1qgj!54m5Q zL5^{mfqQ*&;@`82yx)AmI);>NDX6R}6>Bh23$x^~{WC?3?JF_I6qMgj?zwY_8X8z9 z=@^eEaQW5s)HLF253^1K5L_NNxgNZe-1Fu07?k(NAMi`<|J1McR^2Y^|L^O`^>RMz812SeE#!LgvB2e5zIrd~H~@n2eDn^v@*WQT+YBxjd6&ue zQgeHmEw=YBF03jMb4<~9CpKH`md$q8V*?Bk1uVuFg74>_s4>19Y45m?b(B{54<967 z(Tc!tseU|931P&yx`Z5KMv&sHA*3F66)DdiPF$>!b*y%Az4jcg1pUR&(S~>T9(YOY zaRpx*uO$r^o;%0S`KPcNUkDMezDLT_&tM&+S^n)?$u(m-@iLpJBnem=FZ5`%r2F?r zq(}~p=cm2vR#Rin1FU06#;l5cJ!VwysSY9*tz?irk~@i#uq~1vX8|0tM-ud z;i=@jYa+@L;3#(^Ij7t}t{HhDaZj-EscEbuNC!{fuqaDnS(y11)xZ8(?^?uad_mZ4 z)HwSY)+qvfn>Uhk>cqf9-Tn>OQ3RklzLh@(9;FIgeW|yzj?*m9iXVv@U94kB#$~_# zIf2#K%nGx~H#LWru^e9r-k%ne?@xwP*_}>u&wrm>)BZ{R9b4Ju00<$zmCLE&<}C8A zkk%5A{(V*C`9S`QF|^g@`i371Ee>Xv1O#7vy)_li#@{bC#f*s4sQa+Y5p3R~|B^Co zASt>hiZ-UNbS?SJKU3pN`GNl>FYa}T28*xDgWDbWZ^u`fq@LB5Th zpQY+QR738$?@`0#YXgf9peO-E*4Rjm&*V_!3p2>O?0Z4y33yj7$75iBFHeQ zB-SBkeh>3lONOK^$TUXZ$T~-`afv-Ba&E_#(BAotEoKPw7gX%Me8K+1#jJxIC8;yaCK*OU^3uU+|0Rx-*Q{A0QjNQk zwEuiGuq;-8;$k*nPww zJ}5}OP-3>&?i*KH{wC`j$CAW7%wrW>>^m3MSY)}KxOd67q#OS8T|O38WmWO9G> z4$2ZBMEU2WdAx4cQBEYedzeRM#u~aV9@2l2 zf>UI$&H~UX+{1)6Qk*%Ml!Jzndfb)7#U=dxdGE^Q)Hq{0(`-^vXtCdTS!vm)taCI+ zvW3|sE8cX`+<|@G3GKykq!@fQsYYK+iXOcJ&sh8aSkF2Yb7l1n^Uhhb zNwVt!O1d!V$eCv9lA-C_q%gxwiEyW z1P4!4S5ohOl68(#k$hn`iCnSzeuc&M9_t(c01$k$*O#3>V_Svf*8&WQ!fZ08qUr-8 z{xItt000m?W{d5E8CH80>l|$nGKFcj+E;CHI2N$Z0RR9&Q$4F<{~fGDv{lFyW|O-% z?|QbZ-r4!BKL7xLx$JGb?Z}}B_-)Efz0026yetc^2yB)_uyC3CGUn{^HV0BE;8 zV@u0YScm9{kSxq5v$pMhj(FO@ItKs%v|Wka@=&qGeu#CBj*$FHKdnjAN5p?UDDB%G z5t`wwvp^VADoHu=e8GnaY$VR}f{z0rl$n)#FDa;~Ud}p4M}>4@Hp%XtbU|LPOSjyA$m0#k zOR-0V>^;n5&8{uKo%eI!u+9Mh04FQ4H(pcjaEAO2`LZa?!kt9pf7?8Th~LFJ3jhH8 zPf@My@v&<+l(Nnd46-OpI+_2tS=VqNHSY%b0P0SAGUXJIBGmVA|iQ{5f z=K%l+H|ARV3)6S+d!W?raI(%4OtLFXI&yh-*MJC}I?WJy3F|BX0O5pF`hOizvf;Yj zE_cW*s@_(zxrce88M~`rA|em#8~^~}WX9I&=U8VDifjwB+~M?%EiFqXBFXRK4FDhq zMHbuif}Pc0u+AYASzeMoYPZX6&*W%hZ)5ZXBGRzV0{|dbe%`;ep!cCU4q45VRcFNsNF8N zeZ8&zr_7k>LvdR5#jNuH0E7a+pVrT+tiCP3vT70QEG&f0EZLU)Ftq=)QL!pxE002f-jxQ}6hcnCL;S94G^YP3$2tc9 zfEZ?1R82=&whU*OZD7A>*cOhcAL|?d07A*HsJc17vT6bA98!jRm~F7A=J33(YPBz2 zuNy%e&dLEmMtIsXantsz=2X@Ez&eW5;S94KGL2E%B|`=rAfg!7SpWb!%WSpfj$2<| zz&b~$z}Zqem@V~W)} zEC2xQweY~<=O%61F^zSOP=hnf4p>xEyJqF#`b$~o003w&KhG~KsH~dKI!7o%VRq2v zzi&3rDlJRliQmdP3jjb{m@T#^uc%lzw#?!3vd$8Ua7nh4()7Ci^Uvs)m8RF?#yJ2; z66fQ8ow2*>xq^!7FIZ;@Whl%b$&59amJChbM?@OdSpWczGS}K)824M*W2|$?0iMGQ zlHD%1a{%!h(u~nJu+9Pi(4_o8?ZubmJDOmj^4V639PdK zKzQScUp;QqjvGtu4kzm@a)C)dK{md0%lujE%X$+}8(C)ofbdjgu}!;t$GY>%9Zoyz zEOLT-m;xDTGAMsaPRjQiqaSCT1pvav?qY9s*4V&`u68%LDFItu{EPk!azG5HnMKeEmt zcesZsf^vt`H@>uNh=NzlW1R&6WMyxO-Eu9;QXDwL6xos?X)`m8(YdU106@sIk6mBZ zr`T#g$T~>4Kw&bFX*9$y8IoQ}M3Jns06^#|ve;&gFD=huog>`fIZOt2yWEbS4qHDO z9vjs=PNN>cIu8JZjQ!bLcVGX&mYr|24ib)VhRIl7pZGr6$;p2bk(PB90FW-T#rEN> zox5%?tab9NvxF-YrUZ;8qU^zGFJzjcA7PyZ03^pYYkk>(8CH80>mcC{mt-Yi7ZL4s zd4JmFa&6BvMrRU{o^>VwV9#u^&HHrE!5e4P9Nxt`3!pG1W0%WCW~+Sz5tU^cqiYU z=_f=S@_3#3l~tb;kt@R(eGW$y!8#KFbe!2@`{u6A756UKf2f#s7HAt3W{5Fc?IlX9 z?Zc7X)wKa1S$t{JW+F1M&H@0ZR%Efg zFniDL#|sZOV6~nQgu)DQNm@-*!D+p2oseLfg~i+fq^YdlxjetJ>VZWywVPRIfsR9A z%E*$TX;U&|qn{1K<0L=u5(Ym_}AY{SO)=NpfJNghS8v# zo|5!@rZM_n)>!~#$TG8H@5Kd`)upV1fUr=QVI)bbj{ACW|EJUSk+%{SJ^<(xo~P}T zHf_IUQB5t*D8mE_GfXWT+V|=aF{bA@j!t8p1t63tRK7RHtlgS#w%GTv&H~~>VTQTo zR~v?%YfGC)9M_L^768fO$)!+h-yXMS{JkTz zX~dC^btV8w;igrc7JXrg}*9U6% zv(5w3g2IGWWf%>o{V+6rnu4d>S!V$d3{MqBb@tig*O$G^ItoY^3KQCF@sR%GM;l|_ z$6B=@7d+9t@ulT=n=Lj6>ntFBC`@R##Y56A8*MbaO2qYHoduvHct7{yIcqoEUG8u; zvd#jb1BD44k{N4=$}k$P9~B#&o?$ZFz!8_oIuk(a_~j)P)kTFIzaqb)8jB4;yP+_l z(=v^Q?l1N0{c(C!@{0#AIz+*npJGEJ6VST zc|&1>=rUsseV1k?zs5J{#<9)|w7BxB;adb1W8jZ%p!8hP6VKnqT_y$~z-PA;l!lg!yrVA>uLQRdgmRj!R0zx1E zE;Vs5#)$0^`umJb-|ZL9xj8Wa!Sh3|kSuOFs=JHUj{wE@)kf+~?OPoR*|FKu{jp*x ztGkQnXB`g_y^E4Zt4VJ=8n_>JS+p{b=60J3D_bS8MQjI{L41FsUWQ z1K#~3yZf$2db+LyaO>`&KlUhD_&l1noaY(4!h1++DI82{3yIL6C+2crKC#PvNkJV4 zuvK>xq0q4`4{uJJcT#rw$+%Tr(H%t83=Sr>oss@tf261D3V_bU!F{fkrN$Yh5Z2w* z<{SZ@KC3KFq~_)XkQd1*^MURtqJN2lNt;4E=nbFTzT@JlKG$gghXM5HZfXN2AV#ua z-Zm`fv0+!Lx`T+;69NzOj)dbZzlL@6~4f$zsr?zsU^zd%J5(5Jg|gDr_* zGFPkT-_`1kwcl(&re2n7ugryoY_4d{yww~@qyq<&=r?WzeO^GK3Mw2A`40ecZ0#Rv z%ioa-Fb&9rQL1DO+nEIL+OVqmjP3A=Iig?SU=lSc5ghWYVl^a?0H8wgfY*->wG+Tz z1q=ch*nlJ8WdQRcFadm0z}K|x%w(*}7bp}&kWbs?5B%_k=`riXH3T P00000NkvXXu0mjf{H