From c2ae51209ac4908be6e7af95c239bcec81677282 Mon Sep 17 00:00:00 2001 From: Paul Thumfart <158182803+Dumdart@users.noreply.github.com> Date: Wed, 9 Sep 2026 16:53:09 +0200 Subject: [PATCH 1/2] Fix bugs and improve ci --- .github/workflows/ci.yaml | 2 +- docs/DESKTOP_UX.md | 7 +-- docs/images/observation-history-after.png | Bin 0 -> 67308 bytes docs/images/observation-history-settings.png | Bin 0 -> 51641 bytes pyproject.toml | 1 + .../gui/components/event_history_widget.py | 12 +++-- src/topicgate/gui/main_view_model.py | 25 ++++++++--- src/topicgate/gui/main_window.py | 8 +--- tests/test_event_history_gui.py | 42 ++++++++++++++++++ tests/test_gui.py | 7 +-- uv.lock | 24 ++++++++++ 11 files changed, 106 insertions(+), 22 deletions(-) create mode 100644 docs/images/observation-history-after.png create mode 100644 docs/images/observation-history-settings.png diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ee2a958..baa114a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -38,4 +38,4 @@ jobs: - name: Verify Codex plugin bundle run: .venv/bin/python -m pytest tests/test_plugin_bundle.py -q - name: Run tests - run: .venv/bin/python -m pytest -q + run: .venv/bin/python -m pytest -n 4 --dist loadfile -q diff --git a/docs/DESKTOP_UX.md b/docs/DESKTOP_UX.md index 0382b78..30aa564 100644 --- a/docs/DESKTOP_UX.md +++ b/docs/DESKTOP_UX.md @@ -18,7 +18,7 @@ are ignored. There are no local Advanced toggles. | History | Recording status/control, broker/topic/time filters, pagination, payload and truncation warnings | Adds page size, byte columns, receipt provenance and counters | Recording and message browsing remain core tasks. | | Health | Overview, actionable checks, expectation conditions and failure history | Adds Changes, failure occurrence counts and history deletion | Understand and resolve failures without diagnostic administration. | | Expectations | Name, condition, required values/encoding, enabled state, save/delete | Adds action settings, description and revision details | All condition types remain usable, including existing binary rules. Nondefault action settings are summarized and preserved on save. | -| Snapshot | Compact notice of configured bounds and essential empty-state recovery actions | Full Snapshot destination, filters, rendering bounds and diagnostics | Existing view limits stay active and visible as a summary. | +| Snapshot | Snapshot destination with configured bounds and essential recovery actions | Adds detailed diagnostics | Existing view limits stay active and visible as a summary. | | Storage and profiles | Specialist destinations hidden | Stored observations, cache administration, retention/pruning and Diagnostic profiles | Keep administration out of everyday navigation. | | Help | Broker recovery, MCP setup, support export and About | Also includes log console | Setup and support stay available in both modes. | @@ -27,8 +27,9 @@ boundary**. Switching never connects or disconnects, publishes, changes recordin expectations or retention, or deletes data. Existing configurations remain active. History recording is changed only through the explicit **Record messages** action. -The setting updates existing panes and subsequent navigation. Snapshot falls back -to Health; Health → Changes falls back to Overview. Broker/topic context, history +The setting updates existing panes and subsequent navigation. Snapshot remains +available in both modes so its configured bounds can be inspected or reset and +**Reconnect & observe** remains reachable; Health → Changes falls back to Overview. Broker/topic context, history filters/results and unsent publish text remain intact. Specialist menu actions, shortcuts and the log dock's context-menu action are unavailable in simplified mode. diff --git a/docs/images/observation-history-after.png b/docs/images/observation-history-after.png new file mode 100644 index 0000000000000000000000000000000000000000..205439c606ba29736aadc5257bb15090cbfbb5c3 GIT binary patch literal 67308 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

