From e9c976619ad49b6c485e4ee9a050c730fc26a498 Mon Sep 17 00:00:00 2001 From: Bryce Date: Mon, 11 Aug 2025 19:26:40 -0700 Subject: [PATCH] background task --- .env | 4 +- .qwen/settings.json | 18 + .../document_symbols_cache_v23-06-25.pkl | Bin 0 -> 1520691 bytes .serena/project.yml | 68 ++++ app/__init__.py | 12 + app/commands.py | 30 ++ app/email_processor.py | 317 ++++++++++++++++++ app/routes.py | 2 + app/routes/background_processing.py | 59 ++++ app/scheduler.py | 107 ++++++ .../background-email-processing.md | 132 ++++++++ download_cli.sh | 248 ++++++++++++++ tests/test_background_processing_routes.py | 113 +++++++ tests/test_email_processor.py | 239 +++++++++++++ tests/test_scheduler.py | 127 +++++++ 15 files changed, 1474 insertions(+), 2 deletions(-) create mode 100644 .qwen/settings.json create mode 100644 .serena/cache/python/document_symbols_cache_v23-06-25.pkl create mode 100644 .serena/project.yml create mode 100644 app/email_processor.py create mode 100644 app/routes/background_processing.py create mode 100644 app/scheduler.py create mode 100644 docs/user-stories/background-email-processing.md create mode 100755 download_cli.sh create mode 100644 tests/test_background_processing_routes.py create mode 100644 tests/test_email_processor.py create mode 100644 tests/test_scheduler.py diff --git a/.env b/.env index fbf599a..aa114fb 100644 --- a/.env +++ b/.env @@ -6,8 +6,8 @@ DATABASE_URL=postgresql://postgres:password@localhost:5432/email_organizer_dev OPENAI_API_KEY=aaoeu OPENAI_BASE_URL=http://workstation:5082/v1 -OPENAI_MODEL=Qwen3-235B-A22B-Thinking-2507-GGUF +OPENAI_MODEL=Qwen3-235B-A22B-Instruct-2507-GGUF AI_SERVICE_URL=http://workstation:5082/v1 AI_SERVICE_API_KEY=aoue -AI_MODEL=Qwen3-Coder-30B-A3B-Instruct-GGUF-roo \ No newline at end of file +AI_MODEL=Qwen3-Coder-30B-A3B-Instruct-GGUF-roo diff --git a/.qwen/settings.json b/.qwen/settings.json new file mode 100644 index 0000000..ae1e5f9 --- /dev/null +++ b/.qwen/settings.json @@ -0,0 +1,18 @@ +{ + "mcpServers": { + "context7": { + "command": "npx", + "args": [ + "-y", + "@upstash/context7-mcp" + ], + "env": { + "DEFAULT_MINIMUM_TOKENS": "" + }, + "alwaysAllow": [ + "resolve-library-id", + "get-library-docs" + ] + } + } +} \ No newline at end of file diff --git a/.serena/cache/python/document_symbols_cache_v23-06-25.pkl b/.serena/cache/python/document_symbols_cache_v23-06-25.pkl new file mode 100644 index 0000000000000000000000000000000000000000..803b2f653e6ddd8320aa5dae3150f50c0b15824c GIT binary patch literal 1520691 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 y~6O{jgtUIm}o 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%0A>qQ}8&A59l=yxw78+R`^TR=Ro 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�(6Ptpej_^9sxl_yLBplP8&cY3~KD+ln=g$W~>}&E^%4 zpGt*C>dp4mX}+Fqwr_$OYMZdwg2f&z4q@>q79}iZu(*K5Yp{3*i~o+rJD`voxGRqF zJL6&H07joAVYlqJw{c?c(;^+sz}8$kq|)W|I>4UH~lZ ze*0Ikj)i-yaOaE#9QyAtqd{cre%sCF6^)PkL8HI@_D(Y-M7Hj?-E3YV`C~tjtR~gi zWrWye28GDh{iU1DD=1&|1PW7hid`2dyUm~w*$RrA%_}JX;0F}3iEzUA0{VmtTzN>)LaVnQ$!tf8+^i@=l=JYfg!SW zNp`b&1?C1nz^s$f;>6`%GcH873XGf0D=r)T;L^93$R0B)M7H`vxY@j-GU5r9e!WEQ zGowOeD=Ka_uc+MP2bDfHmiL?SAhLC1>1Oka$AfGQ0ApBWR^4wcySvwk8gXZ=1lgT+*sq&7diFO8m2Nh#u>3c_u(*#b$IY-1*$RuB z%_}TF?gy5B-64*cK_Rl$GUI0R3d(!@fU=(Xh|GkY5=Q4pRsxTjfg!SW@o}?x1?Gc( zfLUEe6`^=GbU2C}GlN28tF*Y;yn^yuen9DapZ!8JDnz#KDBWycQTendRKllbA^K0- zX_Gl_Muo^$RNQP{QTd!7R91s=vsCWD&HdzA<%Ag&B3lQLo6RdIU-1JmXtNpkclL=0?-T)^yeXC7mWvlID+jIFPFWa80&xDN-li3vYCCGB= z;0ZH2FXm+HWu{a7a~&Nb-)z{a_OEYKCHl=IBHv}(JiFPX5N|-RQ#z*K>Zij5EN*?9 z-fvj*SRt~jrxMt_!jks`3+dZVze#%g7nnhraL7smn^#b_dj-YmlTDyJVFqQ!0ZIa! zS5WTv1IoH;W3~%HoH`J7&~f?sw0Y7Zveoz4&E^%CM^fPu!c9pZ>(Mo-S|LrQYe13X z8m{mQx2!|oVqS+_7E@x=*C8TbE!QDWsGLfLN@|06BaPz34B}m=q4up_ya8d42!?U;$N{?0WV*}rL%T37SG3GD;D=*@h}!If`SE(8pDfn$FRUV zhc&zjR>KnsCYwBt6bA2&#gW1gT=R3mvlB+@9JCw4NS(+3Y+gu%8T+hZjxLk`0d?yHIzOf?oRxd~svBTKymeuKzTEqX8Iwbycp z^w%abMwWW%;@DmeZ0RFQJq@*_!Re05B%lQGXZO~@elv3+&w_Fl0kn2|4`LXFmu7fT z{3(Xm3NvEs&4}H>$+-J4B1UX*5~Ro%k@3uwBgRgGSX=b?Q%T);g^+Z$b|RxO&e$k7 z8+GIDwP&y=Qfk<5P1&0_C=t1!V{>@zv7O^-bh*Hzr(F_KSDKL`GM*9{k#e(nMd}?X zk-EQH!P#N5u&-I~&NTAy8-_JJ6Sg3datngXv@W1Alf`)+3QFBhv)X{zDj4LN$9|4M zssy-7g7zviv_wXOmJwPvn^$OmAtkhsI=4lkt#pV_FqJjGb;pjup`Za#vGMxc9+td# zFa~HmHdYdz8_akT8Es)kJl$+w@%+`4ct^$c>X%cZ`dBQ^nU3khCypK&gj}SLVg^@S%aFi=#D}Fy z(3}#a2Uv~;OlJUk@MN`)x4GH96{ZjjP#oz;IR1;7Co`s0}F_^;*hvBLkb|F~eq* zOhrvP{}9CBWU=QVavqDiE?!9n!N;iPJaIPVU=fRbcYs5PVP5SuQ_M8;5SixXw40Ai*oqD*8AwU*SJ1U4zkgC0bAdrGOvM3nDJ*{GjH zQC6e$B?|Mt>9Bkj^DSZe0Jtb~t_tZ&W%eFODA0k*+U(OdBx-`sFa)h4={#4n_N82~ zdj~;mP{p*5*ok(Mm9S4Lpa)MUm}X!EM5xo{28|AxiokmSbed+gglREEz;vvkj{xLQU62k_;4#Rl>Vq&U9N(_T^%=5Q~apz7kD0?yxv^QOIPy z^(nRztm-sMGpisQ^>7WV`hBIV?Vm#qVJ8 z$5?y`i+{r6xiHbzP^qomhz05dwXIm}gF>p`GEgO3SuCd&8~MtjpYLqpWDHbk)L4j3 zKdm4#20Y^{%i>Ne?ldoVM7COt+-!2WI|)FgRlbW@$71iT;2B-dM9=TmE$qBvlNl=_ zThA-pY+kXdr^L$Vc|~+Jh7AnM!RPbMxDpw!#ux{No6Re(7gFN-FvSJc7esj&1Z(U; z(0;3D8j$`f&(G5e)k-eWib6Gw}Vh9TzTcN4APJv?a zIFpdfn~@~4^%Tg><`u~|r9|>JiG~j6N$`$~+Ye$PJCk4=G{Z(@T)~V2=w|Z@+YhFM z4G(i!{8Ak?8sKr@3~@b^0NiW_kjQ8bGy>>m^9tZkrvz}P9_&;H@_}X(vePyqqd2-X z#bH(beUlKq%Zw`m||)ih2;gdEi4ykt`fE(og$pwG#ij2 z)P5$pRtYki1oV&@Xd+vIcC&c}`XecUF2wNAfsWR9LU}YUvU*(7BrJ!`SQ6Q)tGn5} zV)@CGSdJ=@S{H_<7R)pW%z_zABBR01IH$VVyn^{>DZw0JwxBkT?z%86^#G_zV2+r< zB(ha9-E3aL{F{_uKB0t!)zL)5Ry38?tL@HU07vF0(4rl1&VXCyAR~M&EO**G?=K!S zwqtf`x`~zqH<=6|zN&KeL1e2&?`HD~_t#Rw{Sa=LILfWC&K9NibaghLL#s3_Pm`tc z*;Y8U2lh?$Yd$Bo^+Q3u^iu9qHwe>hYHRdk>E31HR>;`Rtk02F)H?oR-K~y{bd3#)Yl>{3YXo$n{CYpe!(^1y19P zC%f5-RnH1DHeZ)#lJ!!?Xf)p zjoEB!vCD4bix}v(-X%PBG47LT&6%W03Xx99GT9*jB((0j~)64|Owx!Jq|I-3&E7bxMm zbwn5BRIUZIPQvzHGqyyw3agvVE4G(XV!J)kOiLX*w9;m-pH1|A`C*S4P9j^q^xbS; z;e1_6IKSbSAMP{5N@OdnZZ@y5es4-xv%mb%hk5dTGt@-3nkU_CUZMVxlu*BL5w?$L z4x!zxW~Y<}3>o`7Y2w{$#+k@?kKK5L;b!xS^Se^w{3zGF_>`*}f)6rVs>KxCH`aYR zhVL_@?J^S)o9-A+WW_PuhehTCDbWu5a|}NwlA|2Jgkj_mF83Ul*fl`vH*z0mT~$Q& z`H~m^@O9~4bmCg+AFjSjqGi5ErkD{lVKdv;1%GKtg{;xKW)T^L`}PiF)zNmP{|Y%n z+q};C6UK(Q! z^uBg+%-JCKJX5opS@DgTn%GIiH88u>0xX8H7{lU0EKXuk!lHr2MJ!&6#hbBsI~G5S z#rvUY7?zN9biEaD;a%131D=Go0A z^^D&Jw9@*B{~^|q;w<9!p0kKjwa5-FS+vgu9Yj2AMvTbTg9ta9SH!-M60vXmLBwG* zu0*yTM7Y_!;`;X~an0r+qJN9-BW9F|Y_;gR*}S6s^^_=ku;>a%d3@QVt=hO5QX*R+ zb+dVebloe{O`$tU>qISxEGm zNy1Uj9+8CQQ8SiAwl42(Hm_JdKP8q27?vWRhAy4_Rw}sby|7!ts5L>m3~qZv0gF)x zfo`UnLqXUn7h=ab@jMhs@E$Y6OJu94y4k$KyDcTWkIRtgIqh8A*bC+zcy`t+2Y;yuv!3 z64q@I9J(Y&R)d5EES6j&3Ct5_Fo|rP72IrI!F(bmm?IJm9m}5MUH!bQk8_4c%@`8d zdd}cx^NQh_lo%dagsn#1x!MjH`ZRn$Ziab+ldVy9iA^_r6In5Q``G?>Qo`J4M3h*T zN)Z?(X4z(TZ`NPj>W#mGQI}b~r8UTyMug23mLOtJm^pkm|d?+DHEq?KZAIT1?>(*?2YYkh{APr z*zvHxVV=ujki>cj$5K*#mmlQ@gW>zICWuTX1wz2?-bNCBkZ(k}_(5csBqXqTh5dU| z!hR?VkmE^Dk``vd60(<=AjYI8Ns^tw<`v=}NeS_;^itdJR-FKa%qJ#5XB>bguz3aa zT`2**wa>AxWmHL$#M9>ao54=lw0L|>`i^IFYIga zyl-G&;6ch;7L;fQ9Q1=3~=7N*0eD%CS^7aekFM9ZX-?j}iJ`WCak;7tGpNqMDgQZ$ zOBuGNnyr~qqa3ops}P2=3%~9?b_fPbz2256IgSY#@T^Giy?D0WLKfwT5!1@_-F$*^ zpFtrPN1YKP%JkT=BbK!0T2_;sZuKuuXPM-6w?Y^x6-Y3vR~{LQM05>pObxOMqVZ&} zK(jV6z6Baq7!ND_S`(sr`*Y5Sjnf5fpQGQn`f$xBCIMU$oDfpxBP6i zQJFuyer`pp)HoB)cvhLhvaAh1HsQneZ z!{Jr6zsCQ-Mm%=~tjQ2b0>bqi7xmS?3?J&xf-sIlQj+C3+?0jj!eC=x;pC$#_cfw+UK>KW$JN=;gy*rY4Xb>Hb|QUV)q5^Q|F3T;c@c`Lqkk)2ojSNQ&J)LEBBy<~yp zI^G>R+(f?I28o-^Gb9^)L2~&_^$eztPL`CL&9D#|{hN%!>t^!|%kzA}vbqi0d8J#2 ziH?tIi@e;IhgW;32d zMm#w%a{i4Xxw6UE(oMvFwbo5UzRA&=1UA`C+Yn$n7Fhf;bzjPE!lWX8=G+}ATOuPH zEgp=2!^LAUYc`+uneKKOyhiOxEN;OfhXr<3?OrID*7bS#7KRzuu&&jX`(a8^`z$M1 zPeOA+!8(oq*%YiN;6of2@n=EZc(H-(U%`42d`p_nddu8xicSi<&PPy39p@@)ENShd z@J*`P^*B&K?V6w$RdBeLW2WOU%*m)feM0Lo&RLP8Rx!F9!^{UixJp^+P$o)acuyHnDWD0z-I0UD%XtXbKGuNIR{}WDeiQaA1 zA$L<}dQWbIJ|g2Z!#C3Jk}$s6j4_c>zcXU&X7h~k8&hL^GwHj4^ElUh^ME?UN1TkK z7FYk0aJ!x32I`+Ol!=V$iV-(An`hkKnjSZ)5Cd{2gmR47DY(V7Lx!7WRvt9V+g+TD z+MyA*&1SfXjBs<@^_A{@-(#EyK6rH!;y{l(#IB?B#r|2%@qA|FXhVt2t9_vT(2T{ikBhIL*%h z7}Lh!5Lg?l;C=qm5KiVgVWSOZy*B#{LSivfB)$dC1dM2(VA;oNNB6S#erc%z$710b z2wV$cSEFeN^0t-E!6k1@pv{)jB} z$r>Gw0V2t2Xf?YKFc;75nyn5bkE=Eqr~Di;s85Se@ptwqezkbFqO3WO+#F5I16TpL zt>e-Up=PU3!QzjkoYHYP9N4gd|KJRfD;C2{t!7`I{h(uC!wNbGfY+I48?!cyq}nU7 zcmo#Sj|I+>wRb|nHfAUBFPxzG#_T3w9bu_};jPY9%VFI7UD`f5Ro=0CYRC4SQ@eLo zwr>r$m+zk1x?|Vw(Xc$ZeFxZ(&O01UNnqnm zfxXV3K%2zUdUyZl1DYh^8NrvZrcHBO`#2-$;m*xnW024JE=%+JTi%-Zr)ip4`+MN# z)^L(0nDQHNOp`248_d#l8zq27FrHROqG)2&G_ud(6eX3GGcO&;Ju z4^4kl^#AoaMPCUTWe1XEuxT39Zt6J8x*zb4)7SmOoP49LjWRV9NlWLmuI&-3C)>qTt-i1?TzN6h!2l4H-9E2FRTBfQ;WMXuF3NNl{)4mK3r* zx09!zar5-^8prfQZ2I&=WL$3a>1QR{xx1n@mYv6G^V~yZ^qMxV_HH&QLM4RR%iL4< z+F|4m3vQjIIdH zb(0jtI)_M~N{DQof!u5vK=czHA#!U#mpC%FY9out&$EpzH(LhCyvGAFel?)7hZac< z==w+lD)LyPTkT-ha_vtpCAAm2A>PipV=` zBIRb2BK0AJ-HS%_TRuCm-|gx=?;PFmL1gQM?PkjWpilb*sK4zhy{EqKB(in8>SoIT zp3nJ&hf?@dD~<*KZD#o)vQ>WEY#9Lb6`ugDh);-?{n!tf!67pGZW#AtZng}-`I<*? z+)MpWaAfqQp2*gv-p!T)GAq9={gH;>rT$ku_SM`5T=T@RRiF==XK5l^1=`J)0YE!_0@R-hMDMAqKt#5xKyJ1S;Ca9&JpHOb zA2rJlk*)IMX3GGeBR&DTD!yt!Xf=nb_?u>&hR{eY9-nF`r8~I-TF#o>v^x6EdzX7KJi)IDxK%1m}G!HX$FYM zRsnLeWdP92eFAjZO#4hSG@mjK*L>NYZV+CLc&*%mAdn@Cj011`zqC zngvACZBw>XT6Qut3C*n=@ZHAy*_b1|kB*qLNI`0#rK95Dl4_V|$(5-SL9?<1T(2+3%kiN|) zNY0~?@xvB)1l@L1xG%;G;CZ7@crI6$TFVCahy@}+x1Ar2iwATG67=Z07idcU*0lfT z5hAx9d79AC)j>hG>XG7sB*qK`=*K*u<5!P-*h7n?9=Wc4p&`QOIaJ6q)N}f_Ef(Fy zygw3*x(X@iXwBd~7j4_tu_z+_TtypiSjL;6+Ya3NVw4i~9z@;CzU>1(`|k>#omabr zYMGfj7Ni6n_s>SNl6XL$nFKxBc*D%(52@euiPV~Q7&chkNFnDIl)4s_1l?+&6c6Yq z2|6-nAWxt2iPGBGxJ%xZoFkYt51Vm8w_R|Q4W0Mlo^!bJCoowxYL&s$&;bSq5a z0UahmN5%|b`Wv4xZHU2CtT)d)0vL_I+ya)M+uQ>BV$1-nulfXwEydtG;l3|2{%Xq< zCFs^APduPcQG$+)8Q`??H6G7U)>W$Q*?Q>$CGkkOLOcFCi#!Rs&6l(<#td+}+9ys| zhEKsk6B_0DC`_Kt-(Z1C&~5jP$HfEsJSFJJm;qF``GjgsBRt<1O7n!0=C(90=vEVo zcp!-}1C%yOPWI;;M2jGQ` z8o78tM@rCHoq6x3#UX|-rafZ|{EcCMV4!N66_LjdmkgxR6 zThfHN65Rb6ykv%mbfH9lH+=|L79$@+ zo7esv3yeu!`#KhDA>2Xj1}rvWf$>jk_h9iL7ALU4xP-MD7U!^d6&Bx##rI?JV_3W! z3yjwD|FicdaCRM6ov@R5k+s;4_ubc$lh-XAkv8*V{LLeI*!qN!|A%uh_FhIxvGc1z?_y$M<0R~72!#0Ejn3)eqfMI?xA>=#% zs#A5V>Q&wQy1TBNe6)W4mHVArr*7SUZKqD1I;Z&wB%em|StNghegz2(#G8MFD~$CrNyf~p5Im2 zxMwvm!7ox(5t!hY=>NgM1RtS?SZ9!#0uzY56qw+bJ!EfSf}f*|W?+I}Kso0(|1Ol(E(&`bn_P`8L!NFGQ*CqVDG<8~9n zERI7Sj92(!WHPL?yf7BCl>p2d7@hyCvlOGY7h*WE#NqtyGd&ooc8i^*I zmRSoSld)^`qFKyV0-9GuLGy)-3()M*K<=iv^3KsoNv$S8qkyv%Fz%*iye0B4VvMMx zW6zcG<4{kmTVj2Y^f_RKI zarv{LW*%X*>%60PY0aYlph$1bo_#o0>@5j@`;j9L;TzHWH4`#0t)S&C7AjLBO|PVb z#)OKto~zX&6C$ukv>G!LK!4XX<)=0Rs9O`@BO|n-GHI)q4%MIEb+XZ)qj+-5eVhFz z8D>{3`on=l#GDY2(-S!-xN`boNyY)XcTQk7S7=}|)GKmM$Yc@oW^UdjHR+$Em<+RH zZ-t84^dxl)rj{tSZ`-3xQoHn>fUUCEw)@8H&z)_8Iv?hM%7YKz`^ZsC9Ldb(N5IwH z&MiM5C_8SzTII2N;&fa3#EaC~k` zQM}_WkS~l;v7_%fPcD#7{U(ql87P75KlyT`LBnAX9^Dc;i1vWdw! zsSUc_l==O3lWNk_~)#06C#T1m{q=+jp{D9PP9ySVL*t@ zQ)PT>F~dT&*E`wi)+K|LKex(9#7vkp+B2PJ5<-F2+s5oEv=+~mR#7XNT&)5`0NAnN zVsh(vU#rtglm1*v4cemnj9W$b!0$jcUDRtRU@Z3?)N~{_Sao$vp|+zePBBg06A9Mo;^(=aE!K@BGjvx8Qk!=}&F(uF=n!ZoC%iL~1#-AuKYI1-V>Iki8T zL+tju)ml1JtvzW~Oj9QW?=-#6`BZzz&2Dz3WKoy>$!VG##?tXK*=KOg4~h?fJpJs{ z*8n?M)!9b7+G-8YM@};j&qqU(7+N0x98Syt!@UR@B}&63;~7S`A(h&(rSc@wDZfPe zEd>%Ov$+x}ld-vVB~l$*DsQ9(fdQKd^Jgfr8j~sOS_j7}W@vl4*`5LNR8ru*}0WhphxmJ5eybg)PTN#WIUp zm4{>9-#3{Y)aMklm4M@`qTsku;@G49cirGrQ z?9EXyyN>%Fupyzz9M&Y)>*1@yT;+k+^n=Ib;NHBLtpxDi5e2*(h3`k|ZU%@GWUt?# zo%m*J7p|s1d50zs#g;_ToyV9Qoc@a0NiNlgPO@O?(+`nVzv?x{mCeZmar#(S&WJued+?aC(j%y_Oku>LnJdC zyT4KEA0vTVZprOE`HRzj0>L8b%<_oqC9~bmyxb|vovx+B9+F{~u@OIZ+}cf8Ki0O{ z2^vc^f`!d;Nk7MV?Y1QQ2EYE3eEYHIKpE#U$gchw8J$H$Iu{x}j?Gou^;VkH8?&>i&{>Hct{fPU(|-)OyAy0 z+hc-jJh|&Ya{F*wq00QR%bDee-Zgwuf|BviF5Li@*W+=lC`0895w;``NX*)#|Dz)^ zSx_$-BgG79lKRjn^;*^595goK&}r4z1a%5>5DnF#5DMrxP8BOI^-Yj7x$NmE z&>4jv+p&M7&*IORAOkge-Pq}&?*@bwG)-l{S@~f-oybT!ofi4M?$6n|he|zTgJV4( zNsVA}@POxUu^#CkBWPwwUvYxY@1&+_Ydi``?Wb7>xm)4?=W;f_LpRH5AeXh zuMIs*FoLC!NCSs}ZAbccZ}IVXcAB=pyae65S|I{38@1(pESIg zA5utSq~M>!x$;AG4Th&wAH=+qois!WU+m+&{ozl^mD1fGep!-(;u*8K`$Hzf)wWzI zSF%6kLdapZwLfGs9Bq3go?X(V85i2_n&Oh|S$>iV^TFh1goIe!>&Kt=9M+6Z! z@w}gC@>Y*AF}mTj^KkrAiKA;G$>gBRmSVONaQww6IKI#dHcnv5-_tTi%NTcBvrAf$ zxAVaK3qP1l4sMc)*-8NOlTpCDSFY>mnuH|TEzz=$ZrbnQHbdHP%%@|5AWqpyt*3rS z`4d{otm76RB>kfV*gZ&Ma_}Ijn5_hW{~!v$B^)GO8>3=J|6)UCern2b(g=0<3~6*7 znpV3ShfMPw5(4FGShLLIv?p}y=v8dLx_0)o!dsqSHD^!x*23B0(}VYuEuq;lW*gm} z;R*s;`?G%>Ra|=jZB|=Mq4X(oUrsxn+ie3mwRQ5_FX+)CKiA$+(VVQgm#-ACine}O z1D;;ud^FB`)O%OE;j`Y0Z`_g`f_-6jsF!ebwV|9NHNG%b)OHOdmySJl=)QeBcTPNT z@Sgh*J~r+gO`-;)9Zw=B_Fj$lAaj2PBK{54RoNV)a|r0dUsXLRcg%#lwYM88ldtrO z;)WiMywe%t93pH<4nBh$!gMQNiuZa>9?GgR6mJQJSheI}@ZL}JzGu1%AbfvX>(u34 zaa9j$%66L8)B4csg2#)aiH}3&p-$?pWQJdvXm%RyFx&b~^a2B5VgcCtA z2s_;d839*Y>hp#^eTbksJDL=qSbdsGtj@HC$4RgiRnZ_9PRvhiaB*RQ|PL!eC)*eV_i} zwyVd(fZvW?nKGDiCrO$Ari>Y^%fD9;A{_39m9{dbi`WwfEZ)B&w``6@!_*ji&;?sgrbuJjN36-T0;$hO;X^ zb!R1=F(LV#R8L(Q=(mcFXq!G&{78%?;Cf9ITyK){0N}Cq4IVT2b(CoucZ1otasbDx z0yru?pCPeoJts2 zN6V?{AvLGYkjGd8usfpwTY{qVf5w>ckG?r%F;A@=Qg%A4s}@BKji$PMFFHx`1e958 zmh&t3QTH{cy+n)aet~V{NZP7i8qspz(b`$H$#gnH70sqK?@D47v$EOJD#H5lwXrEx zUu{)g|5){Y)R;2<4R1y-#b#7Rf)tQYeD<83=+v#euDV;%Nu~!kEQ-lgi)An~hJ9_##*~zdyKJ%^@it7|Y7ojIgmXxk<@p@=lFT5={C>q@(>>#8Sp^(As9TfUZ2yV1z(DHg@; zBe`7j8Cm`exic_BrbRQPVsvLnMPJnoq$yR3a|KD$LwAsLhCD_+L!O8>Lv~{fqs3jW z%8rhR5F`gNqO)7MwvR9K{t;Q)Aw9*Uhc5@QMA{d5%YR%R)0OCbTp^1}f@ z6+LwEU`l0hd!wRfuE|N9kGI_aQWQWpFgB!9Ih~1c#hahwjF!8HQS{*EM`g%kETQ{- zG74HHYy0&J0 zY0#{3WhRYQ*_qngXH;rT(H0l*uVj{6MYo-XO}Z*<&ZRl;*M^Or%(#$7wqH8)A^fJc z^u+?I^gCwO$2-A{>bhH_ZZb^COK{sByx(JInMM8ebl9&22ROb))-Ahgm5w!7#XL>Z za&lUbv5P+gU6tJB|6A~jbNWms*DP-Aood(EmaIT;e}W|(S8s0wVfPyvC`MN+rRbTV zL8iCgC?Z?SMp5+&$f@msoT})dONdh{gDa;hIvBO&^+ym(qA2eFGKPS&c(Vx*&C^1C zn%M>RtVlH%4cd*T26Tm1gyt&1vmd}y(Q(Y;H7HRTTs##$JD(xBKOUa{5CzZ6Y={U^ z%j9x>FHPIRxpe`0g8+Jp9yDuG8C>)f9gHRP#&g~r!(8mr3?9)Joj^%OU(HwCJvuCQ3M|LJXbuxgXq6cwQ8C)C{9gHR5cx@CM zZ#Go*)C~<7k4Z=HhW*##^Nq~YtyY3be-1=C9)b18rbPSa80 z#(IN-Emcp6r6wP|w*)$*qKDiqO{olShg5Vhme3*Zi2~lWCO~#yG{oAA(`U$VmX4uW zeg6ZWMJQ_|5KE3HI5F@`Y0H2}<;Zqr0_!J$C zCBQcq1-@MwJOrP!r7^BLS+*ZW@4N``(~iD3%Hs3B0K|&EnUM1Cb5sTwVnqjI2@nsW zKzy$ak%BpBcw^`XWCQff{=7*U7LBmj|N8*miXIf8R0bDsMK4K!`lcv&KV%_P2)AkH zBrpwi^<}sRocdq@c|{K*uQIsED|$)Dzby*#d#pRD3V8r*Jum^@N4Y3OwNeV1 zHOg%A(~R-ej`^sfzaTW5s0?|GCCnz@8wKNgErb-t!O5i7N~`U`!Ze8)Xau@uV9qAR zhpZoAklnLVMGqdbstkFIC4l@RQ9v%?ko8Yu=**7({3Y^`)mS5p*q4tF7Fy}CnNFuA z17Bv24e0#z2yKC^xMT^U$tA5$jT{)zDNJ>yN|FB%R}LO6o|Gncrg^ChrI>%XO2=jt z(oQ>~pKYAT>VT6H{9}8~Lsg2!x;5EM-ta`UH1g;{*#}(_505sygLZwhK9K;Q^+U#D zklW(n_?=c(Ln(n9fR2nqYFjI}^@BghEMb)I(bd97B%QVyS~T~Y?oaE~gpC@!L#RS# zPRTfoN|a}^_mEIv#9TaK5T zCunrlXozj22%l-Y*XTE%CPHVP{Fjge3mk`a$xGp)Ls^FiWLh(q($b+jTvBb(R8>DkE_X;dWZ(M3%SP6R480261ByXQ4!{qH867_+ z$gsnk6JL73{Ia23hF&bQ zF6X;N(eAhVAwt&fphXTW(`WhzW;fq6=y$fsA!dZfmScpX*BFE4%;s>36i1nyB=t`n zm;@I0r?XXBv1lEWRPPtsQ-k{E`piU+3^Hh16cb8@mp{8TH{5n0*)jC0a1dZAT3~>9 z?%#-^)4)PYPPw~7rJ}kk(WrO}@)Bt|gdiuzvzGehJ9{*ncb{(5$kA7ag}9S*4Vptm zjmTeQc5TR8^y>8#-eQ4?(OnK0e}_9x2I7J2PjB)54&cqYC3#{2_C{PC38E;T7GgR& z8J?g-d)kWai9W?_ZpjTQtrJ<40cgQiQWPET+oC`vPaSn{Z!f z{q~mNC1zvI;}=p2v-yL~QY=t&XzAX1Ua_Ymf$7Q5`aB;GFU(f z*nm^_V=s{;1K>ViyF=Ts_KB3J=xg3$ufi*pGtUbJ#8*kXBgOCV3#<8VIJFv zVh^9r&_3R(ucl52Jf^8Ur^XVe)c$7UGrOHu3&lEY_MV=;6l+w9nCM2NJ44TRF2uFm zBf`TQrTer^wsudEgYjmI*|gT_XTK$uf!WWmTi()|0^opa7$?wyMp zfDX+#0;DYL$N5r4k`LP^KWt16-5@z!%vJ(yzqWGN476^NurOW|VsFYMnrAKB%k@NW zQ*dq)BlA(b$d4kEgE1?L*-Ak1_oATq{0tgG(sob3c(oQr_(W=&CCz*kFZQFzFGwh(Vw2?n?3k~{mB#fj!YoYn{pnPdL0rE3Wn@ZW*)TMGwsJKgj^IN67fmg z{lzC4pFxUq-ocXyr}WgSHdo40YM~N+BJ+MPH~>B{U9i5?ZuHJ4@r;P z&)C8#RSN0?ytGG^7pjhFf)l%Z+98RDj-)_k$~l-`2~`#qt?PkzDx4I?Qfu65%uE3N zUDK4G+6bU-O@Kr8Im0{p>|NL{cLx3CzRmL{-D4>3g7`+RsO&h&w!4ztQ<%pQ)64Bg zVl&UuF>ub#L9D(s+Z;9y%QVF4jnQ;b0zm@q!%VFKYjS<#_>_t5O zuf6-7RqmnO&5%3X-F=Y;bA;{P*{H7pcCf0m@O$4nWv>@BA34ozKSv`EO=2M8pTmh6 zV7M0{qeN-AWIV&@7I2CL3%hwi2d~H+RN4+?j1xY``;r_>!-ve#=H`5FgxngKbN+44 zyzq~u^dfqwps}Svf)2O@8wNxCQF9uU_|9Bpm4Z&&ul5JM!fU?NP8O#ei>wO6+jAyo z)rq_jW4MS$Kb^;!tWn}{FQ@7@NN}PmlSRAIYl2gS#~5Y-R^}`8sWI4GH@?;vf^&$V zVpzx`rE$X892t&~9YVb^JDWnuXZBTkd3V0r_bA5^y8|{EM(x-wb7ix$AfhVt?NGN1 zu5kqPy*>A1As0~LBKxszJC1`t`vGxL{oHBav&OrIrAbink1NZi4_AF0?;1jFh_EH` zofR9$#5CZ=fh`tsVH9I`FI0s-$f(T(bqc~0(&QNM6UIE|b8;D%Jskx)gZbEw{Ud#r zWa%kOfzw0Zje5(wLHo_h`;USu(3MUvRQq#uHQT7oP^o$GJVshstP*(z=Wnqd=^rC3 z*0h9?6njDnAEbOf2!&`OToGXFBc^kHhoL65o0+R(tPx*>OD`LeOY>SZhn}=CiZY*W zq@&NeB`?ELe5KR5q{FdY*8D}UW(SjP4|G??kR0A>c-B&CI_y}CfoOMDnvZljh0E!r z^?vJzJQg%gX050C75SU1i2kB;t9l=fj>RrZRM@cv@(q zh9}vzP^9wk=c`t|^i?xC8}bHvryjHTVb0ELp-4T4{%fH~(M{yPkrr#yJJ$%#xlrBlKI}iet z70$<=xp*z)&-fX~2;V*w5#3p>i*ia}_qKsGan1EO9l?;TAq>r)9W$!08a-FO>+VBo zUtOP5Ug!1PIr5rrDmQ34rY-i^V~6hBw{z#j0|)Q9|KMZe&Pn%ZnhhQT`SpKv&Gk4d zHpYjyaBHr|#YKpTvwb48=6c+DGN^KJ>m8=R)Q|&4b2O2ugo|8E44-b}h2EO1IgSy2g`g|aF~OxVuhBk! zJYBCUN=d4$9j)J9@V&%rtgShYS#unNfouHp_e5kM-J0d^CEtk-IQWv!n&TMhPUhKh z95Z**!-M80$hAT9caeM!$zLP+XC&vpfs)IR+=65qlKn_tjO3+AUV&sD$t#h(5y=vg z_aXTpl8++!7?MvR`7DyZMe-#i>)uGo)ktneGJ)jlkUW6o2_!Q}I!IoH#$J1G%|qUXA1hNOmH55t4_HybQ@Kk{*)RB6%y4??Lhb zBtMJfSCIS;l0T&+J-*b0FP-WemfoES3b5-(qMA0*r4xckvd>-9&LWbs-se0rx=wI=_ za|eUPi{t@2-6MWXmDl_dJ#_P)GiZLrLq-wnYIBWNo$k0%jg`-i+bMEKx_|rj5xj0_ zWR~V`Y5re&2YKt*x;(zh;wB5@r2)nVKH>jRd5h-}Wa%?Y&3~dF^zHx5-(h{`6%rEn zGjEdQt>iiVId74uSZr4*ByDt~?yH-frflo_xE99DBe{&^uP#2gtM6W=w0OA-%UXNTp;^ z0fo$Gr-hU3>FMz$HJERucj>{rm3|N|+xQzT2(FNDxe(kW$r#MLeQZ}Llx^ggjKO>d zvB|+K>XHp+QJYQv+Fa`|mdO~*-r5wi$=c9hei2n`wWI0lQN~IKGd1Lkcw(crJS1)% z4QZZ~l1Y0#l=_zO3G$nO=xwW>5bjysCmek(`JKBPy>CLSNn@4mbP#b^ zm#(jeS%p|n#@Hzm-O79{t&`{J8r^v#H?!K=2ySK4x)j3|SC`hfZe6j}^J3o)^xPXxXNt8}e~HPa)s>()%@^ zlsS*aD&lh{=KAxkN?7xyG!#A7PW1A!l3VVR({qh_J#8Nla*-VD%?GF@#l$>Le~9ia zC+6p4Vg^X2AT=|)vsT-+d$PWB?@WEyY;AVm&OP@b#mBbb!ZA6P`%U?ys|cXElOB!n>G8yWyn%1d-chc zzgoyquO@!!yN z)OAkhVDhF=Ws2E!=XfjdO$ed6&5J8*p?9vlg~UE+IfLa!KORiJB!ovXTSPp5FbW=s z7BN2qzq?{C3-phh{CF@qh(|G7L_9te0}u8=oQK72ek_>0G1NDT*&<@`;TTw4*d{lQ z*W zi)7L6n#1HvLp3U9)7|FNgwpEPoIgVeD-=j{`&>wyjs6IL-0cU1$#8D&9Y@7%5drz@ z7=WBNf<$tU9}Ff3C6Z#ch+zCv3@}C%-|zL~!Q|iyT+9{`k8{5@!f3ffTtVp0)50U2 zvgR*7_xW*QG6K+h2Td_sL|iV3fy?>A?ItPB^XAk;el(bTQ3#DPxK{39VEg}|ouL6rzO0Az+`PwF=);}fw=Kn(Se~>(vzNC2(l53H?5Xnv?cTu7x zrSqkev3yDPRkGn+N%os0`PNV;ezkn=O0rDOB-zyojE~UgtWaPCY(n8X4ZxsGYeH$# zgcRGHqH?AF_Yy-xsgC8ICG{`W3F=?`FR1>dhiKjtMqad>ha6e`OK(_dL(q{NRKoU= z94Ou+xmVDe{K{c`GbxApTT}kOfP&PycFP!1EFmBaMcqA6X{ zZwl#?R~;-2o^pk9nCZT+$YJXc8<|9qa+v;D-Oze1N?6%mjLzoPD{*pszj4gAvK{@& z)zswZ4bPR~x`&Pv$cM3%c(YTrZ{Q;b;q36X#iEy(ax1GjDQd zvM;+j!{=BkuJ)t+1_}~Q{u?zC>Hg^hDq}T{^-AbW@77DO@{rE648H z_V13vUK&EQ+$x}Vj7Aru~{7UH(yPiOe~D_|3!VEKtDoL3LPlmsXL|6fda_l zK!N^1k=7WdlLI_=rxYfO0|k11To__C#aySi@8AneD0DJ_r%>+D|Md#MWU+l`x>cEC zHa(%djrdnLp?nWYSn-5%vruBt8i8YR3g9w92if!T;=FiLq2qkrej`r9bbdf}8bXc9 zVw3Mft(Yw$Y9Ck?Y85qWc!5(7ZS0IA3ZN6{adg(;!;Z;8?26eUV)rwv!frwV;l)lp zqzQ}72(s>{wnI7a(eZ>2J|>Ip5IrB7J&M^P!uQLof^QPGBm~_Pu(_cj+dW0$y<4>A zOwXJe6GK*B4$)D+jqz(8h2)?}XBv14eFLKFctKK_stn%W6kJInU zqmLYUymEY8m^6t@hDj5LVi4U%JTql3+k&e%jn`?jr6KvN%hpk2gKmp%+IPowm8atgC1ja}2G}l} zNtkD4_dRs&xDx8Sz4drhAy#fxwj_tB@r8L?GIL7eqU*WbiApo-Kj=$EAryc`{4r6R zOKVSRmAbprKs(?c2Vpb9Y3UO2SfD$Nf<=JJt<+Z1c;JBgBLf}zN0}x1+5R#ul@{345Nr{#gvjbhChQxh3(8W_%+@}Lwki~&6muW3EbaIR5 zuDH)+p$4Pp#|?4cKF|eoKmwzaSv+-RekO|pU3xwwLKL&<#qUpue|0kd|3C>VmiceX z&bGZXWcJvSV66jSKokIwPIB?o1(3<&0GOT+0a(ly5x{?36@cUVDBO#mermxt%6^m1 zeSOd|Ik?{}W{U{ja~D_B_sZCB(&?}dH6{o5OvP*wQM-6msI6eX={tZ1N`XO3C&@kx znJf;V>G{y0EoO^|;q|M+aIbqJ?;X2tCTj?1hu1ks(kZkLNhXWKYaf!uY!Q(hUlo!Y zKSUhz%mrNFi**<)V*&^bzXI1!YSEu^esfqJ!f=WnYbT7jr zy&4!A2jImJx(5~vkvIU)fiQ|Ic@ z$A$(#ONd?;{nX$nPg&xwc-|_xnT(q0jb~76Vk{Rrv;Kp%85vBrK11@Vpca)wjV_(? z3DPWFgGdJDntG0>PI8^j~IDdj}w%k`egk#E4 zK0p^YLjAKsS6+ROQp*8zki@G#iC-e$GYg>gad3}6@N zZ#m{kPIU%`?kRhRXfp*Jf@&`BC9LD@CH0O_%Zh#%Xe3!dyVAJ|FS!o!9a-*~2V^N* zH8#M}`!Ab)4rG5)h(cvTe?b4mBY_WXbjkV;ip4~(fL$lhqY zoFXW98w+EOvuIt7tU~^bVz|mmsto#_S%acVWMYBqHqwqGQ_J?>HI#`s@c={*7RSJ=+*oOB|{ znb{%4+RZX|5KO}Ckp39j=aYRQp1b;1CTIHA)u}bB^f@b*I2S)MbXZ27 zdZ^KS_x`DK(8GX~DIaS2QvQ?&2C^4%$9Y+2kjzz|PRRl(ZR1$s1YPyVJE_k!+Or+* zFuL*G&LYnCh>e_NjLU|XhLeP}Ff?nv4Szvf+?*z4q~YZCFq{;laeATKK}YR$%{%n_ zc2}!2yJsiw*t2)5@-{ii1wfbb;xkG=ESnM8ECF$Gr=jFR43g4!G zCDnB5&gV2w)Bg|O9Pmr@3_V02LuRtQ6nW1dG+*T*lS07qOC+vn^(f=wy6NdgyV0MX zUTO|d&iT!!ncph@B3V3jU90#@C3y!K+P*r6jdqI`8;;RvNANx1E1;1a{0U3upBv&;Sc>=8+Z(S*03F`L`Zn0%e?XIZ~L zpCsQwtIxFwbhYc`Yu#d*3@xO$HpOhZtGy>?^ZiKV=F9x~AS1sotCp+25V-+I5(tjTrg5QXa!?>BW-AAyFGa@aQssCLfG zQfJQjlGD5VC^0#RQZZXOD7`&0N*9vMv@l)k)C;zC@A1RLXhz!z2tT?2-Z?Qh*{r(Qc4zmq?m-Kaac1gW>5AFP0qJ)lgLG+~ z9Cb9>!U~!Lp6BEBK|fwheqji&VzzSd`jfbL74LyRBJpw0511T0m?~x~2cQ2D7oWxR zM$lRQiho{Wa!?*9W-AAx{~ZUS=xTzO$ElazW?np<(#4_y?iC?Wu{zTTXbApTHlnK` z__8Di?H!oS-F`9oDw;lIBW45&4Ma@fj&>FUTZtrsu}UuXF^eNlE}x0^B<7x%qVK`~o7INcH% zrwc{wNQ(VV@e%V5?Eb+&lQTIeVHUHM1Jh(=m^K)~Q$A4t=m(0)K`FDCtsJ24j005k zCGUB0>ZO;w4b$_Tr&FmG=LQTccVCeW=qz_rFJ$9nTx$2u2+ZeBBuvIKDO)gG??&C- zaS_)#Q#q5z3M!Ptrn}UGKs%OF{PD<5x2Z=LfokbUdltszRzFmC7C@E5Rt{9Jhz!-T z_jrugU4FctD8MU+tsJ~sk?|Vk9ARn`k9F>(%s zH9d49tTW^>mV?pj<6snh|?Ei?~dG%o0KtPvEpTFM_|rU^pLpU5{7V>w{`bX>5CC;0t=30~2I6THgcPVkDJ z%?M=i9(DYEG!915C;0D-Q!hQik8p+XV!5Z;+{9zj&X_zL!&oT-t~Qe>B=B5bEF|vD}SK zi@3hi(;VzYbXLCyguG#NxqlcvBFV53@b+D1bB7U=an2(9u28p&s%d3k-blJmzSb?4 z$uJuB)~1+EkEF?%9rWvBbomSlwS;c@-yG_VLa+gGs?D#AsnT%_ZUL=dz%0cppSV&$fkxUxx zgfXQ+by&wmFLb>ri^L}-AbiWNH}RqyE6ub1Hzd8Ieq z4hbP+JlS?va(|=NKSqB1wkFl~spFY5Lls03&i_~*kbW|IGzj53Q-~o|@^ja%)54$h zJLK6kZFG5vCc<=VLJKJRkH^yfpxf?cFTx8@3G&%j?Vd_bHYmI(*BIr>m8VC8zt$Rv zH?iwHa_mUDTXJ>S?NWXC2co+48}r1dUub?vwv6e=c)jw*C)L4~{mG>5j!{P22|nf8 zlF2$xPgKIO<4zIMl7{M*(o>wc;LnLczt--YbUi3m(sq5Cvp!6*Af2M>1L>`p3c^$U zDQEOw`j3A1l#TS3WP<6*bv(X8_xnr?74M4MrC{K0YB2 zKzb?NN~!l8SmX;ZP?_0!z4gNb3Qrdpy{CoSWYHYG@iQ8$kpZ$^wI!Q~s6d|lE_~4Ifa>k3>9QP^y7YJcnqVSUVy@*gXYxJR>$&u!x?kMm6;XO1OW3*C*G>0 z&(zX|esWO!j~3db+Djb2&Q|u7}`p}oiJ%XzbeVrr+6*A0DpBTlcPvbXxrleiQp~1zEN39a$1)aqQ=~1y;${iXepX5Nb^ylKdL*6LG1-D{ z3o$vU6Dwvb2gzOPM;kF-PCI@wH#cbsu{NY##Uz2rXiM5bi3GB&i zhLwKH^3Yq5=(##yCc`$zJ3SP$m4n{LW1)9@1ADb@wS6KTo1`EY6n)1U`NBKE_*U6X zg-byk@oA;7@^_X8?NfeenH-czirLD6_S3PT-71Infn*raV~zcdRVw?T&-A zJZQUqXqgQEPu^Zz%vKJxe;y0ky>g^W>0B*mKCfH6ZgKxLR<2@Y`x%KXSxj2Wb|yn2 z_F`MiRt~m*8w=ZVlqkUI8u>30ku}{2`=dcIr4{ z#jJW5nr2}E16f2&?J33Y>m>8lcJ)M>^iEL>w|VGw#TCS!RfJp#AU_w$*A`pW=CS}S zG+Mc=ANar(NJ~~3XmRmEs_ZbR!(xG-*-?>?u<#9)Gel6Dt_&E~i9>TJF$!i07B-}U zv>Bjc$vS879ZcBFH+{8b)NH1yEJgXa{bVh|9 z+v;YuK9V%e(DC-1^C_$TTaqWlRWY?jsBtE{Xmu7575V+<`Kz8xyf@91xqax^ItUNqUFuKuU7s_=;i=x<7e{LV3c1 z;&_2J)pFmOw|io^$bG91Ww>wkO8CWW<)C~;ER@GHRp98Tj-;dhHaT3};lSjej=Gqw z97H$ALe#ILHhjP4b;EZ`&|J+lli}6W+YO7^N&xNcfAbuQ06_mJ#N75+=*c#JQNQ1e^)pJEOs?;K_$q zgy9SxXz}wLwsPS9hFEa#kAm@#|JyvM-|z3)Oosnk?+jhcRu0s) zSWv5LB6wgcHeLja*~&riOe_QsvP)s_e2Pe5W>E0cUH8^0T@7e3ja5=8d=mBkxBz1+t06$_8vg1tm)EYAyZMbSg1(J1j2$L8Ud z-I7d^t70BD)JKh?d~=9|Ql?ZN(Ju^V$78z1wU{htF{4;UYCK#g6mJhyb!|u&Z_kEi zt?;+%I$0q?rmBd`QQ_{Bwt9hEEb0a3I1v5Pn#|zznUOTR{%p51Z})o4e5Z#YapyVp zR`q}NStE{!{Li6=CkYZacQi`LSeuLy@Dc4at*7-c$eKl*SuLY=)F)&GjMOqi<6(r8 zT!osi%?`RZkmOu#v|8|rjw)7t$%u{NotmuA;s(*k$ex6o%3>{}E1cDtYR|r;N<&cR zm&b=zk*I4~yNRI}QC;M_XzCI6waV*@w5|0Ice8P_g#|qm7urO5`qrA+RmswE&`;85 z$ZD;RoSqlDqsgi;S*N!kqVt-BNtBki&Y*AQ61B6|U_(%=p#Vqt%w>=-SOy1)C)R~* zG^eiL2qVA*SIt(k=To2Z?X-fOe#FkMD~Fl_;hk7?f?6h)0mw&U z>3Hr}61U+m1129^g%mp7PoL@UPaatiPApoPF^EMm)$3-Qo;)=#1Gm?YH{$eo)x5=Q z<>3A6vGBf4D{Geps}Ge5{p?~s_{0G0*m&w6Hv|_e$kou!wI_KT_39mp}gOzjMHtJy;xdF z-Z?>zZAfdVpBaXMb^xI~xc|`)H(X3X?e-C&YX9*G znvoj|=*7|X=06kZJC45nJl2~l-I9#4$13v}tBjUlOhvJyG^w7bHrnLCNA9AO4oheg zJgO9>n9wEbKZfs;=r1@3!+EV^8tV;ank4#@mVq|cTWLSNRrt8EcdU9o+Mhf|w^tH0 zFex}_NWtQtH%|DoMt+FWZlkIzqW|zK+q2lFY6Bt6x=42jd0oi3ypg8sDUP^n!nh@Q z92Z#VKe~X^m|tko4IJ9d;IDL^>}y2$)MOjBfK^gzR9iSnpsxkfNuhjOsCJDl;TEw| z)Spc*xayhGu|a;CxSgOIWn}f2ZlOE;T~g+q+?t$BE9B5g*FsfJ9%!fn$?b>c)qg;` zCv~8%fh`!b2y5+WG%G2w#T!YauHyUm14a}iw0h`Y*;GfT-p};A)f!q;hnY1>5~%j( z1VS@Z?R244tr4)w8Q21umW!eRA36X5Ox>YA5N1odAn_T&#Z70Udg@6SC1q^(=X>`o zdcIM!&~m4JT@CCm@Q+lQ3=VH@Mc*7t=|tre^&I+IXlitPBh@(#XE6%1*9~#lZ!>;Pbmi1snYelD*X^$i z*OPmi$-1=h-BGKH|lj$5r2RBz^LqVGF)Z{C2HFkDqhz2Ko zOCuVbSB_*pSNvo$c6D+&&bDWx+B9(y6xPk!pfMTI;PNVz!=~kfbG{?u25kchi{b0} zpw=|+PpIc?iow%HRSO`+v{NIy}4bPiiNNWUN!(l;-s>yC0IVv6F{i8;zK@7MIu9$06{ zV=M>Fow3k-P^w31Ma}g4qegotyib9=f`(GvqOrgZN#s z5HIKQ{&OQ$@91xw&$}|nJJOVicVtnP6)kU=dxqCtm0T=b6P?%A3AAmPAOU}x3I`a#>cey2-&ZECpr zwAaJMcIq$GMbdU}Ko4jedXi4^XfmX&uERR^px)@}-KW@zY)wve2FX162?jUyAu5md zGmTl=NuXy@!`Pbur{Md^KB`ZreK?7?Mun9xclM@-xXWVoYx|v}wRjKkn9D%rwnGoy z^Wr106MMO=XWiM+th~|H5r18Le?2)H?SJqY+CoyRQxnlXn|vG4m~Wk;ZaXwbj0PAT z@}fNF+;rubsQQ(U1#bt3TubXtx2iK-f)g8PIRzV*3$mA=wmRw=w1&^(B1QmB%OYvO=J>;`ZGdlZPO<$?IPF;Xwg|F!$hn+e@9-|hWrXWtl zI(j@BNj6!$S}wop?zz~kLL+BwR+Y~VVStfqrjHn|Ucq0{Lq|3vF_wd68Vk#ZES!}5 zpIPLHvDs5m4RO6!`m;_Mm4*gR%@nOd(twy7$KbF#d21o zP_dQ{l*vJtu*Gb8N{brK=xveajKvMO_(SUk{%1(IPWa}W#h2nRi}k=oj>#dxX9Tu# zko(?P$kEYo7U7x@9EuESz?l={IS<RlgJxa`yT5`odT@WIw<2 zoO5a|GAT|(^K)nDbft}fl3k9-0IiA42|XWoD6J~c7YeXeoaoY$T(@H$VLsd@tYpYy z0=5k7_4NU=CZQimb{LVC~VZyB;3u3twdYE&ag5rhp4m^%cwL z|F6TXzBt59Ut_Ldbd9R^6IKIAdR)yc~T$ckDRLK2tG@c4JW7~f#|Gc zN}g-vp+i{dx#9@TYat?ZYhWB%gJ(F#Gq=WChzM~bKq-tx=M3CbH?3CILPXHSDBRbq zg@_R0xNJ8)7=HqtwGa`2!uV%RQJ{N973&a4Nh2^^3lR~~t%7$kCLt{taKnGDGopZ| zTRTTQ@Hu+$N(Y87(O!YWeEnXZYHH1;-sa63AZ_Ee=28#ZCEP{xc*Ijq?no~$<|||! z_KdG`c?u9*=CPFNhMZLWYcBN=-<_=eu$3c&%;hL|gv_Sg5Ush?%NAQb$TLzRFaK(9 zc=ioYGoQIGXP%GlTXU(WFZ8nQmYNer_s8sQ7cY^lhz&D-^};omdS*wJe=C6`J75vk zJZmoX45-#z>M326K5aIAfCg>N6@;pfSz7YpxM(VSzE%>s)?DgoU#)8{^@MK+T1+hW z6X+#+Wmv5u+qcsScKQ)JyRMw<&ucFA%5teEfEI}`M_KcyLk>q%+d5Y`Hj%#R9$WLL zv*u4{&7aPiKOJj*k_+hYo;QL&9cOyRUDCCS_1*pCKy2+|y}n>aI|3DY5Ld#@Th_zd ze0yzM`F-NGi}h<4>(?&UQy_%3i}hsR&N@V>+CwLM*~NNiQInSf)sCk&pw|054 zT_+Wj3<_giqPD~lX@awMdGTxO^5Wc04-cAG(zTi9O-Lq@+=1i}k|Ri7fn*-Z86`VQqts5g&9rc8n{d#xw3y87**7`4 zx3+8d9kt!H>TFt_-Mw$u?mhMD?%ioM-M3@u_!9gwx^|aRMR>?a}Z)x$| zC&}&f(&0^u=XI;(du0jv&J(Um#h>Sr>&|rP@VSc@*5<14!%8;7_MTX|@ zQPmHh+x!&%w|+2KyogS_$a@aWkB_PHn!iI2-Mr@vnxFQNQN+61T%%Pd2U1jTosEZPlpG&?TKC?2mKO(lWVEr7G9Szpz zpHXQxYFCq&?h_~I;)=8_}C#=(N=dHyi*5o;PeXq-J-syBL*1Vm9tDH#Ha0x}^xm-(5<-8PnPp>OKeIDC<$_HmlPeV+ZuY`3}2V6=-WwCJ*Y1 z{ZKO*qKp^nVz#pY^$(TWtJ8-P>=p#oS zuN)tz!v_i|5zym~joUuX9+&yZ3*mfPZ;+KD`#|T{!1f&XEk$4e4mlz2lZmrIbz#x+ zva0)U!JMH_7f0>+nnC};7d4x`PMe|^j5)UgIY>o??0QJb+p4)>{9EC03iNPx^P|ca zpbpwlVP1JCS~;%6re}dKTBkNUMb^_k&5%7RQht$s;hFKR$`l|r-=h9 zry|1SpQ<6x%=K$gjop)zV)1UiojPmt{YZY263CWf_RiCEiJ2y_nBO308duobFUi5h z{6_iQUCfybP1n$3ZfLslramr$G+oxz$7E=_yi;E>o1Xf95yQQdiR9N&a;&p6KID1l z;s%Y}IJ>8p>$TE+<)Qfk*-ox##N^<5UCeeC(ELm(Xg(}qqdD$Sr&Xs5woeTxBqT)` zZqfPe^vtQTM*V;WoWyB%24_l56OH;fF;MtL)D`FtsD zQku9r;fI>Z!R}wob{3%iyHcQ@%vrR#+e-n34T_c}w(gN|yJ9PogJNqj+gX77%ca0w zrr7$+Wz_iSpHmP4pV%rp$M!o(4Y6O(k9QS{v79xNO1WQ=gUx_IE4rU~g%V;cMTTBT zYmM1Pja|LTr~_U(c1!XNSx_wb{$wU?b=oI-2ms_t#9GV}-uOxPI5FR$NKxb=cz&VN z?ej8`^23Dmi4wT5#)-NLO9MOXODO(awrkAa!7uMd>7mw1Lazc zy#3Q<@HRyytLQ3$5i;nm$z7VJ|A@J3;Lc)CK>AJkk6awo4q!#Q2mTmxoXhvR_5LB` zyXI?pFY$4jL7JaN^5;mtfaG5&5&HQCe!T|CA`(c=Qa^vKp`VvcWg6V=oSofQt=*o^ z?%G$~vuF379lQ44zGrgZp1qTkyYARCTO-3Y)8I~qVD3$m(btIfcI$%ncGrFvDV5hX zufzW?4A|RUO%JhYGV{{r=XwtrMfmLP_AlGsPNM_^yQ}C`v`M&qbOSqsy|Q?@5B()= z40ainzIdq_V@Yx^HLsv2hc`B_m zO*VK_)a*hY;*C02Xp_G}T*OuWl9Pf8<*>;L&E3=-qnfE*;3`}6b`-VZ7Hw9DeIQJg z1Vq}RK{QwZpGze2w6C*}XEFp^Z-W)Hm4VNTqT=I(CdotTNJWS?~vupeaG5L}ZLd9%lAoS9x2<60N$?H?s`w?SuaAqoID+94wRKzwa|D}UQ zy_eswZt|nVcrjZUIGv7))AOho<#(bj z5}b|BBFALtroG@4vy}nP8>51A!CYD;lM%nj3s5mz8327(RDjlt(KSu( zIjZ@cs3I}C#OXv#zBYtWFqytPK*5I6e1vxT=O88rWq@L~G7$Q)mM7}@f|%1P91)GaX=agEaznY=mF6^q$)SNtyoS)?uTZ=tAYTVkms!geNqCgX3t z#ShW80*G?h%7Ew(qe3*2*5F>*IbE#*lY?4=Vzx5y`OB#ItZ=vYfFCg?2X}kLY-J$! z_fZkMfDaS$humR5KuiwG=*4Vh0Q9d>0otTCdg81gAErknOzu{O$w4`yn5_($)-T1J zyhoHmkNFW|a!_MX%vJ_MSH?uBSPHF4Y+Nan$-&-J%vJ_AH^;yxmK6G{5k|a_LO)3b zHU9v~=aGC7$-f|3N1xlg97#fnmN+l%ood&V6B|nt6p%Mh$ToK6&38$1P~L3F=dQfT z2nY-Nqd#Dw@1Gk}x$dk#~hDCI^M7Vzx5yIT#h6 zWgNlu{3tOwIIS16m4VVrqN2nqs$ymNNk2wRzBIILDP}7JqvKIATA^5e#*Y}2gL6|c zTN#Koq9S%lJ3T2i89iyFk}r6^){hjEp^xw?u!`BrKxz;bspZJ$ulK{mf>(VD#ar7_CsW z`UyW`Ob&`x#cX9D_VK8QUF?|u=1W!|@&m=>t3uOLFpM#AK3KA9Yp z9*Wt@fa%X-!c;6-eN1BGN>)q`VpGgk1~&h13~XXaR_~5b86jD{p9*Sz5Xmnf`86cJ zi{wv{{4Yv`G5n=a^}%Ggi9^yRG*?YX57Hw38lO$Ja#8av8pNOfc3}{I0sa>mxulKQSl+Q^}wyk`=#Bsg1mF&Toh7q4Qr zGVt0O2d`4DJqySkWpEzwSNefxGL*qy;EUPH0RE0Rz>k^nm}zEuaO$2%kEGqF8@1Hu zibp_d81Lu7d5s@VCc|*g3uiG~8E_to1LuBquYsU6k)6PmC-eTGxcp#6MOYGdYy`kL zd!szSulEDaltB-GD`?jq!2zS)mClOdpZr;}o~GBBTy zgZX7Pj)eNLyo-DsPUAQK%WZhcw+!=NDS!WNxgoQ0?{`)mCr28vSwwnkFA~)Pm&!zE1*9S}?1ZG8tMhZ!axoD+BPKhy%Fo7iN{lPgh2%)6ti$BhN3~ znugy(_>h%?bi^E~>1U{!QFHZYvg^{ied%~e%m0hFA zu)CtV@T6G9fS(BXgE>TToP^&O`5j4>ex~i-pqnO*{%F2ozIwdARDv#CDnTbLTN0p& zt!JX7ck+ZYoAzsS>^2hcX$LFj#)@Wy;FeW0=s)C(XphFlKJnoFHg<-z?v# zgbMhm;TJLjI=iZe9NyHX$Bye~VDm|IIs^RwsCRgF-J;B};9?a+-i^2<+qDs1u_d{u zUQY-<<)uk2LRJaLDc`7;_@T$hQlT#*7eJKSJ~r_T|Hw_yOp}7KQ68=kwpC-Ayfvvj z+)0jbrtv@_RE5+nLC}c35@Ld%DVIsm@|gM^mxU;K4D2VB{A{_5#uHJ%5PoNdD0cUm zpyLke@*G$g&5%VA)~s8S$5IjF6aKdBUWo~znn-~GbNYO>uh~?a#}Y(z!Lr#4Q@KL0 z2gt3-a@lR54%k1(Gnmw8PH^WtR(aqk9T{HloZ%F$l*tAMAE%=u@}vWA?J!Xn*p8-sY`IYF1e^r}o*KtwZ;;lR-Ou zh8(o@Q(9O>shyhem{}KVl6GEu14$~)TaoNVazB!nAo)flPa=5+$+sZ+P9*O|^5c}? zj7sb-19v%vgc&%oxl>A*?ukt*$-xtwyX15C#D>YRos<%$Fl`cb8}-D7i=exlmdMLw z+~xF&yv1x<9%CpK5Ic9v#jp1^5xRvv97dU9ST@=`Nz!@w}y;ztkH zJoC`YVJic@PsKrRgT}^!Y^3w9du2a%&%2l$Jnt%ID+903#=)z+^R5-19X#M~1SSX1 z4vN{zXoSCw(+CmI4zk;*c{9UdKgdiDYGaGp$^iLGaX@~A@9C1z5Zd2N_}m}ZD#mPj z$y7IsuANsN^p8mBT}3#PgIb(owlbh!_l_t_nm(}+H-PgRfP}1RB@BwpCi-phiIRI)zBd>wV0TtuiI%b^5qGteOb+(%Vzx36zc~)#QMHsG zjWXRGefb5;)>4YOjg*&qj=M_*WAVDL_Ngp$CQ#a8TLP`vjFBR8id@c^eyhdXlWH%U zrPtJz0iV*(o;pu7+Hgzhop$84R+p>)AO#t}!&Z<9Fe*x!m* zbMB$9lB!mD^U-=k+6up;p7uz^QSFn~!}F>wbKqo!sa zz#purRqOi9M2}pqQ^h7~o%#6&MHI1~TR*f)O?3lSq0Myar>u<87fP#ieDnzaWDBlX zlZH2tCg6a;6~x+*luDl}QD1pRU3^gp$GqU&is(|H{tgD2|p zbc%wdfmQ$J*YatJlq~#+rIwwuGx)VscQsRLoWeUJt~z({ae!ZmHMMnFG*5+b(hn$;aaq)>S1x8N1JIc`fM%N_n4Fpi|7XRb z`iviPCI=_mVzx3M@5F&TqE^)73?#3Ezt)d7lX0Ns?cl|1WuX14IB37r^_P;jHyU=@ zW$NjSZGO+x*)2y+`g(s8Fd2?UyiHKdRz?%NIZhMASCbYS6@ItG*;UsuIjF8HW-9~d zx5vRbs=97xlsc`%s1SqDXHlr4B>VJp!GUYVnL9!yvt<J0~0cIiUu0MoLdvmuiqoT6}f+ z`j1@wsHKd{TmSQq>GaF=A2~YFUcOQ^tgQ4XM3=1$WrlvIUu{XXC4F@(ZL`T9Y14Yy zz*(8*bQM}tuAS`rx_WjaQBQxOXPBjNHqv}qY?#G8np@pK`j0$CtInhqtV+$VRD^O} zP-<64`|c_Ub#WN5WKb%CYLXFVelYtA1{i4+PrF0rOhOd?>WXcLTCp&rS6IKDyhdlB zoT1KeChHgCJ65W&#Da|GlWon_kFKi}D#|-ZQfVGSas2ep*%kA$Xx@E9F`Jfee~>VX zq^0~x6!q+CDc>hs!qrkTIjE&9W-9})568i)JT2wODzy*zVP|qsrB=*V2JD}R1N-(& z5~NkPn?5z5qeVLR?9M}_)@tf_Lw>NC48L#QnYWm&46r{J2ke(=K|d4MlcP-!QjmO?{HEGOd z`O@j}@U@g_kID%knIE+JjfGaKbQ$7u7mNL4!Z^Y-R~TPYqU9>lgkXS6kaXLb?g>Io zIiKK)o!(VuqQgkih33=|(-3H@tRDPU`aYAJ3k$Dl_BjSr(VNYTV1y zdhGQ~zd`>&aJz52E19%)gt^))s1dAYdpNPtVXOIoeYQSwd$^2cib_%?ONTctp4Y9mPoztv1Y10>*C!t?;?Hwijdr?pc*Ej_wYe&ta`n^h(&2Lki_fF} zjSS6ezMK4@ZfIVM|D8J+EMC-0TXfBr>{TCA7J;z8?Q{e+x-wN&E3+xl3qp{rrj$n zpt5*npzHxujQF}s=?#nL5t`{UOU=va2f2s6f2^% zywvR<@sLX!_+L*iTYZNihr*jNVbaoWc#a0e>o@uky;RQy56};q3m)XJwm`W|0_cKr zgCt`vc!`hg3Wd9kC6h51JV9)7E)aFe<^oZhP5#P?UOFuaz-a|X`d+8qp^zk9KPr&GD5x`{>QcDYbrha%+$`_o9mpMo@>1IW=XHLKDbVfNSKm>cnY?{RZFXNho!Psqws%+cj=ht2?6_k` zeNR1g1iJOr#x%RD8da=Y9~A3ePc=QfzWL4Ke*v-Xb@ULkyP20JvTyN_*9XM9uUocQ zm*E7d?zQwTngMo=F4dX*mBlNJmDPBnWx7{U`HSoM2?Y*VYQCB%hc`7}!yjp3uuirN zb>17JIzr<8VJb!O5k2aoW{+B5t=IXSBEK(f@%N=CB^gJy z-oEq#f15KIHY2j}g!PV?ouu+5cNH0zg_0qPHRCZk*pZ6abVvHlh#lz<(HfITL=SpTE@J>IaF*&kr?NF&VKv({1!m1QIeWs75R)-}y$BVvm4eW}#6@Vtb?rqGBQm70rXwa}z4T&K%vK6U z>)shbw#}v^b?q6>DDu0~gZ{3>uOBKV2gQ_Pwo;&ae_W_W zT=Ra+j}eoDdZ=QyQZV{pRE&z(yq}clxN9DhgKJ(fTPf)Ld=zw|t$DADQ5~`7y@^U{ zE+P4TBtMSi=P1z&-}A{TLI)5Y;dtsl%64_vz2A`JdqT_1&&ucSy2oU=|B>yw{B@6u zxYAkon0!+~g>u+*NBcFxE7rRAJ1FZcuY3PlV(+edOb)Jl#cZV@^e1r<8gVlJWj{tt z4o>F9Y^7lIKciw)Jehx7qT^2HOb$-w#cZXZ^S`5@6Kyj8c#P_Z$^5seq~;$X`70#< zK#88mH(47PR#pf0F25<8)0xAku6mB72gSSJme1WuoXM-vLU9qU7K+J1EmSd^?qJV( zSG-AlBg#6e|0C}t}KpUJrRjB0}MCw`Ea95lfwW-A4xJL7^hq6x;I`Y~d1P+BTxD+Qwm z;$k$C3C3sr2r)T0T^F;Jg3#k}5xSTz8;q`N`d2?xOb!Yo#cZWO^@^xa6^h!)%HTq!=%qpR?#NIXm#gvz;FbVXiXMbYWpJTV z^wOaEKwPLsx&bqFE5qb$lr=pF(B{Le?h@pS5-;J#bw!EyG5woD zE6@?n;La6_?$hxpV`AZdBUgraX`s(3ddQr3N@Z{dwW5Pj_qk6JYO!R9&!DWBGQ_A0 zLQ>*o?$jN}u{dDL@rnEt>jw0iYB; z2$ag;_9#Wq<^+;TV-CJAMFy%?t<9y=Pp0|zi>6KlfKv1zP%489l%kgg)CJ!Yca{=B z)y;LrZzeP~7l2C9gR_*%;6kP7rOi^8#f9p8a+FVQAoC^n1xCp^mzYv?c!T!t2UUhV z#!{xJo8qE$9we6hJ8M&?16@hcH-$h_8QiX<=wK`bq}$?xv~E7_SK;t7zcZ=Ny4bdN z(fEb*r8+|%V<|Z8jf>N!S@KOYLxG7#n4ew~7;`>!PV2;MRAQ55LOvpz`5|ID@Nv zQ1nbunVn;dc&b13qg=K-_7puR)T<16jJiwq2(ehIhgYMl_^O9uEzQ3VK&9xx`AubT zp;B~fev1j!Tgri|`1s<-0#GS>5Gs|yg-X#&gX$e|p}O>`LA6C5JErCAFi*>8zWDlc z0mKyj+K`y9GPsB-Iv7hChwqPz*ho9ZUkIS2=pp-&DV4!RNzuVr3Q8Z0ic+zN@&7PF zuB4#oK@me`$YU%8p`VX}P&5%^5TiOm#CR2z)O-_?B_!XEh=bY&w+u6xER&N`6}W zFW^w}cj+PIC^Ih!N5AhOm*r6Mcj#TK7ADA}?A4hwPI4-H&x1$O?$eE0O0Htj74VV2 zNpG@UOa3-d$hG8u<6(O@!MOa8&i*#4N<;<=XmJe3v$zS}aFo3_VgrhA<( z3q+MGN&)6ZKbRN!!MsY6;fm4=<|XnuN!?bDWHMY)N-%ZnW(V=X5dE@>X|G2+dlChQWj17jKo0S8W3wA)C8wvjH}HEFBio_)1*#fCU29Q~hxxuUwz z;IHj%Cr1Rd&e3VdT&LbUaIEs;gO68^`(3yjJ`2RvWXqd-f6#3UzwG1Su}t^yGTeQiQSbLSe8*w_nVpS?dcx+b?<7mtbM>l7|tAraK_5P;m0zV z;K;@Xk%WM89DF$Z*#|Hd_#`1Vm;gy^li=j!@Dq}I>)xtYRb4;bJJni2vV2*${x3?47XUY-+-qOgLf9rTJ7hpM{n{c*}O4-l+;+sBm^(fuU|>4FP$L z8%QRjiPia1<7{IA@`Z_joK`ck6HRs1fK)qZ6+-kmZbX@kdo-Ph#@WV#=*@``t;j&Y zPC(^F15b4*D}?5p8%-wT?BPT+&Ndb_?@EN`PMZD!%TuSfN*#SjY3{{@892g?$&tw@ zB|0&SvyBC_cO?<<7m84D&cz4MMkUWKMA5(ld7j&w44m`qE=rqPG;yw$h)%zav$ zd(c)De(%jx#@QlzvlnI8TM4tn4WPq;1|I4AyBNXJqT-mjRP0s&n$seXu0OTPik>XpW7yVK2K`Gr@J_c;IiQmxZ(i{~h_ zuESif^9tpFc+F4DmUY$b)emZ>6zkLlMA4IP)g0Zp;0P^IPEqD%HG`F!qr0M9a_1ZE z-jw`f8Wke>2WdXL&Gt1MI6J5~$ZuBCahTtYZE9?!TM>M83p6|{AWDfrk?PBHxVseA z{5cSTrl_s5o_4v`SzmATrpjxo4f(YJ^rp&Q(PR!;$@nAlZMzK!TZv1!a%cFEOLbnu;!dZT3Yzsfi)L6QK&;HM%|;;SzQH}>zv}6n%Lj%!lw!- zqbrtx-j`inOw43?391How?oG*G{`42n8eWgA{HT#G|BIx?n-MDz;LQUhn8F5d#K#l zhR1;O2#|sopF?z`Qxi#b>vP$iC?0{}&^?(|S24S9<+N&#L|Y1QSkLff6e!kG=ZkFl zWH|*ez4!dA*N{~G=M&wY7goiV@Kv;_dxo~Dc6KcKy zivw63!r~q**0Hz`i??901%-0;*jZ16y6V}PvQFx%z0K!Wi0t+Dbm+RhGlj|MPat)* z^!DgkPeS@LHv#b`4gHzP7;n<4KgZdW{``KxD%Iwc-^I2P_^71;5fXgwE3FNiLm6ob zdKb2njLBXjO`L5ki2Z&d#BQfK24;%`dh&Fd8nslFxp1n3{3RzIaXD4^>M{ zpe8m3!a89ki5A4U_^D7T2qdR*{KWRI#meJL?&244(r#33za_#`;F5+XI1_ zx%MNIs%?_z?0KA?1_ljJ=W{T8=4f1Lg0E^#bs20q{2tUbO?Ku6sBx!sJ$7{_`kE|> zP(6nDakkVG0bBwFrF=bw&>KJl0rP8nRa22dON|0UR@%nrVBt)X_wT^m+Wa^cpTXkK zpily~GbL3>%6>a7cD9uLFp)7Ol~bsF2VJ+NY$jt|M_TMgm$JDD$Sq|^*-XZiRG|(9 z*wpI#EdVT)l>I$y>nuyz574`?rEDg9rR+G{SP=VhBE-fgWe;Y(3TcJ!a-+{=ubLWX z8w>guzAMdm-J|WYWy|cKbCB0Zysk^&n?tHG54n+LvUeX_oNX+~J}nWl$<&zNCHQPL zhRI$vCeAh%_$Cs;msXAWcACj*@tvcoF}uVkqwjaW^DeLZ-^k%2tnMyt=B^EJk%6fc zL{IU(f+_U>1I>ozr)JS#RGwD{RnMjn=!p^ z@FzRBj+z>vAE#T$fx-HUxIIHv`oS!yZdpN}b{l;N!tZDK(-1}76NGijwj7V7`PGD8 zO-RgXt4nqj?#pwz-ng!DKiF-i5L7=VGwlm;VePomUr1jUw>2v!W70!fe@EA>xCzK!XlPbU#-xX#4h7hhK(GfF@eB}4aJcpcZ0js* zR-d4EVQW@Q_G(sfwy_{~OCrR^r&$dt`2RaM>`e9w{&BXkzV@ds>ZQZ<<~$Zk;od<6{?QffKR= z*?V0I!@+V-A=Z}yptiq|r6iPle}WKO1 zjhj7qw0B)fg#C7U`%E+Tm&b)ZKWeyo2(ze^l=md#vDk zw~-$&+cJgaeK5;4Uyj9LEUHk*WoFY(DjSlK|AbZ?OGd_|vLZN=*LwOzx^4@}Oy15W zA8x|lFqmdH z&4!V(1N1{0y6Gof9_@)fcI@au5iL&N3WN;d+D)yGr>nL(CHxwM!V9LY|kl zE30$S^Khs&d}dm)svmHqel4#ZE6+mHt|B;wzMP|Yz#Gr?eKd-97%5d%=7;BT!CN-B z6YWa1tbT~Y^r4+U#x5Lt*N>}%<*pvF@yCAP?eF?|G`HuBCZ0Sd-3!)Uok6#PhUa78 z2)OjkBz35tjTxQ4T1Su*{%X`Db%x7DxuiTMoNot*33npjuHm*jn2&yv{XWntn{UBl z3yTM__z)JKz~Zx5Jc7kHp-^6~o#1L?8v!IK4fwbg{yr=Jwv+1)rmuK5UM>6su3&k& z6dhBWk@8>e1-rCSEak`HaN!d8?=UEHUgzGqlW8nG({mF^$D=&1ZDB((D$~UG0lHK^ zum6K>CGdG28iWca3VDiw<6F{&Q~BS*aJk;%K-vOwo|@>9q&%_3U+B2Y1l)kqk@2^>tKJWK!_mY42cX&fRaoY z-U$!9lJ139R?b)#*Ik3HvO+4`pr{_TC)8c3- zi%1(1&wxd4eWL{s4`fCvmauap&pY}X*FQ(xLWz$ppR?MBzuLVZP zb`Q{}0byaNf_Z}POu>;es`xH=Ru#W>)I|JRw zqdjFL5_x&l7pkQy*c0t0gy3ASLI^-@JYq+Q9Pa9F>4Jgio!jp<#^FLmZt8%Th~|{J z7p#xgV-!XZM(nPZwN5?AnZl<-CK@xxoQR((vKN$?oy~PzJ+JJ9veQgJ$|z~!nLy9b z1P8P&W_z7kd<2SAj+2M_=(V`CG_3Vy0fx1nh+$g*XbnmG&Y24{BY~jZd6oys82~YG z3|8U~K${^>{l|((E_;+8pKdz%viLd^GCR$kh!&!lj9-ZM5KxWjxdypq){+dTRp)8FK? zejVZpwh2MfU8ew~)d-z`Vavv=Jldb6`|{x|$O^WKF6qdqw7&&FEtOq#5!*^&7rmC| zo~7_s7cgmnJ%jV(7-r9MVh$s`=s{T0y$H(+Ho}rVHiYx-ApEOe{qfIX{j&rUbro%eFpQy`YcFaFeYFR2N%!s5UXT@R$R)k}*1*!7a!_}- z1G$Fu0(r;)Ax$SNaaLCm2U0X$D>pq-2JiS)U92I48tK$P^0eVEA#_CS<$WE=}-4=2Lx)dC%1 zjjrN;5daS|L!;fWQPbuHxs*}P=;-8N%?KBOkyo@H9=Q^VNXB7saP#ZomgWxv%k{YbiZ%9a)E=||F$aV((!`$VAcEg=HLVFJo~ z4alR~@73C!6OcglIT`*9k(zteskKhOTg>m#5#CAi3K-bC5uxvG9*8B~D{9CJHpG%X zHc{g{i6FjG!w4|e#J*9ofiAp<0kn^nNxFApkQG9VV;Q4=mk7YLXVUIS)2qerUL18Y z?~-D@P^my)DqYT@{GgJHCb}}g!OK}m5dLF~dk;$PYPH?CPvp@Q8{Z*C0q#P-@fPKN zwz40PtIUpmIl2W&nK_yDj4UFm5z;slDf?EdAPT`(C-+j>CIqF&DlYXyi|5&BZ}fX* zhC8r9m#G_S|Gq~VlEE}tOBYp;ud5Qux?_jyNU&|S3R3o zzsw!$p1lBOCD=|;h22HR^ZCQwzLp|TW=vAIR6k(Y>OIEnEcn7T+8plD5aL~3Zp^_B z<3E+Tj;h1Ak4n308>ReaWKGDy|XlKVX|>FCshv@ zi@fGwdp%^~Z1iB`Rt=M1I&LR<$uezLpUHNM9FYTkluVp7(m(fUaLwp?;!Rjgw?urIlzg;~JxK)>1urkun zknIcLOUEw4H_kze?JHnmf=5%X*nA{%7?D6G5_XE6V6g2B=Rn192AY@R72oZWP`k|O zd`eZp&J8s?Yr>!0m?VtOMoXHQCo7@IXTCHw%Za45#gW}dA*?x$fTMU`l0FJ_wu9fm z!6?7YdHKVvLyruLq;DxI@tiMzs)s128tu#*rlHlKEbAyXt#U9PIOa^YSCimMA`V;Q zS3)zBx*@){ibMb|%b%)3IiSE(Hi@+{i0uF>D(wrz`yqo%-VJGK?i`w zMJnv{c*p~^qOj-eQZEi5&@lRH_N3`oTF)N9mJ9_k>h}I0zLCaZMG`R)!_6JEbNawGUumQ-E%hAIeGnanCD|bYGOc1zEv<1(J@8 zV|fKPCVB-0a}@tPo-x3t$V00849rKPOGE7EhfQH^0-zG@9{U z`v9d~333bHCO;d)@{aN)Fp{lIQl3$v3<=^E^j#TK{QPt~lnFYiR&X!4l z9{90q5!eZfS@Q}kuEye8EMAPoZBXP#x2BqZ{A=*nH?jC078hc^vPmr7j|FBnZekLy zCMFpWAwR@!>?Z1E`Tbk>Z*5)y$>}sr6H|91@&K^Lo;MQh#{R^J=+~t+( zb$Nd6b=B*y&8yY=p6BhU?X5qrcJ1zb_ueh&0T>-PxccV#$iK9_v9)>5u|~VTb?e2O z=XNnq_7+w;7fzOTd*bIgtwuZFy7hw13n4mK7hE@ack9-l>u)|W2QH}FY(n>Ly`Xsv z|8su7zxkvBa=VN3;|FDX%{91a*99|1%R$B_E~u?FT6OTzL8s*ji|4~hzI@-VUAxvg z>-jF2lN-D0`SD$1&7Ec6ci!DKh|t#Bvzx1MBhdNxoB?xX^HN8f{k3P^E|N3Vpykb{ z2rz4%_DW-QNhI0XYUXg^){B}e{D=kuI|wZsfu|7}b;Y)e?IOAkW*h@JCS!KFF0dUH zZ$`t7Gx&x;Q?uC9Od6B<_4V~eOY@Pt-e!rTeBlm5) zBRGPZZ-i#>!w|3QQZbB3L@S0FM_0JV(P1JV^}V<&-S3;p7&MAroUjIpo?Rq*#vV5w z+n&L66*Uejp)p9AjHxZ0gDK9Y2GiRS`V3HmM1|X$75>?_-(fig5JLR!!U#RvjS!Q) z2*ugbBlOP`B6Nuin=Ox~hEcl4jS`cu@QtH5TY8ipPKeUwHcCtNMh#48q4|548!9IM zybr24TY9MeZ9=G?)NeOn!^&{O=~_2NOvX9SIW5K6(qr_6gc$AAmXz=y+Dibzj&Wn& zW-{*fcLEe=OApZ3QUat|M8W`F=LU$$UV!3k=>htygaAF+nvlXEz0eI3lQ9FEa}>qd z(u4H9gdhzmXy4|ZgqVym$(-oK+0vu)qjczyJw3F5y^?SNtGF@uFd41sPF&(_>2W#l zz1vnmREV@~39s+i_6rgU$UC8#=5J#0VJtq0#pkei1dDHA@i$of0E=_s;gz;>8CW5D zOH%V~lgiJtgGcYZo8Ggn_r9CR-YImEuG@MqlTj3;_gv~L=ZRQb-SAxXT58tTRG5su zE9a<-v#C+{R2(cRG?iy=f7Ge>b`EZj3?p;YjSQ2$27x$RdStFih|C4JMUHl3gl4PP zxzS;=cNUMcrAOzvDbd*g3+#zb7h+O}&{=Y$!(=Zyaklj6yfh&?=fl`pDvDMZoO|5h zFd6q@Ij5XBTY7MAPYBL=;>Zdd`wk79nj0G?d#B?#TY79>lMtIBMaK<7$5zjn>@^z2 z+0vu4k`SGpLdYP?dU*I8cMl&Xdu{4*w)6mX69RN0#?oBEg)0ot8{P0Q8Fy(qXP!7) zdU$>zAv_}(uHWQFh{@hBEY6l5p|>SO=zKn47#==vc7wxY@4^*lOApQiDZ$}WCqser z6ia>OhxeMQ`FemYJvhIS4xG4J{{RgdTdilZSFMk;rN`xWwvS61wf^#LcSNZ5&wyr{ zQ&?Pw#Y?cb4U0uA>R4=G@dhk@8H+6}ejSV7hC*qJm#jjn9L-h@JF&;v)G+)wAeKbW|1>tVJ@>YHb0c^p zA95qaWG_N-w)6;nIUzzLIgmc=#)!#Y2U46ZJw{(oh|!KB&)Xubf&B74e*cfS@nJH? zzHtheakljM{Fj9I4DVojm;kahI3|0IpK-SI0R69&01fS6`=}crCVK&jv!w^<3BR6h zo_>l3&{C^&BBsfG!VMFXz25#fTY8u-P6tz5+WZvZVoRG$_DY*^w)D7Mv3*?9NSnXE z?GIf@n|}n&G{1<&f5759So|Fp{}+p$@U+dRL!m^I%Zrok8pJikeWH2Y+Q8wFEI&i9 z*ODw3Uibu}AMh_ z(UHT4&T)qT`l=fsCVPiZoGm>-t%LxLU=;Z}A!M&wO!lh$aklgb-J2Ytp|)xNr5hn8 zdl8DWrAO$^2@x8}DDrJLMojjuV{x|h7`;6qMnfA#zT?J+$zG#KoGm>*?@EZz@J5mE z5L-|7-7a~)Q+>I$LY@#;&f5HQ9y#$lfv#FL}=kWw!c_2xT5=%5mh0? zm>#8XB}8eYlMxFSdVrF2pHeauV|t+edqSXgwDS{eg`OBf?-om-G}-v_5Egc#Ff z^y8EmiRpW(->8TEYzxowU?k~YjAR8HBS}Zb^cY?6U^9`m?Yf` zldNEWcan~b>0z2l2-9#|lo$3gLY7TQ(S3XWRfP~^dW4>z4xy-Xa^ZQ5jpdzGbf0@t zRR}Sr$L3|*$0m(~va;4UW;T7KsVca%4Z3s3$pRHGqL1uIQd&-{&MjmWcA)Pog&sL%U zLhS?(w)o$k2!Sto{LYEMU{e(cfz=Sv!FJKH85qS7H-4>CFXoR_UcUcu<>>T|m$W*o zjW)pW`aa~utM91iE7`yUYauTW<|2tv4^kT3vT);_8MWMpEVYeJI};JFRFuof>`pi+ zn8~mKIz!g$h_IP>W~Bw`4Q948tH?qHkLl{ z0nSJlxE6d=xIhmv7DP2lCLss++*)3(=iTB+<>p0L=Nqf5c^A@R%x9Gj=xwv&bE3p0 zDhw)3UzB>F4>N~aiJURRLQByV?xpB3k&pW3{wv)}29wd#M{~c}MkUrF%NZS7kFKJ| zLH;+^IVPj=-nkyd+0=S;f2#H9pCp*JH>bqhg7XRF^@aD2bLt`bYf7J4IFh#pr}A8f z;C!|lP9}TdjI*VO^F1lxoEC60GytcLE>7KYgW;5prz0F$2-9oam@*ly+|D5yXG@Ri zLn$z=$n{%-2e=;Sv|!qr)04z;)>1J-eWA-ju1G_dtpkM0-oyj2QDjPonkWXR&W9rXG;&isdS0g^=LC0bU(igfRWiq-Ior5yY zmLAf-P66rjt$7e&wJ3#{RE5%}!LKj=L)uAhb5E2^Mtims+BjQ!Xn&9bTCfF-Y$sua zRnTvWTP)KU)74_$oPnpccR{xE&;WlWy#=s<8?!Ex(Q@v53vsseZ{ghENMNlpbF6GD zNZcY#e#5&+YaPYb#GEu>+{PxV0x42CqCATNnXJ9s|%rfG-1EqA)K~??QOtQ&n3nHS?=S z1SzGOQ5tYay^(iMs*c)=1U%;fheD(3qsfjdpzUj^QP1Y*EyG`3)t;V%?o2t7hC(XX zZjQFjYKD=V!CqSJo`mjpp?i(mv8>hU9P4kWcI;kmM?X-FsvlsRrTu~uFLlM7paGjB zWjYb;toD8fBtg{(LPl>?h=Ot?5y=*K3@+o3$?VXv#zt0b+BM z#CN=$LsICx4%TbDt^5bWQR~5+I8QqTX1aC;X;LsF3uGLwcVPl4@K>=>UC00Sy47OM zP8E+$!YA2lw6#3tNHlIJbGgHfdux#8neGmQ6W)6LB-^&}{%Aa}S9{fEm>`T6tXB@G zSrm^vV>Dv?0oilvb=eb<$qAFD7yad;)@>~3@DtJx_lrUEJ3bx$gNL#DV1Co04ki$h zua+^#dkIUX#XYB8H+nkIP}xb*4q8tm419{zT^%zF4|W{}7|b8w^r&L0UVdZP_wcQ> zhahupuTei)L9qA=O7v>T!DLZsw3j>gR>&z(sly!KXbYE#nU*>Rf=KZa?wUNZ>PErf zHNW&Za6Q9bA+ku)V>l);a*CRqGxiXnVOnxeW}4fGLAF+M)v-rS@Eo{fX^daHcNXmJ z)h<{J1&kAuLZ+Er6RX5TfHP*s#}{mw@>OeiP5cqbs{|f9aM`WSQ8idbrY81xyD&3D zcVSqq(#lCN7bGVQW=*E|n3wN}d*u*wLRpZr6Of-L&sOptBXMF7dNovJ;gH7iT58tzXD}HddIV=uAowhF?>g}#zprL&)1nlI5PY2*K_+`` z7jd@q2)-Z%f)(kYcA_XRR`hXrf%GSDHA6@)xshbD7s)tVdL$1dK~lovL{eTfkSwDg zhk(4t4J4B>AcS*TjI*T&@=yvOXL+-L6Gy%VTNzML?6fP|C$8cphtRCK(PXlBk%_aV zNAsQ(XzrvS(g5Zu-Sai1DR+a=vRyY!_WH!*Z0XTjPl47u&p@IUIzE}MOe-!SKTrRe z0drjUc;20-|IB1!^AZ*_nVe?lFnrHAxGDIlF19m%-k@c|l_w&Rh>UdLmcEj@@IPXS^=$K%ry^k?yl zJ422~{77JOFZZ_JdB-8|=63N#N%=;7R%98Tn3y<>?l-x!UHafoGuY0b80`wcBWsZy4t*u&gUCF@KTp3ZLXDMaNspPhuZ`H|EKc ziWrvrzysNv!k^RDWi`(BDecXwp$5*rO#ZZLKpUvrfmkhERgSB@R^hn{55*JiQm?U| zcltf3xVPLSaaujA`Z2IwLS0cpD1bDo3ZNR%MKNec-)*7V*CtkRUQk__(KU;**2of{ z>W%sVA33*Tev2@ms>cV$Q%AhbN`VX53OH+2GdN=OGY0xOCqxYf9&1SkOMQ8+0AUsU zPII-+`Z~^n#&zQl^!(Lf&ad_G#FyLkH@JzX90^8a?4lBHg&j?D%aBoTQhsyB=N>#> zgIElDh-Eu~#&!=28Xd&D4e^iW+xb(K)x4c|tN2y1aC>^YrWd0-@-Yp##yC5woAV2m z_g8fB<4nDvJYm{G+z>8M!W&+;j(8>H{#4t%V0&3sU9C3Su(wM+hJ3CB!-qwSM25G4 z9*+9v<&#-_!8Or(+2k7jdC(4;*I@BHEN;T$l~}wEi(^>ai^V^};vHDL7mMG<;@?1_ zJjIUeG(s!(c!}Rj3Z3mG{xp%jXWt&A>$aDe$!O*wg|74xk6=UkAT@6Lika-SA;sC0 zlKDA6EQzo9&#a5C8oXPhlPoZm^Ew)9|5qyV#`fl29z;A_@sa(`wze9i zl`q^zb+&E#OctgsgtZOFcGkyF?V#yFsep{CZd4foN%f9LJhgLEUhi+T8Z~qa$TpTw zX2P%yhN6vbejJWylp|yvw&yoCV5c!qyNw(VS9HZWiULjH)Pi~>b9XvSTG|PgLD599 zr9IrDnl;eIKYq#%wSdDRtHDW?*#?BoY8Q=OL)aMCH^4>>XX3=00Jj*wPB04^Pfo9f zVyB5CIPNvX;DI4I$cEk^I6G6mKXa5Ku;zOYo@c=7_^)hku3E284cxXgZK@s)%q+x& zR&BEbr%PtMm1y8hjasg){X*RWHz6Q zMTW&J6v{y3%k&nq(tL)b1}xm=zq(qh0EdoL*mTnMr+6J)kB$7Ju;o;X{2 z$nHu3*(7Aeo5@55IGnc(hkpZ{L~2QV<66!9{C4SAU|e5%U`2dpf3fzYEvyAE>_&(ui z%a%;W+*I6^c066 zA??v08kvxBP#|ip>X>Ly(0yOFst{sKkLcAY5WTES)2P5Sz|&I{hQNc2 zf==)x-3y+qV1p;=$e13yYg2%CLkSLmryn8E0w_|VIg#X1cRK0&q#QX8Lr_C5LnqXd z?py6K$6=H)J=8Bw0rjGt1`+`Gi2!pbUa|Xv)BH{86EFlZL%~4268$yU2^2%`01_oS zp_Fvr9wAJi7-dZV4sJ{F4sJFQOomPQb4GX?W93Xmid)_c{qX5s^^rq;(U2m#Fh%r5Q-4x&@-1qk41lr2tFI*Pd_l8TutaNc3 zyWc`5$;E;qxuj!U+XHt9T7^KyaE=oLzRHR$<`0Ho7Te;=<%^c14C2w&j=>(epS~?| zxCPL9XtBSm$S?#gx_cM{*mpH>Odg|rgBH&^CVYXX%41cyPiqM0y4tXVn{QxCk#O9> ziQis<`wyq2@v1UCxRFTH#NgJ#XKJ*DEgI2&^KK3YEUOS20Mf=`;CxKE%x_ve>HxcR zcR~Ac2jc)YcQBto^#F&44_vKGbNbx&x{b;mnt$tnZb1h&!f%xYqVA4@vM+Tc`ah1U{ z{OTj*iBJ1(X$Pe_xtiZ3O>NuT^NDR}Hx0Q4jJ^)`msy9{`$_%AVCRm-);$G_+v%ap z)og|Hs)+5NC_Eb(bKpSVu|abS=umr5k?jojp_UQ+^J;Ca90}9|egUeFD6GJOT7!Ms z7+toEs^HU?q0%rWb9DptLrZheYQVhQk-K?e+~UseP7R_5sM-vyZADhs)epz+Y!hp9 z9Bbnbo)idCmHvX8*ZU$ipwzaom z1;fBNlx6F=P{rcBHWR@Dd#J|E*V|dZ6~EPFi_3l(PSom zQZqS%QF&;quEB*6<0J@4I;{Mybu$a=U>kncyH9aS?wS>Z3u$W_Y)f|aSx`5-u0t=n(qOTGNw-u%kMjs0F{ zmZlNyNDsZoeKKpI*yw+H!rdCgobPlSy_561XY^fNlI(mcYJUkoqj~N3KwWeEW8bwn zCAhV}G-(f3H73XB%x8NBnx|VA+B7Anc3-=L(L}IQli6JxA{Le$GU3r6R3%}T1o0MT z?sDG5#_*qPhsTJXUZeaf2PPrp9C$_wS|)Popd~cB>z11!F$ktBQOQgOcuJe8oMqwL zL&xe6w(fz(1_*Fc26brhrKoj^6k}8j#Ek}+#$^*8xDlmLn7Doat0r(#J;7FGT4M(X z*#N&93!YbN*h&Fjg@C+~4z*F)G^`HX*d8+mFWv~!fWXQ@4-)0>b$Zp75-eJId#W51 zL!lto%=HdP3uL&I?-&>T(C{cp>!^Gi2@SuBULh|act)GWF2I>Fu%3wMfAumt8teV?-s(PTRyxyDQaF#J$Rp)6BNNIH$E7sTyPZ~R z8BA~5>hCvKghB+FsZb7pF|&CHi+iwG$KpOL-h#yz77t?aAuK+D#b>d21dDHC@jWbl zjKzgur)@qBi%BeYV=<4#E3kMK7IiFM4@G`-YpQuSrdMfUaX%KAIHZXYVVZc>D8GN} J{;mGp{{tR*{2>4U literal 0 HcmV?d00001 diff --git a/.serena/project.yml b/.serena/project.yml new file mode 100644 index 0000000..888d339 --- /dev/null +++ b/.serena/project.yml @@ -0,0 +1,68 @@ +# language of the project (csharp, python, rust, java, typescript, go, cpp, or ruby) +# * For C, use cpp +# * For JavaScript, use typescript +# Special requirements: +# * csharp: Requires the presence of a .sln file in the project folder. +language: python + +# whether to use the project's gitignore file to ignore files +# Added on 2025-04-07 +ignore_all_files_in_gitignore: true +# list of additional paths to ignore +# same syntax as gitignore, so you can use * and ** +# Was previously called `ignored_dirs`, please update your config if you are using that. +# Added (renamed)on 2025-04-07 +ignored_paths: [] + +# whether the project is in read-only mode +# If set to true, all editing tools will be disabled and attempts to use them will result in an error +# Added on 2025-04-18 +read_only: false + + +# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details. +# Below is the complete list of tools for convenience. +# To make sure you have the latest list of tools, and to view their descriptions, +# execute `uv run scripts/print_tool_overview.py`. +# +# * `activate_project`: Activates a project by name. +# * `check_onboarding_performed`: Checks whether project onboarding was already performed. +# * `create_text_file`: Creates/overwrites a file in the project directory. +# * `delete_lines`: Deletes a range of lines within a file. +# * `delete_memory`: Deletes a memory from Serena's project-specific memory store. +# * `execute_shell_command`: Executes a shell command. +# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced. +# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type). +# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type). +# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes. +# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file. +# * `initial_instructions`: Gets the initial instructions for the current project. +# Should only be used in settings where the system prompt cannot be set, +# e.g. in clients you have no control over, like Claude Desktop. +# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol. +# * `insert_at_line`: Inserts content at a given line in a file. +# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol. +# * `list_dir`: Lists files and directories in the given directory (optionally with recursion). +# * `list_memories`: Lists memories in Serena's project-specific memory store. +# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building). +# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context). +# * `read_file`: Reads a file within the project directory. +# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store. +# * `remove_project`: Removes a project from the Serena configuration. +# * `replace_lines`: Replaces a range of lines within a file with new content. +# * `replace_symbol_body`: Replaces the full definition of a symbol. +# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen. +# * `search_for_pattern`: Performs a search for a pattern in the project. +# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase. +# * `switch_modes`: Activates modes by providing a list of their names +# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information. +# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task. +# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed. +# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store. +excluded_tools: [] + +# initial prompt for the project. It will always be given to the LLM upon activating the project +# (contrary to the memories, which are loaded on demand). +initial_prompt: "" + +project_name: "email-organizer" diff --git a/app/__init__.py b/app/__init__.py index fae8d2e..974fb27 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -11,6 +11,13 @@ login_manager.login_view = 'auth.login' login_manager.login_message = 'Please log in to access this page.' login_manager.login_message_category = 'warning' +# Import scheduler (import here to avoid circular imports) +try: + from app.scheduler import Scheduler +except ImportError: + Scheduler = None + + def create_app(config_name='default'): app = Flask(__name__, static_folder='static', static_url_path='/static') app.config.from_object(config[config_name]) @@ -20,6 +27,11 @@ def create_app(config_name='default'): migrate = Migrate(app, db) login_manager.init_app(app) + # Initialize and register scheduler if available + if Scheduler: + scheduler = Scheduler(app) + app.scheduler = scheduler + # Register blueprints from app.routes import main from app.auth import auth diff --git a/app/commands.py b/app/commands.py index 81eb0b3..b0b1cbb 100644 --- a/app/commands.py +++ b/app/commands.py @@ -32,3 +32,33 @@ def setup_dev(): print("Docker Compose not found. Please install Docker and Docker Compose.") sys.exit(1) +@app.cli.command("start-scheduler") +@click.option('--interval', default=5, help='Interval in minutes between processing runs (default: 5)') +@with_appcontext +def start_scheduler(interval): + """Start the background email processing scheduler.""" + if not hasattr(app, 'scheduler'): + print("Scheduler not available. Make sure app/scheduler.py exists and is properly imported.") + sys.exit(1) + + print(f"Starting email processing scheduler with {interval} minute interval...") + print("Press Ctrl+C to stop") + + try: + # Start the scheduler + app.scheduler.start() + + # Keep the main thread alive + try: + while True: + time.sleep(1) + except KeyboardInterrupt: + print("\nShutting down scheduler...") + app.scheduler.stop() + + except Exception as e: + print(f"Error starting scheduler: {e}") + sys.exit(1) + +# Import at the top of the file (add this import if not already present) +import time \ No newline at end of file diff --git a/app/email_processor.py b/app/email_processor.py new file mode 100644 index 0000000..d9561a3 --- /dev/null +++ b/app/email_processor.py @@ -0,0 +1,317 @@ +from typing import List, Dict, Optional +from datetime import datetime, timedelta +import logging +from app.models import db, Folder, User, ProcessedEmail +from app.imap_service import IMAPService +from app.processed_emails_service import ProcessedEmailsService + + +class EmailProcessor: + """ + Service class for processing emails in the background according to user-defined rules. + Handles automated organization of emails based on folder configurations. + """ + + def __init__(self, user: User): + self.user = user + self.imap_service = IMAPService(user) + self.processed_emails_service = ProcessedEmailsService(user) + self.logger = logging.getLogger(__name__) + + def process_user_emails(self) -> Dict[str, any]: + """ + Process emails for a user according to their folder rules. + + Returns: + Dictionary with processing results including success count, error count, and timing + """ + result = { + 'success_count': 0, + 'error_count': 0, + 'processed_folders': [], + 'start_time': datetime.utcnow(), + 'end_time': None, + 'duration': None + } + + try: + # Get all folders with organize_enabled = True, ordered by priority (highest first) + folders = Folder.query.filter_by( + user_id=self.user.id, + organize_enabled=True + ).order_by(Folder.priority.desc()).all() + + if not folders: + self.logger.info(f"No folders to process for user {self.user.email}") + result['end_time'] = datetime.utcnow() + result['duration'] = (result['end_time'] - result['start_time']).total_seconds() + return result + + self.logger.info(f"Processing {len(folders)} folders for user {self.user.email}") + + # Process each folder according to priority + for folder in folders: + try: + folder_result = self.process_folder_emails(folder) + result['success_count'] += folder_result['processed_count'] + result['error_count'] += folder_result['error_count'] + result['processed_folders'].append({ + 'folder_id': folder.id, + 'folder_name': folder.name, + 'processed_count': folder_result['processed_count'], + 'error_count': folder_result['error_count'] + }) + + self.logger.info(f"Processed {folder_result['processed_count']} emails for folder {folder.name}") + + except Exception as e: + self.logger.error(f"Error processing folder {folder.name}: {str(e)}") + result['error_count'] += 1 + continue + + except Exception as e: + self.logger.error(f"Error in process_user_emails for user {self.user.email}: {str(e)}") + result['error_count'] += 1 + + finally: + result['end_time'] = datetime.utcnow() + result['duration'] = (result['end_time'] - result['start_time']).total_seconds() + + return result + + def process_folder_emails(self, folder: Folder) -> Dict[str, any]: + """ + Process emails for a specific folder according to its rules. + + Args: + folder: The folder to process + + Returns: + Dictionary with processing results for this folder + """ + result = { + 'processed_count': 0, + 'error_count': 0, + 'folder_id': folder.id, + 'folder_name': folder.name + } + + try: + # Get pending emails for this folder + pending_email_uids = self.processed_emails_service.get_pending_emails(folder.name) + + if not pending_email_uids: + self.logger.info(f"No pending emails to process for folder {folder.name}") + return result + + self.logger.info(f"Processing {len(pending_email_uids)} pending emails for folder {folder.name}") + + # Process emails in batches to manage system resources + batch_size = 10 # Configurable batch size + processed_batch_count = 0 + + for i in range(0, len(pending_email_uids), batch_size): + batch = pending_email_uids[i:i + batch_size] + batch_result = self._process_email_batch(folder, batch) + + result['processed_count'] += batch_result['processed_count'] + result['error_count'] += batch_result['error_count'] + processed_batch_count += 1 + + self.logger.info(f"Processed batch {i//batch_size + 1} for folder {folder.name}: {batch_result['processed_count']} success, {batch_result['error_count']} errors") + + # Update folder pending count after processing + self._update_folder_counts(folder) + + except Exception as e: + self.logger.error(f"Error in process_folder_emails for folder {folder.name}: {str(e)}") + result['error_count'] += 1 + + return result + + def _process_email_batch(self, folder: Folder, email_uids: List[str]) -> Dict[str, any]: + """ + Process a batch of emails for a folder. + + Args: + folder: The folder whose rules to apply + email_uids: List of email UIDs to process + + Returns: + Dictionary with processing results for this batch + """ + result = { + 'processed_count': 0, + 'error_count': 0 + } + + try: + # Connect to IMAP server + self.imap_service._connect() + + # Login + username = self.user.imap_config.get('username', '') + password = self.user.imap_config.get('password', '') + self.imap_service.connection.login(username, password) + + # Select the source folder + resp_code, content = self.imap_service.connection.select(folder.name) + if resp_code != 'OK': + raise Exception(f"Failed to select folder {folder.name}: {content}") + + # Process each email in the batch + processed_uids = [] + for email_uid in email_uids: + try: + # Get email headers to evaluate rules + headers = self.imap_service.get_email_headers(folder.name, email_uid) + + if not headers: + self.logger.warning(f"Could not get headers for email {email_uid} in folder {folder.name}") + result['error_count'] += 1 + continue + + # Evaluate rules to determine destination + destination_folder = self._evaluate_rules(headers, folder.rule_text) + + if destination_folder and destination_folder != folder.name: + # Move email to destination folder + if self._move_email(email_uid, folder.name, destination_folder): + processed_uids.append(email_uid) + result['processed_count'] += 1 + else: + self.logger.error(f"Failed to move email {email_uid} from {folder.name} to {destination_folder}") + result['error_count'] += 1 + else: + # Mark as processed (no move needed) + processed_uids.append(email_uid) + result['processed_count'] += 1 + + except Exception as e: + self.logger.error(f"Error processing email {email_uid}: {str(e)}") + result['error_count'] += 1 + continue + + # Mark processed emails in the database + if processed_uids: + count = self.processed_emails_service.mark_emails_processed(folder.name, processed_uids) + if count != len(processed_uids): + self.logger.warning(f"Marked {count} emails as processed, but expected {len(processed_uids)}") + + # Close folder and logout + self.imap_service.connection.close() + self.imap_service.connection.logout() + self.imap_service.connection = None + + except Exception as e: + self.logger.error(f"Error in _process_email_batch: {str(e)}") + result['error_count'] += 1 + + # Clean up connection if needed + if self.imap_service.connection: + try: + self.imap_service.connection.close() + self.imap_service.connection.logout() + except: + pass + self.imap_service.connection = None + + return result + + def _evaluate_rules(self, headers: Dict[str, str], rule_text: Optional[str]) -> Optional[str]: + """ + Evaluate rules against email headers to determine destination folder. + + Args: + headers: Email headers (subject, from, to, date) + rule_text: Rule text defining processing criteria + + Returns: + Destination folder name or None if no move is needed + """ + # This is a simplified implementation - in a real app, this would parse + # the rule_text and evaluate it against the headers + # For now, we'll implement a simple rule evaluation + + if not rule_text: + return None + + # Simple example: if rule contains 'move to', extract destination + # This should be replaced with proper rule parsing in production + rule_lower = rule_text.lower() + if 'move to' in rule_lower: + try: + start_idx = rule_lower.find('move to') + 7 # length of 'move to' + # Extract folder name (everything after 'move to' until end or punctuation) + destination = rule_text[start_idx:].strip() + # Remove any trailing punctuation + destination = destination.rstrip('.!,;:') + return destination.strip() + except: + pass + + # Default: no move needed + return None + + def _move_email(self, email_uid: str, source_folder: str, destination_folder: str) -> bool: + """ + Move an email from source folder to destination folder. + + Args: + email_uid: The UID of the email to move + source_folder: The current folder name + destination_folder: The destination folder name + + Returns: + True if successful, False otherwise + """ + try: + # Copy email to destination folder + result = self.imap_service.connection.copy(email_uid, destination_folder) + if result[0] != 'OK': + self.logger.error(f"Copy failed for email {email_uid}: {result[1]}") + return False + + # Store the message ID to ensure it was copied + # (In a real implementation, you might want to verify the copy) + + # Delete from source folder + self.imap_service.connection.select(source_folder) + result = self.imap_service.connection.store(email_uid, '+FLAGS', '\Deleted') + if result[0] != 'OK': + self.logger.error(f"Mark as deleted failed for email {email_uid}: {result[1]}") + return False + + # Expunge to permanently remove + result = self.imap_service.connection.expunge() + if result[0] != 'OK': + self.logger.error(f"Expunge failed for email {email_uid}: {result[1]}") + return False + + return True + + except Exception as e: + self.logger.error(f"Error moving email {email_uid} from {source_folder} to {destination_folder}: {str(e)}") + return False + + def _update_folder_counts(self, folder: Folder) -> None: + """ + Update folder counts after processing. + + Args: + folder: The folder to update + """ + try: + # Update pending count + pending_count = self.processed_emails_service.get_pending_count(folder.name) + folder.pending_count = pending_count + + # Update total count (get from IMAP) + total_count = self.imap_service.get_folder_email_count(folder.name) + folder.total_count = total_count + + db.session.commit() + + except Exception as e: + self.logger.error(f"Error updating folder counts for {folder.name}: {str(e)}") + db.session.rollback() \ No newline at end of file diff --git a/app/routes.py b/app/routes.py index 116a05f..e47973b 100644 --- a/app/routes.py +++ b/app/routes.py @@ -7,6 +7,7 @@ from app.models import Folder from .routes.folders import folders_bp from .routes.imap import imap_bp from .routes.emails import emails_bp +from .routes.background_processing import bp as background_processing_bp # Create the main blueprint main = Blueprint('main', __name__) @@ -15,6 +16,7 @@ main = Blueprint('main', __name__) main.register_blueprint(folders_bp) main.register_blueprint(imap_bp) main.register_blueprint(emails_bp) +main.register_blueprint(background_processing_bp) # Root route that redirects to the main index page @main.route('/') diff --git a/app/routes/background_processing.py b/app/routes/background_processing.py new file mode 100644 index 0000000..283c41a --- /dev/null +++ b/app/routes/background_processing.py @@ -0,0 +1,59 @@ +from flask import Blueprint, jsonify, request +from flask_login import login_required, current_user +from app.email_processor import EmailProcessor + +decorators = [login_required] + +bp = Blueprint('background_processing', __name__, url_prefix='/api/background') + +@bp.route('/process-emails', methods=['POST']) +def trigger_email_processing(): + """ + Trigger immediate email processing for the current user. + """ + try: + processor = EmailProcessor(current_user) + result = processor.process_user_emails() + + return jsonify({ + 'success': True, + 'message': f"Processed {result['success_count']} emails successfully", + 'details': result + }), 200 + + except Exception as e: + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 + +@bp.route('/process-folder/', methods=['POST']) +def trigger_folder_processing(folder_id): + """ + Trigger email processing for a specific folder. + """ + try: + # Verify the folder belongs to the current user + from app.models import Folder + folder = Folder.query.filter_by(id=folder_id, user_id=current_user.id).first() + + if not folder: + return jsonify({ + 'success': False, + 'error': 'Folder not found or access denied' + }), 404 + + processor = EmailProcessor(current_user) + result = processor.process_folder_emails(folder) + + return jsonify({ + 'success': True, + 'message': f"Processed {result['processed_count']} emails for folder {folder.name}", + 'details': result + }), 200 + + except Exception as e: + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 \ No newline at end of file diff --git a/app/scheduler.py b/app/scheduler.py new file mode 100644 index 0000000..00057ed --- /dev/null +++ b/app/scheduler.py @@ -0,0 +1,107 @@ +import logging +import time +from datetime import datetime, timedelta +from threading import Thread +from app.models import User +from app.email_processor import EmailProcessor +from app import create_app + +class Scheduler: + """ + Background scheduler for email processing tasks. + Runs as a separate thread to process emails at regular intervals. + """ + + def __init__(self, app=None, interval_minutes=5): + self.app = app + self.interval = interval_minutes * 60 # Convert to seconds + self.thread = None + self.running = False + self.logger = logging.getLogger(__name__) + + if app: + self.init_app(app) + + def init_app(self, app): + """Initialize the scheduler with a Flask application.""" + self.app = app + + # Store scheduler in app extensions + if not hasattr(app, 'extensions'): + app.extensions = {} + app.extensions['scheduler'] = self + + def start(self): + """Start the background scheduler thread.""" + if self.running: + self.logger.warning("Scheduler is already running") + return + + self.running = True + self.thread = Thread(target=self._run, daemon=True) + self.thread.start() + self.logger.info(f"Scheduler started with {self.interval//60} minute interval") + + def stop(self): + """Stop the background scheduler.""" + self.running = False + if self.thread: + self.logger.info("Scheduler stopped") + self.thread.join() + + def _run(self): + """Main loop for the scheduler.""" + # Wait a moment before first run to allow app to start + time.sleep(5) + + while self.running: + try: + self.logger.info("Starting scheduled email processing") + self.process_all_users() + + # Calculate next run time + next_run = datetime.now() + timedelta(seconds=self.interval) + self.logger.info(f"Next run at {next_run.strftime('%Y-%m-%d %H:%M:%S')}") + + # Sleep for the interval, checking every 10 seconds if we should stop + slept = 0 + while self.running and slept < self.interval: + sleep_time = min(10, self.interval - slept) + time.sleep(sleep_time) + slept += sleep_time + + except Exception as e: + self.logger.error(f"Error in scheduler: {str(e)}") + # Continue running even if there's an error + continue + + def process_all_users(self): + """Process emails for all users.""" + with self.app.app_context(): + try: + # Get all users + users = User.query.all() + + if not users: + self.logger.info("No users found for processing") + return + + self.logger.info(f"Processing emails for {len(users)} users") + + # Process each user's emails + for user in users: + try: + processor = EmailProcessor(user) + result = processor.process_user_emails() + + self.logger.info(f"Completed processing for user {user.email}: " + f"{result['success_count']} success, " + f"{result['error_count']} errors, " + f"{len(result['processed_folders'])} folders processed") + + except Exception as e: + self.logger.error(f"Error processing emails for user {user.email}: {str(e)}") + continue + + except Exception as e: + self.logger.error(f"Error in process_all_users: {str(e)}") \ No newline at end of file diff --git a/docs/user-stories/background-email-processing.md b/docs/user-stories/background-email-processing.md new file mode 100644 index 0000000..0f9b166 --- /dev/null +++ b/docs/user-stories/background-email-processing.md @@ -0,0 +1,132 @@ +# Background Email Processing User Stories & Acceptance Criteria + +## User Stories + +### Primary User Stories + +#### 1. Automated Email Processing +**As a** user with configured email folders +**I want** my emails to be automatically processed in the background +**So that** I don't have to manually trigger email organization + +**Acceptance Criteria:** +- [ ] Background task runs periodically to process emails for all users +- [ ] Only processes emails in folders with `organize_enabled = true` +- [ ] Processes emails according to all folder rules, moving emails as needed to the appropriate folder +- [ ] Respects priority field for folders +- [ ] Marks processed emails to avoid reprocessing +- [ ] Updates folder pending counts after processing +- [ ] Handles processing errors gracefully without stopping other folders +- [ ] Respects folder priority when processing (high priority first) + +#### 2. Email Processing Status Tracking +**As a** user +**I want** to see the status of email processing +**So that** I can understand how many emails are pending organization + +**Acceptance Criteria:** +- [ ] Pending email count is displayed for each folder +- [ ] Count updates in real-time after processing +- [ ] Processed email tracking prevents duplicate processing +- [ ] Email processing history is maintained + +#### 3. Batch Email Processing +**As a** user with many emails +**I want** emails to be processed in batches +**So that** the system doesn't become unresponsive with large mailboxes + +**Acceptance Criteria:** +- [ ] Emails are processed in configurable batch sizes +- [ ] Processing progress is tracked per batch +- [ ] Failed batches don't affect other batches +- [ ] System resources are managed efficiently during processing + +#### 4. Error Handling & Recovery +**As a** user +**I want** email processing errors to be handled gracefully +**So that** temporary issues don't stop all email organization + +**Acceptance Criteria:** +- [ ] Individual email processing failures don't stop folder processing +- [ ] Connection errors to IMAP servers are retried +- [ ] Transient errors are logged but don't halt processing +- [ ] Permanent failures are flagged for user attention +- [ ] Error notifications are sent for critical failures + +#### 5. Processing Controls +**As a** user +**I want** control over when emails are processed +**So that** I can manage processing during preferred times + +**Acceptance Criteria:** +- [ ] Users can enable/disable automatic processing per folder +- [ ] Users can trigger manual processing for specific folders +- [ ] Processing can be paused and resumed +- [ ] Processing schedule can be configured + +### Secondary User Stories + +#### 6. Performance Monitoring +**As a** system administrator +**I want** to monitor email processing performance +**So that** I can identify and resolve bottlenecks + +**Acceptance Criteria:** +- [ ] Processing time metrics are collected +- [ ] Success/failure rates are tracked +- [ ] Resource usage during processing is monitored +- [ ] Performance alerts are sent for degraded performance + +#### 7. Accessibility +**As a** user with disabilities +**I want** email processing status to be accessible +**So that** I can understand processing through assistive technologies + +**Acceptance Criteria:** +- [ ] Processing status updates are announced by screen readers +- [ ] Visual indicators have proper contrast ratios +- [ ] Processing notifications are keyboard navigable +- [ ] Error messages are clear and descriptive + +## Technical Requirements + +### Backend Requirements +- [ ] Background task scheduler implementation +- [ ] IMAP connection management for processing +- [ ] Email processing logic with rule evaluation +- [ ] Processed email tracking system +- [ ] Error handling and logging mechanisms +- [ ] Performance monitoring and metrics collection + +### Frontend Requirements +- [ ] Pending email count display +- [ ] Processing status indicators +- [ ] Manual processing controls +- [ ] Error notification UI +- [ ] Real-time updates for processing status + +### Integration Requirements +- [ ] Integration with IMAP service for email access +- [ ] Integration with folder management system +- [ ] Integration with processed emails tracking +- [ ] API endpoints for manual processing controls + +## Non-Functional Requirements + +### Performance +- Process emails at a rate of at least 10 emails per second +- Background task execution interval configurable (default: 5 minutes) +- Memory usage capped to prevent system resource exhaustion +- Processing of large mailboxes (100k+ emails) completes without timeouts + +### Reliability +- 99.5% uptime for background processing +- Automatic recovery from transient errors +- Graceful degradation when external services are unavailable +- Data consistency maintained during processing failures + +### Scalability +- Support for 1000+ concurrent users +- Horizontal scaling of processing workers +- Efficient database queries for email tracking +- Load balancing of processing tasks across workers diff --git a/download_cli.sh b/download_cli.sh new file mode 100755 index 0000000..ea42d5b --- /dev/null +++ b/download_cli.sh @@ -0,0 +1,248 @@ +#!/usr/bin/env bash +set -eu + +############################################################################## +# Goose CLI Install Script +# +# This script downloads the latest stable 'goose' CLI binary from GitHub releases +# and installs it to your system. +# +# Supported OS: macOS (darwin), Linux, Windows (MSYS2/Git Bash/WSL) +# Supported Architectures: x86_64, arm64 +# +# Usage: +# curl -fsSL https://github.com/block/goose/releases/download/stable/download_cli.sh | bash +# +# Environment variables: +# GOOSE_BIN_DIR - Directory to which Goose will be installed (default: $HOME/.local/bin) +# GOOSE_VERSION - Optional: specific version to install (e.g., "v1.0.25"). Overrides CANARY. Can be in the format vX.Y.Z, vX.Y.Z-suffix, or X.Y.Z +# GOOSE_PROVIDER - Optional: provider for goose +# GOOSE_MODEL - Optional: model for goose +# CANARY - Optional: if set to "true", downloads from canary release instead of stable +# CONFIGURE - Optional: if set to "false", disables running goose configure interactively +# ** other provider specific environment variables (eg. DATABRICKS_HOST) +############################################################################## + +# --- 1) Check for dependencies --- +# Check for curl +if ! command -v curl >/dev/null 2>&1; then + echo "Error: 'curl' is required to download Goose. Please install curl and try again." + exit 1 +fi + +# Check for tar or unzip (depending on OS) +if ! command -v tar >/dev/null 2>&1 && ! command -v unzip >/dev/null 2>&1; then + echo "Error: Either 'tar' or 'unzip' is required to extract Goose. Please install one and try again." + exit 1 +fi + + +# --- 2) Variables --- +REPO="block/goose" +OUT_FILE="goose" +GOOSE_BIN_DIR="${GOOSE_BIN_DIR:-"$HOME/.local/bin"}" +RELEASE="${CANARY:-false}" +CONFIGURE="${CONFIGURE:-true}" +if [ -n "${GOOSE_VERSION:-}" ]; then + # Validate the version format + if [[ ! "$GOOSE_VERSION" =~ ^v?[0-9]+\.[0-9]+\.[0-9]+(-.*)?$ ]]; then + echo "[error]: invalid version '$GOOSE_VERSION'." + echo " expected: semver format vX.Y.Z, vX.Y.Z-suffix, or X.Y.Z" + exit 1 + fi + GOOSE_VERSION=$(echo "$GOOSE_VERSION" | sed 's/^v\{0,1\}/v/') # Ensure the version string is prefixed with 'v' if not already present + RELEASE_TAG="$GOOSE_VERSION" +else + # If GOOSE_VERSION is not set, fall back to existing behavior for backwards compatibility + RELEASE_TAG="$([[ "$RELEASE" == "true" ]] && echo "canary" || echo "stable")" +fi + +# --- 3) Detect OS/Architecture --- +OS=$(uname -s | tr '[:upper:]' '[:lower:]') +ARCH=$(uname -m) + +# Handle Windows environments (MSYS2, Git Bash, Cygwin, WSL) +case "$OS" in + linux|darwin) ;; + mingw*|msys*|cygwin*) + OS="windows" + ;; + *) + echo "Error: Unsupported OS '$OS'. Goose currently supports Linux, macOS, and Windows." + exit 1 + ;; +esac + +case "$ARCH" in + x86_64) + ARCH="x86_64" + ;; + arm64|aarch64) + # Some systems use 'arm64' and some 'aarch64' – standardize to 'aarch64' + ARCH="aarch64" + ;; + *) + echo "Error: Unsupported architecture '$ARCH'." + exit 1 + ;; +esac + +# Build the filename and URL for the stable release +if [ "$OS" = "darwin" ]; then + FILE="goose-$ARCH-apple-darwin.tar.bz2" + EXTRACT_CMD="tar" +elif [ "$OS" = "windows" ]; then + # Windows only supports x86_64 currently + if [ "$ARCH" != "x86_64" ]; then + echo "Error: Windows currently only supports x86_64 architecture." + exit 1 + fi + FILE="goose-$ARCH-pc-windows-gnu.zip" + EXTRACT_CMD="unzip" + OUT_FILE="goose.exe" +else + FILE="goose-$ARCH-unknown-linux-gnu.tar.bz2" + EXTRACT_CMD="tar" +fi + +DOWNLOAD_URL="https://github.com/$REPO/releases/download/$RELEASE_TAG/$FILE" + +# --- 4) Download & extract 'goose' binary --- +echo "Downloading $RELEASE_TAG release: $FILE..." +if ! curl -sLf "$DOWNLOAD_URL" --output "$FILE"; then + echo "Error: Failed to download $DOWNLOAD_URL" + exit 1 +fi + +# Create a temporary directory for extraction +TMP_DIR="/tmp/goose_install_$RANDOM" +if ! mkdir -p "$TMP_DIR"; then + echo "Error: Could not create temporary extraction directory" + exit 1 +fi +# Clean up temporary directory +trap 'rm -rf "$TMP_DIR"' EXIT + +echo "Extracting $FILE to temporary directory..." +set +e # Disable immediate exit on error + +if [ "$EXTRACT_CMD" = "tar" ]; then + tar -xjf "$FILE" -C "$TMP_DIR" 2> tar_error.log + extract_exit_code=$? + + # Check for tar errors + if [ $extract_exit_code -ne 0 ]; then + if grep -iEq "missing.*bzip2|bzip2.*missing|bzip2.*No such file|No such file.*bzip2" tar_error.log; then + echo "Error: Failed to extract $FILE. 'bzip2' is required but not installed. See details below:" + else + echo "Error: Failed to extract $FILE. See details below:" + fi + cat tar_error.log + rm tar_error.log + exit 1 + fi + rm tar_error.log +else + # Use unzip for Windows + unzip -q "$FILE" -d "$TMP_DIR" 2> unzip_error.log + extract_exit_code=$? + + # Check for unzip errors + if [ $extract_exit_code -ne 0 ]; then + echo "Error: Failed to extract $FILE. See details below:" + cat unzip_error.log + rm unzip_error.log + exit 1 + fi + rm unzip_error.log +fi + +set -e # Re-enable immediate exit on error + +rm "$FILE" # clean up the downloaded archive + +# Determine the extraction directory (handle subdirectory in Windows packages) +# Windows releases may contain files in a 'goose-package' subdirectory +EXTRACT_DIR="$TMP_DIR" +if [ "$OS" = "windows" ] && [ -d "$TMP_DIR/goose-package" ]; then + echo "Found goose-package subdirectory, using that as extraction directory" + EXTRACT_DIR="$TMP_DIR/goose-package" +fi + +# Make binary executable +if [ "$OS" = "windows" ]; then + chmod +x "$EXTRACT_DIR/goose.exe" +else + chmod +x "$EXTRACT_DIR/goose" +fi + +# --- 5) Install to $GOOSE_BIN_DIR --- +if [ ! -d "$GOOSE_BIN_DIR" ]; then + echo "Creating directory: $GOOSE_BIN_DIR" + mkdir -p "$GOOSE_BIN_DIR" +fi + +echo "Moving goose to $GOOSE_BIN_DIR/$OUT_FILE" +if [ "$OS" = "windows" ]; then + mv "$EXTRACT_DIR/goose.exe" "$GOOSE_BIN_DIR/$OUT_FILE" +else + mv "$EXTRACT_DIR/goose" "$GOOSE_BIN_DIR/$OUT_FILE" +fi + +# Also move temporal-service and temporal CLI if they exist +if [ "$OS" = "windows" ]; then + if [ -f "$EXTRACT_DIR/temporal-service.exe" ]; then + echo "Moving temporal-service to $GOOSE_BIN_DIR/temporal-service.exe" + mv "$EXTRACT_DIR/temporal-service.exe" "$GOOSE_BIN_DIR/temporal-service.exe" + chmod +x "$GOOSE_BIN_DIR/temporal-service.exe" + fi + + # Move temporal CLI if it exists + if [ -f "$EXTRACT_DIR/temporal.exe" ]; then + echo "Moving temporal CLI to $GOOSE_BIN_DIR/temporal.exe" + mv "$EXTRACT_DIR/temporal.exe" "$GOOSE_BIN_DIR/temporal.exe" + chmod +x "$GOOSE_BIN_DIR/temporal.exe" + fi + + # Copy Windows runtime DLLs if they exist + for dll in "$EXTRACT_DIR"/*.dll; do + if [ -f "$dll" ]; then + echo "Moving Windows runtime DLL: $(basename "$dll")" + mv "$dll" "$GOOSE_BIN_DIR/" + fi + done +else + if [ -f "$EXTRACT_DIR/temporal-service" ]; then + echo "Moving temporal-service to $GOOSE_BIN_DIR/temporal-service" + mv "$EXTRACT_DIR/temporal-service" "$GOOSE_BIN_DIR/temporal-service" + chmod +x "$GOOSE_BIN_DIR/temporal-service" + fi + + # Move temporal CLI if it exists + if [ -f "$EXTRACT_DIR/temporal" ]; then + echo "Moving temporal CLI to $GOOSE_BIN_DIR/temporal" + mv "$EXTRACT_DIR/temporal" "$GOOSE_BIN_DIR/temporal" + chmod +x "$GOOSE_BIN_DIR/temporal" + fi +fi + +# skip configuration for non-interactive installs e.g. automation, docker +if [ "$CONFIGURE" = true ]; then + # --- 6) Configure Goose (Optional) --- + echo "" + echo "Configuring Goose" + echo "" + "$GOOSE_BIN_DIR/$OUT_FILE" configure +else + echo "Skipping 'goose configure', you may need to run this manually later" +fi + +# --- 7) Check PATH and give instructions if needed --- +if [[ ":$PATH:" != *":$GOOSE_BIN_DIR:"* ]]; then + echo "" + echo "Warning: Goose installed, but $GOOSE_BIN_DIR is not in your PATH." + echo "Add it to your PATH by editing ~/.bashrc, ~/.zshrc, or similar:" + echo " export PATH=\"$GOOSE_BIN_DIR:\$PATH\"" + echo "Then reload your shell (e.g. 'source ~/.bashrc', 'source ~/.zshrc') to apply changes." + echo "" +fi diff --git a/tests/test_background_processing_routes.py b/tests/test_background_processing_routes.py new file mode 100644 index 0000000..2541097 --- /dev/null +++ b/tests/test_background_processing_routes.py @@ -0,0 +1,113 @@ +import pytest +from unittest.mock import Mock, patch, MagicMock +from flask_login import FlaskLoginClient + +def test_trigger_email_processing_success(client, auth): + """Test successful email processing trigger.""" + # Login as a user + auth.login() + + # Mock the EmailProcessor + with patch('app.routes.background_processing.EmailProcessor') as mock_processor: + mock_processor_instance = mock_processor.return_value + mock_processor_instance.process_user_emails.return_value = { + 'success_count': 5, + 'error_count': 0, + 'processed_folders': [] + } + + # Make the request + response = client.post('/api/background/process-emails') + + # Verify response + assert response.status_code == 200 + json_data = response.get_json() + assert json_data['success'] is True + assert 'Processed 5 emails successfully' in json_data['message'] + +def test_trigger_email_processing_unauthorized(client): + """Test email processing trigger without authentication.""" + # Make the request without logging in + response = client.post('/api/background/process-emails') + + # Verify response (should redirect to login) + assert response.status_code == 302 # Redirect to login + +def test_trigger_folder_processing_success(client, auth, app): + """Test successful folder processing trigger.""" + # Login as a user + auth.login() + + # Create a mock folder for the current user + with app.app_context(): + from app.models import User, Folder + from app import db + + # Get or create test user + user = User.query.filter_by(email='test@example.com').first() + if not user: + user = User( + first_name='Test', + last_name='User', + email='test@example.com', + password_hash='hashed_password' + ) + db.session.add(user) + + # Create test folder + folder = Folder( + user_id=user.id, + name='Test Folder', + rule_text='move to Archive', + priority=1 + ) + db.session.add(folder) + db.session.commit() + folder_id = folder.id + + # Mock the EmailProcessor + with patch('app.routes.background_processing.EmailProcessor') as mock_processor: + mock_processor_instance = mock_processor.return_value + mock_processor_instance.process_folder_emails.return_value = { + 'processed_count': 3, + 'error_count': 0 + } + + # Make the request + response = client.post(f'/api/background/process-folder/{folder_id}') + + # Verify response + assert response.status_code == 200 + json_data = response.get_json() + assert json_data['success'] is True + assert 'Processed 3 emails for folder Test Folder' in json_data['message'] + + # Cleanup + with app.app_context(): + from app.models import db, Folder + folder = Folder.query.get(folder_id) + if folder: + db.session.delete(folder) + db.session.commit() + +def test_trigger_folder_processing_not_found(client, auth): + """Test folder processing trigger with non-existent folder.""" + # Login as a user + auth.login() + + # Make the request with non-existent folder ID + response = client.post('/api/background/process-folder/999') + + # Verify response + assert response.status_code == 404 + json_data = response.get_json() + assert json_data['success'] is False + assert 'Folder not found or access denied' in json_data['error'] + +def test_trigger_folder_processing_unauthorized(client): + """Test folder processing trigger without authentication.""" + # Make the request without logging in + response = client.post('/api/background/process-folder/1') + + # Verify response (should redirect to login) + assert response.status_code == 302 # Redirect to login \ No newline at end of file diff --git a/tests/test_email_processor.py b/tests/test_email_processor.py new file mode 100644 index 0000000..9d4ba2e --- /dev/null +++ b/tests/test_email_processor.py @@ -0,0 +1,239 @@ +import pytest +from unittest.mock import Mock, patch, MagicMock +from datetime import datetime, timedelta +from app.email_processor import EmailProcessor +from app.models import User, Folder, ProcessedEmail + +def test_email_processor_initialization(): + """Test that EmailProcessor initializes correctly.""" + # Create a mock user + mock_user = Mock(spec=User) + mock_user.id = 1 + mock_user.email = 'test@example.com' + mock_user.imap_config = {'username': 'user', 'password': 'pass'} + + # Initialize processor + processor = EmailProcessor(mock_user) + + # Verify initialization + assert processor.user == mock_user + assert processor.logger is not None + +@patch('app.email_processor.EmailProcessor._process_email_batch') +def test_process_folder_emails_no_pending(mock_batch): + """Test processing a folder with no pending emails.""" + # Create mocks + mock_user = Mock(spec=User) + mock_user.id = 1 + + mock_folder = Mock(spec=Folder) + mock_folder.id = 1 + mock_folder.name = 'Test Folder' + mock_folder.rule_text = 'move to Archive' + + # Mock the processed emails service + with patch('app.email_processor.ProcessedEmailsService') as mock_service: + mock_service_instance = mock_service.return_value + mock_service_instance.get_pending_emails.return_value = [] + + # Initialize processor + processor = EmailProcessor(mock_user) + result = processor.process_folder_emails(mock_folder) + + # Verify results + assert result['processed_count'] == 0 + assert result['error_count'] == 0 + assert mock_batch.called is False + +@patch('app.email_processor.EmailProcessor._process_email_batch') +def test_process_folder_emails_with_pending(mock_batch): + """Test processing a folder with pending emails.""" + # Create mocks + mock_user = Mock(spec=User) + mock_user.id = 1 + + mock_folder = Mock(spec=Folder) + mock_folder.id = 1 + mock_folder.name = 'Test Folder' + mock_folder.rule_text = 'move to Archive' + + # Mock the processed emails service + with patch('app.email_processor.ProcessedEmailsService') as mock_service: + mock_service_instance = mock_service.return_value + mock_service_instance.get_pending_emails.return_value = ['1', '2', '3'] + + # Setup batch processing mock + mock_batch.return_value = {'processed_count': 3, 'error_count': 0} + + # Initialize processor + processor = EmailProcessor(mock_user) + result = processor.process_folder_emails(mock_folder) + + # Verify results + assert result['processed_count'] == 3 + assert result['error_count'] == 0 + mock_batch.assert_called_once() + +@patch('app.email_processor.EmailProcessor._update_folder_counts') +def test_process_user_emails_no_folders(mock_update): + """Test processing user emails with no folders to process.""" + # Create mock user + mock_user = Mock(spec=User) + mock_user.id = 1 + mock_user.email = 'test@example.com' + + # Mock the database query + with patch('app.email_processor.Folder') as mock_folder: + mock_folder.query.filter_by.return_value.order_by.return_value.all.return_value = [] + + # Initialize processor + processor = EmailProcessor(mock_user) + result = processor.process_user_emails() + + # Verify results + assert result['success_count'] == 0 + assert result['error_count'] == 0 + assert len(result['processed_folders']) == 0 + mock_update.assert_not_called() + +@patch('app.email_processor.EmailProcessor._update_folder_counts') +def test_process_user_emails_with_folders(mock_update): + """Test processing user emails with folders to process.""" + # Create mock user + mock_user = Mock(spec=User) + mock_user.id = 1 + mock_user.email = 'test@example.com' + + # Create mock folder + mock_folder = Mock(spec=Folder) + mock_folder.id = 1 + mock_folder.name = 'Test Folder' + mock_folder.rule_text = 'move to Archive' + mock_folder.priority = 1 + + # Mock the database query + with patch('app.email_processor.Folder') as mock_folder_class: + mock_folder_class.query.filter_by.return_value.order_by.return_value.all.return_value = [mock_folder] + + # Mock the process_folder_emails method + with patch('app.email_processor.EmailProcessor.process_folder_emails') as mock_process: + mock_process.return_value = { + 'processed_count': 5, + 'error_count': 0 + } + + # Initialize processor + processor = EmailProcessor(mock_user) + result = processor.process_user_emails() + + # Verify results + assert result['success_count'] == 5 + assert result['error_count'] == 0 + assert len(result['processed_folders']) == 1 + mock_process.assert_called_once() + +@patch('app.email_processor.EmailProcessor._move_email') +def test_process_email_batch_success(mock_move): + """Test processing an email batch successfully.""" + # Create mocks + mock_user = Mock(spec=User) + mock_user.id = 1 + mock_user.imap_config = {'username': 'user', 'password': 'pass'} + + mock_folder = Mock(spec=Folder) + mock_folder.id = 1 + mock_folder.name = 'Source' + mock_folder.rule_text = 'move to Archive' + + # Mock IMAP service + with patch('app.email_processor.IMAPService') as mock_imap: + mock_imap_instance = mock_imap.return_value + mock_imap_instance._connect.return_value = None + mock_imap_instance.connection.login.return_value = ('OK', []) + mock_imap_instance.connection.select.return_value = ('OK', []) + mock_imap_instance.get_email_headers.return_value = { + 'subject': 'Test Email', + 'from': 'sender@example.com' + } + + # Mock rule evaluation + with patch('app.email_processor.EmailProcessor._evaluate_rules') as mock_evaluate: + mock_evaluate.return_value = 'Archive' + mock_move.return_value = True + + # Mock processed emails service + with patch('app.email_processor.ProcessedEmailsService') as mock_service: + mock_service_instance = mock_service.return_value + mock_service_instance.mark_emails_processed.return_value = 1 + + # Initialize processor + processor = EmailProcessor(mock_user) + result = processor._process_email_batch(mock_folder, ['1']) + + # Verify results + assert result['processed_count'] == 1 + assert result['error_count'] == 0 + mock_move.assert_called_once() + +def test_evaluate_rules_no_rule_text(): + """Test rule evaluation with no rule text.""" + # Create mocks + mock_user = Mock(spec=User) + mock_folder = Mock(spec=Folder) + + # Initialize processor + processor = EmailProcessor(mock_user) + + # Test with None rule text + result = processor._evaluate_rules({'subject': 'Test'}, None) + assert result is None + + # Test with empty rule text + result = processor._evaluate_rules({'subject': 'Test'}, '') + assert result is None + +def test_evaluate_rules_with_move_to(): + """Test rule evaluation with 'move to' directive.""" + # Create mocks + mock_user = Mock(spec=User) + mock_folder = Mock(spec=Folder) + + # Initialize processor + processor = EmailProcessor(mock_user) + + # Test with simple move to + result = processor._evaluate_rules({'subject': 'Test'}, 'move to Archive') + assert result == 'Archive' + + # Test with punctuation + result = processor._evaluate_rules({'subject': 'Test'}, 'move to Archive.') + assert result == 'Archive' + + # Test with extra spaces + result = processor._evaluate_rules({'subject': 'Test'}, 'move to Archive ') + assert result == 'Archive' + +@patch('app.email_processor.ProcessedEmailsService') +def test_update_folder_counts(mock_service): + """Test updating folder counts after processing.""" + # Create mocks + mock_user = Mock(spec=User) + mock_folder = Mock(spec=Folder) + mock_folder.name = 'Test Folder' + mock_folder.pending_count = 5 + mock_folder.total_count = 10 + + # Mock service methods + mock_service_instance = mock_service.return_value + mock_service_instance.get_pending_count.return_value = 3 + + with patch('app.email_processor.EmailProcessor._get_imap_connection') as mock_imap: + mock_imap.return_value.get_folder_email_count.return_value = 12 + + # Initialize processor + processor = EmailProcessor(mock_user) + processor._update_folder_counts(mock_folder) + + # Verify counts were updated + assert mock_folder.pending_count == 3 + assert mock_folder.total_count == 12 \ No newline at end of file diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py new file mode 100644 index 0000000..c7a6e48 --- /dev/null +++ b/tests/test_scheduler.py @@ -0,0 +1,127 @@ +import pytest +from unittest.mock import Mock, patch, MagicMock +from datetime import datetime, timedelta +from threading import Thread +from app.scheduler import Scheduler + +def test_scheduler_initialization(): + """Test that Scheduler initializes correctly.""" + # Create a mock app + mock_app = Mock() + + # Initialize scheduler + scheduler = Scheduler(mock_app, interval_minutes=10) + + # Verify initialization + assert scheduler.app == mock_app + assert scheduler.interval == 600 # 10 minutes in seconds + assert scheduler.thread is None + assert scheduler.running is False + +def test_scheduler_init_app(): + """Test that init_app method works correctly.""" + # Create a mock app + mock_app = Mock() + mock_app.extensions = {} + + # Initialize scheduler + scheduler = Scheduler() + scheduler.init_app(mock_app) + + # Verify scheduler is stored in app extensions + assert 'scheduler' in mock_app.extensions + assert mock_app.extensions['scheduler'] == scheduler + +def test_scheduler_start_stop(): + """Test that scheduler can be started and stopped.""" + # Create a mock app + mock_app = Mock() + mock_app.app_context.return_value.__enter__.return_value = None + mock_app.app_context.return_value.__exit__.return_value = None + + # Initialize scheduler + scheduler = Scheduler(mock_app) + + # Start the scheduler + with patch('app.scheduler.Scheduler._run') as mock_run: + mock_run.side_effect = lambda: setattr(scheduler, 'running', False) # Stop after one iteration + + scheduler.start() + + # Give it a moment to start + import time + time.sleep(0.1) + + # Verify thread was created and started + assert scheduler.thread is not None + assert scheduler.running is True + + # Wait for the run method to complete + if scheduler.thread: + scheduler.thread.join(timeout=1) + + # Stop should be called automatically when running becomes False + assert scheduler.running is False + +def test_scheduler_process_all_users_no_users(): + """Test process_all_users with no users in database.""" + # Create a mock app + mock_app = Mock() + mock_app.app_context.return_value.__enter__.return_value = None + mock_app.app_context.return_value.__exit__.return_value = None + + # Initialize scheduler + scheduler = Scheduler(mock_app) + + # Mock the User query + with patch('app.scheduler.User') as mock_user: + mock_user.query.all.return_value = [] + + # Call process_all_users + with patch('app.scheduler.Scheduler.logger') as mock_logger: + scheduler.process_all_users() + + # Verify logger was called + mock_logger.info.assert_any_call("No users found for processing") + +def test_scheduler_process_all_users_with_users(): + """Test process_all_users with users in database.""" + # Create a mock app + mock_app = Mock() + mock_app.app_context.return_value.__enter__.return_value = None + mock_app.app_context.return_value.__exit__.return_value = None + + # Initialize scheduler + scheduler = Scheduler(mock_app) + + # Create mock users + mock_user1 = Mock() + mock_user1.id = 1 + mock_user1.email = 'user1@example.com' + + # Mock the User query + with patch('app.scheduler.User') as mock_user_class: + mock_user_class.query.all.return_value = [mock_user1] + + # Mock the EmailProcessor + with patch('app.scheduler.EmailProcessor') as mock_processor: + mock_processor_instance = mock_processor.return_value + mock_processor_instance.process_user_emails.return_value = { + 'success_count': 5, + 'error_count': 0, + 'processed_folders': [] + } + + # Call process_all_users + with patch('app.scheduler.Scheduler.logger') as mock_logger: + scheduler.process_all_users() + + # Verify processor was called + mock_processor.assert_called_once_with(mock_user1) + mock_processor_instance.process_user_emails.assert_called_once() + + # Verify logging + mock_logger.info.assert_any_call("Processing emails for 1 users") + mock_logger.info.assert_any_call( + f"Completed processing for user {mock_user1.email}: 5 success, 0 errors, 0 folders processed" + ) \ No newline at end of file