From de49a192a9f3d433891d1e871e2622409910d305 Mon Sep 17 00:00:00 2001 From: Ronald Loyko <108372764+ronaldloyko@users.noreply.github.com> Date: Wed, 2 Nov 2022 03:37:54 +0200 Subject: [PATCH] feat: add formance ledger (#779) --- public/v4/apps/formance-ledger.yml | 89 ++++++++++++++++++++++++++++ public/v4/logos/formance-ledger.png | Bin 0 -> 15670 bytes 2 files changed, 89 insertions(+) create mode 100644 public/v4/apps/formance-ledger.yml create mode 100644 public/v4/logos/formance-ledger.png diff --git a/public/v4/apps/formance-ledger.yml b/public/v4/apps/formance-ledger.yml new file mode 100644 index 0000000..ef21daf --- /dev/null +++ b/public/v4/apps/formance-ledger.yml @@ -0,0 +1,89 @@ +captainVersion: 4 +services: + $$cap_appname: + caproverExtra: + containerHttpPort: 3068 + image: ghcr.io/formancehq/ledger:$$cap_FORMANCE_LEDGER_VERSION + environment: + NUMARY_STORAGE_DRIVER: postgres + NUMARY_STORAGE_POSTGRES_CONN_STRING: postgresql://$$cap_POSTGRES_USER:$$cap_POSTGRES_PASSWORD@srv-captain--$$cap_appname-db/$$cap_POSTGRES_DB + NUMARY_SERVER_HTTP_BIND_ADDRESS: '0.0.0.0:3068' + NUMARY_SEGMENT_ENABLED: $$cap_FORMANCE_LEDGER_SEGMENT_ENABLED + NUMARY_AUTH_BASIC_ENABLED: $$cap_FORMANCE_LEDGER_AUTH_BASIC_ENABLED + NUMARY_AUTH_BASIC_CREDENTIALS: $$cap_FORMANCE_LEDGER_AUTH_BASIC_CREDENTIALS + volumes: + - $$cap_appname:/root/.numary + depends_on: + - $$cap_appname-db + $$cap_appname-db: + caproverExtra: + notExposeAsWebApp: 'true' + image: postgres:$$cap_POSTGRES_VERSION + environment: + POSTGRES_DB: $$cap_POSTGRES_DB + POSTGRES_USER: $$cap_POSTGRES_USER + POSTGRES_PASSWORD: $$cap_POSTGRES_PASSWORD + volumes: + - $$cap_appname-db:/var/lib/postgresql/data + $$cap_appname-ui: + caproverExtra: + containerHttpPort: 3078 + dockerfileLines: + - FROM ghcr.io/formancehq/ledger:$$cap_FORMANCE_LEDGER_VERSION + - CMD ["ui"] + environment: + NUMARY_UI_HTTP_BIND_ADDRESS: '0.0.0.0:3078' + depends_on: + - $$cap_appname +caproverOneClickApp: + instructions: + start: |- + Formance Ledger lets you model and record complex money movements, helping you accelerate your business operations. + Build financial dashboards, deliver payments to your marketplace partners, and accurately track revenue across your entire operation. + end: |- + Formance Ledger has been successfully deployed! It might take few moments before it's fully started. + You can access the ledger API at `http://$$cap_appname.$$cap_root_domain` and the control panel at `http://$$cap_appname-ui.$$cap_root_domain`. + displayName: Formance Ledger + isOfficial: true + description: Programmable Financial Ledger To Build Money-Moving Applications + documentation: https://docs.formance.com + variables: + - id: $$cap_FORMANCE_LEDGER_VERSION + label: Application | Version + description: Version of Formance. Check out their valid tags at https://github.com/formancehq/ledger/pkgs/container/ledger + defaultValue: v1.8.0 + validRegex: /.{1,}/ + - id: $$cap_FORMANCE_LEDGER_AUTH_BASIC_ENABLED + label: Application | Enable Basic Authentication + description: Whether to use basic authentication to protect your ledger. + defaultValue: 'true' + validRegex: /^(true|false)$/ + - id: $$cap_FORMANCE_LEDGER_AUTH_BASIC_CREDENTIALS + label: Application | Basic Authentication Credentials + description: Basic authentication credentials, when enabled. Format is `username:password`. + defaultValue: administrator:$$cap_gen_random_hex(16) + - id: $$cap_FORMANCE_LEDGER_SEGMENT_ENABLED + label: Application | Enable Segment + description: Whether to send usage statistics to Segment. + defaultValue: 'false' + validRegex: /^(true|false)$/ + - id: $$cap_POSTGRES_VERSION + label: Database | Version + description: Version of PostgreSQL. Check out their valid tags at https://hub.docker.com/_/postgres/tags + defaultValue: '14.0-alpine' + validRegex: /.{1,}/ + - id: $$cap_POSTGRES_DB + label: Database | Name + description: Name of the database. + defaultValue: formance + validRegex: /.{1,}/ + - id: $$cap_POSTGRES_USER + label: Database | User Name + description: Name of the database user. + defaultValue: formance + validRegex: /.{1,}/ + - id: $$cap_POSTGRES_PASSWORD + label: Database | User Password + description: Password of the database user. + defaultValue: $$cap_gen_random_hex(16) + validRegex: /.{1,}/ diff --git a/public/v4/logos/formance-ledger.png b/public/v4/logos/formance-ledger.png new file mode 100644 index 0000000000000000000000000000000000000000..e862d787b9ac95faea8b15b37e5719013c165014 GIT binary patch literal 15670 zcmdVBX*kqx{5Jd@V=39jPPV2($eMjEW2vk$A#2$RW8cO)r5JmXEnCPoM7EKA`jrro z>?TVQ*|$j6=hFXvj_1Ym=DuIva~$N*%;oxC*JnM?^Al}kphHi~O$$K~{dHZ`EeL}1 zgP&VYQG@Sa(@7KHpVOYY7CsQ9_20=COk(LY68w_OSIgYj#KXxq;I6kL6c7*~{=nVU z$NsLTqqv8+bLOfFHv|bl*HKqZ1G82puz{vO$JE!?LYCoG4*S+=(>(r~ad1z%O9+}~@I^XM%>XW-A1|j}0dKn*IP#rTzUxucrB zR0k!9>nR=D$lzR|gBz&fy==OZlSsOr4gSAT9k>5I zy(RN{ck6RoOB{r3%#a{O8*W$=4FQbqXuB z1D>7dqTZ}`CV%>LBg=2tV$`Qkb)!otcRE@q=YFs*q_-_4d$I?lz0ywh9-`W0p*L5Z z|7NP#yL2i0HzPK|b*eeqPI5(2P`R*qYUqeAG!Iv}hVuM$sd)PE&s4`5iDsN8qbe($ znhwI9NBh0Rmv6|UPZrGo<}0T5v2G$=-h&UC#=#lxAMaj3WTYI|?!}Lww_(s9NTDu2 zpJIQxhHuSYoCMh%9? zqv?_DU!x&wmi4D^jaD2~SOW!=jyAeiAh z!@}n8KEoeC(7)4KG@}juITHj~!br}!p^<0Z-@>{an9u7Zd$sIw%DDHV< zBH5rgNl#EJ{3t}__+Tqt#+gBF@7MW*9~^BO;9;OF+G#6D{%_``lQS^(5-|sxq@hrN zLANVy;xj#3xk^oGJNSad7?geq;C1tEEz|+;h~t!^*k7sVcW*oNZ{A;RdJDe1<}#d# zm`!DLiwWxXeumJ$^`t~*Qxdnv-BmU|u$Z@oC^9I{GVz40zgww)K>dbQ<0fotvEnKe z3402IQ%^6~^nDyMvyBfw-k%x;5B277hYTm3f;!-D$$hAQh81Ic72GsEg#tBn=gyt= zao5Vc#zt-(9R*s-W_8kmUSuT`2o8I9qOs=Jjiq8!(58)&FIV zi!Y5#R@|xVOd#{Op66a=X)Iq-)S9h*(k%olMQg zNBb+zzeL(gBmQk=v%;vo15Z5LohCs8(ebM_AI{Ws2q$JmcXC62h=<|3>)-D`cyQIk z#Dr{pUheJrf9IiYR`TQgpuar`I1nx-CT1tGQrL*Es5}?xN5a7%oZr%L-30olrrJL@ z(CSNL>-`^xI==hA;Xe3l6`lsO#o>g-wgZEFeM!!Po;98mKcbCqr`bM(+{7<6(ud8T z_~Bq~6`Ad1OThaoLzuRG5@skfU%c?Aki3mZ2kwUl~t;>d!hD2c(v@VnqL}6m4 zL-oTI*2*3r0_m$2+5Q%9n06klGyVRI`*!x;p&>+j4o%RWl=1nqw z`4`rv4(~>5CyA3qKBIj4sa1TgY_T~|rS-$eD{_XC-(nF6{Y@6BvLCma^|fAcYt-SN zmo2&=9&D<3Ji&)h+U3n-*Df$eSIRRJXUB-DgVp7#Dt*8(JRK(gWI7yE;RKBNMz`N9F398`Oqh9IY1OdF)Lm^r4N3z9={S6~x^KxDYP1eP z74#24S>rY3ZP(FLp4I_(0*Kiv*v;X0cIy|QsIo-`2U_})#d;f#6bc?}*&MLM5n^h>J4 z>o$kTaY&b%gbp?*;01n}(eC;D_A=+?{rW>r(s{z3CmKCuk}y-gvU=2i|2G{Zv@N#f z0q*sx3SaJvn{oHA1f9Zd`9#C)jK$c?R(c~7X3V=BytD8;RMVZq!^2h3tHULC&3dv; z<~utkA}0LQ^hE^rRdw}dQtSE)N}Q*H%9rZ$2#Du0QoSdPpMH5A+wg9!AfYc~9;+*u zTvpKk%L*NO13hnwMz?(Bh(UCCm4kKs6Nhbv{b zcCTG~RafU{(p~*=p1Z><>vY15uSJMnwvyjKYHI2WQxU%^M+;4FOie^T;l=n4am-c~jXm_l8UXleawL$nY5Lg392W0DW+9ya_W`=9%hEh?uok1Y?9E8eJye zs#8o!N*K$nN$#3;ArtwTlOoN$7gFOK0e;o%}oc*3l}IJslqqsbRUhW5W8dD4d1#iHeq z$wMZylZb?%+dI&{THn@>jlhFr@3^HiWFjNvDK0I9zDBAybod>Kr~8y6$t8qLE522l z2oBtu5EQ%AxHkJuyxkT~&M0B9Wm=$^*9?6;qwo`?VCTYHrAm-8>&q@_ zgdznA@lfNX8h898^-DGO*vn!X>3vfqr4h*-eZh2l9EGgXAD=MYHY4oWBczV3k;n*0&uHj$lJ2Y)B4e>} z^-K|2>N0cmvN+PLWU&hC<^<}f)U>n_?Sg*Sk=K?1SbKYW>BN@$i+Sg&(k`W4Q?fK0Jo3&YpCM&}jB>{M#*b0knMo%3c6Ed$n=ZhsveN zjHlzYU~-p?)&&Z?xaj=yv)Zr{BGG$=glGWlVfs5Q8V^7GiJVM?bi

j|cBN&HyVt5pfMR5Yf9e<4#r&OWt&UfwB97;MioP#oiRr^dgVq-*9zR+CM+ad;I)>s9TkNlEG_1l3~5m8FY=fhtF}3)-}P?cbA$ zXF;K&2u;6dRChbxtwh%`A3g=u{Xy%>F{bY(dFy#QENl=1BG9g>$TpE6IBomA--Zjf z1%F5i?!WK*=|eP2_kls@V{jqrIrA+s%$HTb-&NwIYkl$`8{Z1X-ePzPLvHn194yV; z@tp@@Yn1d5ehhy}{iMxX91^6Yco-f9OpW%Ne;W8;dv$re>2`;()%X5MPbfSZh5Ykp zZtcz|@s{6T&w*WdK<--KX%ppOQ1Ykl?qjs2Ws~JY^6J-%X;#ub#Fe%?soPg@Er-2A zOO$FJ+MCu|V-^0$h-VTHg&qL+axA6L@FlF(#(-hCs(%=~tIx=U{ z4O`8joaF^jJ$whPbChTL{6an z+%GUUNb)64EeA-eI+AzLompNI*NK>8S`z<3Z$WmpSa;AEaV5El`=(Ub!7iyY>3k)H z=Utc&nG=yT1uj{PmDYN>qg*Lj$Z!&c=7+DpzgFLZu!ILH?FX!E1l%hvdHs6g{Z?}u ze79n%!GYdrNIAd%zMmL-)4O7x3*7NG6@<1(b+hT9A3CXypX0R)ggAn(MT4jwv$?ss z1ZA0Y`UgKKAxyfG{SN^E5H1_Mvz+x2$+6kfpZioXHgO_giZ^(^K}c0F?D0^Cpu?gM)gCtEhm-~dT~}1Y|Edb@F97GG`Oc0WpTDYH^oC} zt~Watg?xx1j!~bW45WwFz0?-IYR3mY5J|MM`K#B{U2R!;dHb$s7k8&47@ryxSG{LY zo-VKHy(aMH$lNUzf6(FfaWHL^h=G^rEQE9h_ z2^uy+kl6)h#nCksU0Jo*k`yb5R@$c9L1d!3pY6-Apd!n_x9^7Y9O7D&>YMH$zn7(n|T0CpPovANJr1PJ?2qI5$k` zV;on6qR*V&yGK;KG5B`4NY z=oIS8%f+S@dLJar)b3^XM3!4Mc>8o$SLiITV>O)OEUM0)LnaOm4j#OG%~^-pUtYEt zytPi&y&x^Ym)O_qd>$08Ldjjh#s|PAU`X#af|{dUcGA5K)i#!2k!ZgGp0+qxfckJI;?KSHUgZobnSk*JLT4$BQugvozkBX_Ecgad-|+bUQQz{;9e0f! z8yOJV=Lt%e_^V3$l!QSgMd@j+_DBbr zUREqMhOc%RwCbaUkt6U?2GT_+M|;jiH~cyEIydf^3KYy%@BWKWl5za>JSk^>f{NdO zhxHNRND6=@)f<;f6GiLAToVZFLrUBe7m+%^vknA6DlpEOx5g-mZ=dOXbv-%G@aG+n z5?-M-N*CC!nDefZYQZnY;{9Yu7I@AAh>2Yi(^UoNX`_cW~HZ1`E83n!G(!35j*{nK7V;K0|So>*t}& z0JaM>DWFVtf@scfHBOe~D|T`qsMfJN#U-VS2y0a_q!sJaxU-7hvknl=Y*lm}WMe#( z25Xi;=9VlHGz6FcqRZ=MF+2?U-x`8zImpkheOh2ob!<0&HKV>4{g<#8i5H_@FC>Hw z?Kq|$j?t2Gpw`46XCJrSM%!{E$!pD?fozdm%BGHO_^3OnbrFOkroWeG0}KR{bzp%# zs5i?g&#(P1wS`YlL6guMBh+n37n@UGil@8kq+g+0bG+B`#r{%yF@X^t2r8dMvF<%@ zfGFE4B@DQccZ?uSEe8c$OO4sy$8+Ja;Wi3hKRzt9a0xV@1G$k>!>mKIrI4`q$kE~t zHs?<{p?6K8>=p=aS|FaUraFSAm<3u+j#3fpu4eA!c^k0wGDuUUZ~wCN(q#H`YR|-Z z?1-6}S=+Kgul7g;Xk>*DiZ*Bo>Nka54yJxt7&431NK1_}nL{7IC)wctS#jN4tVjBY z2A7FOzdv$va)M1YCz%G6u~`|1OlOm#vcf=n^0{J3EiG!a_HHg=QLnpt72kgEOjFJK z*{#Fz%2UIHp&Mw$?$H-e6p zA4ELR9F@_%8swr{SHO{n%PqFndopC?m9}nPU>>`HGGIxvEm{1tm2P?I7Jzz70<7x? zl9MWy!lL!ORQO3U(BjhKBJsD1L^*+jqU4v`lnu8H8tvyTSD*F&wwR9}W{sO58Vu3l zXA?W77F^yho5z_|tJ5dxI+!7%VG2E-1~d*FpPDP>l}Cn$-Pf>_?U6o>1J&hIgCiq< z?#Gyq_|3!9*A#luT@IUchz1I$*ry8#GvB~(#^W)aKO#!59KbTDn)LQ4Ne&}^Yg&wb zivW}{g!C#)OCJbJNVK8Q5;EU-QKqsmyULt7ZB-&QX$_WS7aXbQ}cH$gF6$s#BD`T1G)rc2GtSUtLs z+;tjR-BS8$oF%CPy**;hd%;83|1$fCR~8Bse!LmU=doQ?AH-_KmX`PS_U40Ye0J*Y zfv~ltH7g+*u6^vrDXa!+(#59>f*zkh?+5~+>Ud`M%*Jje#Ly?+7<`#7%r>U85DG$v zyc&3*gVGBXl!K+uHm+hCD7$PfHpucYs5@8;(?bSQ&v@UUO-u&}sIGrW;plt(^S4c$_gRd~M&hn&Gez7sT1zRr?tC;aEho$yZ=xB&sVnlPj|>jFMcU|9jz9UMM0x$D0 z@ZYx>mgzjskE{Vb2~`obuXE+&gHObjO6Y^$2TBOQVj6RLZk3=>IDE=wfA{M(w5kYS zVw;DE9kHx^Q1`+nBcg#{qpo!H;t$2Xt%M9Y%$>^HA(Kx(e*EY+(~+p|I@_59gNnIm zl}TI8nlP0?G6b?c2P7%$GtAt##n5G=FOLKZJ|OQHLpHcPFKeW?8ZLatGdC7JgbL_o zOLgQ$+uBY!n$=FmwBIu$6I*yln9fkTsdZ3~pN1N?O4<|*(8X-OI^Ar_mg!mum|P@h)G*hZvOn<9?N0)sU!aZNX&%Bes}o9PwZqOPshS`bgPQhc6zQs z@gI4Mf7X!8p2QC`PfY}bDw-oLEiLz}mr?EM8s|O(07EfICqta)kTl!=Q_HT{{5;cP z!s3SDnMApYrB-;2Ds=*5)cdJBh(;OUt>@6H0~$?$vKSs2IlI5_0kGzJxF_9{COiAH z0Cg9+hx8W5No#(02OIy(UCRKa%evma3F;Uw&?!kf7VtZ$1%h~FZ9UTBHeUMxFrY=n zrrT*_YWrBw)*TfP`c~Bo2?uFr!MMcTMLVeWEua#C1@=igP z>78&5YyWa>o3|DFjOk0n+jlL7OD87Yf)c?2ItO2wF6Sv9}VlVM;n&T3S+HS5C4C zQs7HGn{iYpx)B({PM7lu32{XSJcMVa3>76iAW-Nz9@BWX+ z1SP7ukLUb?4^r{zzXbot;vU5_W~m1Ik5`MGSCtp*UflfSym8g^73kh8Apa|fo9I3t z9_PAf^9d=C(+pvc>7R&-N=O`6<(VrQ54AfwItl?S3LQ583~pbxab2Ib$P2hpA zBkkRdfM>Gfl1g*59EvBG=dn3m;!z{*_u3R3fuw+^{zMB<KLSvA-D{(NvSC(X_fjv z-ZRrma4&Bpaz5>ze3}2Gw{?Jf9yf?Sj37=rO4i@`3o7$Vvu-!!ku@aq3hf;yA;iMw znPwU_5H4E>jmr5pR6L$JTC9-{Ua+;>0sBM0Q?s-l$@U=c+=O-I`HkHClfX1hi^J;!7JI|hHiMmkcA z9ILOW5FZ?SaTBlvG0zFy7K+1L&2OU>RDUWYa73euGIzh24QaZ#xQKXXFbv~3ytBX7 zol-IC{0J5u0(gf#c!bcaTN0w8!LJGn3)vdN&2|FkD!Y<}Jm~GnJY*^eud5lr!6bV* zNmuL*W?v3!`(1Dt!kpBxDYfuUTZLApy(9J4-Qy!GYC?dg<+hyZ~ayyLr(U<87Ns*jYjI*pzDLtlFafxW-?dqGtH!{Tc$8K>qbgI-*! zba(ZpoQa7upuzUpdsw|y!}KX6jhVv7L4i~8P@!FHe*QXIzej0kX$}^W<;sLus5N&4 z{`FX_d%WGKe2Q4Mib_IN(-A{=X@&LIlYE%}x!dk3jI)plk2x^SL z|8@zQOi<~QksXyYD>Aso8hRwq5+pEvUOGh*-fu^@FjC<;zJ7KWnfYNX=G)A@;sosx@bQ;>Z)r^ zStCalL7e94!0#F4*MgDR7&cKNBPE5PAbq;CfObE)bk6v1W~VtI+ficGcFf_|2Z)cN z{HXQ^u5hW=9s}%BnHz&*<*Um`ZR)9=ugYpfOiXT#@6T`kJGioGP~VShq)+n1{SJJ( zM=iF~)Q!$uTwDx*T{-#V7Z1Z0OYJ1z#z!j<_Hv>X+C`X7abk1!C=jKq%Tho<&|W$q zk73;Xs$a;$&yBC*@>VYx6eTo{Ci?5&8e&tEv#oBAa-<4Q~BiwOBCOBHyrsGY@^;8W*QKzy)oNIt-87PM1N(pObs^eV^$HKU3Ple{v zhYG55SR3Ok)!rxgUF@*pJW=aaI|_O6YXzz2F$@3CoESxd%a02vV88Jie{X;Fz zKin(6e?>_b?W3kxLO5$R-7S&o`1(q%rwCh4(vR~@r+zQ=-9kuhs%*0X#tsd&ZYzHH z5wS;w_$$)%#i&%$YsVq}A*Xi9;+>>#!Fr_xiLwjD0}E=Q#Dthw{9`?yS7k27yuYwH zX;(HBHCiRTwc9Ff|KjqHuPcQ`Mak1NTus&pw&E-&>Q9@P(8L5iKWpP5X%?>_mt=jp z2b%@fi@Bg0g$w>LPeq%a*|$jj*}ZJ^T-ih@3^Y3f#kO$OY_0N2*9Q;Arl&I7X^g$3 ztBM{=&@7%sA{GDG_T6z7HZWuxy2`VS0Y#Q}j5S(zyHzHCbTf}ns=Bv-`d!5SZ&wX8 zHlL6U3}NVOWA48-`mOWjMMvkJltv_g`c^G;IPMh0E@u9P5?MG5?3dkBFlt>U-(;98w8IMS|+Zu@^<~V>QmjFt_!% zyN2eebqx=F;}A*b!sazv>=$1)g0O1H!Cw?ptM-G%*PHnX*aJfPH%#t74LTFO^3hfo zK#VuP(m&Mdt@K07R^4cnA~YsXDH>IBT~ecXs8MAdFB4;?)|xl4U8O)~1D~yZIZgzW zXTr>`lFd7>tW7}K-1FNsr28Ns!qyGZbxVERVG%MA%anCZm2iDk%Mq^)N`Kw9t(TKk zVy+E&51!RaBVL(vz4)P4NRXlbu#tj4D6Z)^sYcErEbOKuTD^aMN+CnLl@Ff>VSvJ? z;O<;aQD1q2Uab^T+7{h0%UJ|a=R+ovkD&LbCxq40J49g%K!7;kZ~UF#$nAUwz_Rk$ zz1aM&halax`SEo0J-NFT!%vCQ>fBN}PZi;4p?(D+!~r;&Xa%J76pAPR)=R<~H?3cJ zoUHTw=Lbqo}hs3afivYZW2l&X_JcX7b zLI)@9c4M9bs*q$_6^ewW%yw9kW)6EFdgnuvU5fa{R?tkJ?JO2{6pEGHm|Pi{DKHO7 zcYbAZVcP?ABbtyc*C{_Mef@ZevPW8XyodkMHLA5q!@5`XDb`CwkLo$R&TPh(38y%ci?i=m@h>+QQ zia>6@BJep2m|n&O(|uS-I?3eXNOgJERbx#r{Eh$0Eox2(Xmzbw2l)4dTFn0a5x--1 zf!m3o(F`?Bv98#|foT8y;k!Ymq|<;@sBpc1U%0bTpNQcU00vQdxBQ%!gfl5_#tO}S&Wr-C633^?z2fvR zu)T6BZI2xx<^A#{As8?L&!Wv$5p>j*6q2JTF$9)$Vh>1UVrEPsVPt4%h|Twj7Xb0m z+tj}|?BkE_0sMIlX6_(hD$Gfj<1Anha0nxz;OZT3E1LROzeJ<%!RUNjZVheu#2c6I z4W=-nd12FfkPtM=rs3E+exvYK;QBk7yB6#~n)GsqQ8m3%t~9)~vhrAfIlB2AGMMw! zpW?>G#&Ccl6bPIV&?@Lprnk9s9N3?)Wq3A5%T)T&yXl$NuU~85i|*|7RZ=}e;u8Kc z`T z9Cu3@)Q=KFPvfXrssILN92$DKm96HUk7z4h)Ihf|XKd3I!AJSAVk&C;%Q8J#iY%gL z6(8#H6*^Rj`WVoGqMDF3Km+)CH*Vh6I$qF&=cSf6qO@R8Mi&- zop*4VQ-;!+0L6fjv?&HQ&;Tu8tJQh}lwNCctS&5^N?%s={CiN}>^j^00yNRGUdVCg zq_Zcg94CR>fT850od%6qDjlE7ZhM8C@Ly4WLL(K923j6EIx-b`^0Pb59-w2|;~OfB zqPNRQ!D}s1*sZyDTPi$((+?F6*0*IcL~tee-NqMJwiUyvJ*jXH8>nv$Z2*PFug2BF zhT^)r-#r7*qC+`xrK`M4V%;KtQ*5HWJ$Z4i`cy1Q-59dXeB&yeiIg%RjEXyF^+WYQ z>+qSlQV+$+GOZQ^im((=gf$P%r@jsj`XX>G`X6o$wFAjX>8d+_Vuvm8T+D3Pwte5H zPoFq(H@)Kq*kGRUYE4@2LP7v2_z}rAGpAGfOvU`#Npyc+(g%^InN!gw3d_d+`KN%zny3jZc0o+Rc6yN(udQFRrj50JJ zcJho)ov>Q$mTvtU-^*YM+T6%RfMAGT?%v~~Yq8au{b4F1dqSM?CU&IFa(f)?Zahpn zuVb*I($~rM!he`L;+-hKxzexM2j!G(yg)X!EW-7l;_4~q48r1#=VsW(t= zr4bfQIe7-ekn-*KsvK1(B$9N?0lqeXmc1*SauX0)tsoBPd;!gZvG_xt4zA~VfEZX63V~ZX2-adW<|@;56*yaZf~+25Nt2cLpZsx|=%7GrtHRsWOUR?9~HV z(M?ei5d)*4&vcRWrHi!>;WWcQa$<&PXsWLEUj5i;4@l)ZXhZfS87NLJ-7uIR81$jI zVO8{v8~$@m8Axw0zW>t77O@}%w&Ar43`-Vy0S&QG(WpE;G!(B}JOGM~K!BxC7$rqD zm*DGaYpqO-jW=$-7ahr6#ZGz=F}5_*+5k5Wa4ud(*XQDODM@qGTQFRahJfVjdS$@! zxdLRMK~jE+tOi!LCKEkqsUu{9g8maAn|zN0`jZU2o2#%8gu@@mCg~m&E0a?lfc$g{ z{)Pq$0UTZ6OuW3L+o)ug@7L=qXA+%ZJ=9-jTPl&l2FQ97(#bv{9>{ zGJVZoJ~zGFk=Ch#EAC0gkwisG8@u|+~9Wd&{UVt!`$0LK0E+e>(j>HIAM)F zEG;b!BgUlAD^%!hPN)L_z(Cb-3HJvULT|?=Z6+%RTR#NpfllL`!EfUv7dJO6GfT_h z9D>@Jnweng^D;MIV8}bcguN_$a~Xl(GPTYM4M*Nu!A?3MtIyyjk{UL1D#t7(as{$?_`OJXV|610>Q z$#y#~HdTKEZr+S71?t8`?zn4Y3qaW821kox zGGSz0|Q)7Y{$&85K^7$iy6B`>t*)Xp-hGsAaI>WI_ItN z6jv}M%@pfr5}S*aQ(b`eu(Ew-!!n8Mx!Is@kV~i9Po7(&t_PFWq>) z)OZ@vKv{TrZl})CBC4TcKWi$QDdic!g zUreW0(MPPWAbae@O9IDB-%8fkw}wu(RntOG0u<3>5cbrgJ2Qkoi*xb=b`%cw&>bdp z%`^sBq-Ul|&eTEqWtP7kp@BkM6XG65`wMQE??B5<4pU{L!Ly zf7;CehR&7Pah!3J3H0?B#lhc&P3s81=F;Hapel?K z{86BD!Su!_0=fmV*RTzngXA7P`;d z`VWOc=0qE?h>I0VeDu>Q(51Gm2ZksT?vcU;DZG4Z+u*et4uch*lcHhR{o1lCFyH^AmW&%yCGt6LtVY~`;D zzyH7vsE;HBn{S}RIg)s-MnXxx>n|5@s9ALYFu^@}J09o>COhMGFXQ^D^zObUObQ~s zM*Lz+MNb*$f{HL1nggNN9x{VQFZJoG2_enEx{6r$s2isK^u@V=xIF6LYVPWcGa-oC z(fYu8PCdEyM=`;qmgNd~l|$?Mo(jt`or=hN@KGX&FjSH(q#ocIj;-7$Qr;-Vgn_u8 zF;LJUllYxzU^$d_Q7TvJX)}&m7*o>H)V+VEn1!W8$>B?a2LUmunBZe8ouQ(jEIN4! zBG9$lQcc64)5)S&O{Q*xm;%F{admMKzbql4ej8HwRRE9){?0zZ)*3sHng2@+Y9<`npdx3P&x1D4LnN1P56VzmY7s=X`pI_X{5%xG zg-5>sejN!k*Fe1Ofu7JuQTxdZa-%~zNH>w2x`jjk3EqTrmFykCw(p`WUB`x%5I9h41AQn9G0sIAEF zfcjc6silU~bA0k(py)0DG2Z@&5gq3XGe$88J9uXs4=p8SkaN^kgFbp?O@B%e4WOf>$b|1E%wscwDk7R7f@ACKF-T)g`U?hYY|MKm&?O$H0sVzY z%0|7qgDwN#Pz0EH&U|6b)b%p7-$`vT5Bh+=CF%yAl0fxPZ6sXVf{!yA5<$PN7AvDA zX+U78=roDDyE-+dQz&OXbh*)eve9HahM@M+0#H?jM|&e}!~Qnw%58Flpis+Opo^&+ zCxZKajR^>y4hZ`cB7f9P*xvUMgr-TY;~L6eV(9g_f7@?l zU0y$)A9s)AlA*3_-4n?PKf<~-tq?H*wgm)bcpwvLlj7&7lO#?PhJu}fn%Dn3V}u58 zE;{t@!`RvW+wJC9WK3cuL^tNu!CM7nfOjXGvFXYI;yaVU9s)jvv-!)3l>i~c0jV21 z=#;?Nk_UN$4;K}p7yEAyN*nR+X2`F!FV%w2vIy#dnH;!e@Qxc0YZM>uGES9SfEw%}sB;bV(R!Z!lzsi#VzOHUAbfP#?nxbtWtY zp4MP{nqj;M#t}cX9c@d18Oe&Le?xDAAt&*s8Aq`f146Z|IPLo zbI6&8KsdrG&9oY{RQ${Z41Yemc=HVy{=6bD&w*^)e)LY@WP;OswsU8q9I}(e`Do3q zJ`((AS*W>^MO}2LdF%*)&zq+DSpKcal~14{Eb0>)d#3JaqS46&B}=s7?IDB8Z~rs# z=e4l$u8F{)StNQpX3TB?6>skh= JifeX{{vTIIS#JOU literal 0 HcmV?d00001