From a989d8b703897a24052ecb6aa95a0959c73c884f Mon Sep 17 00:00:00 2001 From: DrMxrcy Date: Tue, 21 Feb 2023 13:29:59 -0500 Subject: [PATCH] Add Flatnotes --- apps/flatnotes/config.json | 52 +++++++++++++++++ apps/flatnotes/docker-compose.yml | 28 +++++++++ apps/flatnotes/metadata/description.md | 76 +++++++++++++++++++++++++ apps/flatnotes/metadata/logo.jpg | Bin 0 -> 31316 bytes 4 files changed, 156 insertions(+) create mode 100644 apps/flatnotes/config.json create mode 100644 apps/flatnotes/docker-compose.yml create mode 100644 apps/flatnotes/metadata/description.md create mode 100644 apps/flatnotes/metadata/logo.jpg diff --git a/apps/flatnotes/config.json b/apps/flatnotes/config.json new file mode 100644 index 00000000..89328f6f --- /dev/null +++ b/apps/flatnotes/config.json @@ -0,0 +1,52 @@ +{ + "$schema": "../schema.json", + "name": "flatnotes", + "available": true, + "exposable": true, + "id": "flatnotes", + "port": 8137, + "tipi_version": 1, + "version": "v2.1.1", + "categories": ["utilities"], + "description": "A self-hosted, database-less note taking web app that utilises a flat folder of markdown files for storage.", + "short_desc": "A self-hosted, database-less note taking web app", + "author": "Dullage", + "source": "https://github.com/Dullage/flatnotes", + "website": "https://demo.flatnotes.io/", + "form_fields": [ + { + "type": "text", + "label": "Flatnotes Auth Type", + "hint": "Either `password` or `totp` for 2FA", + "placeholder": "password", + "required": true, + "env_variable": "FLATNOTES_AUTH_TYPE" + }, + { + "type": "text", + "label": "Flatnotes Username", + "min": 2, + "required": true, + "env_variable": "FLATNOTES_USERNAME" + }, + { + "type": "text", + "label": "Flatnotes Password", + "min": 5, + "required": true, + "env_variable": "FLATNOTES_PASSWORD" + }, + { + "type": "random", + "label": "FLATNOTES_SECRET_KEY", + "min": 32, + "env_variable": "FLATNOTES_SECRET_KEY" + }, + { + "type": "random", + "label": "FLATNOTES_TOTP_KEY", + "min": 32, + "env_variable": "FLATNOTES_TOTP_KEY" + } + ] +} diff --git a/apps/flatnotes/docker-compose.yml b/apps/flatnotes/docker-compose.yml new file mode 100644 index 00000000..f60d1695 --- /dev/null +++ b/apps/flatnotes/docker-compose.yml @@ -0,0 +1,28 @@ +version: "3" + +services: + flatnotes: + container_name: flatnotes + image: dullage/flatnotes:v2.1.1 + environment: + FLATNOTES_AUTH_TYPE: ${FLATNOTES_AUTH_TYPE} + FLATNOTES_USERNAME: ${FLATNOTES_USERNAME} + FLATNOTES_PASSWORD: ${FLATNOTES_PASSWORD} + FLATNOTES_SECRET_KEY: ${FLATNOTES_SECRET_KEY} + FLATNOTES_TOTP_KEY: ${FLATNOTES_TOTP_KEY} + volumes: + - "${APP_DATA_DIR}/data:/app/data" + # - "./index:/app/data/.flatnotes" + # Optional. Allows you to save the search index in a different location. + ports: + - ${APP_PORT}:80 + restart: unless-stopped + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.flatnotes.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.flatnotes.entrypoints: websecure + traefik.http.routers.flatnotes.service: flatnotes + traefik.http.routers.flatnotes.tls.certresolver: myresolver + traefik.http.services.flatnotes.loadbalancer.server.port: 80 \ No newline at end of file diff --git a/apps/flatnotes/metadata/description.md b/apps/flatnotes/metadata/description.md new file mode 100644 index 00000000..62625bcf --- /dev/null +++ b/apps/flatnotes/metadata/description.md @@ -0,0 +1,76 @@ +A self-hosted, database-less note taking web app that utilises a flat folder of markdown files for storage. + + +## Design Principle + +flatnotes is designed to be a distraction free note taking app that puts your note content first. This means: + +* A clean and simple user interface. +* No folders, notebooks or anything like that. Just all of your notes, backed by powerful search and tagging functionality. +* Quick access to a full text search from anywhere in the app (keyboard shortcut "/"). + +Another key design principle is not to take your notes hostage. Your notes are just markdown files. There's no database, proprietary formatting, complicated folder structures or anything like that. You're free at any point to just move the files elsewhere and use another app. + +Equally, the only thing flatnotes caches is the search index and that's incrementally synced on every search (and when flatnotes first starts). This means that you're free to add, edit & delete the markdown files outside of flatnotes even whilst flatnotes is running. + +See the [Environment Variables](https://github.com/Dullage/flatnotes/wiki/Environment-Variables) article in the wiki for a full list of configuration options. + + +## Q&A + +### Where is the database? +There is no database, only a single folder of markdown files (and the .flatnotes sub-folder). + +### What is the .flatnotes sub-folder for? +This stores a full text index of your note content allowing for rapid search times. + +### Can I delete the .flatnotes sub-folder? +As long as flatnotes isn't running, sure! It'll just get rebuilt then next time flatnotes is run. + +### Can I add, edit & delete the markdown files outside of flatnotes? +Yup. The only thing flatnotes caches is the search index and that's synced on every search (and when flatnotes first starts). + +### Can I perform advanced searches? +Yes! See the [Advanced Searching](https://github.com/Dullage/flatnotes/wiki/Advanced-Searching) wiki page. + +### How do I get my notes out of flatnotes? +They're just markdown files. You're free to just move the files elsewhere and use another app. + +### Is there an API? +Yes. The docs are available at the `/docs` endpoint. See [demo.flatnotes.io/docs](https://demo.flatnotes.io/docs) as an example. + +### If there aren't any folders, how to I organise my notes? +The first option is to choose not to. This frees you from the burden of organisation. You can then rely on flatnotes' powerful search functionality to find the note you are looking for. + +Additionally you are able to tag notes by using a hashtag anywhere in the note content e.g. #work. Tags are indexed separately from the rest of the content and so can be searched separately either by using the field prefix e.g. "tags:work" or using the hashtag shortcut e.g. "#work". + +### What types of authentication are supported? +There are 3 types: + +- None = No authentication, the site is open to anyone with access. +- Password = The site is protected by a username and password. +- TOTP = In addition to a username and password, the site is also protected by a time based one-time-password. + +See the [Environment Variables](https://github.com/Dullage/flatnotes/wiki/Environment-Variables) article in the wiki for more information. + + +## Roadmap + +I want to keep flatnotes as simple and distraction free as possible which means limiting new features. This said, I welcome feedback and suggestions. + +One feature I do plan to implement is the ability to *share* a note. In the spirit of simple and database-less, the current plan is to generate temporary pre-signed URLs but this needs to be explored. + + +## Sponsorship + +If you find this project useful, please consider buying me a coffee. It would make my day. + +[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/dullage) + + +## Thanks + +A special thanks to 2 fantastic open source projects that make flatnotes possible. + +* [Whoosh](https://whoosh.readthedocs.io/en/latest/intro.html) - A fast, pure Python search engine library. +* [TOAST UI Editor](https://ui.toast.com/tui-editor) - A GFM Markdown and WYSIWYG editor for the browser. diff --git a/apps/flatnotes/metadata/logo.jpg b/apps/flatnotes/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65299125273248485028beff7aebb8732d1ada3b GIT binary patch literal 31316 zcmeEucU+U%(r|X|in>Uzu2iLnbVGAh2u(mr5^7ipMG}exNa)a^s@AjPz(@| z&{nCTN(nu%^bXRyd~x6Fz3<-l-n)1A{r>rWzwac^lk?1+oH@^&Ig>dv^W-40MdS>!9V~2U$p=j<@6l@z}dwEWu*DwTT?Uh zZ$HDnlqYcaXJ6|7adz_jOzU&` zJYpt07qBto^E~6=1-Ju@0GfaYf4_g%OaS2SHUMzy)!$(@i2y*wO8|g#`0p^Gp8$ZX zKLP;dU4MuDohQ$ppq?=LXE2#@d~I(J0Bqy|0GG`G0G1B`z(tE+ag5Wy7~8iD6fa|3 zu8fxhzzJXn_!giIZ~?#pw;44Vz#V`zK;dKr@bL3I|F6pDPX1RNeE#yu&j9B0Ujx1d zocf9x@HO*SrHASm+}f~PN>KX>*lgW_Ka zUb}IQMfyC0B7-303GOpN4^Ja|H&k>+E@_rsP)JtJ=7-V;#_rEwm%QhA2m-@1)lFW; z^!B}*`FJu6U^>O1%Y2F%a1ZdQLAD0CmC95&>}ACf*9j*Y2(fLH%ph%gHsPpJ%9Gqh zMPY1pYuLe(N_6Ku7@Kr)Lp;O2%=R$n4bIiHII_2*1bhRx-srtMnHgu^2-)r)FfZqC z$u@y%^sAN-*@!}hst|=0ka(rTJ(rhApsH?EBRxq(S3&i)NG;iNOVd-v%$d+#`?TAz zWc!hyUNrCE3@#)_NwB_+WpPAsP2M%;m5PI-Pdakk(68*xx?zjYlEJ9^QM;G7jlYGh z|7_ug;gqs&-y!TEd?u?=^Ttx)J-4n+>4}-pZRhCSqzbBL#EO*hitnOSTofB`a8cQD z^S$=w;5boQx#k#RT$o?Btj2)6hOaeOF+uTDdUttG0J8l2rs)u4a*Iu1H+iC-~ znfp)wKkfg|^Z!uRuK(YYwTalg)YC@;OwM)P{fI&M3E)avyz7{sGR24Bug9ZYr>x9# z4=p?===)l-cwm4nd7lyh{d81+g-G#L49t3uGuf)L6oh`%`*!+x?&7XN?ortTf)CVa zxh~_*rNd5-RekihuC;(vh8(5xp3b7kr>T5V16^XBas9=DEzcy1Ss=fa;*}G?TkNNW zCGonm5kJ&oRkoszm2Cvax36)HrkmX>7?7>%eU}H1+BkOVOAe^1$wStUZyO$Y9;LYN zeFzZz)N=y3n!hvG*dzpA`aoLcb3qycZ-@PuXhbH}q{CxGhU$z6jg*Q`utjvh+1WqQUP z$>X_2jHqH@PBG5-Ly{GDU5+P9o!if2Y4O(}#JwkGA99b@E1<1Zt1U23o6JH5sY==5 z_Q!jP_(FZKiI1Bi#iyBDyv$box|&FZ%1({kAc3x#2Z(bX+ zo|OKA~M4A z`m3$&)IyZ$gp*NKBA9rk%fyj6MT=M$A6C#x z$upuQ9#3q*<0EIjOe1gFms^~>{<~AGqIv=VUvIXi);GOazrGW{=jWCC>0UtV34l4( zTgk`5>Y#|D-yy4@|5{tccw279_%5&1YFcVQZum=vKpu`CzF8jM=51d!C}MCRKXpIJ zGvWl0tazinGp!3GEi_?lB_NOAm9;2va_?qIY=@UcVBz2qqG^d%p@urN(m2uEg041= zG(5P$JFPwmS=2y+N8BOgXHt;NqQyvPr6Eu}wS1{*b$XVVQZP`2WNUjr;OOBSU3JXr z9{ZTYJFORO8G#Vn1d%yx5592VdhOph(Dl0<2#_+c8}jxt3aPcTLKUeWcFXyK16l8J zQ2fy|8QmQ1#C(jwhlJDPTNwwbRBD~7A0f>{PqO3_t`Au;Z~Q}zs$_N~^kZ#lhTi@l z{fW3OrW*z`gX*ak4viA3-hZ;sBm=>Q9aH)X3wzyAjRw*tJwM$?^;a3k{FjVl)J>*| z4JpLYbn71sDT}tT@t5NDrQ7u#Yu9s~i_i-cksd`m6EL0G(3hY81VD(IDxRK-|1w__ zU&QrqxQVIzdr^nFM`|j@f!FKo0z;aE>lU;2miF&@eNhWhe_a-`6UVCACP(QP2OGEQ zER@ubc(OCC4bo2lMdR@pgBs)cr*UNe+kJ?w;|tFn*3^OD2roK`0`ch$++q=*9O5CAU27tMA>1I#CI&XS|ntlDWWk_*kumQXvSBq?h+Bmglz3 zgG0I^o$rdV>_eXT-pHoDI(zQa6M%)#k}gDhELuZ?Hl1_T>}##r?M~Z5Kf`sc{zrvc z1I3HjS+4cFDp=!7`Khlfqlofd=gb?+GcCfZUE)kLO8FLglrQn{z9E040Bt8CdmdoT zc+Bn7lHdH@y8d6(zLNaQa_5A9A$G4td$8`-RPDI&q~K9qrOr`ZOi3VyzUQbFbK(1c zO5oh5z`0KW-~LnFzXqNzKh^fu8VRqJxrUZ%^;)Yi*$Zhss`x!(|GL9}j$z!_#wy3~ z;9A6wso@)G$}2QA0hv0<>4J3nZUDED&~wv&{=Gj6)%{+j>g7(k^3)Aco1;AJp{GGe zL~+}`xah9`c+l(6Z{z-GhyT3&wZW^mC(!G=BRmyHwnEF+uh&P=yW4tolY-(KpR}oK zL%$qWodD`})L-fT^A7$f^n%m5_-D2K&3?a9BaOS{uQTKJU4?BwtyO*Oi59x{^B?W; zpSJ(n;;WfaDKcrC>w+@Jj0$Fi;HPdEU`;iXXO3{O zhqY_}$>bO~c1Ys4(HaS<(l4lUB~tnUGmX7TqtVS2dHYlwWFo8zYR9xKabnjKj}=Ah&Y7E& zj$|*N!+x8h<~lo*Frny{g>#Tz1>%9~n-sA!WiQ1W_wV@;0`B~!r z2pySB5xrP+bXQ7|F8h;Pm)~8=e#%iKD$BkQq9m6RN`)4+=$@(T7=Dqof@7GM;IV#} z=iJe6Ht#p^3dJs0X)3TEeY5F2nCdGz7|>c1wmJt^UjY?|EE{2D?7EX138dn9yMt@+ zLQu!fbSm6QX9b6*`xI$+F#B>8XwuDs%oLKfY=_tvwx+1GIKAp6no^l0U4`1eT>JXY zr{ekKCM!|a{*3p=G?Sl@=|TralhdL|7BbKc@>51anub2jPKmwT#Ds2a2YZn=FPkmF zBb21#={MumZMpCa&EALaTONMBPOB5gDO8avAz|Fe`%#zoLu(V2wOh4BL&8 ziIMmQm*rw^!C7D9m%^pWZ}Z4Xd7^qY+QKG7Y=;5@Pgj5Ht6VYm-&ei=y5jZQZ46VK z9aM%LII4Tul&AiT7PEKx#qP#S&?IR#uz|ki>+b&N@Qv{@yqDF%Ej}ayogdHX(C(hWPX?LE_;_!)x}LFj@Vq%t3#YNWE-^jK!oqNWuCdr``I!&Ep)+ z7RPBVk;tj&m;n+i`%h`-%VdomQ<|dN2H(#vN%}r>ngtSyixE{gDjOx%sV}K)^!6_S z9ln+Wjj{r1KpTgQVPo)wd>VH-=9HsEFKLUvSwN;kSrTa_ul#Ct=6Ror^OXH6d~jCp z(#&(yoWQ7?SDJoDPJe4knEpXiLa{k>4m2;%BIYI-a(6rSe3b2hg~3SF)6(1U%H+h> z?{?NiZeZ2d{1x*=4Cl+81WAQqD%egB$!;by`*%b#7#twaJM=6ee`HHWj7FE?utE7N zT}Fxe3}Ct`(`I&>#vqw7{MJ(Mqqi8-Zl4E}vLb~ZX3I60696z$Q>3%08%NxdxuO9( zETK(h(iUwXbZBjAynvt~cOQt159!Yo5D*Y)2?-ti{7wxCn)nR(ui_LEN@ZpS3J9QY zWVaH&lqv#Y6AXqS2-P%bS!1=))RpiF{#)_esspv#+iMM zNpd9|xb`1ly)8gTN$%W)>7XG5U+N0uQEkCP;!U44i=Ol(NVvhcW&v27`<7nQ@G&@K*pLvMJ< zD>scZ^zz+hZLl-Tf{IZzAv)-^8G65E==<{Y`mq}eSdj$^C0*BQHOXDd*rlLlaBZ?! zI>KXb8HcVs*1#LCSZB`FtLS4p%x2QlpeGZz9Emnngh zY`|ima(-HP{G6sZTj@igS2a=SV8rqDln?v)AH5gpdI`M+&%J2YM#oTKN7&3QT;bC9 zu`i92%_NNEKX&mNgZ4%ulyslfUud|(Glzm?h1L3M+Q?8|oWl(j#)(WVs%p{}ot!(+++o_mZOZ}{t#|?HjT?oyERhNm7WjzBT;&o|uq`RS& z&?QyRPh{R!dzBqk(cjTNzcpPY{%X2f{AZ@Cf_s+1DdEZT9Lpw`3tSl<^n`SrPgX)= z^$Ww&`+q4G5Qj!DLk!~LgrNhO^Ano))gBZqx7S?tK#II=_j)MI68mUU1YQipAZ(ol zgraRGeZ-_LB^AbP4ie^x;&2VD#p9MyzFr3%w|QQv7j7uhFj4+=ELA0&EW{_%`6-F=w=@7 z2smdSlKWS^#Iw%p6dDmGB6Bwj4#(adj<9vI5j1U*#z!JQE3ZOzP$olB-I%kC(Uyyf zgVvha`DVvx^UhI)qEMAnpLoS$_y0vS$pMjPX%(l8RhL+ig`0wyeN^RXRY`B z=r)2*=CSCvC@(OHk+8Z_0=%t7L(aHQa;kwf63^TDO^99EC8zFrrM61Qs zi`#qAricA|{H^UMU;&6~1ESouY&J$0_j3nZ&8;D<3}cc-<7$tmlQd?+&YKhadh<>N z3PW)Am1eLqNhh}o&mq`c&6xjO>Athx>(Yb{i>n8oXu|>wz@y z-;YVDV#G?L>(#`O{4BF}?F-^0O}e2BQ{3$%gVNB}cRaXtnQe&fDcVQXPETL?ykeKr zG4>iyq776~J1cyJ+h>DX>TWzQY4Til!rU^0=VtjRh*d_Ep0eh_byr%F^q8UzI9P_M z=2Sc60j%PKl6y82QkwF-ENTryF^3Xr-q_yM*#fmJmQsLb_2P#45-b|>-r#78mK7rc zmKY!6fBWqZ#U3@sH``%X^}E~pJymK_Y+y;-6r+k5+RdB_d#y#<+eSZyq(R#>oi&dO zPYV2M>>tqlRS<;+LF6BuC0snhtRkuhh?xL8DxcBUz_ zrNJf<{0@vD@4qd-*{>OW*{@aqC;PQ?WfQ9}+t&r5PquHBVT{bt?vy~6QfJH`yVhJy`;F~7J71(Qzh&D69VpNyoW-@n-WzCZwvo~8v)2L`O z7QvU%OFT!_%6S9L@UG?sl)a_GflYl{InP zNNsH)^)&xn(h@mjo4AN?L4G$NZn!y=*!}JjxC7C$vkolO1gd#-rcx2@tI7tG0@|*& z1wzuq3ayMtX4|y(RRoZ+FqvY!QzG4C?$UoAP&KDz2Z*e5C^t%4N7E7qh}L#=kTO4& zPuNLKj6>CN3b83@9K&AIm1JUzM2wb8wlqLnk_(kq>_m!gk zaczwPMY+moZSHZ!G_zbMA zW`*O;Ne)K@WNs@_xHt>di$QD>nIfEU@qucGKT$NSp!pp7Qw~!gebbQ9kqF7 zRyv~(q_BBCS%%}0fvd7?JSV+jy)s{|d5*MN}Nx8RK>k@u5kecE&GVzR^f8+|h!tSV^x!d6O zJRvIRxdiUp>5vl2D82-=2d>&3-R`D1MqJ$}7C(0dV+e&4Nh_Q85)Zs6e;N2bbF<=`-Q&3i!@a8Lkb_I7or|7uyiK@(j48I73;O^EYi2W z3UfSGum{>AR+^1!%8*H)*zU~f4et+gXm*UrdU}s8wna3ETb1FW;bS}6HQ_a!{C%O+ zx-)HTY#r`*KUCVPe<^y=%*xEnEF@-@hTx3zA)yTOH6@yb#PY$r?DLMIim{o1(X4fn zP5?c+Vd>LV!BB_hAuUf(mf5o;XYOh3r49+-@ivlLiHJy6ziIZ2JI||RKHgBOOhReS zit|x;4@8(KqnXr3Tz`w@5YT3gkv#zKIKFVp%vpMQRn`IScv?_HY| z=?R9}Iee_2)s-cC5DBB_2F zJSGv32?desgv!G5!zhPaCIeIKT#V$f|E&CJkJQ;F57|L z#(1uQ6GKCr?|DF!t7KG7V!zv(NqecgEHnP#;J&awPf4d|GVP%Q@EmGEi)At%a={d_}N{unu4Y{ z)T?k1zuM9ETJ?;|sQh7e-8GJ2UdgsD{Q#nBKCrC+g6WL*lk^)*HS||DWbY}<0QtDw zAP)_s6eaw6g*koQ`jL6nzF=l?8%!hWR{Z$Y2nZo-DyGkMEm_Y5CL*choTN3aZsMF% zFc4@OWI1o3aRQLo9#i6B3_j)dPyqqR4380uX&xiMB*D`I@IHF%tVfWmhfNxMOT-6<|FIZ<{d5}?ThZy zX65_Zy9V8p%L*EVknCTV6j3`^2uhaO7ORD5a}Z%iK+#|6Tu&W!h2;v!Yfoy?j0cAU zEBHPYgs51G)uJUX3HQ5pupbT+smv;?t1oFMfL1GSHHGSGuN83~(l?p6m(llOF?O@+ zo2n8DN>XzrxvE(8Swht#`})&t^1b4)6M*(!B71zkqFKa;GT$Ezi!?z;vwCmnZLKto zkqv1@K5R5r|LO9Fl4Qa?+ivW2D^rz=<< zsLLMJW459pP!YxV07`@JOvD|v4iD~Gh7S+9bey_gB9_J0Ipl?wLX*A3pwDwm6VD*t zG{UNx<+*t8eAm>>WJp%#Zka-wHs#sK<3lG^<%4d1-g}Zr51E|8ZYG5EYqC0nKuz*M z`2x6MAwz42gm@ds^$aFiu(T{Vq-l#JK?#)`y5hJEtz9Wa;2Ns3wVDPtc}epLON;3R z9vi$eSyeeJcq1;gx`l=-LuxA{Nl^cpH#-XF%|i(Lws7;X8FlmJS@YUUmtVIJf9eX) zKx{>h+xb9VZe;7h0`(o_1tOW*EO*KHFhYpgFL!o4ueh_k$Un}LjLwe=9Tl67bk=W) zbI5c)8kKaR_F#ZFaY3H!4;7b-<)oZPT}H*E*}#hv}UThMDI(VBKzD4%-mRx$&;HKYam9ngM;YkY}LXc8)(b#)B zmJaUL73ZTU<2(;3;*X1DHT&MHf8yF^zh4lIuM#Kibr#W6%jY^rNXwYScHiOZc)P(* zv(5^MR?e=fa(>{gPT+?6jNWh}FF{+s{BUDNuTr$apH?D`MYtsA7;}H;`fJwqzu@pc zfdA~$Ju~~!SVQ#co^{q%@5G|({jji|Cj@%-8pHMxjI|BJV}1I`c3V^KJE;5S>`wip zLf0HC-i5xNVX3czJ^ZZ_=1V&7vngPHlyY^Mf)PTBOzjhCgGK5lVVol+f`<7s>DrV; zPjqFUSvj>I9Cw6sYYneb;dzMguxwaH=$)1<*{O)Pki*hjXHYY;ReVhO`iVXjbw}ow ztTLOu-ER@5WTaKcb-$9!k81YK@r0CPFokti{h-7U0%Tr6ao?h!OZ}Kjv9xuaEY4fs z&VQD<+IdvQNQH2muY37U6|o^8)$M7ASe{1lKi^ewTsyrLIAI2#Amz(IiUn~Bf!@ZL z7mL!y6~P6?E)9q}v$$w#6*xDC^XA~4e_-&xx%`vD&K39sj9DC& z+%X$ExXkO?X7=2raacLju#C-bt*j}N3}#ba196`2qb%u92|4iDR*wvr=U4F=a}U6h zfWX`BZ(a#IAFZb18DY14?15>YZq9*P-;ilKZP@%ub2sXCmvej8NYr!F-4%bkH%k`o z2X}yI6Ag`OmLA!*(lGDLLZ*JvXwrSyErz-)YG>%h5^ceO_I~Li_xSb@f}ghF4Xm~u zO6F$5zL0OcJt+cFxr*A4F4O>9%iP#yHPVxK*3hgiQEY42)JN}%(PX&j@=`ldS%xZ$ zIj5H-AKosYQId^2I=a$3XHcWXu)(Z4G?Mv2DzWtYFwldh%;kRRLj8t^ZG{hU0T|`P zb}B{rR%}h+OL~DbQRY$0aVQJ#;BYF#BPc4Qis&`<+WM6C?w6^FiH1o$d@q^d%r9h> z(W#Bs7333)CwHOn!gt)f~b$clRdj zRw^QMsGXHeu?fV%q3^@_qHHSF;-Q`^8lcLSDvi?8z70DnH#8=P zo=QtCl%CTWdiie4KYvwvRHg%qRyd5_=sV| zDCvg}H8TMfrsp*DhG;edu_A@BhcUHTH%wsqW`@M=Fp$cms@gv=^xt0oW_z3SC6mSb z_cB@D-VX6`lsf^Od9!<+yV=3Sc4Iiq1Lc2PbMTR#@c2Q@<3=!vTVOdo%RRblsOdIoylHJt-oH%RH2NO>bus%I|@BIC~`3W3N+X-F)RD z_TJTNnaBJh4=R>3MJHtF`x8C{7b5%UaHN7)d(#!U;Jn*EtxBHBksA@3j#tgMtrIl# zwafV-L(o3bxU-=$zPXiH0iSemMPx1od*niE%9^fzGw`hLR)T+C?$Nk42bd}dR$0;I zSge7z&&sB&`Q95PhpZKvrFQ_U4JV&P;2TY*+ki+X)3NYb)Ijs7jc95yCJP5kvUJt@ zw>n zn_?BtDF*mS$zUkoH+d2;leca~Q*O<%3E=0`+pUV*}*>T;ks!WM&)~8puE_z6JftSIW z0?s7@MXz_Yr{kK68sOZkH`m`PJepnGmY9|tG&6RUDfA)p)upnrv?s4&P_vTaPe;eV z9TTy)(mgJt$6@6PINMOnW~OO{TNPS>?7eBCcT2u+=%?S#%fG$)b4rLy^u=4L1u53O zz#w;}7H34YTwG%L(Uzkn_IPJyr-uk98yc!0!b0%q(}#3C{Rk`e_@j&G$}-lPUJwfWv3QWUFm4spJztXxeQp zJaI6*(q}GL6!({}9$B(Vpac zCcVAbetxVZ>zOkuFPyZWyFu7XZ_VF|X6^6?zz=t`5fBBsv}t?peQ%f0=C9$*&<^Sl z`!aEG1qWRI9y`Ar@3jT@so=OcEAuu2;bZmg35w7M8*^?__OCJz3#WqF$2zuERspQ% z3QB5@X$QrM9bMy*+9|E>YjsMtGI51j6`Px$BWpWp7K=Q!*Sh9pR4ifNwA-$(yVh~| zTcrg^9vyBcudS#$_nN4%<=x@zE!U}5bz<+w&^`7XU)114cno56u3nPkP-`Jhk zIKQ@p>Zq^Vt>&w%2p&X4dD@K?pUWmyTNcigaCl)>KKkGNesZL%enPck)6G}+w&FKE z#+^vsVy`kRp<{CcldLxEX9Xqlk`W^09`lRk|I#(LvrMzTMB~xANe>no_>~c6< z^)XKJXJBZnmJ6-?Y<+imt*>(YSbCSjtL)l19{*EueMNdesdG)vSNs0evnBOQ*6540dnx>(#0vta&B{>%cLes6my!!QB&==%B+u-*?HrUj9Kl$#RH{P_K1I z$B)QRV}X^fYo^I@G`zD z6^dXR2}Q+`3LhZmn6J8NAEVa02E!5!%Ezv?*|~heKqb6Zj;k=iS3Y$_srY8QV#c-m zm)7cD+}R6LcHQ=Av5pxTnzRX5PS*gNjN8Bb8-Ce8glW)`=(zomO(!Sqn z^nK4KiUjVxrBv6?uZ>K%+-UlE0;n2GQR^swD96Rrlq)`U@5;)$LGZp6m#*X$cE6Vq zokmhTumNvJc>^^AE6T` z{6lY3&4Ru1EtWy5pu2@&7Q&4TD=^Vm93RAVMtVm2pCghE;yTqHrI<`sUhEG-58#wH z3dj)CvArC4DvvN~+XW=p4OVJGb4s$%@u?F(F|*Yo5p$Gw*+ zdgYp$Fl8QP5BM~~y(oR=;Ohkz?m0}M7}wia&n36S^X9AkebD>SYZq{bD2O^0jh-J+ zRY0wl^H5~7RI)6_F(r4oQcFC|ES=U|Ic!$cq~6~VRHU2lr(anavg`+X8DE{btJx?a zJ~kSERX)|eG{7-d-_C(h+RwTT05SP?VeT9 zsJ7R6fvZ^Gbp#SilU=g6Q^My>k`%FQRZEqa!Ra>ysSG0!*-*a= zwk`e?n~y5YCAfq$q*)*@hh4Ff?cR+Z!5HjQAqbH}$uSb(eKveeST);#^KmwpCnWv{W{19n^M-Au5X&YdIaD4(ptc@kvcv2xaTdc= z_^63PG876l@1w$t452_3XIIaM?5hS!B8xwYCse21b2$Mt!?GyLsryEa&I2D(J)G$N zq3x-#!mp~zb3Y? z|245a@ZTo3w;b^Nn4&(ZQs5HZv(Fm|j)uod3OQ%J{K0(H?3yKc;J$`!xE*vL%+Xm) z-smp>aZ*i{-cvm@Vp`wN6V4+)SQhxtk;UPeCRXXqKJObXLQ`nnGMb(Eu!zvkA&y)` z+N&~jL}VM@y=-9+BsdfW@9)<)LAf;AtCi?Favpc{$VE4Q?GmkB0BK2}wCsIcS5+`^TJtq?5QszxWCF?Jm2BM|=4f{--GS7ep@J$2c$t;vFE?AT zk*I!L%>|l81<@4|KxzQeW{IomUSbg{C&e=47wL%Rbu^ zaCp%98KUvXEvx-2Kw{K6Smwu$w=H-TfAO_eqd~29vZjsgc!?%*E^0)Bw`t zby7!ieolUjL@=_43XJt6L+wa5W}<1{*X4R2?dnSOw9fd&vVzl|^RM&iQT_|D- zBjV@I8_da==!+qEd_G0WCUXy`dQsU|)8WZLSdJ@Jr&ppIG zwIT6Lq}`ki0ugP)>=m@85j*7d8r}hUzxipC9o{z`@{VSz-Z{^`Qli41+WHwaZ7sVC z*^rk}-YGN<18occ+k0HO9%)KZ%pPbpCJFWu(xm5E_6X--?pVv9hOLsL@bl^`c6nWRE0rx|@H-PC(c@T))NSBdhI+f$;pEYy%iJc6B!BPHPDpuN zd+D3^p_fvHy#>NV6)?IKt1iAJhR7Qpn}1kk|LpP)+8wjct9Np-HKrn^HV%RU&(Dv`_0;%1 z!rmO7t7)4>niFbY#N5nD18Fd!^d!RHw`9VzqgP=~qzDanod5Z-JlW4)e`6Dn*1Tr)Q1md@U&RF)#?*~VP1w4auO%luB$(~ zUPUrrBo~Me<9FoS4?qv56-8c^@_S;XbDmM4^i`ls4efcA5_e7(^+w7imfm`r} z8v6EfogQu7MPI?%d2kLa{RM1+JZ!Z}HNw^|h!d^#HhZ^wTr)u=pX`8>a zbqMCT1kvlQxx*|1G8YMPGOuj zHiBlnhM-7WHxeU(kdb6)$jr?AO)II9SGwdT+}04(U-E07p@O^ulCvq3;lmIRH1AVa z*Naw=W-Vz`iAr)5N^*oP2*p7u+CsiKaF_2GBg3$jP~?sSe=hpQ%TxbNB(KH;3y^8M z@)2-GOB{DU8Bdr4wlYW?vVp-2+F&Sry%T9(gvv7Sg91BE7z!zwKqwYc*GCYkEJ^8w z$P~sCwSRNBfQLRiS_m5qboHwb0g0o=z3gR0_kt516-t!b&)O70?~M8c$&qMizc70Yz+A$rJjN5C?l5@uI0XNh86qXPv{#QxJ_&Ea4Z9e$}ws+OJ^Bu2;H>{NUXpyR#jn|1u>&pBf_dtCE9yNiXF0op&Lr#m&3~S?khh2Z|wLN)!#lq7x!-;pu0j7gUUdb zJ~W$<1GX#8&ghsB+Yt2pX_)CmvH4kT#?oyKX_~mp-S|Vh7O!-am zfzZt^xhSh--p36C+Jd9iNlo&d;OUUOGs)n5XcE2c8xtZ-QP-v;5&pcISz6IAR!=;U z*N_aXTyrh(p0jpdReKlBNyW1!x?D@oHRmw^hl2lfL|j36dPT&In% z)cR{F#oHde{$1v6xBCqe;?j}}j^l%Rc6T&idS}Jp%&v)Stk{KsURt9j@5Rw~hYsZo*z zYqGdiwE6ODH>x0d=t;AUm0{a8g3Ft+%2)6T6Q9Z|dD*mcmAemYqGN0meIF0Gbh;Ot zdLmLB=dd|!KX|Du@g=h-RS|&T>R9V-4v%0hvzIX{7V8Ht#0sQERKW<8Eqpd+^}d8C zw`++mq()PurBL09hQ9Yz)>bYq7~iXeJoA@u9QSmC4StF)AVM!yD`3`^jdvd1x7@86 z*Y1Rh<;P2VG4WqfE4~`sWHVI%KL0@^g0OW0=<|>!^@tTK0vG3i-j!hQ1h^!=bbnuI zbPOpT7szq#Ht3ib(s%;sb=s&Qk(tp*IMTdtx=(%DM`kqluTnHWU6L>=FU}=V`yfu7 z51eY3ywCI4C=aH(GndwpC>SKNicjhCHTG0r&*z>Q_B!Ypt#cuZy;2NALgvEAUdcm^ zLcPFflHyENN@$$`SWFQGvB`@6PBv)3tB!T$uGSokV5h4QMoP)T65e-;A={8$FPp zp`?80iqIMl7jw>XRbU_@Npvv%<>(0@0Y7hx@V|6346DGQwJVQg>V=c>1^qpJ6{1W`7v}PQ<3ih&<-S(*lU~WJ?e|5 zvOKZcCvj0(?mh8MQBr99sI={r8vt1*ET@6AGN!i5nJnB^ei={Fl+DwtRE0fZ>SDbc zg}0pPK-O49!)f5}N$J!=2x0Gl;#4wB5?I@Yzl%6;UHiW={bNEIRv9_m+FYMzwnS19!EC>rR_0>~Z&7mn~1f0|CPyE5DrtD!On!B?Yv6~}mh7fFL){XS97Nj$ZjftxFWMhif7JXYN~f}* zHX}NDjh*F;H=AYpe2G)rvu*3TM8+d?#oI^rN>q>i?#9!o`_XlAz8E?~oL_@YP5>Gu zwk+2#Rcr!Fh#VgylEYWg3-<)ymrhCVp_T2lWfIM+qy1LHxhuJbDpHGH@~1z4ax|`g z^av5zo1)q>ssSEz8gnU^H}5kULG<04@upF04@V+7tDO5?hd!WGdp%6?36Zy4-isA& z*rM+ALNcW!GYVn5*9hnnfLbTpk)R-4`Sr$C`cSI1eo3ZC_mp%jeG;rO?p@pGhA z`S3YnY#`plqf5U@+yBkt@kJb|M-{&`>?^XwP9TAqJJHHFm?YkYgtrsgUqa=%@q;r^ zQ3Ju#EK%as{L zq=87DYn}7l4M}YYrS17g(_ta~6}_LrJz!V09Ulpj_FA`5iA)N&JMA~5tx+>W3-454 z$2ElQ$5c6~X*?&whChmKyJg`z(Ol9CG2i`<75;Akez?DM9bDs2OFkX0yzQPrQQjA#CIi6TQ{=BklGyH zKJ{%}mKB0aBoCDxBhemY7fN@=ypzrLbJyf;ne7l1df7&+RSoV-RerYa-kj~h4_Yi* z;H%MyDU3v_Uh!vg^47qqv^KQ7tB6YV)5UEZ_sVfKv|mZAcmnls+DE?X1s$*Pu`kthv)CJH8W%1T^Qk%XNBR0##hF7w4OTH6j zuh5y+%Up#fKie~1){lU7#5pYw1#J@0644qLGmmff$g7WV%_#qL@Sqm!tW7etSN70o zo=TR$)3&IwvEQaxplc!`4ZX>XwTpA(>!{&@mjinhDj-=y&pm7r=@u6ZqzmQpL@W>hyir!64)Md1t=7Zema`r_ME5=YogW zg7N{EPVpGfp}|N;vursdL{CU#UD8A_r07ib*4^iQme-o7HfFYAoj>)lblYOVwrm#8 zWyb@yzZA2~ zpqFO#5~`^lVrs{WCh+lsN|zeO{~Hzag(hA?8z?dSHU_|>{SLV}k+_CVXq!rjp7=o1 zzA&n0)%tUi#qk_2Mr+^JuLNkh&%eM(BxC#xyQkFBz+hFMFolP_&;Czw-vQNB+O5re zQ=AdYC?e8yq)KQ41_+4!N)r{35<+L_5=tb5P(m4Xqz49&-lUrZf^-Naj`S`iv;-nW zAdrAkB|x~xuicq@|8+n8*1GFvt*mo$&U?z*@B8NL^Xz9oyJOVTMc^|8 z=M0cdhC(BycH?!YOoVG!uiW(sk)GwQEf+cBincIl&J;mvUk4Nm*2A_6O5Nx&gsygd zjhvGOrWbJ>ZcF13X;L}ZRFz+>y+dX`6xKxhX-;RsUzD8Bk2lufb8+6ggLHiB3q<() zkzfQv1T7!Q&=9kIANrUwW*lJqRtSq$4@s`HeKcBtl%Ew#5h&ZqM`v&5voD@y@aUS& z&LK8p_+52bBsGvSe~@|kt~qE>55pTKrK^`wg8Sva+vtDT@@FQ%XJ&Qq(Oa7kfm`22 zv=IVf{Ds%1k4aGFHSU40T*T+xaKQ)>p{&0#<8z+7tA(B(o`Odg_Zoc_fnTtjxuUQ= zkLFN(p)hL0!dOM)tgtm+QSgKKv`$8C40X%XxwL1xIdWVC%##RY?ulGx8ou&twIJEQ zGZlQr-1hc{xo(g!=i2EmP*;-^jZ@R)vQr>!WZ*=(4ikEH(8#}Wu)s4*{XOx{4k#v& zNoYl@uW27t3?K&;PNeHMIaXv z$dyzE$HLK~7Ht4zkP}{WhKH#|F$b4=eA`4p&Z=C*#wxltDq1fy;*euC= zWW9qT%WD9d1^Y&Pl1>oXB~e%~@4XFG?ykvn&jw;@an=X%f=C^}+N>G}QyW@Bux@MV z%@oEV7&|xVwJ0+)ORrJb%Ki&+1_fUjIe=<}kM4rz+0*)XWR`l7jJTDMH4?s1uKZf! zFp_xB1n*0CCC(r#4OCQu|6!ERTmBm)p<_+6UKjU#lp>xfFM2g2ihd6AY8lec%Ad5s zEqRD6`I2?;XfIy-mhHG_gj&Xpg4fy$ocT&_v_unuIXUzJzncrI3CS<-5i~{ei~V;jvrCW z1(i)A+@#;=h4T136U|oM#EVvzYuojIOn~HPT=meee*1YQ`+KW@XUZ#u=^g|ve4K41 zbQQenh9b zXb4@A4vUBv6gD_);HF#=32Uki2y1KP8A|GV_?2O{?56Pcd|c5};!+Iv-ESkJx*AIs zK7bJu@F2CubZ&(PP2#wGl#wPIO{PzaEsE;-C<$Bh-;9nSg&e;+m5f_{TLE_kh4R=0 zL1?>i>!)HKCN?xFIFD4i6=au6ng#qu?q*aH^?&VoPisq8IQLc z98fA=-H8~ny05*&lEBq(vy(k;N)xmM9iVza;KJ(f(uYRfVI59VYTFj|E`9yx$KH7k ze59mEhIE2QIwtEEw9C(xJ-(9jvZKv)xy5l+E}_P}mK-_&lMbxkPx8@u628D}8!Z>Y ziNl$NgWgk z>C!(A8ywv2HBq$&Qqicz-4lTcM8%7|V^#$}#m%{7?HIo=M{J>KDQey1+z0#uh{@hW z5u}FI8&&$(%UE$Nzz%{LIa(@u)orDkgx{5}%fy^cMzaj|(hgQSz5lnn{%dbFe)n$% zKiKZ=%`M>yu8wWoL)K;7U^^%HToVnFcT@45=(djPCCgN&EtV)5_YWKnTAb_gh;R{i zJ12kW&a(BS7oD&bP-ydhcC?Oa_l#I@<;f zHI<6*RNx7rjC-|OzR2{QHaDYsV{!*qX-f@*n5^CA9subEsD1A~<cl;&5Q*!iC$_y#eJ$< z42U6{>{vl7RAhGyK@Xi$L+>;a8I@od${-T_oa<-rq`-mq@3m|P#y9$Z%QHR3?LXCzjSgk02EDir-PEfn&R$mK_!3; zDZhQ*3Hzr(_lFat0}6279VR+dl-m<2%LeY$y4q3b1c1M=n5;V%*I610UuIaYFZXS} z3cSw!N+Nys*lC~Z*=AA251c*qY6s#LeTe-urx9niXH7zS`JqHPyadiR8Y-5(I(6)h z@$B0mhZSmare|42qE5GkM^fsr=gxv&SRh{pKy5>nq}nXq&S<^d-qGGqE#cms7Pdc+ zi!EK?tP)1B{aawuP*<3G_ZzP761LtA>|Xq3I3pwxc{h`Cs%a;Gr`Plc?8`|D+>)bJ z@BIXrcW37%IHK|s3)iT5tCr^+z`_;J@Jp3Apns=ai2KCC)n7LcV)K@5ZBBCDmBNDI zOpa~;oU8md$yWHRbSEh^pDycQz~YM4Ck}2{L9*=^a&SL&!52F*!ZbfAq~-Ao%bFU$ zHJU%uh$bi3sQ(mSp$=noWk*f5i0IrIZ1AqReZ*B-<0vq+$I04Ime|+?q}K#k#U>@* z%v{Q7nFfw0q~&QquJm5H7+c0J)QNq9U*MEq9OFCJA~AzfdTV=0k9e=1fEYo^aFfwGn^ zw{d~!B^RIHJ-9Vug;v>YFWDOOyEAIvZ#Q6T;;d)r?=O^jHzpu zdL`f!R6kXrzQ!HDfW~3Op6bsgL|fzH=Nz)}&v{2&9w~X34t9P_iFg`pRIwK)4Tntsy1b=ZmC7y?#VydQ2(Mi1kGN!Yq!-3X0+&|(ij!jc4;Bkrt8xn% zHn;A`9rp=E;96yoxvQuSyVLs=Ckds3GK?f;h?K0Uc`{UU^C$No4kfnyFO7|{EdyCw zN&$Oez1auN%@HblC+GPH25v`Om&r$5D-ccQc;RW&n$wLkM_eBVH1|!G=f}Ok>+oET zR@Ei0`ayZhY%Lz(+f;X|UD_XTrB^Sy=}ccHuP{zbg@)+FAGEu_;-s*z#jkqYJI--w zOFF2n|1G{COh}xX8WC7X-`Dqf$B}*+?VT+dTXAZBSY=Jve zZ9nK*>*mRuX+miunr#@~8KE1pOV`3?)bCZS&pk(+t$6B0uETQ+W?gomS#xMqJf zwBGD@KjNaLLjlAIbSAZAEz0zWiR!3=SHyBo86Hs;MOI{9l=)N$MLvZ_>A&?k^#e{!iI^!4XPJ>!z3sBFSJe_aS?uHcD@Kjg1;B)5wD(H+ zp{l>+x|pPI`R(JGrKAvzn8YgbN+&+FQf=1&^)RMV3n$FFXKPE|bv6z&-hXS_A%AEN zXhCPw_Z0T$7{kZdERA(RO?l1hu549+%YX}+G+lHEI`<*!42*b;lxf8Fb44qG(YEWE zJL3LMp-;zNsfeswElV9BNS?0qb`|KE-S{Y2Iq#cRnj$EAT%=!1T6av1d7HIoZdE4| z9xz0eqkSmem+R1Ijwi=fvI9ZpA9m&^oe4qJ6qyRX3j1%v^`!kL(Q|ObqN1UucwDc! z3(b~o2||Jj(I0l6H(2Q);EF*T`aBdBgO7HNh(4?c&;R?+KSE&bi*YiI-QymW^m73S zbAuFhf!*6$BI<3WsrQ{Gwpbt5C}!H5`24_up}aXy_Q>s9hxOv4AHS!Qv&(x%J(3QL zp=YkIGz#Cfzqi8Xvoh@eI6E8^t?M-v?3|X+iTJ$vIZ3ubw~A0z3S#+ARma)eYSXOz_9|X=*|AO$rEWvB_L5G=^gE$ zv@|IZ)FNqPk=?TI_h8iSe0A&6O~p?YX8!v5>fv?%<)P4mQ~Ba7Us=b+DHIi8TpYEh}F7w z#t1!d>%7h5(sj80%&3Q9d^r!CK&q}x@b4S+D6+iJ9(SRM!H_JThT)OBs}7ap4@q$T z#d6(ZHMilMcL6h{>x7->7R-w&lZX(fFM4hj83MpuhI{RpM zbP9RGJ;xMcwE@{Hrf$s{Kv3gESJxzuppfS$GRv3(R#yRQcpG4t0M0fb*C!&G_WJDY zJv)XtW+7n>c0*sN977|JfRr6V);mDB4-Y6=gyg!t`nyg3xEPkps=hin%Sq`TU9*jpWH?e=B&L30DR9SA< zbuq%HsNsmZ1MR_v>4Amrt+4P^!QnsN8P^w6q`y)sL2fV(Z$2J;70q}VnB{7BKA%ZU z6-0Aa4pA)!<}m(eQM}F_3sQ9K88kFRU17peWMdLKRH9g?6zA%6 zI=QXqMZ!CUI)J%Qyd2wTZZ!xsNJZ)P;Bl4f%ku1O(%$i8#AtGrS)&!VpDTir(wvrg zO|fpv8OuV3L`UGDOVOi0T0UZkop*=}a7IuPrP3xvgD^s!;BKaA*FJa==NOc7p~9l< zTFnxcZUxE16eP#(RIq$uQxVRKsz%a8KN&T3-4(2x+J;p0Nc;UU`ce=@r zEtJCW>IaRYg~>1QnQJC+o3@}Zqs1!ZLsm?OP5oG7rM|N1yZ&pn5-EW*4A&gJ zetEV`@IQ{ z@cgmIv-0srvEio|0- z1X((kxfWJ74EMgBEJpd2-~qKMP_LNMtLTY5YXh^}yGGpQ)yf4>9>`Y%5#MHy z-Vw%BRdWU3xIJ&^ezA*s=+;nb)ZP;r+`x47-mQsZ_$J`kP~+3Z73;QXof;u0;SFK8 zL~wjg_kVUT-q{R@#xW`qi~bU-*f)Hx!N%r?rajP)CB@ds^G1go*RoHEN;?=!&nxoa zcf_uh_7L{YB&a^hjj{pAW+^qC=+d$eg>1sN$4h1s?Y-&Mgj5UnD^L?J(-ILgmcDO5 z7e!NExKK8K$f^gW^F$x+o`5+obIM%XzN_>Ft1GI0==Bwqr8)Ey^fWnvVqvWr;Y&*m zYf!(fh>CbV$DZoFC%=DvMh&sydA%a0!0@+s?2Jp$l6{*~hL<)8y4r)o+>ZhA4M-bS zkwt!4yRUijTqEc8H`$;qf4(uwgx?XDn|cx82CAf-L1_&;H$HsOG=<>QHaZ+?pb}Ud zG3{wdRo?Fo4sJeYkt^C)xPi;hiPLwyZzdIc$Ij7Xpio;fWw@uGt%g5MKj8kJeVSoz zTaS8LO+R#DYHOAdyOa_7D?W+O6RV$1S+L{OWi26gz#-6n6#AuyNA+8 zTuII$)WNWWW5*7gwg8tl%X(MW=!lB~Ij~a$$PitO{Z$^o?aa0oR#3fs>d?*}f?$@H zRGx(HH{xoNm@Kmcb;BQm!j@+=abe<``!WW#d*p5E>4k%q0q00e7U_QK>U;%YBC4xY z&rQX*cje}p#paesa$ks{u@Uz77U-L4hZ+)0CG7cDT@Yd;KuCFq;oK)`Tpv%@{TYV*=z{#e>2~^|v$G z7YolFs-t3{n9N&nh-qKdf=@CfbSs`@tm*WuES2Q;m*{50^xm!vDQTq^N z)lS2`fbtM278c_J38u}8k_)hHLC&wD(<7ZHVzyKfNxs27EPZGUXT|Yi?zYq!Oo_t& zq3~rN)8U2y0dn3I_1z>vT0x>2+iEykKCj-AmRp3BwI6-hJu)a1wRe%<7SntdUN2&_ zoB2z67(=pD6aVR|1(mJp)Wan2C-+4wS6yG8{06YG4n7iiuWyg&U$ zxxzbdSYfubFRsTuhZvKw6b6x#?OOkCAhNkET)E{*LgRaJi>$*GSD(Pu>67{P#Wh*! zJueA9YJ}1*g+A}0))aW%>tu>CM9uwT-xDa+XO~vy%J}*t`qhB$SJ!%rTWVbSA}pqb z?VP<>F3H$2M;*59!tXZ(cWhXx>DjKv6XAOORW434HN4Z-L*P}Cym6gy;fnjmLhY&- z@(Lpge7R35;^Ic}jlPD`1f4RvGsap`;y{k-qMm-Ow=$?_tsnzzMe=?!%+Grx{@0DN z#6nqvJ@v=Y&O)p@bBF_!8ilX1aKGI0%O7pa(h6cZPc`@6m&_MD+m`#};wYq`%JJNk zG>>*p@uIHfG5XdR$qGMnk!_xJs% zaR%AmBS~*o&*DR$24#8W=@8ncpaQswvhw4guxN#I%YXAWeN#I=IRY~T5>EINJ`9Co zpfErC9{e3ZycN)(1~jK5BXbjY5-&ykOF;O~4&Z0$G;|3m&MEsp&1k$txGJaDYn{=e zbxC@rry=LemGv+q46F}m_m7%buX80-&<2K9*hVmgJQBK z5W~sVLYuBNEB9$t~=y}0;Fxga3OjopFE6eHp6`KV;QuA%m@KQOXO6dySi4ZkH zQl4$Sl>Yg;RevAi|F&}2AE(H_UjOqT{M^jwe|_Hn(&9_#r~l>9FZ%h#81)yO{hy8h z+&S}qmv!U(YgxB{p5e1r{!cpRA4PxU|96Z2e7;o5XPN2`jsA~|{(N3;;I*A0Je1pa1{> literal 0 HcmV?d00001