9c1CIY4koG+s2Tj5Ma zF;Nq1hmlhdaMU*DaT6Qc3byVu)zv##$zle=POvz6-EnpQ1VYI1a?3pHu+EUb!Jr2t zv;|U@#H+iWjv+J(gKl=K>E8nX283oBJ1{lQKdR)nvu6MyDHy332?^=XG)4#uYa#l_ zL9h9yI;x3{jLWzgb-6wC8nGwju$H z)kvq*Rr8*FC%tX`loefPM_g79au&oSC9Q3v z($msb*4KgY*3f$bW~$B*?b;E^@>0t}O3GZT?4nN2XGY4Ir%O1EwA-xDN$+ky)(0au`8N&#EMh55M$j|1ZFQzw&qV7-Sj1d`f{ z-B7L|s4JlNMO4^a^NPb~YNZk2l&QI!Cm$!M*^t~Up{l4@_~J+0K$;S>vHJ#z3=XR# zsenLTgEwxcR(3JK@5h$En%8dwO$@6;LKY~m3I!yxVp?u}qDl+?;_uHE)>e?4Z(|oN zN(K#;G%fDQp~K4ZvMcJ$&?^qv()@KJg4Nb5I(o7>fb!hN#-W&qkWf`k#dfKegOYM* z^6W%kKTgXvJUJ`N!ql|fVXL;e`MyzRd~B1t`n|#XPf7r6Q_+luia+15N9V`eqcD06 z9shf;tV8S=pqt%1;)W%nCtf6nk0bLbq5Itc?yL42=99T*U;%SJKT1hXrmpaAo9neu zY4&UHXh9%POJZYdU}*qH7}qu>ZYgQ-8x3@2y+=#?mNBBBVDAj=1~_#psjA}Mx)mO} ze~54_p}2jO{QMytE%0t))4H9#zu;(%GezdOVm6ey)K z%a0#FULpd6pD?y)o~&uP*|pajxpRXdJtopl`a*Cp*Qs> zZd#rdbF=JEYD!8<9HX9bio2O6O{M=)_4;OD*ny90#Qlo2KdQc)$jR}4jE%jBNJ!1h z3<$V|h-{nl5{!ckAG^m(_YqNJ#R490-~M)NXJiC1mpM>#nBaU>r#Q9)f$AdBl`C}K z-cw>!*rA4IWBDPZ+~C^NlCnrGjf4p9m6t(r98d1!TSjQtjY1Q|xFuRya^7y-{E9%w*v7A&Px6bE2v&`6FT4 zCmnSMeWCZ|6Q4vTuh4%+jlDgpy2Ve7#-&k;zw^M6FQ@{H;11e?;NvU_Ue0SDBP`J^{m&)fo#^un}J%N7>H)$ zTajl6zCspW`~o*j3;|1OFOFwC%h1oC4VGtMkZueB6D}C=q@|}P007)zRQnT2disv| z3Z~T`?l^ZU2slmIW4e^|ruSBcB%g6&S!GkZ50C84Z8?NxsmC(xtP_c9{>255`?UIS zn8~Z2qVZUzS#4Xy_hr|KXW|vK4RA{fF06sg!^oeEVMn8t9p7*`U$p>CktfSb&TZ6l za+0L;XwO&Q*G^x*wG9Ny^=WXI!=IPOv@XHhQ0hy1lX5pCj}0p?EG$3{L3Tm{73=;e zm}hF97Ut%|?M3HsNyyKa-!eQ;&HMxk%L>E^WEE4tko=mqLUnxp(o;)Xh5GgP^+`xd z0@?(1k(|?)i{qy%>SlfKDy{`<4R^2x^7eLK8AFCUW8}H`jTh-wE!y^hUc+vdK@c2G3mbqliH4mrEvVBzQIA`xW0syp(wo5)qzSgqK0J1 zCye4kvJ*PBk0wdOkTo-i@6-;I{*xrcI0TNpt))d!pw$XV;CLp1nA2h-I$?I!^=wV! zviUyNC0KTE^MmmO5ldXD?aDn84%gaZHA~AuRspVb7uDYekhr0&5{NLmgPnrxMU^oDnYMo*Pz(r5)tc6{ zG}nxX@~u@zKI3aoDq`1*UI(tqTcv+s6oeYr1jC0fXRTl?X`Cp{XtGa zMv!rYRq$yg?cCu}#$xBnI=3Z1Nh1uqv(zi8PJB?-pZ-nEW;(LS0*#9^+sD(#hj4nf z{_*SnE(qO=hG?nx-eJOi_&we4e|8y9G-TKCZn$&;Ez^ARquJswed1TYpD+{^kIrG+ z)X(FdTU3t!#f77b{hJ>5&z;cUZAgDdQQF-^{XsEe-_~4C&r93Tz_Hp~?Y{6Y*lwuX zK$iPq%aR(zF3G_OTsiz7Ss`xW|Kf;mib`2YKmKaQ{uQ+Azt#!;qo;akVdXVhe)glu zk)Cu?CqQ}W57-E`ieFihC<2lP|1FEpNlH2Nk8B@oC`8TOzWSbjtnv)%eEYRg#H^^{ zFBV*HjQ}~oM-DDKVnLUsV|Wv9KNO>}<&QP8SZ-4Q6x~M z`>Y0^?!g1c+TX+0xp!pZo8UVh@G??T_UQ-G_)qDMA9}*T+WqF6>WPFPqdhlhhtXla zx;cJ?578;-dskK%57eU%8fl5x%tCP~Zx%CUuHW8y_+ROO%z}1iW0J!%$G_eePgLQZ z`2SAd(?~0nEYHz$Fh-V2^WJQ>+ot|AX=DvKL$8Nk~MCFfHe0Hbx zuqHs?`kp`5$`c-qG$maROtKcX6%O5`mohy>`?+;>ly2AU1uLolhRmczb=^)`mFYMbwjQBdhi(CN5g;=^u3-x%N4~fDQ5YlAUiTwU6F2yp*zz zCq&qU0x@o>@8#~Y{%!k}#=yJYV3wHJlq?yeZKQq6e&rZG&1Bw!yrQeaEgsmMm-yn9 zGL_d?R*GJ3R5pLST~qTE9(;PR5=c+~!fECN`Q`K|+b!kA0DyGI3Q^=8dtiH};g^|e z6!z)UrOw;bfL{cL2TTHW114>kU|ca$vg1FT<_5JSisj;}z7`~7w9a{(|E6^Av%MVJ z5jkzHL5(w#_mb@VcEDhN(oXDMHkFPg!xm{w7o|IRghqsii%mJs>^KmFhx<_G<>oa^ zZ^K9gh8JgO!!V$0{-E!psHm9KBl?b)Uq&86&a8K~&na=iL4BVDJov>W+OSAC$E)1< zU>cx^@d09vXNDCq4QOzj;pF%>Sld5vp=cVvSHEScU^x&T*`dvC28nx_KJ<9_$ zgosnrXFxO}xWPBf8;|Zw)eB3gHTGtHwVw)d0}QL)VOc2Ky`+`;9-veQe|FtKp22zs zKxBz}W=LXU-j3k0!*qr7xk*rynv&AN$%cp=&YraJ6~s_}s@yr^<3}6|toDYwiSF+1 z(bjJgVVy9gIar@!pt*gv-NubTAar$S8ocqqNJh+>1e0fe`f-l%MJPGZ+PAlv*SllE zvKs@hy~<_@+nM=IWLm!SmPV<2*TT}$k}oNb*PPfl+MlF3s_}|4$F@R9ZobVAcs}UM zcj@WFB&zhuxgN7o9~|v0fbB`qjK!5JR}Sg4w%Bl2mG$Cx*HQxnqM|nt2zCt(4ZSp3#y+NybOHd+OGig+{$n7hun#vi zG@!oUYi<_}le%%k|C6tQUcd25s3erT^Jk}N@I*9X-ALMz=dt=?j3Us}`D; zyg*uD%%h;>B3`vw(rHhgJ*$^}XTR})h9;78Ab#-uYaG@LMUzXXB0j`C;D)+%4mSKb zT7IG+*-34jl!aP7s*0&=>1>I$0I+p;QQP(L<5M8r6&UX^(@0PRbXUPR&1$spY;%^K z^EkNgQ%x=&?}M<9io5f^;73YM1^v3&7%PrYj$mK+;idtwVBVr43eptm*;rV7z5V&@ z_tkv^h_OVdupyS`*vQ89X{G5W|A!|BQ*5{u53XVIqyzSJ%sAuMxLXw36DS96YTN`O zg%(qpuxRDx2EvknlYBK<*u}92IwXAN<~KKG<#!DhvwyhoY6W->WofZ7F0nV)MBmhT zITY43qfu$~zOr5VX>Qt!uKU>D_$x}!_4N}4DU5m(uD0Rd-FDSUt*LQ_z~)4=R}Kz> zqccryE@6+ct`NedG8@egXR}y`SUpqI^rb%9zi^FZE0(JF*8B$+$tc^U@qn9FFBYy` zo@yj_AO4TKBOQppx(bmdrcN+UwzHF}j(DOpB(|#|BH%9_F-uF5nw%UK5uvJ}kf=^E z+UR?Z|65yGDV?A_!{^hi$+foLQ7tsAnc2DzHep_&bYg01Wx66W&>VxPO8|=ufY!!r z+4mp}YVqZ@H6CcaGZ3?-rlN}NHCpj9>-qihGW#k>a$nfN7Xf?fQjr@wuU}U~LJtv} z`DE!GwpTCQMs)Pzd+f!i0s;FT;k6zg|2>!F-i#n=mb0wvc7e$dq~HM1boHwJ5jW`x zp@{~}`ZB@B`Fz#~EWEEUcbZ*UIXFGq0iU$H5-wo5S^cAb^~_k~fip~{9vPIAxCJ5S zi`sp50ff!O+-wTkQ`PRnA%7K>o|@_ie2HU`Kask_XMBQfKVI3bAI=yqGMYs4#y0tt zNg+4KWYpB00j1HK6{A_1gefZq9-RzTL{idxWd+1P1)b~_+21K1;ky21`iIo{#LcY# zehR7k6&xYgnM{dGWmB^i@lc}U2dG+)Q_Y*T7#>Pwd{IirbW zspO$y9TsVS3YC|Y&24nERaSPF%;FtU841P3&3%e96|+k%4H{+O?>szv^z2#tWv@6p z0JH=JRmXNYoYzm`jI+K_R7~cRv(R-Ug_%{4R`V5FBuqzU?lvW zK?{rYvCW}MiO>tSPKXJpU; z;FDtEFdp(+QrF!KDnkVcQBjwj{k0b&XrYV&0Wtz#z9?V$)U_Y=#pw@hPkQxoW~=&- zAL!3rnxGx%eR6@^2w$HCoR5M^9W*1r63R$1;@)# zTfV-9R6Pp2`i~>N8r$v}6Vm@h6#V>ZYRm95Be zeAUz`sO5q&3hXzKP5xxy|Cr<_{wFsvvDV&7yiM>MhGx-oife0dULwB6}Q9B+mfa|9}z6-NPmz%)dTS6@^UR9b@17KHHK4buCm4 z;P@erdVj|8Ttf`ZPGC4$Y0cFM?hZZEiRWse>7_Zdp`r~K-vY@Drpf@L`M_uaqIxi| zUDGV0|Ksk_#?FFNTjNWgeVFqY^|{&HdFJO|#;BJ);}foV4br3z+r!7YI@j$^J2pPt zh?!dxfc!{~PvHTsbom15pZbclf@$?5(};0#6$OTUj{3Ez$Uss z$3DCSJ)zRKbkypwio#uOvP`tYCk!(vQS3eHxqBjiUw4`vm?EaT(^i{F#)oimaC zBy2yRmg}AQKX}l8j0Xk#k3Mk>ZcaPI2`vZ6?5h1bCnuH;!O!d5@vpQ&Az^8r^&=&Y zZ;h7n_}s z^{PYqV*lJ?M1&nYKi|16-){8Y4JTNVjAT`yxW)4w7_w1ZsE-xLK(yG>x?Qcg4>o$4 z>XnQ4Ufp$1NJ=svDSxm&Xv-e}_~WF^AJcHD(bDr-Q3W?`^tio7z=mV0+-L~ObwXd}MM@l@0>d6|HU{YcPaGi* z4onW4`!H`^?T)Pj$H~5)o}codL^&8Df0ofC==IFKXfp9cNbzU8xg7`~9i4KqA@s?< zgg=}`aNbJ>HFbBt+KPL>gGZYQTol(YXXomRug2d@VKsv3sF1$CYfT%%!*9xYQ*^83 zymN6wO*ShSMvdzYO_8mwZ57IuSx5$@r`K&S8ObRG7_PHUjhOgp^?gc+`~}S-ZwPF#>xuBRM5HxGY|E2>(bNT{s~(+Rnsy^ z&tQ>2;B(Hanp24|`W%tl#SrR&H@ypP5;d{oT7|H{2&nPQGi)MhM-gd}|HG9%r~sFmm`= zmC94si{t=v5S+oPqx96ZW+*8M1nL5pjz#4(G$3^Tm=zd=o`M#Wm1}yvGRK@nz@xo< z`SR`>fbcLz2|GFZ1-Gr8d-SngzYgJERY9Uuv^`+kK*Iwbjw3-bJ<`#qL1AG-U71;L zofUZg9TpuCKK>)W|4q%#Rt{0|KXo<=rShr(3BbD{m+bUt62s@;Cd@rFg-m%Y@&uW9 zP{F(3?3E9TKO6_ye^)f>gyYNV7vkd&v9VA6N$064>-fH5$17$;8|cG;ykZkf9)I^(Fd3FP>bKt6KxwW;> z8J)%$Sohc+Y3#;A2%Q@o!;a z)HBU+hk#J4ps3g@a^Gv3IrZqU)tlAuQ{C66Sni+V;@AW{Fc)@A3M+m7Gn6^(=aYeR zG89=>iQ7{?3C1MrnV*(8l` zPeb1cfRd2Vdu&g`{Yz**#CvC-b7nHqY2A*EKD^cE;@}{_#~J zhPW)qw7OafQ>VR_&ep>G?4MGk1U|>WprEl538f_uZ5;1OBn?eSyPw$Z@Ip2ivuX`8+E>Bd`Xb2CLWo(C#<(_$|%;no+6vEkN6zkcK_1g-k!_h;>CmLlahsKrUTZE zaIQ-iRLFmNhhegHH)+d{NAtxlPx6)JzO zAj-cN{ahCQqjO-mltoCHjt}?{6?u7WsAk_g|A~&)R@rIsHm1{xU74X7Lf2I9&CV|1 zL1vuFM4S3xa+pVdFtm{MYw_MV*440_#^70>) z!iBO&U)XQS-P!A4P!3mND#+kqN!t}ATNlWQP;sFu$k$coNmh7|B%e5J`sTIem>@-Q zp_)&H<^2~jw{bp)O^ghA-iHNU66AF{Iyw(0lO7^=I=mz!3(?782ptz^$7bB0@^}D- zfBV8~7#NY8$P*^A7dseuItB0gk~d!0*9)#eGJ8F_fR<^G?49w7rWU#6e2gN~vq9)K z+Lu1RzThS|Fga8qApDtu747F;gq{ zNDf0*fxe+NjD=HcWzb@AlukKu-*GFk8z%q8c=Tu6U_JD^n`jtat4N4v*u+-*~~qWf3eSmDb9XOjIiICY&o9omj_HB9(p|8F)y$;@MMA&D6svD zO8opa zF^J=w!Wbgf^Z|P2FCuc*InD>sKp}A3ZYlT9S%}|Xe_T-V`_GGrvar_*dy7^aJU2V* zjzz?%*ZdvK0A0##`+U=B>sUidUW?|fzBjKsE*KSATG!yBQ@DNM^+VY?a%w)n&ddGr z=ub_%zh3O@?A%)}!NS0FTf1WYOjf1lV4((@1=-X{ z-hy!$7|Z%PI0hH_Tg335F{pnWpqEcY6k6Ok*s&;ct!wP={!vWmO>qxJap}xA>dxodKjTYSa!t^qF zeWYA`?e?95tTCn<-VBz~&PC_70#7nm_B^RI&SQ+AAUS>kkFrcdZGgBjsR-t$sq%ir9JPak zkTLn$Ge}db(xu__G6oNK#j^phZz;1`vJ!2U*x%m=cDcl}XUr~M@Rp>$O(KkpU=hHh zuW$UqK9Zp}WQBNCn$a_tB%DiJ=Q(&V@)D!AwsB;1R2(mT^Q%v1*iD_zRh4zgh~bfu z_wMERc=keL4$J)yfTae3C0DUrS=ZdS9v)n{$*(t6s!(LEaaMsJ1$Uj%t){j?g7@HH zCru{)L;XB9n)&WU)BK(JzGy{ZX|Z@}s}eI?>Vij>(?nSDsVndHR~1tcSj6lpQR5&; zdHHe*`%2hvOO)R>Wes+J3yhAIk==fo70qL6W){h6c3jhbfJs9{;$|(Z>=fKe64i5C z(9IPgCBRqyVZ1@ZIF15BL9 z-3)vvc3S2H>8VNQePJU!r2Wu3DNl4>PELuj3{pOrk+7lE)5> zyGB>HEWx#WbRW(M2}k?8yQfFVWJTs9HrxHF4Nh5_A}(Yl`a6vsk*ua?`&`!MBM-qU zj>qX)BHf8q$%wTfmEE}OJQ;G&tB5Ea-D9ow2*y9W3hMh0nKZ>H>hoX$>LSy?%7 zM4nw+%Xof2zir^5f(w7`Gy`tMW2gQ|i)T_F{h1WBVxRwx#s`_mAKt#Lh1r|kDt-b& zHLJ_eQtq-ZD=Ul12l$y&QQMQNBV^qB!&9V2Nrf!x^o)UX_)_^&E-tmOBwxW=)Y7iG zcB6ICWr>X)v7E1((R-#UD~pY1uRm6}N&XJaC@k3d0y=rFg#kz{<{xOG;I1YoBwV|_ zV`xK<9TW%{9LR0sWQ*1hZ5GVNY9-Cgk)q-@NLPaBKo*lhW?KpnpZ6z8om$o1w?uUJ zNP_-&c|r1O75-V_Ce9!5+L(-jGsVZp#|SgoEZ$t(hKCY3n;plml7K`kK41*191@9q*%>_nnRid0 zYCAa8&$U%e(a{51+2htax45V*FRv$sAg^D^l2qUCV1qq)+>xw;@rZ?75Hf$(4UXX& z`{J@GJddOPkf&%a!vB$Aql>t^%FP>>uGQE7M`2QE!BFnAM-d(W+;`J6XEy;0+RS;%c})kb7dyGcfrLW-bH>xYLk&PkM0DP~nVRSzKi2 zT~&}fztggTa_}OlYpjs+*&WXKFPy!cN2_XTAec};uEr#=)6}xE5`XbL+3JRbz=!07 zde3xeds!kg3wEFR;DMO&Gbeve0bzfsV_Adc-*oi#3yfxtL+RAGr^+_^jhL*gtrJDs z+dDrqiO&%#IowU(e2B+sTD&j#nd^XZ>Ft5-MYIcFANHp#liUvxud~=_>FR=9%)W`Z zzT&N!QL^PhTcC0Rw`E5$Z3?llrqt+TGQR}L!Owth(BE&ewRLrrt04bzFH`j9Ha34T zi&Y=JrH#$?YuCoBP|1a6V|p*Awhs>Q_*W+@7EYQ;lrm2PA|eQJhHK>cnO7o6nYrg}a`R%ETM&$VTxK$BT__vto=v$no_0tVn`4&U_{i%Jr zjeb-66Gi@f>!CNvl1<7H&c)jBLWhV`%keONDd4nSUfeJ|@(KaYFsQX35tG%K6;N6f zkIOf;u1S23UIg(bjIv|)QTKUl3`m1-*1oFDZyQQiDFWHm-pb&j7pxi1ch_Z|oQ}bB zqR9_Kt-|>Ik4sO`wRLqV-3`0H)_{l_>L{2io*ljP{J~8a-V=*B zq1WIfgY|4FfqDGb-LF)?G?6a$i2E+3{pz1Dys-3XLdpHgy`r zgR)cSFR2)!8L9=7jtdzeZ0L+&dAW$eAmmD>nP(s=cfyj#q}m%VzrIORj;-hrGM4RX z_I2_D_T`P0->@z`QApYT)K@4O+1^gn({oPvx5cPBF)u4p&2TRLf>;SnOG~>+K~LY= zkrA-(wg9qw0%pVSy@^`BHzJGeyWBK1RtnA6b`bS;bsEYlXM3*lF_T>)>%)$a*M~ei zzD5q!?tJ^1;h+aoMR~a&DOaI=m!{mA>GLY&K)v8ZkY~cI9vfQ`8t?L`_*_AL6>sCG zV3!T4J9u~t^$GP>zF;EKTVR3*@9KWWg43>i+5mrSx7%Ho{prN)?5+8Je?PzdO~cUw ziI?PpFJ7R9i0|z%R9(lw?3o&@NG;Re0%}A&EZ&1iQ=7qEI<3mbOiXeI`35KZn{8Dn zB+_RIdyJ5t%{F09^x1ADg71)bPkwDwd?}V`=c{|q5%zRm7p~q^>twFJZpj5*ef@zH znfM{CnEoU)kKSI{_!}3ZV6+9U0uX<@Hj+0~_kuLWB{%VhdT}v3Xk9_^Yj}|M{Qj!( z2mu10*=T(DOF-~qIg-c2mx#~xu)F3O4f;Dd*=a%KN#_66-j&Bgxwn0t(~&4CEhkIU zRMKL3iZF;sCWNwQn^YwGF58e@S#l&<1|>B1C1f2WvP80s?AZ-NvKup=YdGgT=bY!f zpZEQ|pXZPFkJo=Q=Dz2i-+lkC>-)Wy?=?$qG^Jb)*b~JmZ{H9jRIDo>);y66%?)l* zdCY=G0m`u)bU*khg}ORVxG!9>k1Cu>zpbxY*3Z6(KEr29`-zLeEA9GdQ93X}N=SXS zs;lMqP~1kj;}qnPCIQqNEUX@yB}gk1O{%=F0N<&vKb=3`#3?zEUAl3A*-x=U(JjG0 zK|UfrKG$d%_@uU~sCKci5h)^C2FOr3{L zSdXP?RG%nE6tsKQ@m>QYo?`^@;6f}%$n{fN8TyeC5&32v9K2{WHO%E|yEb0e;4K?v zD!bKrrWa*5VtTDfp@3w~$&3u%GTe@ z{Jtw+0}ym^l&_znU9Rhnj-5rJjO&_l`BLkbq`$^(kc+Yjw3E;}AwlVk!eIMO9v#fB zJ0i5k@ci7cG$fZ{(O>}GMEm4@2?+_{Kn?;NA{JdG1ubPRi1D$pBjOG#AHtJx;*P>4 z#nH!4x4Hx^?Q6jOViNyBT)qd;9LhLECF^T)<$m?3yp5(ftv9y$tgj2h{@W`nhemu}`RR?jS~)arsY*xl`sU>3-pqBs zDOaxL8by`AlS~VuO^1#P7>yxEfw^?5G-p~9A$@t4SEW@DWUtB-#>yui0_WC|JY6b z!nyeV5X;Am0kEj5Qt>b?nG2&_xd4uNy=50>Ahp5LoQ~M{fdRiTAKl$)Q;ZLdykqv# zj}7376?xbIZm{Qd|M>&Xql(~1^T+rd68b?LCtz)nghnG=OVo+?;>lQ8qbrZcSlIV? zHF1i@yDSyQm#+aO^jwg#eDr&LmmdU-7ll>lRk+J&klpb!UD&5Q;r|`-x--G8gqaGMtozFms2UWRcijY%FEANTxLl|hxJO1dot00gtDYG7cH zY&f&)5Fo1-#vMwB@ZVcT7`*tt^z;DVMDHnucKXUd(yxQ8(ss{|Fgzi!5O8i?^lr(H zfGzdi56noq=95gooH?Nig1 z1zw0t+?w;S)FFrtR?AtqgM4Q>uYo{AWl~1NWffOfc^If&?z)syPykhUlRJb4 z4$1oZvkt70oncz>+_!~>`ubw*#fy9v-nD{>29!#a{TTQm^CHbZP+)mv&7Vkb=SH=f zesAPMAOAO|cn&es4*)KwW`2UoInKH7r+`*Vd8}dHvgu`MkBTP}lAxJ3vKvhp1y^G# z@h=Vx(kmTVADb%{Yh$e`JKnUd6nrUn3u{$*))Unl%EOxqm#K~SVBE#!PF-{Ct7d(u z3h8D|u@CZS`SJAZr~*r3RZpEZ(ej%osJgE{&QB?{I%P%TIpv>N+rjEBrQ{O`KT|}x1zhRyR z@%-=nPL9cT@^f;_A%02M6S}8rK;g-c4Ny7z$!kEnBw|(PQBnC%DG_24ma)0D@rSMfdk$>fJAx>(Z7*uPyf60cTP%pk2bX#DiRGvM0WYs6-S=6rD-eQEpY!6cuWVxiDgIYyC>uedOtiDKNiHCQag~7*LpZ=DNr>Fbs5U&j`CheGeQ)Yb-0e> zia<*U@O>N@<^8K34?f0RaD?{IEu{X6Oh@VwB1Q66B?->6{qr6pp=Y&eSCy4_GfyA& zy$ZFEolWXRmbh-m^FrqfE({N|OG=hI^nfavQGgaH*@ooPIO3w?C16CVP>vr8XqjxM*2Q7gdW79Bli9(kZazxhc%0dlzW}d$W;XlS*-N2tzWlho zyk=wj-e^qKesv*3)(A@F@m;VRe|*$i#%wr8H5#a(Q7MYTf#NnV-BKAIFOjw>V~6<* zbT62VH0~)qz9BV$E#jxTuGIu(OHGINB1|CJamnOQp5ECm4UNTOAr?ZTN-tt*s{wsc zp2;vPWPzkvC4t&F)g%TRnkIPZ@e_KU=aLrFrUL$5zyBLAlf`A5 zOBOjHMFH_sL-*4Qq>l7%zo4L?%l;KzFO$!_bqfP`6WJr@3N^h949~%AjDH_(1fnEn zyZ*YUXxU9Yl?4g4e6<0}Ow*sf0gPvT^OsGd~#s>Gv>X$vJ z@9EKdaosd3T{8{*h=I^=r?Z*bV7ArH0!8?5_XQzf zjrTMA;WwA^`inCg*HnlCIQF68T~YMekO1M)&4Zq;%5H?S)EPJo}2Cmw&|T|IyXBEHrwMfq_vkZpOb@!QXz1&e0JuRM+Up0gVcJs@n^F zQ^l$Rvb>{H^#7dYW?^}J217p*@cE!hZvN-o?~ahi<|yr;knLnutgxd>^gI3Fu0e2V zcTJ|@=v4b__noD>g{rQ_2|?5(r)4XB)yB^e`nW{hol)vBwf*C$MQHz=#MVL=QtehtVPm?k7u7)g-1l(c|oJU zd&wAflY;1LvCXQ0N&-{DW;^$Pm%~1=fdjM8z!3Iy<(2u(FU9YjXX(yh*c8)PUsWMf zE?y`iGWKSCYp?XGLzbSlyd4tmifHXX) zxTmUVM{jw&5-y-GoM3C0L$3%hHuqSoMvVD#^>1CDFWZ~~k)z$7mdeBBaac4jd*H*8 zMep^J!x+iUp9KkyJp0H{Rv?;cPgPiNidt)T1#dY9CM1OQspIafb*JE3-aBt(qNh538g;3Mm(J(tn;^JJ3_-+|)I9`0z%cMbhQXY5*Gq zmU>|=`H2w+W`H|=Y;AENCub)I!OMyK<9JiFw!VIb0j-1B*j+d^NFJ7eMo025&@;1FFzox% z9JwuZ!;dBR8R^8cWCU5F;K>l)M-N^1I}0NNk$=gcRvgXC$l% z=S}oYC%%Drqh;gD%Jw~~f@FfPuP=c0poX#In@{dPw0lIh5wlYf;_h7t{N5@?@Olq*+qf@GPri6xnOloK^|lQgI))_oQ6>#eYJa>7y< z71((z3O(E)r>tdSGUgu=>qPF(G#?yK-7DLaK==l!6)5tbAH#C(`~K1@6SS@Hx**@W z6S*!Nv#=1nn^W|_{{1?Izn*j1X#H*OY|HZs6LLvqqDnbs0aCzfb)hmP1u$Awr`&AR zud53pQ^)+78Y83n1g%g$`d^G0H{7) zPPv&D@TgakrEaruWB2^q|r5%O4<4vwbZ+x#ye8|DehT>1*>QJ955-rkfYn z>yF-0${f4p+?bHQpQ|czawd$HWfiM%w|TZ6sb~^0-JV7_k+gR+feN{{+MI92VS5oa zYXAr1n=*P7i09)i`gJBpZrw4MH*y}2kLz9cmUvJ9Xoyt(}p=WFz=)2u~f@E>$j-`s*uQf_vh5mEMj)u5T;!&*}d?ZM>6AD*UUDDFu1fTP~=k+|_ z8Q(v~zlRQ&TQ_^HIp>=9Rrm6jk`RQ4eFX~v0Rb;8#3us*0VM_j0jUb}7`)SsQuqt} z@ytR<$r=Izq3!jE2w^_%4-N^tbIz(_TX@hv>9f$(NQq6TDU=Og$B7J$ z2~_zJPLze}qAEvMn$>gJ`M1~I6tt(!9@I_R=AzXWN{I+js>tM$+DJ?1UEEln+1uHz z_r{LAi+z=Ro*zBY8@s_iaDKr#U>%oTyV#IdKnhL-yhi!4geS3&G}s379Rql5O+gPw=z!~0^-y7Yf8#MB!3f=%Uo6@ z2FneJSK06ry>M695T8gjPemlu=STAL^18db*S|j183M2Ip{-kK`!7%EiSr^`nkxlX zbHLYF*xJh5Qf>3%Z@RB_Gsp=(f*9QHT3B6O<0y1hF*X_wZ(VBe`t&JEh`4)T;O=-p zEC})4o0o7QIr6ZO6R$$kee827aAaU125pX*Smfm7R;|DK`1sf(Aq^UhWc3N+xt?sK zQ-vq}z>U=qQ`DGU0ZiaX7ESMAG;$Hpx3Ffli zFOOHhU=9BqtpD4%N9Gn6<1zMLO_l5CA@DWIzjzG+@iCmJW2se8p-{PSn_QV3UBTY} zZXmU>(e3(|Fh4(k9_+Juk8#fK;bVDU zq~{*+IFd4Sc6>p}0hR2@^b}hd7x+=G@ zii=xTYYGdGkDr-bc)2Snonl22Hgj1Icd%iq5^hdLvLL}~_3Pt^v8?=R9uB@Y!%l{- ztm2lVY(YyDy^F9g6R%!>SykC|llj5cq=AA$bVbEGIq1``@9bVE_vgG_R8fwOh(LlW zb?uOV?%+`lEhmTholRBq_`GF`ti!Lk>1pNd6WQ!E zlRaz%Z1#5-%k@y&8XkIlJ5p;#Ra9o^TJWuR|P`)HNI{r19--T0vK zCfNzz-uis9!Z7fJV)>Ll`UR}$OKN30oy|A22gvbEcjtRE)vHQ0Mf*)Rc6yzIl9CDR z{76uya8I5L@bGTb)YM7B->Q-&eTh&ws2I?o?7xPH>>LtwLg9mlRNC%3kJChX|Q zUrw4=OIA4BBA(1*rOzA>yCwl?6oL6eI_;^hDs*Pe!+N>Q&Qdy93A*LIl*IIZh1d{w#vQbNXb-M5!q8G56&k!I1rDedqCT7qxRTx zqWEr!e)#?`w>Qwak98g!qPANh3xBDc?MiQv)+VCf+YcoYbmzcvrsX(|H;+Prvi!N& zc)0Sz?W(UVVVBC(bZ^lxIX*5T-rS6<{s|E-7x z%#oxq*ImPy{b=XK@jB^(#PIld5}Ub4Wae6Jd6PukJI%u|-P6<4^8+rwuU}alKHjah zeRe!fw zwC^v1>y8pD{uX>MqrDl%>6J{vEHm1s^D#UWH&QF-X@dhrXammOmA51(WQ$NM>ncpRP_|qV7*6%NLU;Z4(-&_XhttZ&e03il zYutRHRQ7V^eHlu-o{_Y+IF@D)CWFl4Dn6<#{ZU6lab{b(D!iGlZe~FfWoB09H@6$T z@1CGMIsN$YLo}M^>({Sn`7EDy7fUo-her+~qoYxwEZ2Ld-f9cbGg*=`RAyz7QkhhN zSMdQkg72|{9b?aaFD(4qH*Xe?sZ~`I@Hl(L#6|OSb7QY`F@if#VN8AmVfAEbfbCT* z&N7_deO}f2n6s{~F4>Kh>U>MqUvT7LF2Arak<&FUDk>^^A{!fFL)eT)!AnI>?)3V? zx;BzNy21YLHlB%rUf=Ee$|2|FW;$(Cg7w+1OGo^ycTd%5&1a3Z9`&b5Yo_S zl1vW9!NDmj!=-0>!EP(E(SM2OZnD0)iGRELo&xfn!_UPpUwqNf(4e@lZ?C+OiF}wS zD5%I?hod4RrIUj%PbcUP^w!@DSVW=5(zZt|AFe2Q4U&T8G5zd6Gnj7m}x?@W~`n`MiGtLx3}&1G!NNpD{y zw!D(RmNiGlk2ppi<=2=D!`~sVtjfwelY4#7NpLI6DpXHSTej$V9z%LrSy>U|QjB`yl5Nqyg@sMh)!&d(DNabh)_glN z2Xp!;`zsDxLs3!x0PW^jPeee8w(nPy%O_x)=1afGYqTI(n!Tt=NFej}_C|o*CBdbB z{kp%;)kyz92**+VX!g5i^R80rF*?<*p-F?oVGAyYQ)ga7aV-mPS6Z6Z3hrF42ICyp zrO>s1i|-t#j$dj;L2r$q{Wgqb^mzl{k?>RNoq*GC(Yd(={jV26<%9OC%ui2WS$wm& zJ!bsaLtIJ8@$U9!prgGfAQddwRb&p1`S^+ASgh^wLP|%kj*&uS=ba{*r#Y@ycKs4w zMe5(yx3`bTcMemyA+ch81Y|EW_6AdVkM@WUi4H#A&)DG++>=Q$$aPDTQ9dn6K|$YZ zsn74WcGuR>W8z{gYE}KiP>!R-wK6Gbsi?GS-yG@ zqy_FZ0_w;wuS8cmf{)Mf%1vj^VpFaAldr_DQ_a-sIlKDM{P}cNC6AB3eEE_iSUc-} z`*CB3ZF_Ku2p&FdXr|KMrcu-NpBiQU|NL3@qQ;HY-2dXElnRu3Kz%?x>W9WHh#V*$7pL#(BVtn}^%m+gMCt zG>YRJ$tXA`9`s`T0FJSLd`EwX7~ROa$o%WpCgfm6IYMaU&rhK;m+_x$Iv%((US< znvqiTYGw{#E3KjBOV!Elc1ZiP+HC%8M<0o%xmmAX=#PksY6N^@H8*F$z3F{CNBr&0 z&dzqV>5RI%`r#t?k63zr!<~qD=*w;;4azvrwb3v(#~dQCRWKH*)zg$zG94J#T8^xr z?u>^(-*kMf4UN#zKTwpFMa3-L;1=*H4|IONsB`|^Og0;8XuNgJio+Md_2Ni(p>f?R zesFYj_M5T3jm?+BM6aM`Gf;X__T=T{{1^26Gz10pH@@!q24k0(+p}Ap#5CP)+U?Es zY@nCJP}8NxOB7y_(uwRuESb zhqD=gXB<8bMX(yYNNs)b)jn`I>#Ms}t{wercS@v|BDS^+a){Pl)6>&;W>eQ2>4Ka@ zH+nw(uU6k#EPp;6eguX?p4I1UZ>Ct|oYzKdS4y%tW^zPZVC4Ez-^{i7(<9guwc4E0 zl5%@uE}pq6u(v=%hYIQF=#b|hlno+0qR)f_Gowl~G1pgEQE{>o-1ln8eSCf`BT_|i zi(YV?oKim3Ci~sHcZy%rt;C;QntZ=@6b#0}KqV*$J-u|b=!JNDwIGg( zh898@4(ZW75x@|-5O`HW!G*lYwFMRs?lieWGfjJO4HmN z-TqeWhu2ARwP_#N>E~~Vl!6{ZytiIy$cs3xU|_kh<1(gvavOlyJ(eXNU%z!e-&(4O z*7&0>L%*5$vN}u1*&KCjT60l3ozZlfm{k4nIQ_!&rJS%x9SfPszW2hw&em2J?Hn9n zu*=KK3NF=0EeDorbr_vo+#)tMU~VKcp`SwhR5$!Viwj{;7ZJgxP^1bUPcJ&=0r8&l zjdOoA1%*B1b&UiGTf#F`$o;wcj-`q%V>4XjQqfWzK+DOWFtQA$O-;ituWWJw){DQC zU3hSL_Xf@Wq>})x3jB{{MN=z2!cZY%qkXAQm@H5j&ujl;y_zKu5GlG^m0bXlrrZRN zEzPwmmVD-`l)+#IG}VArK0cwYj+K2+isgtl>wiAB6bUH5LF}q~y|VIlB1-Aq51?jz z8V2Jdo$m4h$6FcDO&=-p54JBLAgC3xB@#{6Tq&Ba6|6)=lB#oxp+OOq(w2~bl*0id z9rzLlhqC$$-5tHu12u+-Z2kXFiTJ;fYw%6~BWgs-*LE#E&_X}Fe-(uWZ=1&x4&il$LDl+SCzoRsc4<)+6W$#QW{qNR zAB_)~2PxQH#7#{LZA`+s;;l9Zk&hezh|ZL|D=V`)94BEV#3|uRui#i#QSNAOcZNHx z*e6SYkK9J)?L}ee49SqJ^8TTfJS?FvL)M?$slL_ z@uQT>^?}YsPjs<^fd39I(T1XzE|`)*JoBIXOuFe1MQ8C8=XEnbOeGN($G~H)}4Y z@r!n@sLvBsnM^4wDPiK^tZ+IAsi`IMS-*722Z%Kw&>IsIv9Q22EX*tn+M7qy$S5u_ z-`TQMs^J=Z_H5Vxg+HIItu6QwqPQN<(KpzhZnzgJ%p5`Q3nG2e98Je=olB@*yU=|gagc2p5Jp+u?_xuy24r}x_0 zTDIh!k>MDZg;j_Yc|&5twI$wj|F93l6%>&M-n9~2UCjxa(=TJoOYILDFP^^);7bb& z3wwkB$;-pTPdK#F;SQKnSD_O7hSf%)!$mZ$hVswC9H+;RIRgU&$$FqA<8O(X&f5dg zlO^x8zAI>ml8MXnqCkq!gj1_j$$$7joSh-n!{-F^p@wjKXUEsc?KKXusT)R=mqS?B zqT%zN#1JqKDf0j~ubOGb?L;P+H!0~Ec5NIwqzeS~_IIUzg_b}V92+BnA!MK~1XW}| zT9X}D62AnK$&5;AQNqYbTwGjn(!|u%RAWIJ5Ub){ldVgA@BZE4_7rmsYjpGtK_#V8 z%c7^%Wo0rz1QCdgi#oeJjeqideQRqAuxDDeI%ZZ@dDbe;R-er51xi|4GMMGw*mCV3 zU!sZvUQ;oB^m$y)!wUxo_siuu_;J37^k{yu;_xV0PbAk49XL6O-Z3y_OFW}{^QNS{ za&N9)!OjlB)NwtcELYZv?u~v-D!*5y+e&a?w>wzMr^tiE2e97mE;b;~+b=Xre`?dyFE7Bsa}k@{Y^I#ApBiu1 z07)XP7+oS6dAMiPX002Il$3N?AMFJ@J;RnTgVAid?=M-B*NoJKXUTAOl0r4iI(~w` zxz`qgjQ85pUa1t7YBP8HCT-t|v9aO8&Y=6zgM(uYXR@iN%pC!jrt2!?#gb{V4K{~f zOg#f>dB!h6K{IYYxy{VXme(j#>3R2Oh5LH1>9^MVEVXa2#?WhzqcZpBxCqT{_6zQ| zwlu0)n0;~5iX`OIW;A` z{}~Ew^5?4M4PoJc7&cz|K3nP7o53nI8arP`w5)Zn&gob|3vg}5r{xN6(EK=9tHHGc zl%(yBsi|D)!eBhE{pqo`N07VvKK-E%IVuxHl2+FIgvgHPhU!V7LtF#-Ig>D+KTmON zIcYdKZ(A(PX=$P<=V0X&&6>q`k*#|Vp7M&Ug)v~p&{O5}`2?7DJ(X~%4 zA<=ABNTey=%-p=Ak=A6rkeQmgkjdN#ygKXKTeP-Qhs&C{e8VFnbpf_3ZPhdo;(_M) zrtf`66`t+r2px3_rtA}EwQt9ickZCyI1&e2!+4>Hr; z)052Er&8`@`o5WO`c*<=A{{-wwwAWxLO!X4eDmGA=@?vT{To@XotQ{bLKOdqGBRVj z&b~LMfpAk6*47*rKcxWSh4Hkov-|qh|Lt3bq0!L@75Xt*#$)-025{34B>kwjJIF06 z;&j-w;Qr2aSKRX>C|*=V|WW08~!E6dB6 zu=EDwXaEf=0Ij=lt)^z7Yo+4CaMbD}In{i6LxT&MKGPFYGB7eZl$oYhkIA58W8%QC zXC`|b92{)+`@5WzL^k8t)$Z=(o@wdn<<=c%t%6^trr2;V3I=!_t!deRgZr04*t~fY2%q$!} z6kf)s2-q><;q;SpLHIC0fC4+6!z z)b5)4T7ckBvG&Z3DPf+)ey1ZFuBfQ6Gg+`(-Fyo)>GY1T&|*d>w`Vv7Fkl5Hvbk|u zozwtGlG-XrDuE%%L7bQ@Ky5MIQo#}C#)}UIv0;F@`1RT~$LaYm2d*aRKAet*3k@aZ zqwFV=ru#mVDrG0}^WU5+b3#VH)ak{T8zwqXd~a@kKjuM>*>f1+H+i)=l#b`t9L)wi zsQ2YS`o!7Z>QWUry~8vB&J8GsJT3gm$V4A-dbmJARj&zIq&@g%l=4QW#`e1dDC+Mi zhgBDfe*F0C|LA;wZpC8ygn=p8Z*nYCRP>_fe3wNdD`R%*=L##BTe*(3q>!cYCo2H7 zLKKRMI@Z4e2VhrFEnL|%dN_m-`TYOnkL6v%Zmoxep7Q-_D9Ac1%!B;xuE{&FD&w5m zIAhoj87)XqpydsaX6NNyuFr8%U!Cmgnq*9!LCX35cH4sJ&1P$Wu)_2W_jGD?w&5z9 z-+YDU5=RaP=HXP{P5YygMaV_QxsZ|(?fB~^C(YH_$lUvF;FVJIrK487m`|LMrDa3c zsg5=8>%Bt>6cs*2nduXeQJrvE*{heytqcZ*$SZ_3KxJTth={Zdqu!l8s~P2)Xi>2Hz`oml$EB&p>RARXP|-zj;h5ZZaaU z-nhS6x?(z0B`zv%Hd9sjxbNnu#|#H2Q8=8G9QW6H(ihTUf|pzwhGe+S=^#bv4v@qKHhr?hVVEl*UF*hv|*1tgL7nb!NL0 zi|#}=758aUxBdBVSLSmP^R+AbG|_B($C!_?;xn)&056+dcQ?~L#H_&nWm z9UZ?jOS-+Ncyhe4rlXGx6&f2`t9zUUMgRt(R9`Y zr>A}vDF+KSg5yMuAY!VNP-4B=T(GRCXPw<1PgHMzKS9%v=C)BPGBQC$s)!tMO|^Pk z*VApZR?dKI-&U^U<8pDHaxS6QKTp7fh+E#POa542jzz#J#Rktv`^Yeba%> zWqEWbcsob!mHMwNz&xMr&h)9US&J*xLF!0`{iRUV6?-i`G(yp58LaKoSQ!s`KUHN)s$BY(nBwhElbM)4&hC z!afq9XGrZGSoPye1M~-QyveC)5q2G8N_-ftRv&S|1SFH!3zfbx;(sJOB~Lalb(@=} z<x+$a$*1+^Yg4r|STJi^DrsD=HSu{(Lx@c~l%WJCjBngw)xA)tIwOhm)96mqva7()|U2 zflf$t#@^X!VP}a5lK@Jq>2?JE;bUCf6S1(>%AFcJw)!PXOc1%vQOv3EGq*WSk zYX-C%RC+{QR%{fyovVYWot>SYIl;9J^iBKiwvA&JYzdQH!=se{L<;o&SV=Y?uchL3e@3}FJ2O>V?r%s z6hH%(%n85@gnIn_E6z-3bPNFd_6O4!$!nB=SXLNkvzSbl;EjI{OkUgCa=bh--}mC^ z?d^3Da3CX@BMvS`(5N&x9NwF;hZ2h;E-4K)=m7}8a3pJHicS5Sm9UD6iig3&KAEz0 zUpE^lcYoK-1JYOC?P`r2y?yFq(htM>$x|YM*>btf-?0289am}aUzIVEj_a@8JH_hn zl*T`3BcKAbjtu36oWtLz6@XaWa%dCzlc60{fvt?}t4rIUy!7ASLkj*rb0QLPe7BmT zYM)NSBtth{ZJZyGi1+aCj%IFA=XH?^=DXH6>isapbdNpXF6tN=GP&}| zBl=x^v}S88gI+H*ChCn~$%Ts}a3lGsox;~|>$CUwb#@o#y5?_N{QlAyM&s03I(D@^ z38y-aFLmU)zPvdjq`o>sGm~l6rGK3oM5J^$kkTGr|FvlS!}b5Sz>C4VZvkw%xoBv` zt1nj$ZJsbPiktsV#eDKWVPpaCn_QlUt57lQnT^c+zOs*502pv10avl21CP@Mn5^VG zzvl@e)A+~0>gdFTuTQ_7{drDdp=qQ1D@sDG0}uv~!{I;9`?oq->o0dmT?l||TQK+p zBG&rN?iBr#ep9Ux>PJ`m_rTy&-n$jj4WN(f=yKq4OalS9s;t`q@f@IJ`nL?IlL(3c zQN66hF*0uhu6+LNnI`8NsNPfV90C5Er;FS^S_6U$ zsJ~MknzAzFR9pI{eI?Z&%nC`R+ zaS7l*3~(ivT5r%C(Ol3;NDb;hdi7fktXVJv$rq2cjfjlRmtE%1@{9{%o!Tx#a zk8F#8+d^@_Ktlr~{Bm-d4Z#K$QG@pzQd@Ner|s+R@&2Xe@4Qglt7~h}PoIL}6%57% zItm{av|(&v)`u+gIDph9vbKhL0@wrb>yqH+uWVRpS5D?md-OcNR zP+nGbaW=CyTDywXh0%hqtHXYBbXHoijYnrKucX9cI#NcML8Wm!m+`5~e4#Nil5+Yh z2(j27+%7KWVk7vnAObc(;Fa)O^qMC2ORuBl5L2aLdSijYKzV;Nyk}6Clc&Gq<8SxF zP!nmOLh%QZw28@XZy$9Mm%F-x!p8osaIrexb8ixqc47y|;2OI8+FD^3tjb z{Z_XALBtXwKEh+u>>4%)KgaFv)(e$P0(ex8j=_peZoEoLQ{iNi*8*2}HJU_9g-;fY z_Gd4Ef2?B)G%}Sclfs-FAqip3#Wxm1X(Yp;ia!e*VV<&yEirCA^O6P%Pk{+GY53CrWLKOx> zVI0nc{Djhfi)rJ2pM8s`>TKhMh_zw~pMBufDg6iWEp_${)i3$)BUxNseXfVg?HeOa ziZvFYHY2^ru-+{I$R;}l<>cgi?2IhyPx&n0M4g5Sj9wnPEEiYgH z)Fd^<*xxr}G9yNYvb;Eo1ecFXyDhE3>f+kKz~l6S0s-&0|4XU@Tg0$9y`Tfd zp%w6c=Q}xo#}8MVwkHH6Ia5>W;EwQ_0EdugTHIkGqM}{FL4aCI(=PibQnHAF5T3&W z=lWzsu|b(3e0!@+NOZox;QsOM7Se<>h?mvjW3sn*d&9+Z6dH9Kt5}m43B9akRIWE8J`zn`vC5;q|mN7bCs3ot=nK&F12p zl!^*~5oyj&iYwYPypW4$yN9iYCZ1;xz-;Ln)mg2c46VLZhmvT zsgu^UIk*K|ss)+c0HJ!jZuO1HJnUkCDsy*vx&vIl9@Yoq5f@3<SqJnclaPn)Fn8!z*_L~ z3o{+>y9%~kE@@)QeXNDt=4g98GpD$&61 zso9zZ5M#FF@pyqc7SbE(Iz4CSdf?K5jH-g1oLa3F0}V}*u26+064cWAy3^uf>g~-H zGSm`KLUB;FwT#kobGz165rZW`8i9sb_2l?ims}vQV?|d_kMZ5R5PQHPlFg-MWm`v| z*imSi`C(dPU@@7|P*8OB^k|?p>J>CK**sc@xo`;thO`?p-LbU1e7Y4s5?{UD9y7Lt zoLuCryn&a=2b4CjVPe@Z8tf|F?wXMBr@)*^5bY5Ma;SlrR?I5_7A%wO<&RMgw&nnUXirh2L0x!t@%$9azm zAdz~R&Qw=;2S)c#>Oxdn5)2ITjmqfDOD9m!>)oaZZtd>fP6(;A&CSWwq@-Tmh@b6{ zlXdTVbo9oZLq?i!t`J?$rdI7omIt^FFgT_W*&Y(lV>0X2`Hw2z9dGoxM)&o_((kA- zK18T1O1eDGrvYuqLwG>#5n>k_?DyXQrjF;o!SDYDKmS|a`fnsFQf^{(@1VdRyPfUE zqKF2pJlLA=1eeyw(>$d=*<1$%rLd-2@vzm1V_QawVLbWqK|W#iaGXJyknoH~y&*zs zc-CxBR2@4K^I73}89pxAvC!LrpX-5A^8JySm0u!0uOrk)W@WA!XI;#m=yu*Nk8kJX zJ*U<|rg+eMHZD)Oa_Rx>pxFl@!PHsQcG26Tp8Zze;MXKc;}UDRAMqfL74sX2nwy<# zg8g%2!LLj?ci?0}Bj6et7~sDucT~D)+ORqJ0RXQ3_(@z}VvFuCpM}+?{;((#5zj^Aunu@EYZX!+M0) zpZW5{u5x#G7nHUf)_|AXYq?VL5U&ql-mp1*)Hu@!rnz>zJvRLAY$xafvdVy*oci{7 zc5A|rgL}^-Jo^h4(-}x>b_C6P6FKvZ3eWg}!?Wf!tLqU7$DhMMY}DU=hQ4?1 z9f6lKlVhW!gX=*5!$C(sc-uBom;9->iVp(CG&3s;9%Np+r`Ko9qXUESxsg!Pf0Plq zi0=HIrEW{WR7#gpR%Uen&co&`=&|>yTz^1#l)`v36Ecf~u-dlPVB>WU3`I}0I}^pn zqnT=RUHCKyQ>*A;W(4065Kv!g{dT?=$ZWsQu9RKyR#)h;DHFvqI+Xu~021FHIqSlL zYIwi%P)5XIdXK&WA{atiTCO*5{LBqGoO%@xy%$bOD0+#=jTH@PiF#Lh^g1Us@N{$q zctq=|2JNKA8B~|QVF&bCtS@ku&L8ul(vhgao!LZ$X~w}bZw&? zmFcdFGM*~STURK_j89Y1yd0mHfImMonkZ5O>P(Z$A>QF70J!fPXT@*%_;z*a$E}jj z2FKsC@e-GHhY;3AcL=C4y->_9o7SaI))hzGN_e9IuhT9ZuM&mMwB=2U)B5?@qvb6b z{JZ7ckfec%o3PUl;+Hiir?HL*BQya3*pC^Hn@yjjgBX$oa0|DzfV{Yv|KwQS<(z|8 zBO`gfM~zeDEUzr?g6#Ec0pj53b3Y(M2I7@2syy@NIr?$^ z#IJ7L*788)JUTiW8p^E-(35GQmjHCnuJEM3dHtHz!V1Z8bu>2zgusL=_%nIrCzlP_ z+<=~$Lh)V4L#_UtO1X5kf6TO-OWE}(6J&9Ekyi(yZ5euh^_Kb2Hf z*-iDau2fX6?FktMEBd;&c}6BkfpgYBVct8Mo4m2k8406!?UWSbFlAoB)oK*U9KB>1 zT<|JG-_J%KQ>M+u@xx->(4_5jn=#DZNl5>*y|GUhhPb920Z#;IT&6K{Y$&SUx2Z(L z48T1sO)U>m)#SB)&1rti!(kHOrTP1So*(D9llwB|XGzqYfL+THN&=SR{>yc>1~pUV zpC538H&*C*WM!>^_6G?G$)+*`EFqB59gNyAvY@1-^yVSpO$5B-)%oU7u55ODU}IxQ z2*^$Tqp1AhVzi=SqIiKy@r|UUE9cTIi$Tumq+QXAO(NF@?N?3mPu zQRW&Pd&b82)7t+G8Uzs&5OD8XdgA-QV?`yo6*n{_;QN8h#aB#vWqBrDZ|bjAE9%Jz zq7o7WOo#gY2{`oA(F9z7Bm*#qCC>6i(Y@|HT#yvk)s^mu6%48+@(72tv9+Dj5pa4j zJTmh9`Ev!gCLRrqsfdUHkN;aur)kBPsVr6E zEVJ1g2j;B8sM>ViB-Q8VcS%2Go?T41i2g?$opOgSFSx=nB+Ej_US@ane zI_u{&F^p%=8ZM_z^K8QaOtQ3Sv@50Cql}1XAXXgS_~1=g)~YgUi@)LA3zhRafioO! zPq;YBX}0xhu}WmTc}2*)}Ex}<(mv9SUF>dR{)s+VpiXXkVO+ZwQ{0=batn?JWY3lAqWFQBG&p}O% zni3-{b;)-%2uRNJ4Q}E%`nU}1UqQCLwD-#iIeVAuWoayCbWbF?@Yw(CPM=~=R7t!- zu?P(3>hO5=eQfroy+b(0mmii4Ah-7}!dzxyKpzj%LDoC}i>Tir5V;x&u2!mG}2c1YH(V-?D|i zGVq3!bubOP=d`C28m_mFKf5EBR>;Hxg8YFVkJ$G7dV`D7lQUk-E}%~l^^2r)cXyAW zaYzzDP+bhY25v005XH`i@%ErKhR=3RLK~l#jGB?MZ8)fCub}2y^cx8&8s3wm9LM$@ zzt=;V&}Xz(bduiO+7fn`QwH`i=vv(9PgD|UvAQ6aetx<9$Z{1r{wZ8ZGA65U)qBIK z1@o!i?rzY?uxh~!7T48jd4E@bni~i-wmj9>aqXKk!NOR{F$Qv$dokA zerylk+Smx)%% z>mty+V_kz4HqCHqA7dbUb^4$fk%3vUa#_h`I%9WbNB5oCZb(Oc2U8cSy)XZv}8 z95B|ZD$kG*Ot6s~8ST$k(zCMu81Mfs@UhyVi|+6Un34aG+_@P12Ni|?2$Cf!DJhZ7 z9^`wFS&hHWG;tNJ?5}Ur4=b>vtgjH$MDMWJYywT>>Wo2Oh#z$E7L-twu@>d#Ztd;@ z9pC9>ljeTuT(@D*C(+Xmxq%u&Y2Rm7DuJn1Kj3zlv`mr|YF48~d%VSMcJJgj9XLRC{J~$gNlI zEiKf#S@-`X;1nyFn%FxG7NnN2va&K;l{p(|gh>3hGNj!BN&1$9?E{s`IUQg#RK1(jPb0K$P&R|T+jsDX&n^5I}yn)Dd9pZFy6}fbA z@dPlG)sgtIe0PIUa~b6dhQWTM>4I+Y(8rJ&5%&Pr@8l$;(nv=QUZ?Q!w9_lJn3I<1 zuO1=_YHB#~*BhWPVy#o>OEcaO>d@+}KcTTl=uv(_ujkU}a#0OrIy(#OcP?$6rd;L+ zy3;)w`jXpxN?4E9SKm?ID^oMM3o9!(*8&Xo*o7~Ev2-Zo3B>oFmE|a^n=JbSb>Jj3 z>VGOkp*!Zh7v@Cci)`fol?4!W%g4G|hl%ggUA^(>;mOZx>6#Uxr8tQEArTy9!C;^T z*CCleMe{m|UO&nz-6dk?+V=R9r0&+@PAc079?lS3HGQdfS?=N{3nvE4cQxm2Lu zWmsBKSvgU7ML=?qC1S@+^)1j`0rFY-hD&Uim40jR&dJHi2OQBJ&)$Y)QZcw1`vY9x zk*wlcN4~Zq8a3q(WAwszyYkS{PYkFE#BIk=ik^!2F9D@D5(A~v6R2qS+SvPikH3zZ zouT6&BsPeDd#HePKWTPZ8J&Sh$&-c4^*)tWA4e|dvoH8CjhVK>!u~Sb(0U+v{b5>8 z?jb7m{&{MGct2Qrz~qdNirZa$ga2ET(mDmk=zTwYZTnwlD3+XcxwuIhk}F>HTSj`fKw_uVC+JjZ%G{GfMtO|3UB(8~-Gdo%8#OKb=qKcN?uI=j337vV&YymD!xYeARyaUoPe|?hzXfwIGZjAx?^6_Ua}Gpc(5dY2*Bv>G)2BY)lc{^ zLF;BIDT_)VD1ITq7*?YA3!wT|isk-4;ytCgfGrsQ=`kJ30zV`sJdwohb83m!Bcbzt zknGlV^mz04|sgs=;z)9rQhb;FR2w@sGtB{hX;G0x-4W2?o}29TT`8N*Rsd^|0VVqb=rLsKP@U}R683<2(dnawCSotb%S%M3 zHQ@CH4m>I1Q*+n8*IbswGc5$+$EG|OxRGN-p7^tKs;&Z;mqBOMm1v(o_u|9wjDHG{ zH5q(1MgNfQnP*B+h_q6F`|H6x8Ljt!I{NgXMm@f;W4K>~5W4<<<%hDSH2#W#Iz<0% zQVj1d6g@r2hCUy;@8bfmhU}jr|DT={^BwH>IWhv{s7uFXansd#2q0|_@m}|jJginY zWXda$)Mh%kHJr-Ur`0CvtHR4+eOQK(xj6-HH+Aa*A_5xp+O0*G;>Adybd1$Fo=XPK z|4=(&%VR~lKR2|MErUaw3XoBXk2;K&VPyFwhVThiM~9FCkBZ6n-yq5YqEE|#nGP;>A1gQT{kItzm5SIXL z?IoJ?Kn#|(#V?fn-B<=pt%q9n>}mz}!#TC} zr`-?oCwmFQ;#JU>z6`p_mjww4&yO6~b;lNt)>cB3ot*xh@W}oqKJ%G^2 zP}0iE-PILYuMy$k0)p?<_LWdFcnM($DR&M*OPp)(h4ytvp?Z0gQ?<;W4oY1WFn*z- zB|*#xiu-^0FPIXv)YS1!A5#;*r8nC(PnB~CgATnp$@gQi(b0Gq7$9(j%b{l?EsYF9D?5&k7hVaf#zsaN+Wmi6I*b>oL7&T9 zF6_e}lQy}|Y??FaV@Ua|EB3$4(*dIa9vvcI1k3c6AwMT41?RMCGVs1;~2!-Mndv;mCr)YH(%mpS`OkDhGIdBWbR=w8hwAVbl>CUXZdVyvE zOd^i0)7P$QArS?>x!9G9PxBAbtsj+(ixdE1DrsoYPVJ8w z@0%4tac5-CaagTx7H4Z8WM;b^_sRH-+~XIudOORF0qn`9>bgr?S6A1c6$2n~N~_jj zvAekh9uH7;TM?AU#Y%d%8Oke&fX8lk%?H*hJUo1|JEwLt#1+UAM^meyIA6X~605Vd zTHwE>)V%ZX0uj}Es|zh~vx3`Xb={W{W&79PS?mo&&R-Mm*0pwXPM|O9Fxk)V8ypci zx4bpV`OUROVYv93TO7(Ac?Jenf|nqOZ2nddK{_${yX?6%5Jf)E%utM>kJd0t*G z_OQ^ypWtx=po#1B_lc(LBtTs^-QTPNyrl)wBeuOF=MdX<~ex$p<@%=%d$m^hsk*E zvo%hAhzo^^|A)J`j>;;3zlI$X3{XOcmKF&|x>1nskPeZS?gm8=0cq)OY3T+5rMtVk zyW_oXoSE-@XXgDq>s{-8)_T@+|KTuj$2sRd=X3V8_rCTu27TZjtk8h*|Jts`L$cBy zfI{&v9d=v)+F`eu27Y>YG#1U9G89AM%^l}w_jwO0g`Jw3nxOIQj{bh|_@A8er~GRG zOVZ;oOzhXMUVWQaDlTT`atI9z50*XNGX#$?Sj?5)y@H?|&8LffTt^KHzRPln-NJXj zXLN)ClCfCo(c6sAenLXh(28nEGE*(=5kd^6A-=WF-rk@uIslf;bMwAC!*T9F#m5_( zOJuMr>_G9%$UwWQuB&^1GL{v5yrU;7x(Zgw!{Ae8Nbk zy9st1Uayc0#a)#MM&~D*DDKmXEIZ%cz3=VKM#W{GnVK5OQehkF*6KxERI%6TKg-KO z>(hQU&;3dpQ!qAAQl>+98k+OY-`ntPO(vf4qqs{$fYQ!6@zft(aAlUud}DpRy;^4? zKh6ir_KQQe&QT{~4*B-O7V7%CM7^{hi=t-=l^6u8?0+r%DF68TSjKYJ6P5eRxoY}a zi!NW3g)+WqF}dEYNn1%w?7E|smP#RA#ii|>muJ4r$bgkSUrRt2v(2*Je(cbeI=8Bv zys9slETgRaT1$)KWTwAJe7wn1h+9CgG4JH$@-1Qg$x_T&%yotH?cmx;B;#kfTEA5) z?C$D#on}%|gUqh0u1;vV8}jnyx`GlU;UMD(3q>m^hTh_5!eN%km%V2s3{4hGB_mT) zXu`M5C%ZW993MAPCi>9mWVs$UbacF}1qiKok7JV9GDJ|D$fm+_8TH*SkOqU*jFqL4 zh(exP!SB@*wKX*>oSOGI7P^qt)UuP3dUNjRc}>Mnb#+M*6W2yCWsO4Ta9;b#>WU$+ zFAXPZds#r5$1_(}0(kf@Uvctpauac5flzUqaBi3!p3{PD`xc_#CcUF&u2 z0)0fD)Q9WQ8yX6>yk+NJDsP1B=oM2NTB&(|@VY$U3Ln z1G=X?6&l)@6#L~}vsR|jt5~&zdOadiIC9Zw`JEv<04-`Q<1dnBGF z?&YcJO~e1vvS8v`L@Of$!@W!s%~e_jr-8!R6b}1D)vcc3=3dq+o?+o7F@L&rSHB}W zqYznUS3gkHAZ3B-&TWWr!8$xUPT;rK)Ew#PPB2|wa&?40!rOQ5>=S&1Y^Dcn)RCRFF$^eO38%`4J1V%Z1Ww47$+Pow@&ZBAYe~SN@XwztGvM%FQ9Xu$HYY&ro9i652KrAm46^2_h>!!nhe_ zM10UgV`)i#-|IZQ3SwuLmgJxi6&DbIWF$21LgVqnrQY-uajzQgA{+a5|DdWs^mJ(9 zW<8RC=natnq@<*HLp*(G>V5Fa5RrtQp6_{TwC!vQSh>tP78!>NjTEK`9+p25{z4s+ zZt3J+c+Z=!xwX~M$SAl{TC@F)fhDx=Xna~1)k7+q^_Wnke z(OQi2W)K(wvQ;bMiHPyFb;?R@ZH`-Ze_gG7RhgY}0?Bc;`)eNFUOFr+^*;!<&vw?$ z1k4b3fX!)gp*vHPoJ-S!(#fLxW)_-9$4`tbon~;r*4UNw4*ccdtT0@Bk{rmE?_I9l zRvhhLZD!_ldQ>nY=Fb49F(mt0?@OwD4(ecAFV}!5kNbt-Ihlidb$_-F2)it_VXoXP zcke-kOGKQYC-eCI^D5iv@UOa&Pc@GA)d|Oqn^;=R^7RW&Pu6oPDozVC)#v8s;?o^=cbUYf_^UP0;H+6a+H?jZF&Wu9 zl@d0y;gF0%db97v%>~1ZlMI=JjLdOjk%9}!6L%4A{%|@oomp?YjZ1y<9=7xE@`)mF8iR{>P(AZ(2LUL`qcEgq9&IhY zNt+C08AHWqkCiy1vuN;ZXgD>@HbEj(bEwQ+MqB<$P-rM=b<>zV@&0@PAOw)l(c)Uodizh3ZChL8x7lx#@{}i8OZcjk%)z9O75shCfJ4^Cv7>aH1go z($SyL*I%^tG86F*#yCbi36=N-+olpTmmXDLlAh)wz%+TY^f?OAFz^gDpw@}Dqo;V= zbi;xHUfS1%`^GRh=+x$8?fu$PyDT>iRq@E(^WC?5UsBq%E{HGOV%lG-fC_Vt6c@@)~8s9ae#zGZA` zPGN8|_vQG8UnG1=S=YSneSdx5n%N?cK~lkF1oEo2bL9pza~XI#1_QfkP`8y+e{Fg<~k9` z$jQhUIjV@WuiY=;@CgrB6cWny@bKWyU2>{AF`HQEWY)T%R4;AFN)LoZ0;#855}3qu83%gPns*-sCWoQxuscP(tfUl4$tQ-H#VRu8&S+bGJtC;W)$e1&qnMIP zmn609Bklb)ju$hRAG6ldEbd?xN#di3^ra?(hdM-glpQxT14J}*ZXnYaZnLSI5D<*_ z^o%R22#e_HErONFa21zKJbG_Kz3`!!!^zX?F5t4%QK;~J$p=M$lMoVG8ZeEv+H0AZ z=&0)FuyQar`RJC!;9fh3Q)%qFEuh49qgv{z#fQ-(;Sh3>$nRhA3T*_Ry?j}a@%d_$ zc(jO#rZ+RL`3qVZXo`R6l0%EQ!Y(^Zq0I?bT_L~+BG5=V(>1yC$-j&P242+Ccya{GZ2%hDc zB;vT8Z1Ovwf*x;BIALgDFye|#u(Ys*#0Ct&S+TxO-L3^U;k|p3u6~D=+m9(9XRDS4 z2L{^j8}$W{#(4ZFcQ|YsR1-HoTCclN+6W1?cz?&9EB&slW62iJPG8YM$Jk2@s1>?>F9*b55_3+RR-j$U_n zcJisIdX{fdB(no27u1~tG|F!6^T*W6ntFPN_3IC&rhUdL&2{$0?OzbT;3p`xr8HMN zXa`h;IDq;;JZB+oZDlwm`zt9M+dLF+&!0C#ZF6!m2j%@pY0x01x6sH%hxj!qdH?Qo zxhLbc+eF0iNQ6KOb6POh8CPHKM8WCH*7$9K9^0_#bK~K)Yp!=07z(^`s!k`}@#56S z&#kAeVJUz8^uZBzY^QD@nIqV0bKu76?|-kk)3oDZIv{bDuzb@@HtY2*oATILEml@m zh!}%x7vJq|atCHkx@|^C@^Fphh+x+^l1UxCdN26;5e^ns=OQBr*eon1@zuR{sl9!D z5X92ZXs-9_?cld}M@L8LRSK4yQ@jck$gFTXPnJr}tSd3ujQ^@q+%%ezadh@DQvqa!yq7{N(BB;~6WJiYI)jR8dSUD>IYYjr(4?R>vajol56GMFe80 z>3C^J@mp}wKCW-)bfweg6o?Vv+_`eSoU)XjsP-PX=W~ac?ooo{`aJyUbFy8LiG#J(EoPHft+17pE0V9RT3pT|H;n_pDK7Gxup z;kcFP8z>fIdvZ?lq9_^11N zk;g$Y`4!r1)v9D|G#(gV+$otPH^}?loNmRV;&*lRU^BL;=2sLKe}ASHBbFll=yPIX zw@V$gv@_`U8Om2__oij{Weq7!=2P6n!%$FGMPKspOn*Cb^zcZ*RUn2t1-NpNhY{q3 zq9O!wJWPp@QKi#SZf|(S!lDKpW{V5-nvXQ<+f;@NKM1a_Ome>Inn~?Wwr63bJw1I; zWKGq{OduXkgv~GV?`T`s9YR&9RIs5zY#&;rQAjSSwE8!aU^Kz)4#gcE3rjRX3hTC= z9Q|W^9t3E?crPVA+;l#89vseUIP`g~ac=dw&Op+ssia95R=JxL%_#Qz8c7O|rsmG{ zNj+h8#5LpXE&Lmq@?jzS17l-O!+pP*n{U&+LBK1CELkoxXwJAmpdX3WK`-Fl+>Us1 zWCe@VOrFm7BMV+)c;4Ha-$rNPzi^bLOvw0I@Xu`3eus)*$RdAN8U7nf{SFkr62goA z4JZnq2g}2s-WJ_2ij!3H9Xe!2Af#7sQ#WILZ!$AjHi=!}zZ;F}Tv)nqMh=;6O0nOf zL3Alf0b_HM6Z`i!Z}COtcq)o==@7VA0$WTJuPE-R`>EzzkDTCSzWFN%aE21-bRDo_ z?)J^RLAUZcGOd)0Q-z*B&8HH-H%u?V@1{H8A_f%GX>+C8h>!L*{ow^r_2w6V*L)lPl$<^)=gZpB zBd;VZP56r>0AhX>ynO(JpQ`6%wUZBMCE#srB23?u?CzE?7v;GtMuhFqEjT=bPiQio z9wUaWtGn(Pbb+1U26S2!=#>sBhA$}$`eI7WOhg0tZqVjZzs|dThGY; z+_nE<|362+oY^=$fr^mReoti3<4dKFC_|LG9Mt}Mdnm3;L@tv8yuUsPHJiBD}D5K#} zcgpq3J^z{_D1RZ0*~;AVULoW?n5{62b`3#N2;(Ug?hGXJIkG3n&4AOv<|S=CH%a#p6MRuz;6heG2SgqV>Y{>VRo45<)9g2G% zlfyXDynmq;ic8Y#h1+EiBP<@u?4izPuo>_+E$t2B)*r(jHqn4>$~^Z`_ioO;=BB1A zS3;iRMMaKVBO@d08yI}%3N}fD(4ne>E&bp?x^7b&vn`e!nS=z?!$ay=iAOF)gM%zC z5@){%r>CoVSO$+YOU(=Q{E0? zvShk4($d?ThdUi{wX35vhy%Pp;)cmW;C#}l25|I21howg4i1xgjXP^8YYj?CNeP5* zg_&|hNeH}nfkCKQxnADn*_7U&1=7}7MMQySqt5H6V01Fu>+g;@D>JSAuuepjfQIg~ zK3-)EYwyu1t18Z2$C=~CQL)6~rG(fcgaXEGJh_koAkA^=g~nS5jfh9mGMu8TXYa1+Kly?Kxh)7x%a!-NkXiI@(y3mtYAy7a(qi%i!D=7 z@D>$?o%te@MjXguzelC+49&mFSr<&{>HmNDmr3A%Fa90Wte%qx+WyI7Is|Y3JpfmD zU|Vpq8$dR6ekFbYx%4%YtjC8blQ%DT?qS)7HH4;TDmf$F-dOK%mp@Ckd>g4koK|ro zvTgrojWx-Db|JE~JtevdS{CQD=grH?<%bz$Wwd(YKxozMA z$X+de9qUZSL%N2BQKr*%hvxI=Mpcdx?Z$JPHbAzsFyGccmWO)&&K-7q-;}tx=SURU zy8GuLQ0G8qPLvQkMIWbaSG{0LJ3DZ1Lp>B`r3G*HRuoiK>GoCzaqbqMoRp}MvdO%Z zgIC<+9xx~by~2&#pDs9Dk#c_IXn%P>@hg~=*{L7XGMuK+z%eLp`1Y)7LoY7lD;V7i z3K+J!@6!YnglHYA4+lS~JZb6+o}BrPrj)O>T)45J_Cg6R5^^irl{W4rf?~_se_JE2rOYcz4XX>pmDx0T&;mzAz~n0d8DaXz0|D%tu5U#&5LvCyY3s zi=RW}K9CPI$|sIP`Ke~5g1iZxX6EJ*5diBb5cGNN^k$+JSUu(7_8}>0Y9cTo@+5oD zhm08Mu33afd)uE{i&Oyn6EaFl+=8Rcf2GZXe$wV=zv?D9 zlPL_Ln3=r>KQ%u;L0WoxnZqGOJEWON{z0K%I39BUKcjFfCv;(5fejCIWU<<)nERYs ztjzgLFQM7_%JDuaS+tp^x5=wqVBN_LtRX5>PY;XP^@nk z{WdNKYY5cpl9D&pxNIht=FScusCh)6-!m~aEpa&X)cxX1F6xghw4@qr45?JYA@HRh z1qBBeCRK%s;a@Q%iJSqlLU`>V$VM9#_OGX>6vWz0H|xu}PE!iOM{oYXR{H`sA{c2y zO7c5@64Kjyv2-h4XT^_-*V5g6fBeBm+x*Z@+5!qCu~B;e9F0bS361+FqVG9XK)|OR zlT0TOArXbzBA9uRy%Q@;u~mH~Hm&l& zAt_hdW}8Z_QsyUWFHe$~c~oD^wVpnM0O6M|3As1-Ui|Rvzo^k?$hxINk$w0E2p(>u zaI&YT^9yT~?|TFZxwHFaceksG^gjG)BJ+o#Zcl%L)lWS6>#H}AaDG`#G%6PzvC#|9 z%?8A;hhtlFqC{t1kG%@ml_#?`Hx`t- z&Y!$#ZDPzjL9X|JWeuzdvvULo7ZFc>bO(ZsviU8whaM%?5F)CFW^KQ))`xUI`A4W! z#Q%ZR{|7jW!LD-WSy=9%IIyeJ_qyN%HW-1P-S166p=app>yi<;fa8*K^%bV;_cXqi z1cgyl-bQq^k7-9L8aZ;TAFZy$^=U)7!AfwK7v-(lNb!CHY*Eg0H7)WB)U8RcVi=wU z%(0#9o`xF+OEEbdNBBhGj*oGcDK9wTx6v+qy;!dq9H9`P!Co~X;iD>zodfl0Qh= z;gC8s+fO$)<4@>b#qs~sTipk={od8*JYx@>w z*tDq5K>J2`P+%Y>c4BgJ-MdClUoJA6vibRnbzcju0TiVv0(q5Fp^jpWc^ZJ()m#Jw zYAor^OB7*<`r?^*>|3G~aD%32%R=MJD4>%u$NtYkNu|Y~PB^JvWGF!)@oIuLIU#WS zn1+y09dZk6cmYGBlZm|^K-or>e|&P)>g0PPKzhRkE2spXsFwT1)Q*-ZOmqHftUnI} zYph-FPcldXsqSrpuctqM7Z+Cu37Uz#x&A{h`v+l0satPpx)AGspA027pKs+dBa!V; zRZ?pHibp0QHE`IK)a)WEUrrL6mZsQ8)__V%i3Rb}GBPXE)51CfqA^eNGBQN^S_Ik* zU%rI*B43%9o{k7Viimt`U^R9-Tj9NXhmK9_%{#+H<)2`RfCc1CL!kkO)&Af&B{L)5 z?vFm4GxJ4nx#Jp|gv_)#55FtXhtHS~(Vm@dar>*@FQ24?FrM@bc0k8)y7fRoQSof^*zKS=p=f<%@bo+;ABoT%rQX$jy~JVBnlpv~8=FiQn5};6M2aOXi{Bev6Zl{I{HQ03;xwPG6IHjD?W-6VD5gsZ#2=|Db2?Sz7WgY| zotcn8OrE~8ldk8i9J)Ns;W*T@O+n#O2WkReNy*+~0(tOT6LgS>xiyVlA|=d{1!%?o z1-CbcW2Kr?3d(*1`B1CbMOj6~Xtcc2Xf-@BkwpEthSv*-DXjkP)04R;N|i3{^ImP# z-hAlZ&WA#!?#GW<6a?Eult=EV(*sM@I7wnnL#WxJ>zgkeqG>pXLr7wi2jno|tg$ik zffe@W(_lcfKHnj3?#zK}{6a<;8Q~uri&2Pr@?Z*vD8b+-7uKf zNT)3l5)Ox)rfKXdOWX_zG1k11tgME#v_uE(*Q^VMGAy6bPIP#?dHCjjQ;^_fLF*>j0Yh| z*hyJ5gVJw=;6PvEaJ_tXOV*bUU3K(DLg&q`L0pu2r_co5nBO_>^q`jOC>W;(tl(#G zc>u)t1r2`7jayKR)B5qEh3eRJKmeLti2s)PZ%=LcH{!(!Dn1<9sh3f|-)v3G=2BWQ z*3yFuitpAfuR^ z_8wc#AICI39jrm=e|UmO8N!%&=T?WyoJJg9opW*vm`a-J>81MnPqyOpuZ>on59*v* z?G=JiDO)+mVaOsos?2F+v~1sF+L6_pCeh#p2|yL>q$n#ED5Zz+I7E2#%h8Uffku&+fnVsSdyXw7b?%Vjq%cK^<| ziw}Tv2ON`b!s%(}l^$-b+R!N}@#yoMZ80+2y59-6W#@dC*WtjWjiNjg85R1$j2wq32x|<@a(XFMy8D>_cFw z`SNm!v7H+_o}+H_{xAxGCwLY-?{<}08$)C)Tv?zu5sy1N@96q|`h+t(i^*v|zdm+a zwc@^?K!l3amb1cjR}x|%=9$!}VpHaC*shGgp0u9Kk)FMC;R8M6rdwB)^Ld9~Ye|VO z@NR_qmW|O;(o0*m2)L(4n)G7ymu|>U)3JA_%l&B_Dr>iJOBK)rks z2rx12%SZ+E==Tm4{C+5LK>@L~wYAuZgX03h{E3N)O+!|V-~XXrum__1{V)R-lFeoV z(iAJqNKa1=tA_vMR#MJdFsUiQH0*(*S>h28FJ`#`taRrq6j-(QJff6jWsNj-N%R@V zkho61zK^Q+@nR!lA7}V!C34_Y+X&{41I{`nB}GX-)E8?tE-7htiZ(zj<=j8G(AoI~ z@NU(+@#NxU8LD|k-E*(16@i6;6n;v%>q#kUn8VKRogb}=KJFpl&rkzr^Dol@XFKSoz?OeMxcfS2l z5p`b@qzGEW(vSq=?s4a*gx~+BkytY4z`aa_KZTG7i_L0nsBm|Ec&*|O6AzT_X1Qnx zv(91l4ItxiSuH;Hpy011kcmbQ1&jJ&3iV+KdM9LN;#FFU8z{3kH?q*2h3=C+Jz z8X*(L5mu9nkucw}c2Yd}yg2cYJQm`FD>o|mHKw6z$}!zkRqbXdfEzWG#W(iWg+vj{?_V;UDUG^I`)$g zFfRaodwybmU_wq_eaeW#=pY9-b0~O?Mz4d532v$g%NMN7LJ=3;7f%@qln>9*(8LO! z2{$h>ETg=5A*71VEn%-*^6&VKQqj>0nDLmYXEh4t{ zn34+BPEJwHy`IOPgBb`!Cvde@IL_U{=RRMUZp6Z3x*F9UEqeBCyB5AAjXEbkKfg!! zmzuL>q4~E6hM|PWfln?kZulvld$#hS+lIW#6oD>Jkp>G(wqn82Z1ZFAA1zTZT->z9 z0(PGYJ|diyNhiIXlq`F4MDVmKDOoInG0FaM7Ct5Mblp~L&;uv7>=g2|4P9=eDD{xN zdS2oLMio+0E*amKFt0Kopmeh;;>k(yYl9L0g2E3;nj?CMj@ z@5t6jw@&#iTvS)a_S22?7C)ueR}d6v0vo#~RF@~kx}#toFdDDSJ9W>DdLoSRYuc~_ zZ9RChZ(uYze?Y-P!z!uLz(gUO@oJZAQb_X)Q>b*%bML<(9fIBw!Iak3Gf5|RcjqxV znJ@T{fZJvIv_;l-8!neiJ0hO88;BnO%cH*gtL5i^VWv_M7qvlNt| zfcg>fyr0f2#1DTlFa3+#2T^;A46cxa610h=2T!+&04eEsN%BTGw!XgJW0Hqp(I|th@N^am#0#UZdPT3aV zzmyxi$jRHGvZEjMY)WgZM;N%Sf@U}3j<_K|s~;3Ip4c`BH`t+9K=^g;)t)+rF~d(pLL3 zOqsO!r=@{kN^GFJzMhF;m+5)TUsWiVq#DZai8NYy+uAm**zB&HwGjI^5DXJVgha_M zT80E~53B#wjF7Q?|K`nd5dqWBI4j@vCx}Kk?ztxFAaY zpDNeuLjqO{`2)$`nl4sa+VHzlii)g|JEp|u-WZs|;SfrVMa_ET7c+htfI5;w&g;Wu zQJmww#o?tEIpBq{u{{mXpb7uIOE3h{0o~u<(^G6oDg7n^Vh()UQ(z>tktN0geiVg5 zP!t<{JbUt~*ZNO?Qb%Y+#PM`i6qIksZZBSd2=n?iN?SC8IXFnK9U5SJgE#Cg#G5xA=DDNt zf(_lJKrB*(*^XpR-oXG=MJA&W3_McGWmPb5g>?&}u8pfyovF?CmD`$Mi;+%9Ai~A{ zaCp=PerDBT-KX8vgwuAVG2L?jMgfDw~ z2_q4LjR^cZF0VcA*2H#$1eC~##$ESmPoT^qwcax zziPms^JUMUb|;}}2ud0^9La|p1zfBDsy}&I85tlRiJiJzIwDe9#^ffQ&5!8P(5wcMMZs{ zkm{kAPPw-}uC@_xJkGhRoOP1)du@Yi<#@c4nc;V~koU`#G0gJc=; z3!td@2tx=s5KxD~i~+OEi%UOYD9!#U$b26X6&br%zR=B|9apJp;s4KC>{gB?3;|DA zFE4S~`;Tub>Gxg^*$gCqlG3bio|w&YSx8+S9S>c1*2lT%HR)=t20*sn+0h*-WmPYN zOcyBJ&zAcGyj}VM$$;Dj|C;f+ufcqWe^f+oEQg?-qCoTF9t-5(Q+L!-fzNl|ym5}9 z_|x4~UB9{Ii4x7!k{rloAEd2Qb1T37TVG2oG1>+eJ~D%*?Fye;PLhA zM{eS`h9kQEZhi8k5fbB+lT?5yr|i{AU><{rS7{G&Ew`@TUU&n4I@#x(N^MfyNHOgo z$96*A5*-sd2X$~%Aaq7_eAD+cz$nkko{z6tBxF^~MXbB!v!#pnX8*wd790AS@>KP} zgucH4qoGD9<+|Eq#DjXx|L1Zf>i!;_S)f{j;w(mW|D3^jxNsFZh+xoTjGx~?UB=H+ zW$%0eY8rLO9xAl-+9(es4g~G$p83opxhdBmxai5;xKq&&XNLIx1y}lrki|&=d^BT@ zY-rHM4r+SUkp!nIgyDMM_8ww;WWm5fy8MumGS$0D03CKPwtlhl$(1{IkU33>s`ZMu zyK7QJZn*nggXXEx2bKG}1_(ILNHf-~Uz+@B8x>GHXEeRmki`>z{^Y9j*W4eWMuG6p z`h}c#!Xah8X6So6;Vjd3eAk;BOHxxQ9xr`6y@9GcI>L26MJe6gmt7$Iw+@3B4-AKJ zrIeMY7@K%DEDAb0)?p+B%F1|1s7;eUL(RKJ#R}~x&1VlDgg`--Z!CqB>Tu>Ta)UtZ zL^l_bX289M#{CFfPp8LdXlPIm%(tbStUI%5F`#jSVPa(XJpal9Q54mM3i4J;n({Qm zrNcNiwdMx$4n4FpV7`B@wovqJ(BskVh^QjyRY518Dl>cmC_rzk=d{YTDCx@;UcnLz z{qnNF9$vUjWh)Ez_x0h^4QcEy86WMf@*p)f+vDcH)>0kQu(v;ko(Z4_wHPi=p3WHu z5j256R2R3=!0y(cUi~NFR%~4|{v72+q@aX~y|{H2$KyT^Zha2oGpHJN7P}=TcW@`| z_XQYHur-4m_C%Dh5i9CME2SCG(x(&ES8mR7@wngi_%vc{knx5o&|&kiX${xta4Tt) z<-(HlOwNAWGZKumO=5^w!t#{0X8#A6WqS4(Thd#!4vPYoOpbxOh)*yCsF@&X$x3ho zv!H}^hhN@GOQ-y99rDB73w)Pc7v;M>#{rti zwg1yiSO3==t!SvsehM;_HXvkxanfp3KKDP?E024ud!{}g7H3MYqj0l+l(j~%T<;?A^?QH;0r8*fd zE-v}`!cMp5tlLcti->e>PjaTUv}T*cUhtBTkoaIN>z$5uY!Wz;=u%KoMKaj8O%PhN zZ=xHGmn4krT%4}V*B-C{uLI~9Eb%*7bl^uKVS@=qZ7}truT6bxMh^;dVJnbBX;ezt z)u%{4tbPTE0vOS46_^p`Ts~YM7O9snd36SmrhJ-Q z%m;5?kEdvRa}$OKxJ52{{~>hT<=*?Sjx)*L)z|jCm|BV-!nMw(nzLbn5~-hTY@A0T zgro89U2~|9SlfD;tE($m@NaH^jwDcElQFOWhL0dd92Jk1iriK=VP?i0EMeoN3{>RD z&jIkc`u&TAA9?>`R+)g5rhoUyNV#q&G_Xd|W~r$Z8Hsi+b_d|yr%`ONFli``UYlof z9^AqNnu)e8uJ-BVq&L^}S{8SUx-RUtTBD^I9bXJrE&swVp%F zU6GNhT9K6~Pz~wBkM0wa%}uN*&@pAG$@#TI*J@CKWlamYc$meSgJtl@Z$`Mx+;E-s$^?h>hPV_Tao%=HE)AI4L0RUHDD0Yv(k zNf1u6x6va0ylvod2ir3E>17`G`Zq>$*ayqI|EtHIbQ=06e*SwkoqwnV29`Lp-$U{c$L1eqeeQ<8pj$Ji=kGG&!0HAM zJ$h`y7nvc7FgpRlX-_)Ax~8V6SPCw3h)ZD|t!vgl`d5$s`Dd$uZDLDzAs;a$@Hbb_ zzKN1M*rD+4x7pFfjZ$A{Y?_9aL2iKy-+t!AZG1x4=PAuBVu*_`HsrDf=7SJ~6KH&| zb6HyQEW5oLQuaUc=%9o@crs~Hfi*3S@VVQs;UXz zi-uq2Lt!s3VVD!{7J~=%m6Aed)0Nhlp9djT2J9fs2zlVwr{!sB;XhvA@osl8+Mz-!&<2@zkfsyY^D@k1}v#?qi09H&Nlu zu1Mr`Ui04FRhD6n>iLteclGmMui~=H=jW@t!@+@FlqEKh0y=g_hlDN5#jaX-mMgb5 zdc0Is#m95}0=z0TXHZb2zQ+5HHy>?Y{>AD*PC9^H2%2IhF-Q&x(YygU$lVEuPX%fgvOnaG)X*53{u3=copEl?%&1(wVf{(!xKH^1?y`iL1eQAE&qKWli9J0w+Sa1tm7>oQPPvWSr-?k~LtW>pOdf>+0+1JGgaKD0)mW|xn zFDNJg4WR?uTzQn+(An3AGG0c`NE1CfgZsd_aW;htXx}Xnu{1 zRI73t4bFrn1Cu{|Ntgb?s5cTc|M)QrUxusSe>3Y0pBh4yU?S_6FIV;n*i9_W&riIv zL05v64igh=^EbBP-qzY-oveD@{cGEfT6f6xFBSkn;JU2|ddCK@JY6r}_Nk~)ksk;K zE(6pQm8$5;wY9khO|+Y{&t8zY*Lr;Vlq{Kg`?|_t*u^=b{5f3FHU$rf@DGkRm(UgZ z{6MmUHrLRu*ge{9VP2Sp){!KH8G zcFO+S8|}xVEXqLVtl|E&2$hBt5wIiv4qIvQ*N#bv%Rp(S6x_f;yt>>F8WZT##O9|F zJp-2=Io>#Oi2p%bj(p&QU;O-&%P+}w&YX`YdU_~+ntJd_pfMpf)pUM(r#L13m-0LL z1@z$Z*V5v`f6egBH#t3SOlc4cf$tyPNlEq@?g)kc*l*wEg{2d=FB%5i1-Y&O@d`bl zgDc#s8iBdph$l;6W548A^IdAmmlSa0L70U?!2bl@0zYm3&yo$43F3xHOwcxUj%2yf(N3`(=Azvh_KDI{+RxNHuC z)^?-Tb$E)(fVneEU2rWrb^pSaBH-cvLi{YV3*AX7);`}3w{ZE{>W1WK9Z!~*Pm50y zwS4+2#jYy>C?o=og`F9#1}J`Rs0$ zDL#i?zJx_hqfShy;mC z9-qRkMZ97jVh+T}qe{(K3`dG{!oo&(&S~N!Vh3uAk5Nany1Tm2?iROb%``wJh$F4N z)w6H3ht95J4_AlsJw1i&+1OwWjSj;nB$?ZI4jf5!4y+7 zL<_(dYG|xu%}VifTb55?BNM_@= zmdW?m4p)F`ho#1>)biYT1;u9Cs)*Q; zpKTMO5R9<>fGWShJe1uw{HrRO7unp}Xoe}lr=kM$fv=Nn>dw!x{}%?ZpaqlvwtYd5 za+^SiBw!wTcPJ+QX5{(IjzPlI3T!^-S?DW0Xw3QT2KZe98Lj{{(5SZ^8l+1y@)`(+ zK0IMEK_rDTt6hX>`s&rh;^A{Wg|OJCfAbDCVkQ5xO1riSnWngGZQUP?=BKA&l*BFW zk24m??GNq^y1&!JttLA-IDn(ntPHq19`7^MFn`nZcKc(k;V7S@cK=LDiSQu*C_c;xyv ziI)X*r=L^m6y0>zPRasV-G(ErYY*X{)kyab@T z_1H+WTo-AIN~pS$lcd*&%(S$4x)oPrM+XOKX=h?u6!^sw_{+m*XId<9qaz)%dXfDZ z!UFtx1<&mCri}?3g9}BxEB1yZAc6|#Rq~`h02wvxW);twK-nT5<%bsB`(r08n zlv8S(zt1fI!+GV@GKY#c%b@SQ;y8;UNXXI@>(EjDqdXIf{fn*km<*MNFL8>*Y#KaH zzkXb;N5KtCyyI*;yhX0Mqw(QUCl}@FDO&^(_PflJCd`GmKLFSPLh}9d2W)SLxy|su zJ82YcGDXj<(_XWQNTuZ%LeaENo8m8o}%HrN@zhoAA>e}0-HR!9@v*Q;$Hd=Y~ z3r7L>4@^o~M&7$#E_a`y$vpIXCK0gjyNTDWsZIM0+Gn>*peZ)GWZubX|I}bxE4X~4 z|Lls`Xo%`zsP8mRdeCIWZH*KLrl)XoFsH3{B&ik0`iok&vsId zp+WmTmGZ!LXw0b1v}nQoy@>IVU$Z|fDF29@3@sB9-JYu$gg^d>?7Di~W!ZnOz1)}C z&av+xTNHy*VIps8y2*Cy{>cHkikFvHpuydedwATLwH{3Njq9bGighFC0poh;27L>^ zO>-q?KqoRx6~XqdEuMw zEaUlb5(D{uGIcCoD6IP@5p^S5gE}!4=V!T#-7%uym;#Sxe^n_*5^8rd3zM3RGQ`8Ao_RyTbR|2wMkH;$JMhIF$pXT);1?Kv7SJwKkvf&OM z*7I|mY!G)MdqyveD}0R|-z100QZLr`+SYMOMj7&kd-S@Gar=#@>*5=D$Rlmc^5>_; znGb87&+-(Fdo5a53N;(c{D*6^@v%xW`1bnugK1X%qslB6k6#Y+Gf7Rs8B0k`z3gPM z7fh`L-jXLJGr1wE;W)$3Lra~;s%L7V3@R%)pa*VnhaHrx3q zYqXYc_Ujc76l{7o?umBeX2#TJP;Yr&L5$^JyA;@|53sz!e=@6}|DQ+*7Eiqk&Fe%&pW zm$#Pvqj0i6qzzZh-6m&wC!He7Wxa985JEl{0$Yw>5*29QGE(w{-zes2yF1}sdEa$p zZn2h05*B+&59`si*K5d)>-oqx)9o124l^np#XpLz!(tHlirJTA?*LA0GQ0f`IDA}N z3mQ+A$Y{tKyX9J@i4GNp5~zbtIv$@h%)H?B&2GZZzEU~8Mbv)=X@#fL1naon%L5^5 zwn@2lwv~O`eC5mBE)S}Etun309gD1;#v2&Y=j=4rdL?_w^5za%(&iRP8}lSuwxwvh z17btpsJzq5(~s?9;s?xX638S2f1V z`Xi6uYjTU7%2W{3PcD+%@3JO;{c6(ET18Dkak!hEeaj_QbeYkgAI9-?DK z_8p*)d7hLnoE@Jp>s0tC2U0K@)LmVjI(M#$0LQZ+O>a0XS8$| zk1gMqvq*t2Zz|rnP^`R0NT?7N>p# z^7XnGZeZ&h`aNrzgnX(8f^DjP-?NlNTR8};)s+lWM9uR09As0(@DjR*%N4doH=S1q ziHR#R^6BlYAtD{NQ1?H}=*JR=@gkWmp7i9o&6nNQYGWO@+h>aHi7!6vO;GA}vCQoVMFtDli^D8+ksD zSVqp(wsx(ZP`FmUiuYxBM5p!Lzh9`g-Rke$A7!mI<=nKv;g zf4bhv^s$Z2cq8`tJp0DC_i}d#4yV-4iYJ4jBg!eqfu_q`1d+w@MiHpl+|)83cIL%H{VYddmxM5z>6 z3b~y^2x%~BlY~=3$WqD9RI+xzBlCzdxQop5NHD2Rw86E#rX?FBa)r8k@BU+K;;nuhml z)0SON2y5Jd)liD>Y#*A_iy|(QMP(F+jV!7JqPk5ApF9yv4O)~4D}L~xK{Ph)p)}`5 zd9{0W^rqgjcN5J-E`j-ud%NXam2zOtwXNgDWLuNlj9^)xepgpxKN`Y=mQmwjzIJ}df_hrT09So&Hb^CIjum?@$l0tGVVtuv+Zc|f;?X!0 z&M65})`eFo2Xz+;G2k59F;_)b zOz~p8>-AfVVUH?2!k#}}>P_qQ#p5%>QgLiE#KLqePRAeG-*qRUIE1l#!o`{6sUyB^ zvihRW2ki~22NPZU!L)AY=B?H$EBQIS|6tjwgB=+33XzW2U4ww)D8w55>&3FivaNpV znsozID$DQ5%=pEXj~l=T|KPzigf-%lVoa$ol9OkoH_ukH2B7Y4zK!+KSq9?akLA*< z&W?^`1lO-_r-kiO>+^$9Y!r$KLj9&ou@xQhz^xLx)mNzyA4>N% zOfDBVG#J8(HJy7;AhC9bgkjUO&La96QwlTD3NOP7^h)52VrOiz$3t@25zF@0T>`&9K+7XTx_vZZuTiEOgWnMO9QM+&d~FS(sW? z)dx*ugx+av0&x`<)u<4%F2 z>3&!YhZZLqO^IWiCN-z{9bIrl&HZWr^z|i2h->PujFhW~L+{WNgPDlnd6j8?IpeMUH1CU(U6OLbr+ zz+$K$V47UFwkV1&FRvu_1OoIxbr&r4`%(aKr%l~-H9i|1v&WS5)iB!Wg`Z)t zPIBx>>4_@On3;X=*)^5IBCC2`sA@Vzzc&((-G==(y!eVUhnFJCFlvuct8s;Ou^1 za-JPoO}P{Tgjhi@!_VDb@8%gv@L#J^#%nRL3R|>JD(~%l_cf|jcf7BuDgV`(h%AOP zbTXEb;&v5`HZHR0;;MAOI!way%d2MM$$sAiEbMdwy51UAFMkWymqM4N**hA~s^}DW zf$d(bzNC&CNb1%?+eCh@7$0EGvWLs+Kj@9)7CYH1)G>xCA_U zWwsv)S2z|6SkT%d-K{fs&*8xiSE`VkcUKh}B}r!9k1>{<2Ura&(61+)%bs}k;e&Td zB-?;a?vo*2GBqMr*QEq~0+=ZIOH54Q=<_&!y)Td@a8gL82te#sBF2F-yeb=?|H!XW zuPI1O-Ie|&MCd$DRb3NLhOVd&+52ZL3+yPv#)!41Y}latjsc}xGHc!wS)S9;_gPQ) ziudSFB8#eMqP=oyj$NIZs&cdT@y@{25pqRn=BYcIL0}0Bjj?A$_jzBRMQ&4P-XHPp z8PRkz1CxVZe!(wqgiA~!yU~7m6Y@h!;LVQ@7aqpM#xf>kgj(Y-JWV1`9F6(mO6esnx`aS+W_o_Q=?MS*-+8hc=;RrpmD}e*85dDOR@hM6l=Z(qa0CtIxLR z`xx6ctr!ICQ_7=lt9t}^(9FP-;+L5r>m*ZbL5)91SpIgkloHgN-VhTt?f>B&fdy8J z+o#Lu%ocRj;a;j_%Mrs5XjNpz^BXo(%k=#ngLSmu?+#g3R%6)QIR)>giY6q)S^d1S zMCJXDy~CimdFLXR6&ETQkOs8+Ww`R% z=#4ns%?}HdTY?+)e*XFJ^ay87q|{)vj&#DE!!EVMxXh+qA|71LTLsLyveGKD#+og4 z!p7&Xy?D66N@5l%zzZyhzi=23WM*oKQ|i3|WN6IxeUf6w&wKlYAwd=Jndw@9c61bP zvW}pTXM8G!Rf)eR`i% z)ft%SR_^eIxWr%YIbZ{L0pIrc*9S%%9KEsBVlrqL^juFQf&Dl~12wSSk~5i^YI|ql zHHa2Rho2Pkc#?;mRLXRhTlM=*44T>06nP%b#`3dRzMjU9UB^&8UzidTvzINTs^}@q)ukj!B-a118I~old#vFmg8vIoaK)$YR@f26H8Vq-ALV^v8-oPCU z*$M5~yO&1e;1qZ6DRMFPVW7taBMTo-wL-%YA|vqv#1(gU>--?3tJyxIk91vRYT6+u z(n6vquhvDTknOlRPo6ySq4q@VQL9L^H_tu*&dMwi1=i3#naJe}BcEP`O2XO80O@0C zS~J(GxB@72n?~*FTI6h>*5=@kLP+g`bo8Pl;xms8Qh<9o7dq}~ejNVTE&t_M;W6*2 z-GOx(=)$q2$C`3V1y(}SWE6Bn4=f7(PS5Ht!)Ch4XJA^u$5PtI0p)0<{UwuYnX9n9w0aM(GdrJ zy_?K_rYE$(q4s>ZRZ3BDsNdw@0dZ_^i7={3GPCS!>u$f!?vUHJ3-DDmn)GJC5%X}S zgQ(Zkpp&8RGdq#w8OiKB6CtKUAKVa=dA_-MTK&dU(LQ3Cbb`8uOZ&)BsATdHw5z8r zzQHtOtJodJdqMFtl8>vkVlMxk-TvbddP@kgrIs8Grxr`6l!P)PM{}lyU4r;ZnU&27 z$(z{n`EwOLI(+&q6p$ITHv8j56Zj~#0jd?IfOI(97Y9y~qKbS7-pabp+Ze}gaWEEw!*aDNI2ayUKcf*x@Wz#Ns_%qK*BQf<>=bjRyoHK$##s;Bp1hihizJVgL zu6COA__~ra-s>UH8>GU~!_;eF6i6UGQ>@C^SuIp6DWCdk-}uC*i;PMsADsf5oRf)} z>6$P?mJGq*75zYjm}J10=uxRm*^%@?gjSvZRK|!?6Z`&= zzaHct!~T_d30A=^w~j;?^6!`_G?lxH;He>_*j4Jh%^!l1>S@hC@M98W}s+QRNvf; z9_w~`C1j(+&W7W*#JTMnJwmf71yR~Lswe#8?!$uwW-J_C>YIak>XKKBR^^x&UNXom z$6PV$ShiuR?h5xxxoSm~?HZ=H6s4@B6lppBP0kQ73VLmc_!%OX%;s9?6!yn|KU)$hZ?+E_~hAot!bo*f$CcXEC2{jS ztNs_)$Lp~Gca)UQX+-P|S{`~P-khY_d%+yq2dzTC*)s>-2XfJ>!|Uz2@*{kE&qBdD z9NO_yFN!Ne+s^eRvetTvAE263rOz^=VFT? z61nsX$Vb!*I^!vtegooosCVs4ntw);JjQ!J(Vsnb z0*=Da+xkK2+OwvNBr+vQd!IkUaV9@Sv{gQs{zuFnQ9c%OAOGNSRiJ9trJjLv{ioaF zmNS!SbEcW+!?iKsLGb{#3DC>qdR+>_`DeQ2LahGCIMepswb~}j!fQe1dFFs<0C#|( zBIC=G)p9Sx9)1=RBeC&4a4u*h(pl`brLI4y?&&_!8YnfhK0ANEJfboy%MZ9RfPAyw zQ)FwZ&-(ImEkJbvw1!Nuy#pXYge$ig99H7nDh=y>&ta-)QZyNBJJNe-n~eSy9sd@} ze&X3q{M;?zQ}eln{9tqK(4(Vm8t{M}uq50DdF(>1sJ;a0M%3d3&AH~8U<4+V!Kw%pxt zwx@)8Bg~rZ(UM%)a!gGxq#I9AOGDY7%UN$9bpz1w((`iYZ+QMT+DtQ|e6(H$VS{O? zr8wRT>p(+;IQCS99e4~oJp}nW#FW5~meNPWelxC$*)SidiRJXdf$saoHqcyg@23Bq zLHJnNkob=OgM^=6&zEJ$1FkoRURKVnUO#hY2^qB*_|L(=paXIkB0TVeryGQ~Hx6J? zQL*}L<{Ea@=d*!%|E|L~Xf?;KAowWTr7Qr%oRHhJPabS$bWacg47l{WXph%m9OwLz zU=v=_$f+Ka%8nx34Jz$h}*mdwIp6S0j%> zNZrAnKmO_=zZ9vwA1p9f*;8jQF+cFH-K4MpdREJyD|sGE?OS^P*(B1rKYQrCAcOF+ zgI!@Y{c)>HVAsAzq*YU|Vu z0QTFPtO!6Vsr04$5JU7=*NZFDu3-N!vb%R7_W=`taUo?5y;qn#tiCU^ zsAz`ji)>moU>Q?;manHl9vvhM4H*4{+ z!URl^!BdOH?O8o(^L>cYuvN1OvQ1XkS={*g%C;YB-DA7_DkaL{t1k%uopv5p&-HS6jDDf zffUG?(UQk?5Ls>AZTaT;?1^N(5Nx~LB7C5veD&$W4(b+GW=-#EW{92ZJO`?@)N=gk zv+(s}O)J(->#yY>v0V!*-NxsAqJCYM-6eB#uneJUPR(M6)3CxDckbL7XX}IZiIQBT zB>FbUiAL;3LrvDoR}sF@n7rY2oHua&=W%w4$8NMk5uI7?9RGfyyvy&tnK1hi01EW1 z=DV&(=~q^uesy6oN|Vo;XsNu`txFIv(@UrH*3#5BKW%kA~?LLFniZTv7i`7*Uj%cs-1a&D-!q!Ev36{9(u626q|;r~D&0*XxXt zy4>J>*yUCVc%%gMg#X6OKQ6JWa%hN@K;VfSi#>bx0NfK-bG)PXo{X=;`ZqRPS|$K3 zbpi~UP0Epp@C{rU&AK3ysNsbV>CXLO(|HfOQCRfo5hqe1a>48 z;#d=}qM#%Ks4`vOMeXl|7ul?uxKq@ub!UG;foIi_Cb5eB*;oQGfSH~{+?jY0M`3i1#3sPXPbIS5pj@<1U*zSCQPHF6v;HRxYk2L&AO{%oLE zZ-8pgN-wbk-G}dNu7kA;=IbZcfXP2j7>7T}K=@qZ4)bc+`u~n6m;f051ScK3F$CFB_tF*=nr4ctHan19n_T_o=W+Bfn(g}>96X2g*?unEbHRP5bo0g}l zC2F|b{30}6k&J)tuH5_XRlsCu4x-qjpZ4^LRj>c|oA$J0^Jg&*mFA&G@Y5$ar!g^S zcuocF<+R#HUE>2Ie!Rch3|JYydnnIp1|^W0{jF64#di0qli?`dQbY2Rt~Tlk2UMf2 zfsK3HoZi1@(nyzk%`LC_`wzNJx%VhxeMC*pq)^d0q0Q`Hc4 zSCPMeGw(+BCW>~P_YiS9_bi2{qc`HqvdjF4^%~z@CU5z9GMVzjEAil^^eS|$URcfH z1t3Du&QwJfcHam*WkV0h|0vJ01tyW(zte(EgE+yCT+2^`Ui>MTDFw4$_rA+V0+t_v zI%bQU*72DsgNV`7vB>2wAM5DHO01cZrTsqs4h@;9L72AMIG^c(;U{V>RweG}?8iHJ z19BiNwgiJ>ch3p84gVf!ta3TM061PXjb;cUqE(r5+ZuQ6xbQ~9*eV2?_RDx`QZb!S zTiU03U~@18G#V;bYFFwM|r7kRA?ql<$+J_Kea=ls^MAsV_b z*<#o5s;a6mCQZktiQr&MJ>iZVI~1g+L!5kDZ1^r^C1qtPb=OnFpCWjHd5VhEVY8fz z7t?v$Og87Yct!!STsz{6>!Az~E}vCWdrBfUCjGDQ&QYN8=6G8PmvUFq)K&?EKF6AX z@rD|n!MGUt?=yNV!)f4C#Ay^~ZEitqZ&26O)LctbOUpgwl_hWAg8$}O@1I3lJ>epE z^hBG!uN}el2Av4eSAPtT^nVLrdMOC5!4T;()~r7S$5;4x43+iH?N%KLo_O^y#Wh5_ zzM(}4MCHS`E?Qbzx`uyW5}li*=N9bQ(o*e(5mUk<3kTsX5dB4;jFAc~f}W;PQCRnG z+UQE)s^A{XRpKzqHlXdT^yaZL!sH(s!0_W4s%uzSG^{#VlHo9x5j`rT1?0CcwF z^s!(jKfO6;`X^TvRVRIOT6twcp>3G?(Frax7+R^mF%v9zE$7{`JyGLx3sx z>!vFnpZe@G`&pQ`zhoskvsc=MEaKb`=1rgYW(5-2N9&TT;she^015E;I&Mw&{HN|z zy$tx@jvSo`^|omt|E3le2aL*dI}2*J$JJKTiN;I#3n{1f)U{{_;4 BqXYl| literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index 75fc4b6..b323606 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,6 +55,7 @@ apps = [ test = [ "keyrings.alt", "pytest", + "pytest-xdist", "pytest-asyncio", ] diff --git a/src/topicgate/gui/components/event_history_widget.py b/src/topicgate/gui/components/event_history_widget.py index a828792..08ad4dd 100644 --- a/src/topicgate/gui/components/event_history_widget.py +++ b/src/topicgate/gui/components/event_history_widget.py @@ -150,7 +150,11 @@ def _request_recording(self, enabled: bool) -> None: self.render_recording() def _recording_loaded(self) -> None: - if self._view_model.history_settings_broker == self.broker.currentData(): + broker_id = self.broker.currentData() + if ( + self._view_model.history_recording_status_for(broker_id) is not None + or self._view_model.history_settings_error_for(broker_id) is not None + ): self._recording_loading = False self._recording_pending = False self.render_recording() @@ -163,10 +167,10 @@ def request_recording_status(self) -> None: def render_recording(self) -> None: vm = self._view_model broker = self.broker.currentData() - status = vm.history_recording_status - known = vm.history_settings_broker == broker and status is not None and status.broker_id == broker + status = vm.history_recording_status_for(broker) + known = status is not None and status.broker_id == broker busy = vm.is_busy("history-settings") or self._recording_pending - error = vm.history_settings_error if vm.history_settings_broker == broker else None + error = vm.history_settings_error_for(broker) self.enable_recording.setEnabled(known and not busy and not error and not self._recording_loading) self.enable_recording.setChecked(bool(known and status.enabled)) self.reload_recording.setVisible(bool(error) or not known or self._recording_loading) diff --git a/src/topicgate/gui/main_view_model.py b/src/topicgate/gui/main_view_model.py index 4ec2afd..dc1f022 100644 --- a/src/topicgate/gui/main_view_model.py +++ b/src/topicgate/gui/main_view_model.py @@ -136,11 +136,13 @@ def __init__( self._runtime = runtime self.history_policy: HistoryRetentionPolicy | None = None self.history_recording_status: HistoryRecordingStatus | None = None + self._history_recording_statuses: dict[UUID, HistoryRecordingStatus] = {} + self._history_settings_errors: dict[UUID, str] = {} self.history_usage: HistoryUsage | None = None self.history_settings_broker: UUID | None = None self.history_settings_error: str | None = None self.history_settings_feedback = "" - self._history_settings_generation = 0 + self._history_settings_generations: dict[UUID, int] = {} self.event_history_result: TopicHistoryResult | None = None self.event_history_error: str | None = None self.event_history_busy = False @@ -951,8 +953,8 @@ async def query_event_history( async def load_history_settings(self, broker_id: UUID) -> None: self.history_settings_feedback = "" - self._history_settings_generation += 1 - generation = self._history_settings_generation + generation = self._history_settings_generations.get(broker_id, 0) + 1 + self._history_settings_generations[broker_id] = generation try: policy, status, usage = await asyncio.gather( asyncio.to_thread(self._runtime.get_history_retention_policy), @@ -960,19 +962,31 @@ async def load_history_settings(self, broker_id: UUID) -> None: asyncio.to_thread(self._runtime.get_history_usage, broker_id), ) except Exception: - if generation == self._history_settings_generation: + if generation == self._history_settings_generations[broker_id]: self.history_settings_broker = broker_id self.history_settings_error = "History settings could not be loaded. Reload to retry." self.history_policy = None + self._history_settings_errors[broker_id] = self.history_settings_error self.history_settings_changed.emit() return - if generation != self._history_settings_generation: + if generation != self._history_settings_generations[broker_id]: return self.history_settings_broker = broker_id self.history_policy, self.history_recording_status, self.history_usage = policy, status, usage self.history_settings_error = None + self._history_recording_statuses[broker_id] = status + self._history_settings_errors.pop(broker_id, None) self.history_settings_changed.emit() + def history_recording_status_for( + self, + broker_id: UUID, + ) -> HistoryRecordingStatus | None: + return self._history_recording_statuses.get(broker_id) + + def history_settings_error_for(self, broker_id: UUID) -> str | None: + return self._history_settings_errors.get(broker_id) + async def set_history_recording(self, broker_id: UUID, enabled: bool) -> None: """Record future receipts without changing retention limits.""" async with self._operation("history-settings"): @@ -981,6 +995,7 @@ async def set_history_recording(self, broker_id: UUID, enabled: bool) -> None: except Exception: self.history_settings_broker = broker_id self.history_settings_error = "Recording could not be changed. Reload status to retry." + self._history_settings_errors[broker_id] = self.history_settings_error self.history_settings_changed.emit() return await self.load_history_settings(broker_id) diff --git a/src/topicgate/gui/main_window.py b/src/topicgate/gui/main_window.py index 79dcf0c..9c8ddc4 100644 --- a/src/topicgate/gui/main_window.py +++ b/src/topicgate/gui/main_window.py @@ -308,10 +308,6 @@ def _set_context_panel_visible(self, visible: bool) -> None: ) def _show_snapshot(self) -> None: - if not self._advanced_mode: - self._inspector_stack.setCurrentWidget(self._health_inspector) - self._context_panel.setHidden(True) - return self._inspector_stack.setCurrentIndex(0) self._context_panel.setHidden(True) @@ -604,8 +600,8 @@ def _request_advanced_mode(self, advanced: bool) -> None: def _apply_advanced_mode(self) -> None: advanced = self._advanced_mode self._destination_tabs.blockSignals(True) - self._destination_tabs.setTabVisible(2, advanced) - self._destination_tabs.setTabEnabled(2, advanced) + self._destination_tabs.setTabVisible(2, True) + self._destination_tabs.setTabEnabled(2, True) self._destination_tabs.blockSignals(False) if not advanced and self._inspector_stack.currentIndex() == 0: self._show_snapshot() diff --git a/tests/test_event_history_gui.py b/tests/test_event_history_gui.py index 26a4519..3412c70 100644 --- a/tests/test_event_history_gui.py +++ b/tests/test_event_history_gui.py @@ -321,6 +321,48 @@ def read_status(broker): app.processEvents() +async def test_recording_status_loads_complete_independently_per_broker(): + app = QApplication.instance() or QApplication([]) + runtime = runtime_for(FakeGuiRepository()) + vm = MainViewModel(runtime) + workspace = EventHistoryWidget(vm) + other = EventHistoryWidget(vm) + first = workspace.broker.currentData() + other.broker.setCurrentIndex(1) + second = other.broker.currentData() + started, release = Event(), Event() + + def read_status(broker): + if broker == first: + started.set() + assert release.wait(5) + return HistoryRecordingStatus(broker, enabled=broker == first) + + runtime.get_history_recording_status = Mock(side_effect=read_status) + runtime.get_history_retention_policy = Mock(return_value=HistoryRetentionPolicy()) + runtime.get_history_usage = Mock( + side_effect=lambda broker: HistoryUsage(broker, 0, 0, None, None, 0) + ) + task = asyncio.create_task(vm.load_history_settings(first)) + try: + assert await asyncio.to_thread(started.wait, 2) + await vm.load_history_settings(second) + assert not workspace._recording_loading + assert not workspace.enable_recording.isEnabled() + assert other.enable_recording.isEnabled() + release.set() + await task + assert workspace.enable_recording.isEnabled() + assert workspace.enable_recording.isChecked() + assert not other.enable_recording.isChecked() + finally: + release.set() + await task + workspace.close() + other.close() + app.processEvents() + + def test_history_mode_switch_preserves_page_selection_and_payload(): app = QApplication.instance() or QApplication([]) vm = MainViewModel(runtime_for(FakeGuiRepository())) diff --git a/tests/test_gui.py b/tests/test_gui.py index 165795d..bdd29ae 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -3329,8 +3329,8 @@ def test_global_mode_visibility_fallback_and_stale_routes() -> None: for advanced in (False, True, False): window._advanced_mode_action.setChecked(advanced) assert window._advanced_mode is advanced - assert window._destination_tabs.isTabVisible(2) is advanced - assert window._destination_tabs.isTabEnabled(2) is advanced + assert window._destination_tabs.isTabVisible(2) + assert window._destination_tabs.isTabEnabled(2) for action in (window._stored_observations_action, window._console_action, window._diagnostic_profiles_action): assert action.isVisible() is advanced @@ -3363,7 +3363,8 @@ def test_global_mode_visibility_fallback_and_stale_routes() -> None: window._diagnostic_profiles_action.trigger() window._console_action.trigger() window._navigate(2) - assert window._inspector_stack.currentWidget() is window._health_inspector + assert window._inspector_stack.currentWidget() is not window._health_inspector + assert window._inspector_stack.currentIndex() == 0 assert window._stored_observations_dialog is None assert window._diagnostic_profile_editor_window is None assert not window._log_dock.isVisible() diff --git a/uv.lock b/uv.lock index 1983dab..8c10e3a 100644 --- a/uv.lock +++ b/uv.lock @@ -382,6 +382,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, ] +[[package]] +name = "execnet" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/89/780e11f9588d9e7128a3f87788354c7946a9cbb1401ad38a48c4db9a4f07/execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd", size = 166622, upload-time = "2025-11-12T09:56:37.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec", size = 40708, upload-time = "2025-11-12T09:56:36.333Z" }, +] + [[package]] name = "fastmcp" version = "3.4.7" @@ -1243,6 +1252,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930, upload-time = "2026-05-26T09:56:02.576Z" }, ] +[[package]] +name = "pytest-xdist" +version = "3.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "execnet" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, +] + [[package]] name = "python-dotenv" version = "1.2.2" @@ -1641,6 +1663,7 @@ test = [ { name = "keyrings-alt" }, { name = "pytest" }, { name = "pytest-asyncio" }, + { name = "pytest-xdist" }, ] [package.metadata] @@ -1655,6 +1678,7 @@ requires-dist = [ { name = "pyside6" }, { name = "pytest", marker = "extra == 'test'" }, { name = "pytest-asyncio", marker = "extra == 'test'" }, + { name = "pytest-xdist", marker = "extra == 'test'" }, { name = "qasync" }, { name = "sqlalchemy" }, ] From 4a40bacf8683b930d46f2a5e33bf0e1ff5418a29 Mon Sep 17 00:00:00 2001 From: Paul Thumfart <158182803+Dumdart@users.noreply.github.com> Date: Wed, 9 Sep 2026 16:57:53 +0200 Subject: [PATCH 2/2] Address tests --- src/topicgate/gui/main_window.py | 5 ++++- tests/test_gui.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/topicgate/gui/main_window.py b/src/topicgate/gui/main_window.py index 9c8ddc4..387397b 100644 --- a/src/topicgate/gui/main_window.py +++ b/src/topicgate/gui/main_window.py @@ -1211,7 +1211,10 @@ async def _switch_broker_profile( await self._view_model.activate_broker_profile(profile_id, mqtt_config) finally: if self._view_model.active_broker_profile.id != previous_profile_id: - self._show_snapshot() + if self._advanced_mode: + self._show_snapshot() + else: + self._show_health() self._render_connection_controls() def _confirm_delete_broker_profile( diff --git a/tests/test_gui.py b/tests/test_gui.py index bdd29ae..ab40732 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -3312,7 +3312,7 @@ def test_global_advanced_mode_defaults_and_persists(tmp_path, saved_mode) -> Non window.close() restored = MainWindow(MainViewModel(runtime_for(FakeGuiRepository())), settings) assert restored._advanced_mode_action.isChecked() is expected - assert restored._destination_tabs.isTabVisible(2) is expected + assert restored._destination_tabs.isTabVisible(2) restored.close() application.processEvents()