From ff17418bf19c9ed6b3220afa712f7d22e7aeab96 Mon Sep 17 00:00:00 2001 From: kgnfth <73314940+kgnfth@users.noreply.github.com> Date: Wed, 21 Apr 2021 14:24:05 +0200 Subject: [PATCH] Add Penpot app. Closes #359 (#398) --- public/v4/apps/penpot.yml | 158 +++++++++++++++++++++++++++++++++++++ public/v4/logos/penpot.png | Bin 0 -> 17484 bytes 2 files changed, 158 insertions(+) create mode 100644 public/v4/apps/penpot.yml create mode 100644 public/v4/logos/penpot.png diff --git a/public/v4/apps/penpot.yml b/public/v4/apps/penpot.yml new file mode 100644 index 0000000..48cb858 --- /dev/null +++ b/public/v4/apps/penpot.yml @@ -0,0 +1,158 @@ +captainVersion: 4 + +services: + # PostgreSQL + $$cap_appname-postgres: + image: postgres:$$cap_postgres_version + volumes: + - $$cap_appname-postgres-data:/var/lib/postgresql/data + restart: always + environment: + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_DB: penpot + POSTGRES_USER: penpot + POSTGRES_PASSWORD: $$cap_postgres_pass + caproverExtra: + notExposeAsWebApp: 'true' + + # Redis + $$cap_appname-redis: + image: redis:$$cap_redis_version + restart: always + caproverExtra: + notExposeAsWebApp: 'true' + + # Exporter + $$cap_appname-exporter: + image: penpotapp/exporter:$$cap_penpot_exporter_version + restart: always + environment: + PENPOT_PUBLIC_URI: $$cap_public_uri + caproverExtra: + notExposeAsWebApp: 'true' + + # Backend + $$cap_appname-backend: + image: penpotapp/backend:$$cap_penpot_backend_version + volumes: + - $$cap_appname-assets-data:/opt/data + environment: + PENPOT_PUBLIC_URI: $$cap_public_uri + PENPOT_TELEMETRY_ENABLED: $$cap_enable_telemetry + PENPOT_SMTP_DEFAULT_FROM: $$cap_smtp_from + PENPOT_SMTP_DEFAULT_REPLY_TO: $$cap_smtp_reply_to + PENPOT_SMTP_HOST: $$cap_smtp_host + PENPOT_SMTP_PORT: $$cap_smtp_port + PENPOT_SMTP_USERNAME: $$cap_smtp_username + PENPOT_SMTP_PASSWORD: $$cap_smtp_password + PENPOT_SMTP_TLS: $$cap_smtp_tls + PENPOT_SMTP_SSL: $$cap_smtp_ssl + + PENPOT_DATABASE_URI: postgresql://srv-captain--$$cap_appname-postgres/penpot + PENPOT_DATABASE_USERNAME: penpot + PENPOT_DATABASE_PASSWORD: $$cap_postgres_pass + PENPOT_REDIS_URI: redis://srv-captain--$$cap_appname-redis:6379/0 + PENPOT_STORAGE_BACKEND: fs + PENPOT_STORAGE_FS_DIRECTORY: /opt/data/assets + PENPOT_SMTP_ENABLED: 'true' + depends_on: + - $$cap_appname-postgres + - $$cap_appname-redis + caproverExtra: + notExposeAsWebApp: 'true' + + # Frontend + $$cap_appname: + volumes: + - $$cap_appname-assets-data:/opt/data + caproverExtra: + dockerfileLines: + - FROM penpotapp/frontend:$$cap_penpot_frontend_version + - RUN sed -i 's/penpot-backend/srv-captain--$$cap_appname-backend/g' /etc/nginx/nginx.conf + - RUN sed -i 's/penpot-exporter/srv-captain--$$cap_appname-exporter/g' /etc/nginx/nginx.conf + depends_on: + - $$cap_appname-backend + - $$cap_appname-exporter + +caproverOneClickApp: + variables: + - id: $$cap_postgres_version + label: Postgres Version + defaultValue: '13' + description: Checkout their docker description page for the valid tags https://hub.docker.com/_/postgres?tab=tags + validRegex: /^([^\s^\/])+$/ + - id: $$cap_redis_version + label: Redis Version + defaultValue: '6' + description: Checkout their docker desctiption page for the valid tags https://hub.docker.com/_/redis?tab=description + validRegex: /^([^\s^\/])+$/ + - id: $$cap_penpot_frontend_version + label: Penpot Frontend Version + defaultValue: '1.4.1-alpha' + description: Checkout their docker page for the valid tags https://hub.docker.com/r/penpotapp/frontend/tags + validRegex: /^([^\s^\/])+$/ + - id: $$cap_penpot_backend_version + label: Penpot Backend Version + defaultValue: '1.4.1-alpha' + description: Checkout their docker page for the valid tags https://hub.docker.com/r/penpotapp/backend/tags + validRegex: /^([^\s^\/])+$/ + - id: $$cap_penpot_exporter_version + label: Penpot Exporter Version + defaultValue: '1.4.1-alpha' + description: Checkout their docker page for the valid tags https://hub.docker.com/r/penpotapp/exporter/tags + validRegex: /^([^\s^\/])+$/ + - id: $$cap_postgres_pass + label: Potgress Database password + description: 'Pasword for postgres' + validRegex: /.{1,}/ + - id: $$cap_public_uri + label: Public URI + description: 'Frontend url to access your Penpot' + validRegex: /^^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/ + - id: $$cap_smtp_from + label: STMP from address + defaultValue: user@example.com + validRegex: /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/ + - id: $$cap_smtp_reply_to + label: STMP reply address + defaultValue: no-reply@example.com + validRegex: /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/ + - id: $$cap_smtp_host + label: STMP host + defaultValue: smtp.example.com + validRegex: /^^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/ + - id: $$cap_smtp_port + label: STMP port + defaultValue: 587 + validRegex: /^^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0-9]{1,4}))$$/ + - id: $$cap_smtp_username + label: STMP username + defaultValue: user@example.com + validRegex: /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/ + - id: $$cap_smtp_password + label: STMP password + defaultValue: + validRegex: /.{1,}/ + - id: $$cap_smtp_tls + label: STMP TLS support + defaultValue: true + validRegex: /^(true|false)$/ + - id: $$cap_smtp_ssl + label: STMP SSL support + defaultValue: false + validRegex: /^(true|false)$/ + - id: $$cap_enable_telemetry + label: Send Anonymous Data + description: When enabled, a periodical process will send annonymous data about this instance. Read more at https://github.com/penpot/penpot/blob/f2fd97693427c7decb86e745bf178fe70fe332a0/docker/images/docker-compose.yaml#L56-L62 + defaultValue: false + validRegex: /^(true|false)$/ + + instructions: + start: >- + The open-source solution for design and prototyping. + end: > + Penpot is deployed and available as http://$$cap_appname.$$cap_root_domain. IMPORTANT: It will take up to 2 minutes for Penpot to be ready. Before that, you might see a 502 error page. + displayName: Penpot + isOfficial: true + description: The open-source solution for design and prototyping. + documentation: Official docs are [here](https://github.com/penpot/penpot/tree/develop/docs) diff --git a/public/v4/logos/penpot.png b/public/v4/logos/penpot.png new file mode 100644 index 0000000000000000000000000000000000000000..20f12dae9ccf3a58f5d55019678e4d665dd7dbec GIT binary patch literal 17484 zcmb`vcRbr|^f0X3C@qSjMvbanBUH?W+9M^gM_V(oYNSf-2DNL}CPhT78quO?Z$)bp zp|)1-qIT`~8+Y&D=Y5{{eg1p?N^+g+oa^jso2$Ca6=$j>vMtDf_$~tjUrp8nS>z9*RW$2iIpsX3O)+iz+Bpgn z+P7=U=DrfouH3r~bmXQyH+$rJ1NI}qseJ7u=Cdi`jV;g|oDy(6AZWly(AH}IaoqZN z{kqjTpxLE{SP`v-F2V?jkC@)5RO3@PN?JVw0FILv7Yq6RAvSAEGiOWt7HjGf&AsUX z!0(wsd+!dSh^u920VIkNQ$yiW@N z@M7LK%A9k`WC!iT+vJi3T zq97s)faZl?^b-$OdsZ*`srJYu=OUl!6gGo{o572~G(pDZTZ~cx$Ts=$4OS`EaQCBW zW4G-;n#LF#fv*B!mm=RY0Buu(cAmZK$!LLZ)+j$ibVvyA_eHvTpo2;=(NY=xiqasy zZL*4A77=(W1WkK@jzSl`SX2k_3%g(31n~PM-u+50T#{Fs+h>lAxS)6o0S7Yx*o&Sp zr|b=BJ?GYMRra!oIN3)ni8GJx#Sd%d0mx9i_fRq=!*|4cw$FoAqq2x&C{tzYk3r3Z z-`*D|r~u)v6<56D)kYW5*doV*!AlJa*!@(FD>Qyx4`l1Fk?DIpvIFSb$basus+UFN zRAk%YDt6Z2=C#Y3hv;7bhA?+wJp`W()u%(3j6(YagEO6=?6>`FUQa@cKVrV-;69O z&kHbe^2JMFlAu8lECT^zRkYNXldE4PaP|KnS- zTA$SP2GwGTPO(Ey0r>B1<>J)G?Ut_emG<(;KnmCNqE-6klD<`!eh2r@pTvv)nWCu?n4kr0 zbhl1)!@TjF|F!w)SEBNgKm7|^AVc%AoI6>M$|k2n`D2Xa!8ZV9u2<$V%GEVIWKF6; zzDz|8{RABO8s`=Eik)yt^8>rLe&OfIq1M`_oiY7$bA+1B>}}TYSpg`n;vG+E@pE3a zf5P+qm4>&aQ>&v5;Q0Ez zfwt234BxfHQ+Xe*AJPJ_#yla=+-<-V=3een}Z!?u)TV2V&n;JPGCW}z| z0=1C}FnJqe0_WsmuxB%TJD59|s80zvj{DPHv&g4*3yEAW)BHZJ-0Ef|M7c+=tqVRP zy-ILeu4d{!SqKM6`eI{yOO6vL?PZ5|=@V`DUF{eTf3w?w`#xPaF?Cf8EhiH*IaE@Q zeNdt~>%J_-yI64cWNfNZ-*>~?JY@f{t;H?+`f?`V1#ss+4nR*EU$rU?UN?0)c3WDp zU-lvWx{k)Lg8XLvT1UX2M%Od9U$rGy2{O*`A73H$O_02-0sqY8W(KV zxWL+SBlnGHhP+UsCye$~CTsF0{JSEHx}^3fNilPwNj1bvG~=A##xv7nM^8>{QnA{AR^0`JQY+gk#S z+pqIfM)m%A_@34c;E4O)q4B3elz-kWeOZKC-Y#|OPBGhFOhlni)_qwrJsEd<7>`20 za+1ymosUvh8pMF7eVHl!nqB>V-Y`IV5h=lH2>j1oq0eDDj6hM(+Gs&% zF=v4x2AJ^aqaQ!XRTQ!Qi;st9PcM`j+$Z6MS4BQfHZhLGVy1MquX3ce}yB*$KnWCUN>sFy36tIN~f{KKa$U0C#le37n1}<>GZ|T?Jw~uME9H(sZ zT*Z4|IR#!7`rkkPCHVhs2Plyn|Np?+I=CFT^31xe=!xQ|!zpoYK-(11QV1%wj%jUh zV=BMvB!CkFn23Us>A#OKGNatEe;b0KH-T>eoZJ9>@bz5G2!YP3;KU5ifq|Jxg?Yr# z!0BFg#S^rU4rF%mQg%U`w>bsHZNm&i&6sciMixXi@|WHbH8c zURTaisL=P_T85C!N&AY^(QKHG2q@`B%V5$0uzt9T|Kn7I)T7%@RL5=b!e|QdF%7`t z%u{Eqlo~ET+t<}6?t~Vyfy{m-3gBS@tD1mI^RHChhOs-nnp5|aU-HQ`kIA z0INfoQe34ARF1vS`1fIeR5tK3?07nmi-boVwQz@ zI|N>y<2O9A49L_#mI;2YhQa4HS@AM#I76Ge0ZafEH-ObW#9j8u3h&VJktrD6X?B82=6kg2#z=Je~^m(1oS@=I$=`HX`GN8TCx3r;IV zD})g9RByY~;rdbQ#^ac-#ijffRGuHMVaV_ThejEp=_zT7q|siIyI&k12NPc@Ts1eF z<>yG@1X~7d1uYc??!Vq&xV=)cQqz=?;vIx2i6yB<9FlDGjkq`p0|u>}OCIR=A~=Ao z1Hox$`;BV0FU!yp-IYup;gyId-c59{qQt%Ky(?BFCepPJE$0?3Xi42*y|LLH`>Wym zOIRcC%*lScT$n8H_J@lLSIZ2~K0xHTfz5oDIP|vaa*z8cX@{B#xyE9V$5n53NOk+U zO2gi{Uk*!UK~MpwOv?#_`@%5WZjNghK&P}Q7D$TxP@k5cx{>On?F&?vvFN~;8bkL9 zb|F%`ZX=dvFn_45Dk=hws>-1u`0Z*a=C#y79;n+ZZj+)><%;6|hj|CyHQ;NDPO!p@ zi(^oa^ukB=u(6Urx*o5I$4o*7)u=I>MP+*YvoL(5eteoeHAYB{9knAD8Wgi!>a|su zB)l2fWAvIQ>Zue*$!lp@PfLe|Ah2m?;j>#zO-ES0mxdNgu*QlD^!ZX&R}jh|U4F5Z zfEk8E+wuB(Xgr$E1Z!DS$&Jevhcs#$J z<-SJaDXpW8Lk>(tGKk>Ne)!GS})E|x<85+YJhfoz-GNh&tRhNtt4JR`=t7OEn(rz(oVNaQ&iZR#lku#j!^Ru*A zK%s>~p;q>{3khORpDL3AbcgopEE)$@8bOjfUp^GLr8DBkV))B2MUP{5K=F+ zL%V)x-O0hV-F@kG^~kg3WlqNzH^WeymqGV%zaS)IL$B@OXBzMze2a7Xw{YkM7QCC^ z;8zn5121XKWi18>lNPRgT@aJ7&(Cc{6K{jEi(~HK%6mZ7Y9F$y<2_K>44rs<+uqme zjTzPFIXc3Z80em2ok?F9)tA9Hi%X53p5mwh#kk4K#uL9XKZ>;Skn?6~(pF>sQZtE4 zN3=x^7fMCy@$2s=q+ymx>lL2#_}dVaYsiTh@!rkhVYN&n!c#h)hD!HluYf}g9b4j-?G+Cqgd(jnKZ{ij1#~74J&POs&mq>;=Ps*r&hKfXzvp3II_PtEUpP^&b^sIxxR#6 zpvQ-aZ~0_5_KELR`=dK}V6@)orYE;*j+hzE(H&vX323`}+p@GcY3!)@v(n6Y`;yN} zTcqP+o=7>>V+hJNKn4B`FVEY^b}>hpTBaqqVYZ)nW&jTanT zt;u->xG?R+`bB!jq&LlKIBIIrWyk2VO8rwbb`AG&ZzxFvxo*aTN$GX70?zZg_p8gS zdo=Cb;^hvio1wJ0?GxjYZQtYqm(|=VsMXuSAnzgJ^t#+O{wDJpH@3y*^nqvu9`FL1 z6uz=Dd0We@NNAnnB+MXpYK9Vi4a4^S^AuM``cw?4-Gw7D-PEl(SMpkVk*yWOnmCLg z>hMhg(fQl&`2S3m$2(EM4C2?*|(n!OEPs(v%|8ey)E{8_@YfL;7LCjPj_8^LcX% znUU|Pxi*Mi^3;k&WxnuA!;5cKagrX=4$=4-aXHuIUwN5CxQE;wh>Q!&I4nzM7sX3*>zNLvO|bg-K@LpPL+i{$ zsOTu{dC{xQRV)%$Zs?9ODdJZjWh;46JM;*wVSt2u!5v~!j2Q63gnI=aB8VW^ywfgt z)CNncY0xLS?u!g~?X;se((4*tGne0Jwg@0NbCgx|g@bipFNM9deb`(g3}LdyAsr}g zyou)kZOLXke_J5jMdNemp2{>n3GJcTzQ9g4r%l+TsYBxGVAGko^_l^UpY)b)L9fy1 zFGA24iDH&P;fK+~!*GmJ17}JURP?ZhB>(ySM;5S+MdpxTDnb#yoC#g#Ceq`7+s4g+ zpwDrbI?)x9MK78&#aFm?T&H}kFk?m)UQ!}wrOC*FYfxQ&UqltBUaW15L%K~WZinZ$ z>G#8xn$K*A12euZPQz-YSwWxn=pV8N!{5)?b1-`z>(d+w|9tj4K=AY0FX)w-PDpPH zuHp#9^ZU|+-RSQ}VR(m)?esIsOa}e5Hqw_RED`HZKAyGIIx&rD^i*c`>WJ%6#hgOd8J4CKwr zBz4~5bP}jZ)Zp$B$EFIDcfl;45}pVlsKg^Szr?5WZd<9hJ*M_RzI+fKn6O(ZK74Z@ z3@yud9#Q6Y!_-4(>t&|D94#h{)|IGV#JfKcLnCumqZQZ&paS7(R3Eq#y8W0vpW)su zxr3EAGP*go)Nu70?eERK&5R{$7J@wBoJCNQg8r&c&3c=HA}%&s7iYfg?>G{r1g-c& zMAG96(8%)De!n>L+ARFJpySNsg|7Icb3OYRZ<=~)cX55KA(B;7+3%rN*h^>2MC4_w zoV0}(;#B^b4s5Y|2Lb7v%Ptdi#yg*#|IJl0M>U}{7V+)y8CJ|hN@LrHCdGRD=zJ0D zH3C#?U}?W1e>R(DOINfcc|#B;ysX?~{Nuxq+q~3}lo+VuFaPBz(z&&t+iH&!#uTP4 z(*&{%UQ9~%-6bhe(ZH{=a=y{;F@NeA+#fD4DFWL>IZn^Y29|RDX<2ZM9M|DEcS2#4 zcTkftWBjYw;G9ii`{Svf#dc`zMDPN&o`?52TB5a%W!51T$-G|i^IFWP`)h%klu!4r z!mPI6<{#elLdCZza8be!0o@(hTG7|I<`GeVdB|ofF-AuP{{mi{tnFQ}{2gk&LC| z;N_!HzTX96f|$gDi%VtV9FeW!U{&^?D!86uCBLzLxf6_ztvM(J+A08(b*@tz9Z~w| zkMT7Z7^-za9E;qsX%}F~KGU}Ie$3OJ_tH#8MCW`WKGbuC5Sf%LDCtmgRN2sYkzd|mC#-{%qtm=3;l89te8$_S-6%TCqP{~P!*MWnf7Y9Th2vkwgd7ha(8;w{HRwmrjKg$ zDN^bLYmF5cxRn^Y$7<`iO)nC7>G6LS=$*pvzvpF#%>MYJf5NhP`x1mH0@}#l(mwJ} zsT(KCblS!FrF~u7x9|}OJ+%sFfB&>%_!WByE->=uqfb@&murtyr+QvO8*w{SQwHqL z^?SA+^QPuke|k;zMy`oJ(+xKJ#Q6B+m&rfCPBwG7-*h)uoDQ?Ed!qU9B|FAb941@% zRwAtC-JZ!zwFKdzk?nEaUgQ$2n=VH(ozCc??*hkOEMT|#55m< z8(P5@W+{@mf85|!!5zPe6&v6~FZG_;iLlL@3Wc_c!novm4Q?ds#pVvogKaVg)tb|g zff}?%QF`)v`c7<5?_&HEKb3)z))CFD=G*t9AlrWbti7=xX+7-kUI~1)n_=s1hF?cu z+@%s=*D>aySa8dqyJFUujIuG?k?$NBZEYN9oZ{EquoE_m=Q%Te;*wbVUx|-h^bIt* z|Dhz62yW%D>nd-I7enq~>iKtW*fVp2YIn{@pxj(?X!opzszEG{UYnn@A4v32s^d~I z32`)OVT3+)27wZfUl2m3($m37#J)ky-Wz&gHMaEQ^G=zNuJcTfjj~+82Lfk{g#7oDTo&Xi+oB!kz87Aw}sGOZ1h5 zGZ=izK3JFchE~V3?0jYkDtMh=x?{;7j^^dV^R?&hkq;wBB$R|gy%H-)2XdvG)JCzY zhVk9Skw2U0gka)qLC1C29Id8aT}vDmv37aFV94^IoY~LCjx!ewW?UDPavwO}wy|ix z38S*kX^b(m6|t$UfL>~cz%lvfR%~q+u9pxQa%4lGbu4(QQ6-}?H@oqPUaJjsZH9xk z$;i#^Z_=Qy{Qa97rnYx5Y#C6cqtR#I`kF2=GUFwR_0?=rQ?ZjPZk1su*YCvi$XAM+ zftJED^g>+q&YF3arD5t;nxq7J^BGOyg<3BOLT0sb>WGytLPN7h9g0R{ zdt{CwCpGe$Wzt7e)vFjkUQ#YB;IgQ{@&gPT1}^2JJR&2$-|{u9g04+YtJ)~t!-A!q z?fF3_CEU-Y^ipi(*`rPLxJ`RG>?sCWxY@$ykbGEO>sDk5nHpUf zZ2eA`u8UG!fUX1Y=Gyix!S*-fTXLPG8wNobKiT|U;yEh&d}Lm3tUS9+rzyIgm9cg_ z7FyUHRj+MyW3g*_)Qc*6odpl_E^&}ItiL&W%PXE5jlUj-WSkMgsM9U^bxN;*<+EI` z_s8wjS5cAV-mY5>2)vM}?@rrOqGM9SogFZo&lu=4 zi;G8nvEdr0rXk((`_iBD!V6{dW6XpHRwxV`Fu?|nNO>w|rZ0`$R83fX?6hWGNkck7 z=0rM~dOqMV-hjYuX7rByJ6~>pc%$pVK6##`Ktrmf`tlD53%*s5gDesok_hZIW5jeY%z{-~ zY)4YRtw`t}NlBK*LsN2~TDh5i2A~NR=6HymccO)~@!bkkByf1`WE8a6az^*- z<$sF)5tIrHD(?9$HUB-i2RNkc5UjO)ywLoF=(RJWxt#sy2j=~C8F`Z7_Pev)0 z^rzuBd>+UM_9j6^9bdNEQl=C{=1-Z_9ow=7IRrie z(+t=BrWbPb?pN6i9A4+*DwdQIl&8lJFyoD}th5gt0=6WRPt%T(c2o@ zLLi&?&&h^dfO`J1wOHa%^64=MKXmSvWK9pSZLHd3zzfiJI$ssiVsoj_HNFDhk-%0} zbbm716eO}&b3jr8GVr;9dZyU9g`Uf9@zKCx>OcaPb6nnTF?IWqyPdS8^YtANW%FG{ z;J|;X(`sezwGXB$pl9C#SG6XU(s-XPCnF-g=O+{`#3enjzAtk#J)`^#>o_|Hz!35q z_mCa>L^?S@U!B*;Kq_F2^Vrd_3BBak;zb9np0WXJAut`slUs6?3YQGJhp=^-vhrn& zn5Y!b?HENPk{vBHg6GvmH2I)02eCY+VH+J++<*9qSnf^O-Wy#-y|LPGxj^Ho!QDs=+*P3<5!REI^6zYjZ~k%(!qzsM zu17cdd0?;E%$MiDb5=N!fJvhB%?`ycTa$7M0=?bHmO2rrGg>I<{aAu~zXL}*{t^9s zN{o;LriyPjt8D+Kwwv1@!m)WcuUAlvJa$$G*CSg~n~;V?^~g6^OntQxq#B}g$tZIKhSen!}zcLNt@Iyd;XEo*<9>W z5mkucQ@XFewfTW?64F)emfG5of+Qc}-HW9p8^4SN6}3D9Zp{eSICR}(dC#TRrxy>F z%lUb7vW<=Fp@qCk^NeWaaumA3gZ$Zf`QRbLDjO+fw{I zRABjqhel@?)dBR;9Yycmr}uG&Sjh0czRFsjA#jJ`1{g&D`nC6ivzI#+ID5P;YvUx0 z=pevxu)R*!6Vyk^UYTS$9uot7i;Ev7=3xm&~)!PvNA!0IWUofFi1L5x(j(se&Q zE;@*L?*YIz)6%65#WS5XT^b+69eaCrFVB0QJ-uI`gy*1_WLom)T0R!8x|p-b-)U(- z*R*m%1^9dFcPiByYf96(tE%a*XMc_Cz5JdfrVcnBprMW=sM*HDcq+@KDaOfAh1eNc zppkm}+-!cZeUtm`&Cgki@)c59L=IqZ@|A`!1D<#}K0_-+N3rod8c7W_hV6$)Njl+ig2QS2xGIMQeaT$d?%#e6WKw&SBcK zsry#}swo9fj+sM7zvo0Zj#;3q`HoZCOMqE`XW)Wzw1w}A@OhDKIkH1&VesCQUPCdn z`TnD&kJ(s#2=Zd5f>FZH{&Gr;7&@a9zzB?>ZHOBWf~+BLukVg4%3HK=sM7sq^M0+2 z;x}Vz)1~M9+%O}6AtdV#XgfQKg5M2s+uda~C%ZHA#~{Ps-pUX{-QuSqiHF5pDZ$WK zvhUb`>)iXI>vjh<}!%%*A34fqFT)Kyo}lZQa-D&czEGqbWD*gpile)x?`jApi+fj zMn}5nnW2mQ-6Dyuhp(0`1s5K>-S+CunmAWdsg3 zhm`PhMlxwZm&A6{q`4jfls3lSWTGcv>DwkVzTCs2$Lfa~7ztCdsDH$qIRUyU}vu zjD3dF-J%z#NdyQ;URY`YRW*zgm@uq2Cdm54p*s?#Z$6U@4r0^JUKF8nVDOeanjZZx z+La;OMlN32N-rOIk^|5_-7mxKC5a}abE3b1i~Z*U-CI476M6a|>w*P?MEI3Xu;YJ4 zT;`u5JJNkVm~;AS(X>&S2`J^cTHI=I^y87=N?MO-f>yq2GlR0I%!t3lw1 z`dq(DV()Z~qC_gjq{25@qy7@-!qm5Io&BZ=8#zdO%58B5pb@2xTLtu)8Gd`D>Xw_S z+kQ}b8*9%z_5WClRD=a-m8qso^ly2NkTU~t71p8KK-UGm|FX(mCRxFx+iT!NRzi`T z?*89I8x2L>S)t!SEeuE7KicvobHxWCV6+$~foB!#*s9G95v5LV8Rt`p0Ux@LbCFV7 zrL;OGh7U~L1M&tBJ-!Khuvm4y-P^5G>m;cAiCD9o-T~RW0AftSwX9t2Xt5I))x}Mn zpNLQ>Q!`Z2y*_t`3jQ=e50tDZ!}9!!H1S4Dox)s={$EM1BXC++7L}qtkc+!eGdXER zso>0!wTK*}>Q}SPPW72G9rxCzro3+z0ZEyhWB|T)WE6+g)p3vHy6+7BCg)$K5arLH&MvDcur9~ej+6Ma% zYq@sdXp0-ee=W(xekq;PISBWtz}&^c<1#tdX3>x$u{p;91s<;>bW!8E>rE#iiy}K7 zmcoB?fXj!gGh%_!o9V?lv4GbK4MVm)bQ}JN_B_IZ9qho3^Xgcyv>!O-zgB7O*~cd5 z33k<7rEeZUfk2bOt#-XPXHb?=~AJw#sCHo@=fx7FrWSo4Y3n(bfz z8477L_aO&~B^9Z&EhpeZO9H1wN75qQoJ-xzL))w-?+>$GJb~L~2hRUu3dzf}awr*@D`GvPUjVk)z0(G4Sc#N$0Vf#H6B2l8i;S*pl}5KUZ8Xq4~>gj5KMtt$ozK zXSs=Jx_N=@0gM=A1y!5%k$BOz+oMCXpNNwfwIxp5=Rq;+mq_yAs5GY2NU%4<1@`t$ zcxJ9w%7})`R6Onq02#;wjs?$de}~LSf3JY}klTjvZ3ij4l=?z$G5g&>xRe#y+Pbt} zRXxf+wN6JB)OY_urv00;ASvY`v6#YRo$g$XQ8JMbGa2XkA4hK&?)LjmIJ22_`Lf|R zl4ok-JhY;U)_$;?G%5V`vqPcVK^gQLwf; zQa#PW&(NjpZtHk>37{_g!;SVOSYbn16KHq##bd-hc|FjOvUqC_%pg8VCxW4i;PI zR^K_9u0cA%`%4$S*yo+2)5fauF-*Ouahh@kvmvcMRxr?U<_xE^MeAr{cGq%JRrO>= zZ240qwovGO79j&(!XxVb+r)r5=AI#Q31s%s{8z5g+hLm7^wZ{(*Pc6%W_tRxR&`uG z_3mBBEFw-{>u@~?9=t;v)2R6Fl2iAdM9}%SZ(p>v-Dx<7@w^Gk!3rqJSLVo_(L7Y9 zetP-$=1&vXtS1F=SNiHDB4cFCckWDFAydPDpah=0y&&;b?xbW6)ryRs2p{t=igpPe zEBMy8BOsrrZ7EEUIlxn>w)M+*(H*hC(K@AOc|6SNNpNcHOB5-CZ-OlklmwjR2F!g> z8Gh@?LL0@QXl)i(0h{%V$H$x|5zJ)665P#GU}=5loFsK*UR z$^$@2mf4I9zlzSrs=G5hkIry{1v7UWR-gmhCayvwlfJ7H;n9y;I8P(y2k>}K3KhQ8 zI$lfX#}Cac*AqdSTtp6ESxWtba>WXRd?Jlw;I?R?d_YxEaj{36PaJ8l3}UMp>SQcL zNd`xAnmHT?OJ7pY81DeKOxdg{LRB^wEB?DkNfF0v{9M#4qhG$;R}o^q>GmsEfce2A zHh&xMF46_6TiLh@M(L(h<1JO3q%aIL(rFwgaq$3Qm^Y-5X=)yEd}c-(#_`ytyLMk< zTIBstY^UtW=DDV+c&qunfm8pA0vuj%_-o~1xmzBRm~Y!J@qmLdc1-&Ws+XuS${q5Q zM7*ctzhL3Xh?%2=hlh0#3(~MS@gnDQx^H)WE(#Fze=Q}azx!xb!_>1Xadb^idD=^$ z7M6kf9apSpP#-7+oS6XWqnYfdwVP@e8WuW(UDHae7~{vEW^lYssrD{bEi_A22kTE= zbNSRt3C9AroQJL3FWZmjL|a)nr5KJiC&r7WhGc9utmhjJS8j0o{{CkMkAA*kwrKYn zn9G34i50U^qjIIBB!9YI}S2>EA;pnnv|lw zdYxr3coQWp{rSlM$qy4Jz0F$v=-s*MEPE?+RRi>U!+5@&l|cI$%2EIAIH*n?U7tmC zkm>1qMMw~Xm$M#vL@(gzRv-@&R_m56U~b%0y^pMk^W54`Ex0&p(wjESQ6B{eoeL#t zb`wXHAA`e0x1o7dQ#A2jMs@0AVfDKj%Rj%c=E)3+hG=9e`m)Xa7OUONGV44D-~T3Klb@yjkN*KTtlcwNhFK~S#q9pQv$_y=eqaR}kMY?-pi6i zGp}3*y)pLkFLNej`s%tfZTIJAFx1zI8+yIm51Gr<10Kv}V7fT#&6-7|+DPQZ=2d)6 z81lh!VT51R8r@m!EnputK1 zr%|V3eu-F;*})P+W5L%zFY>OJ8l!E2OZD%IC9&+Q&qx!^(&LL1z=W5Zj8ShgXSC2l zuOWm#5^&qCbajNk+8MLM_q?S3;;>%~kNjOnNKrG==DADqdY9#LES_5*3>B;60;fR< z(Yu+sAoJV>jqW>#+s^;aR1a|DT<=7;LCqXVv zUF}689OAd$+TggJ3wW1rvc!EpO@*`SxVD9XuCM=uCL8lGJ$5|Gc`-bvFi~n811-D_ z%Ux=_x+wEwl}W&E$=durm;Ki9o_nY~=d~Zl=$>7*)2wGnP4Y>UAquei;q-_%(_`#e z0%mf&Nh_9%Iu3Kcm>j)&K|=M ze)vM@tLO|XuKX-rd|ZTjy0PIrw@_DZ zBF?2p^{htv%l_HS=Q^Eg#ej!RL&MI+%0sKMS#9EOJ6Aq*+8nmW?-$LmI#R-=fwN0D zww(QqeT4l?S4_-Q5p#NU&k4WhoWQ9{fU8n1doX0i@HtLz5L5ROvHaQLu4$YH z-m~`JCGx#sfgkumlHoF|vU6|OlnztPOndk)eL_l%K@zX&kpm0TdQ2`EsjcP zAu(VaMTQJfR2w`yxn?~rLU@Zqh=oZr7){^ie_9S$~J zYkhh}ZOpyjC6HAfhgU-y?{)S?8$XfH&q)3OZ`i%xnloFejV{~xfj@et z?d==NB6I75fH#al-be|DiWVf)_Dj^8_bwiQYeTaO#kXV1i4vohu{tuxu{Du&!-Z_6 zKHJf~5qWRy4F!sz-R? zhl{9pHY(FTF`d&#mY{&X2S7_n2{`q)Q4vJg8HFOrEMYiD)!A{VS3&>!iZJ9tFtmZ^BKX(>*nSL6z5b`I*-`x-S^X%X6z$^Fv_50uL=l_a{rv8u0|NY+o!xg~mX~HCP z_kZI1zaD@ze;NJXCHtQqn6qE%peW!lR~^@}tpqsX8K5e`gOUWJ?bD`&_iN;Z2yKVC zyOYTPEN~~2s|GAy)ZBu=YeXu9j+~aL09OL^c?Qi4RF2F!zpUqh-PbUJFS2-v|A&+a zRH&#DKoGce4V-Z6LjCbyl)F~}l7{Dr^H<;-)WF7I3a=dtAoW|R)^Klu{zIxHuPjUOq|2C&Sl!0!>we?~Ck5ofRbb<^ zA#HYUkQ37(J-f7+SwlX)29y(gja=1&V9SGF#p@bkv;$Tafa|$a9H?+6P!l8PJJQq7 zUG@TMAH@VKl!&uKCgTUm+Z{4;y{W+q>GrQWK270HG-x5l8e>AB51$cNvEjD%q1e4s zUphyw=#ck2qBAl;3&D*=7fT{fHC#NPPRdwV03ALmZoT@`Yah7~q>0FM-kwLAMq{srsHc*>0UHihGW2bbws z{6KG<-4Y`luate`)F~75sxLZWt7rdM@WL>N5~QAInmsSl>lw%L|fuK26oJ=2gH)`iQf!&Jrl<0u{1^A+Xh9SrtjzmNE z-o{oJo*~z%5X1iEi5&)17XkVLij*8E;T-REM&y9fBS|ZkQ|zkyb$&~V8sZ0E>vhYn z;=lbk$i$Np#eiZMz~9YUCn!5=lGUL=DHIca&?N51el(tx92fO3)X|8xXZ=QQDHXi3 z`vJKs4|DcTbrTWpl=&J5B>+|zuYxB7Y6U2Td~wVvD5Zoyx56U+3Kn{PS|(}t(o#w= zv)w(Mu}?;1pm6=o)0p|0JGWHf(X*3r@Vx7JccCaOb1^7mjnCK%q`BOG^my8RY2NFG z#w&`Lt&PT9Au5KCJZyNwsk@2zHCW+nlp(HO9uQLJMa{(tI-u0-j}zIBns{<;T9hWP zW6;Q5E~@()ZC{kPEKoT3qY$W2dx~wn>3dp_mg?INRCfl)B+MFEe5Hn~!jT2M>HF4j zr0zUWuXLMVW{A7nE4di?w&m;aS1LFo98n6uVJQ*@LqMf_a7<$B7R6V}lre9H6rm!i zGe9Auq?yh`)@JCe)OSIks>d!%#I=&40y^uX!wLNSaz;${3@6hg#_2z3p{Y!D;9mw* z^l{L_CQm+iGtOL3iWfEk`rPlUN2Dl&m;mI0A%F`{`tWfz7n_S3G2=bA2OHvg9IM2P zgzG5*g5MU(F>!o$_=`@n$!I(zWq+XG_YjW+<&*!`Km}UN_Tx!Uzd02RX@hPa9UFH? zfc)PG+BvjY1&!mYcB#q}>nMU1^ww*9gGZM-aL4iDR)t02Qc7BMf7g8_#_5vfi@}fN_hl;o}3J@WIKk zB1bRujyOO3Q<5y|xHKRt0GNT5&C#RrfF)8}&R-Gs@Fimjc94wL?lPnUMT2xV(RfS6 z?T~z#7!!i|6EiZ{cieSB5~vvjPMtuoLUl0y;5oclf`t*_aln?*G3nF1)2ks6<$opu z-kAhPlQpzhUA{VWLqqsi)B42OHh5~WPfbNf-7^64io=*lq32ToUgtWdQU}JMFvJk> z+t1tJNOCR{BNs^8rIRxrYf7;kTLJ358X4=75UjXD>XuQpG_=GM0km)%05%GDRKwm9 zPgo=uf^wT|^<@fn4p!BDBUAN^Xvp3P<(wL-x8MeTs)&t1Ur5V7NZ(gW!5d5iJ@Vc! z6r9OOH%%>;JPWumMXQ!PT)xxW`nB$gZW4S^RrVle9H>82D1;K|gTCECj1r9Mhhzzzwu>|JYk{9I?)DRAPhFp+bzk$OZXoF)}>e|zj@PciDlc!HkAA) z4R2rRNo#I)NrJTDNX~QBF zhC&1t)f#>bS+ci8H8|Trk#09IJLqTv4HTi(S^9mBz*Is-u0l2a6C@rl@RsEqR|FZT Nbzfht9P%*q{{awndE)>8 literal 0 HcmV?d00001