From 641a11e4a0194db3f60a9769a510214612e66af5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Pe=C3=B1a?= Date: Thu, 16 Jul 2026 14:00:51 +0200 Subject: [PATCH 01/30] fix(api): disable social account connection notifications (#12018) --- .../social-account-linking.security.md | 2 +- api/src/backend/api/adapters.py | 10 ------ api/src/backend/api/tests/test_adapters.py | 35 +++---------------- .../backend/config/settings/social_login.py | 2 +- 4 files changed, 7 insertions(+), 42 deletions(-) diff --git a/api/changelog.d/social-account-linking.security.md b/api/changelog.d/social-account-linking.security.md index ab468dbefb..74e9fd129a 100644 --- a/api/changelog.d/social-account-linking.security.md +++ b/api/changelog.d/social-account-linking.security.md @@ -1 +1 @@ -Social account linking now requires a verified matching email from both the identity provider and the existing user account +Social account linking requires a verified matching email from both the identity provider and the existing user account without sending account connection notifications diff --git a/api/src/backend/api/adapters.py b/api/src/backend/api/adapters.py index d8c5b1b386..99ab88bf81 100644 --- a/api/src/backend/api/adapters.py +++ b/api/src/backend/api/adapters.py @@ -1,5 +1,3 @@ -import logging - from allauth.account.models import EmailAddress from allauth.core.exceptions import ImmediateHttpResponse from allauth.socialaccount.adapter import DefaultSocialAccountAdapter @@ -17,8 +15,6 @@ from api.utils import accept_invitation_for_user from django.db import transaction from django.http import HttpResponseForbidden -logger = logging.getLogger(__name__) - class ProwlerSocialAccountAdapter(DefaultSocialAccountAdapter): @staticmethod @@ -105,12 +101,6 @@ class ProwlerSocialAccountAdapter(DefaultSocialAccountAdapter): raise ImmediateHttpResponse(HttpResponseForbidden()) sociallogin.connect(request, existing_user) - def send_notification_mail(self, *args, **kwargs): - try: - return super().send_notification_mail(*args, **kwargs) - except OSError: - logger.exception("Failed to send social account connection notification") - def save_user(self, request, sociallogin, form=None): """ Called after the user data is fully populated from the provider diff --git a/api/src/backend/api/tests/test_adapters.py b/api/src/backend/api/tests/test_adapters.py index 70cd055205..c86d3f5620 100644 --- a/api/src/backend/api/tests/test_adapters.py +++ b/api/src/backend/api/tests/test_adapters.py @@ -302,7 +302,9 @@ class TestProwlerSocialAccountAdapter: sociallogin.connect.assert_called_once_with(request, create_test_user) - def test_verified_social_account_link_notifies_owner(self, create_test_user, rf): + def test_verified_social_account_link_does_not_send_notification( + self, create_test_user, rf + ): _verify_local_email(create_test_user) sociallogin = _real_oauth_sociallogin( create_test_user, @@ -318,34 +320,7 @@ class TestProwlerSocialAccountAdapter: uid="verified-google-account", user=create_test_user, ).exists() - assert len(mail.outbox) == 1 - assert mail.outbox[0].to == [create_test_user.email] - - def test_notification_delivery_failure_does_not_break_verified_link( - self, create_test_user, rf - ): - _verify_local_email(create_test_user) - sociallogin = _real_oauth_sociallogin( - create_test_user, - uid="verified-google-account-without-smtp", - ) - request = rf.get("/") - - with ( - context.request_context(request), - patch( - "allauth.socialaccount.adapter." - "DefaultSocialAccountAdapter.send_notification_mail", - side_effect=ConnectionRefusedError, - ), - ): - ProwlerSocialAccountAdapter().pre_social_login(request, sociallogin) - - assert SocialAccount.objects.filter( - provider="google", - uid="verified-google-account-without-smtp", - user=create_test_user, - ).exists() + assert mail.outbox == [] def test_pre_social_login_uses_verified_email_missing_from_extra_data( self, create_test_user, rf @@ -367,7 +342,7 @@ class TestProwlerSocialAccountAdapter: def test_social_account_linking_settings_are_fail_closed(self): assert not socialaccount_app_settings.EMAIL_AUTHENTICATION assert not socialaccount_app_settings.EMAIL_AUTHENTICATION_AUTO_CONNECT - assert account_app_settings.EMAIL_NOTIFICATIONS + assert not account_app_settings.EMAIL_NOTIFICATIONS def test_save_user_social_with_invitation_joins_invited_tenant( self, rf, create_test_user, tenants_fixture diff --git a/api/src/backend/config/settings/social_login.py b/api/src/backend/config/settings/social_login.py index 9ab3e89d73..ffc6a4724e 100644 --- a/api/src/backend/config/settings/social_login.py +++ b/api/src/backend/config/settings/social_login.py @@ -13,7 +13,7 @@ GITHUB_OAUTH_CALLBACK_URL = env("SOCIAL_GITHUB_OAUTH_CALLBACK_URL", default="") ACCOUNT_LOGIN_METHODS = {"email"} # Use Email / Password authentication ACCOUNT_SIGNUP_FIELDS = ["email*", "password1*", "password2*"] ACCOUNT_EMAIL_VERIFICATION = "none" # Do not require email confirmation -ACCOUNT_EMAIL_NOTIFICATIONS = True +ACCOUNT_EMAIL_NOTIFICATIONS = False ACCOUNT_USER_MODEL_USERNAME_FIELD = None REST_AUTH = { "TOKEN_MODEL": None, From e1c2e9373cb2870d3e433668e8e86557ce347ea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Mart=C3=ADn?= Date: Thu, 16 Jul 2026 14:57:17 +0200 Subject: [PATCH 02/30] feat(ui): one-step AWS Organizations onboarding + S3 bucket acc (#11927) Co-authored-by: alejandrobailo Co-authored-by: Pablo F.G Co-authored-by: Daniel Barranquero --- .../organizations/authentication-details.png | Bin 268735 -> 338028 bytes docs/images/organizations/onboarding-flow.svg | 58 ++--- .../organizations/two-roles-architecture.svg | 4 +- .../providers/aws/organizations.mdx | 38 ++- .../providers/aws/role-assumption.mdx | 9 + .../aws-organizations-bulk-provisioning.mdx | 2 + .../prowler-cloud-aws-organizations.mdx | 59 +++-- .../organizations.adapter.test.ts | 63 +++++ .../organizations/organizations.adapter.ts | 65 +++++ ...ws-org-one-step-stackset-deploy.changed.md | 1 + .../s3-integration-bucket-account-id.fixed.md | 1 + .../s3/s3-integration-form.test.tsx | 244 ++++++++++++++++++ .../integrations/s3/s3-integration-form.tsx | 109 ++++++-- .../hooks/use-org-setup-submission.ts | 14 +- .../organizations/org-setup-form.test.tsx | 121 +++++++++ .../organizations/org-setup-form.tsx | 216 +++++++++------- ui/lib/external-urls.test.ts | 130 ++++++++++ ui/lib/external-urls.ts | 90 +++++-- ui/types/integrations.ts | 8 + 19 files changed, 1048 insertions(+), 184 deletions(-) create mode 100644 ui/changelog.d/aws-org-one-step-stackset-deploy.changed.md create mode 100644 ui/changelog.d/s3-integration-bucket-account-id.fixed.md create mode 100644 ui/components/integrations/s3/s3-integration-form.test.tsx create mode 100644 ui/components/providers/organizations/org-setup-form.test.tsx create mode 100644 ui/lib/external-urls.test.ts diff --git a/docs/images/organizations/authentication-details.png b/docs/images/organizations/authentication-details.png index 2b4ae782cf2df11f6aa90665a2e264ab83fa008a..6aa72b59492164f6b76c564a71f090861230c47e 100644 GIT binary patch literal 338028 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 uQZn}!KRQi}NdH7S* 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 &{G~URbl+#* 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ƨa(S|s(H9Ga6Gd-C{(4z(*&$o@w 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 z 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 literal 268735 zcmeFZS3px;w=Rr`C@MB=fD}bQdXwHoLAs)J0!Rrpv`~Z)s)~s8-Vx~?LV|>Dp+jg1 zgcg(%Aq12_5JKR@ckgeXefH7s-2NB;1tD2U=9+WNQJ?Y5L_adnVm{4wnvRZ+S^MFA zBRaa1u5@(Ap{E#WSB!4%RnYz&0~=}GqpKOdu}XU(=V+!4)YqpIq&+`HcPz?BdT>;hN)FIopk!kcv+%G z)D>nMSyQ!PCI`mTmtB8MF$G=qw~JPfV_lbHqx0K8JJHQ(364OF4H>(wMC>J9zCZFI zezl{(N$k#4HF$ko#A!h-`R?TLJw<&{R)q=qv#ZjM1D^{BZfe%~%^$9@*Gc1qr0~N+ z8&4cV{;2u?;awixV9?pqyXD!QVR*tICPr=agsc7vJ|mjtji{O1i#GbqmDYl=XSe4s zqa;4Die=D&LP!$}H6gqrW*2tw%zO{CaaKEdiabpPZ%TWi%y$T;cJZ8&;CUr_L}@Q& z*#6dEZTdn(81u-!ri;E9IVl=*sg60bv5ft)d4UO+UizxYnr(F)Av2TB;Kx(SDY)FR zCqrJ$z`>7<&QLs_;c+DEOcO{PpLn{CylU;G=^;*%XC*k-nG6gzgAKcT7Bl~i&*8QT zS5vnL2raoM5CQjyvkQ7u6mB6c_qfY~V}@x;Q|NiQ{jW6J?zg@Pn9N8htq>TLb{iRve%KXUiB6F?yxE3(84N<)!RyrspaK z=vYjfU{hMP&vB_-y5BQ;2D36OJ3QEA61KM?NzzZ&&-QJPipW-J_`>eEBq={Jat*)-hlfFGT(VtRlvAoG2VQ14F!Y;QyQsI|) zp34%RC2RxJ^j$Y2u`@k*tkCGni#*%l6z!jY0av-M$nRw4j?E927C7P36ThOnT_Dj+ z2d|8hR>XRr0P>Y@s)(X?9*KS@eaGL)C`3)S`&HUjTpdtAdRA|k>oQp{XPgZA>eomhF0W`rM5@1tC6F5T5ArM0Ud1Vires zG^2Ywr(DW-6o4N)XY=8t0`BwY``Y^YX*PqwlUZ^@22!PigRLYqZ5ZmlszdXzEFx=r z6K5l6Qe`{sc`o2IKcHode=9m?aJn!r5}2teD0DZaIsS&iAVB%1=zQB{7{%`L`Rz;% z=DPiCgQD5qlAY4*Blzb$Wm0V?ph>L-0n+0ms%NUADCs=2R|>rf>^UUu5uTHxr`yJP z|CW(-_T4HlFTZB}JUm5=izgpSZWgxsFp?XawJEjo*%H=pZs6mC7zgY9k}$ON0H*Tt zEfd0^EMG}$u*3@3{PKD*n6DrcF|9e{%C)~f&HrHO1*7W@^KavJ+MHt9xp~K3#zl^V z7~swh13fzp8NaGo>jlc?O*k_-P(GqysSxn}PRuni(XA-7gkr#&LwD@@rGW>B+-G0^ zZL2O^3E$r#4Aec-AZ~S!ml~cIRb#j1OJ$op`=<&N|*+wrQ-3p#aM$wpt5A?-+$rxb@yFr0jtnZ!!Ug!qwqXRlg z-!dit>XAL~XW1X2k(Ji;euRm7$XF0SID%#Fq-hVIfhEJ#+3>$iF-82?&@Cz{|LC?9 za4_MDkjZ5VR*{tJveF_MK|;4T8p7q!Qf>oRDTd)a44^QdkVD-}g|5$D^zS$|n$N$N z0G5H-rMwH7fi3*YDqiL<*nTm~szC)E##N3mGahrTC+E$RcISe@^MWd-z^r92(z-}C zan8^V#fdN$XN55_f8%vL!P zc4)S~KHFUBmD!kea;1K9oop^dPt)5x)1SjPNyz2R`}h{O$>G<)vHiIBnQ&T+xXR&% zslv858Ag+mMITjeW--d`2+aS_4^fH znC4vz5Vd<__v$c`KTiI|ZZBLs#;mE?@_nlvG~JkpQlTg7LZ@s5NW(qJ>29+z-)cV=p^|C0D2?kVNL_Q zJX(EO(r&!U%54d4sjVygjs+&TS6&f`FQJrM@+HZ0u@ z^;!$=_RK|Vrj0t{>eJ3~T-A8NIBMK=iH`@bo+iDe+EqbGXOKQinjpsA0vxIc zi{~iQ?_}JY{XX)pP1w5ienUe8J;qh8F}^C$sj$ta5+YQNu1+)3aZER*uXa#9YO=XO&fXTQBkv-G0a-`EZH&U7qqDx7 zDXeU-j-MG#4j9*ry)@{W3Z1*=G@Ns@uW!^`dR+P8^^?V)oS&>`-xsXA-XE#yqc>E- z+{6HT>Qe^2<|hLxBgHsCphP6u z4b_*Cn|W8rFaZOLWdy3Cm;~KA5p~5r%YtJ?+AQUd-)rX8Y|9p}O_cLE4ruP~KCdvT z7W5mEOBFO3l!~e_u9$)Z*>t!*t=(wO(#qRUY%L(MDfqs=3!1)b+vLCDN6;zONu|ep zW&E>VT|R$|`2%@%93|?#F3;0eV}m@X_hg#rZn74~FAt`dPXN5aodQsoOA74Y;YXV&Xjz4 zWZobeK3k&iHd@c~c%MuZdaoJ#=Dz9U&G$co9_QO_&@p-chIe)}_QtzdTffxxk$h zFnu{goCW)HG$Yt;YmSasVr5kf#d*Nh^{+wvQEdnU%WFAOIoztNhwCNVGNb zS7FR;8AMj=QCAeO}>FGnhY9!7pntR~D5S2Srm)A^nMKe#DV?8o2jloU&lSxPLjNH!0K+x=mdaAj72)2>!1=_Ys)NlQU8@cL9j(uBz*MMlU zdCN2qjV!F=%*L$T?d?}^?{S|ktFHpIU{?9cOmjDBX&Y(i5Hw%-a(gW>Ya%`-d8}Bs zZ)GUkv0tpCmrR^lhYQtw7*ob<%(W1yCxFt%ZJV`av2o@0Q3^Jp)K%%BJn8}IyV%?f z=L6f?^g1<=)&1l3T?}`nf3UAEc&dBGi9WN+NOGOlavd%;k^wy%JPwcb<@V=Of2TIV zyAebSIyX^)ugue$Yq#sWEI?K2meeucL{%=*ONggsC`XgqjLEP(-o0;lIBj{rbc(wQ zIE;{<6q7JV9#NK_khr+!DO|q@rFUv+`RwCEvkq&)tSU=D$$Lv#(;s9f()p0a{xx*v z@?!k%RmB)*Wijd>%O5YnQ*!DS%)JWg=AkI!EI0ywxb`AQM6{-z=_z9zMUFD!DsCbL zgv*7Sqw2RUia*RQG|Z1XCJ+zd?e!MPVkP!#Q|}m67WJ&$Nh?oL@7m%l8{K(7MV(K7 z`}S<6s%MRU(CS1n4C~}y6ukZQq_v;ZV8%^!WslAomMIXnp*VPN*-ZOP-It>O5Nz!+ zut83$G<6PK^5Ax#!gl+Bxi-rPU1gdr>>0cUK#x86^z||`c}-Q0t&EtR;T#DcR>n<+Q1>%& z?t&u8d`He0ip^Skbw~LG-0j-xYKX;)9tUNnOv*ZC?m=&~w)F{j7M z??S85ZSW$!9G7%egt|p_LQ6tv3$iAoY=9}s!gaESx6-uw>{M02rpgLFug7uynoaM< zTumSW6^q&*&({-2q`J>HU=e^1Uhi&aLZ87WDoqVVTMl$ad80dSC}ONhRC|0}ZlS8D zXa((Ib4GUbT)?eJc&SGL=3pUYX{3;Of-$*^J^FlsXp`lb&RDRicuCPv%N=}n63TP- z^0JZvqFyt@ee5ahg_pLl01#zG9a|`143Soo2Lp}rv_{*W`pGZ8*NX3#WKr4?ep0HR zj2rSid&0ut1DxsgIabMuSyf=VR*em=O47Dl2vE`ZUA1w!KQ&d*SWs8*<@JE3<-zuo zWQ(^1i$%@YrCBfvu50Ve4S$clY%K-R5Wvb0aHI=7>3*f1>%GI}F()O%W8XpC7?eWQ zg*yQR<&~A^4oXbGEmqwb687sxTvr62CIE-Brm2onQc^_85oWf}F`NX?43|fk9i=Po zp|R|g!8ZH(W`fZekEWIT?hZPvA&;Q?Ba7*Pgi>vZ4aQe=;b?l^pQj7~bvB#BfLnOg zT;8a2oR^2zi~oYy;$|xxBl7m+VL%4A(X-~L3!Zv>Kgv}d1AG|U>GgEu0ncZOv2d=Ggp7GyM zr3$ls-^qp4S}PNGxI!`Wf!BTxv47E0z`q z#DA&xWX`zi_h^LmN&4+`C71oRS6+Sb(#9X;WxG!w_zsSJ;CnbQ-?+z~`nkoxOJ-CU zN~oPWYaR~?U)ysdKtxEL#~|8LN*V(D=Yg?oXnnp7i9P!{F2w59WItqR=qqYZqvp<< zx}Ry22f)(P*dXouO%m6s>?GMMQwYCG6TXGO+&K-|`KrqWnWY`S)(tDeEt$t$z3Im+ z2RTm;hu*2OZsWt}5oF=M+IAvrW$3ZiW&*m|LoDdvYhDY}lIy76oPKsIe!kJ=38Ypl ze#7VImuoXr*1OJC$L1~IK1V+ThNJ_Sl4;34*54^d!mI|lro%EtbUpfn%4})tI;G}C z8I!DpL`~}HHjkB@@2KP*r-3fUYU<9#A-8(F0)Kb^w zbd8pPTiT})pV@WGh0AlFxHB5OzTP68Ke~vuI~3KIIcCJX6_obACk|dxTne0+(NGZ+?a#hk8C;A!8SOqJEGhzOASjyunjf%@#W+l-GK(j z8r~AWW|z|E!)RltOh7}kRy-$=lNnUd4B6e-`g9)GGNT9zeDFu4JA8ye3HD4mK9cxF z>b*()ClP}ZXZ2$`Ln$K8p%wr>bHd#l(^^LSe3|PrfMcas?trCjBXijIhD<{ZkWh+D zwA285Pv!?Li(!;;i$9U?_(|rZ@+T!9cFT5dl$yg3O`{w0Q2@R4OkfeS6y>Vd8t1OioOo(;Q<)VA9*vIpz0 zW9Edx*;h^KWO4!-scMhQ%w`*0NN3pGM(*a&P}9Uu8s{gFk}mj{Qnx|(E{xb#r?J#; z{~RnbPjXIM;&6%hg6jB{lpDneS{ziMX2q5dtN(oynrHwKk|+byxNbRT&R6 zF$#G@Vsd<_;Uk;Uj@6ARW4D7}p2WQJoi#N4=(+0x+;>&dXmnkq1vFza8oLZ9Zm)Js zx0#%G;z)Y0b#CBuG|Q0DRmXMCrv3B2<}9uHI$19GA_(IR#h}j&S3~QLjh>dLOl*j= z_YmN1kljq)aQi`(YE>*x87ie-;XlmCn@+YRgD$_;w*~k0r43oSuQj%8K0p$HH36}d9oan%?$_BcW zqxaw)2@?oCqV6I>=VnYg?z)-IJo&$qpYVsLzoYJKUmMxE_FXwtKsCvJtWEG`NV?4InGeN<`x3Ko=)C^r!? z@n8R;io=Cudzf5py)TOVZfD-&Uro()$(A9mqclyc%tQ@ z35{Wl3P3p$^VG9rvUeX=QpWRoxvLH8@1Jn>`$&U{>eR<=VVVHeYG9}#>G-x+41&Wx z;tEgHIp*>+p}HI=vtMR8H&k@%ofQ!;14Z~Tt*Re9HL$4bWJqp$c<(h|J7D?R^_^e2eY}g~+v6srtcug$) zR5hmg$q8$4b{!YkMyR(?DMimY0VQAhCy&W*t!64e1CugNG96A%h4J@&)yVXrg;A2< zug`{YtlW?8(`P-dw0YV0mN}pz>&Ii7u>~K8vjwMm*hx7?vf^zmkW(^yPcagH>yKhK zuof)_#IW$`iImH%M?_g4i_Q758UO^A^e*Fb+S9#dd_KtT4NDo?TiUDzvg=_EcP$>w zR@5SAEUG=|nW&Gc`0kp_ukf%EW$}$3uHeFqK}IAU!Y)gL(M _|z)xP_r?X8dMlkTai$_!kL*iUN-U`72HC(`ux*pLe_>;5Y(gfFaoUi+&BcFIlQ~hTfu8B8DpbPPj$A z*}T-BXIMhPzsl0ic5T;Y%Tn|D@Brq5?x+j5o`hWA5Z1A7p$Q@yxY;kk;Ho>H&GGFm zKz+KwNU=RSC$xt&hV02iL@i5oBpZW6lQ;z2hE)A~?yaY;{Yh<3y`DR)Fu14dGENeP z1?kkM5ZG<`dgk-5PFHE&jD*_(DV~=^v9a_T^4f? zljC(=DGV^y-CojgvIH)KUC(cg;bwwen&U$WN(_0`UdB>(K;n7YD<)>%o6=pRq)Bg$ zc-}W{9+$U@tgweUvq0*DIOQl^a1iulX?*$8o{ zvt>_R9W~`Mnbt0bjq{m7zRkCpYr`BqzrGm4pCEqghs`wG0+-Vvb#;U3!8!kSDFlcieNb3_%7A_s&I;m(=3M#8rz{PPW_Pt4|z{}DT13ybqvS+h!_MqdRpILmtI))j}HwYzVVA3BV`l5nqgy;n#6 z+|H3@O!*cgmN%un^wxTq;Wvn9k}k_hnyqGV0lPm}|3mWgx;2dN)Z4&~tAPuVFUd|u zB)-sF*^^@Yl`>ls+h%$Ucj*WWF3{2?26t#JezLpCLmW?QQ_6hWX&g65ULB9LiIYpA ztCl*?p#gL88>9smKwA)eTM|mW`Z4$ut6|Sb{b?zjSGR~LNatF5bjs&IS`wMAeh%R* zQ?KaO>Zde7np}$iy9qRJyx&=l%DM-XkwH7!HH!xnjKnPo zob!;xH1$%MNRd}rmqiP%N~=yLMa}cW6F+h>a})ITOrk!an$@+=Bwd%!i~zd+T`&Ez z=-Q>>4BD)dRsaS~PXGsm$p^}g-5P(`1i1$%a`GRnqDt;&hDCIi-ziZ4SSUPRLKReo zkQ1(oWN8JP5uf~?hjC*qr*e=EX+`7~y10dlb}?=#crG`+;P@dqwlmu}!xmHq(#Wl0 zbm_=2`{mcB8zckjPy0w5Vy}SQ*oobluJ`!1|0Pk*D!&2 z_8#@TQ~4vR9T!G|-N8FO8TPZjD3{9MtG%Q)z@_y`J$*M1z5KFmSct6zze4zBj4MLS~SQl%@3rA zIL&-NyT69EAN0E!6 zuDC?e;b6-q4<0IyxD8Q*@&*&kLp>PXh*twKyp&#G)2TyCnGvR8{`Ve2<{7h)$qyH67M2WKx~-CRI>-m$OFs-Eot* z3(Opq_rAPou=}EuSZL!XA7OaU^p9@%H|{cec|;FQ!wS+qMZuQFbhWf;DWAsaDc3NQ z8E4DilXT##-h?TVhWZtR)8F3U1$@k?MbK8H)rco39(@b8M#ve~+#UuEerA&N`7W;g zI_8Y)J`KzN#=x>;+;M401wm^PsPDdqI@3lhDRH?V;gfi4Xi&s`)ZGHldS=G7j;L#t zfC(&-z{RB};+fN5aHkW|w2~qdj8_2s$Rc6$6`;toY$G;n=xTmi13FEF??Ya0F2`f8 zxnz@cMU0*W^O!-dj7aHGFZAev??>Oi^4cD`Gte+BP@1*15QjozdSz|9j*R;hcebo& zA`NWlpKpWcKN^Rhe$NQBx3@3$Cr*zQsJGJEF;7jZEqE7u3}3s3VXg@Vv~w)=SJtG( zvdd=emGlpDC_3U)Hup>_fh(3;_?btvB*<=s2KJ9?N)@at;*z|qD|~{fy_%vQgI$?* z7@yqhGZQK6u#GJL`j&N_BnO^&JFWI05@GOj-E>9{QX7N_c=>wk{N)prbp?+Q6qk|e z&2^US3tZeI93M;3G zrt-txk-mP|WjMTfqy}X9pR}ExX4cV3q9P)DIW9dzZ~96J?x15+iSK)!M)7Hht-+!> z^1*yp>g=TaADg<|)AV9`eT^DQ&;6PEdgU$(U5{C_Z{OBt!rajn z#&hNfwz|2F&<^H>l44M*ezr`e-t?!v?WTyashal?-=aIFm-Ng#!*lz=NA`D9 z46bL+dcD{UE_JB1rH5aP@;=#n3k`muC|uA&?}1lJF%-!kFUVJt&ARTuqI!I)+({^2&UqM0`Sy4c zie1byJulCHVhA_ay;>SZSN#NM*umh+al`sg)TK8TG}7eb7%5JggIf^k9P9aqz1i7! zyWr=zJ0*%xKKt|OZa4wyNrx78SqIEswB8&z;W)BCv2yv(u-boAf?f=#CKN8U-U{pN z6R@?fkq@8DdG02Fs91q@T~{%22EZb;7O>EtH~rT>O%7k=kdO5DAC-#^8) z|3OJhh^Gsm4)*%+r{duM{OElR+OqFHU1j-qi}*)HdbMbuRFRwgH#7XtF$!<0709qv zZ2x_tYOm=*GjJB_>8GcWTxA@S|7^&cQre`y?X`;w{n2OBJS8U^cpKd&pD_+yCs#}o6~*lsI&&P0uLt_z8^EvaC*tHHHPs=S8(2(^Ho!FBJ( zpHcDOQ+)K6At$Vg(M>n=Xh5Iy-v`d zaPdP~FwZ8Lv)2d{e{c9V0ovDo2HRv@`P-&+3h<4r-+2-6_!6EjQ?9I;mHre)QEjs23t4&8vOtBjYoDg=aQDu^d|a` zJ=yNx8PJyR_$ku`4)ne>gM9aSqKwS|Jk1@}$#l6_2PXzG z;Tvd&XB#dEUuXN*H~thr`0WC6zaF^kyi9fmIe+e}_N#KG}0mA1VAfl0%1O;MFEnO^|C_qdQ=S*adK5(Oy zMY#*;{njS@G}fo;=b$$R)oDGoVx!`IpQYYsSXwi+U7rR&^P?*#>-=)OEfDU!vU5H$ zdO70iA-OWrIPz%ws(goS9{)&iV}5sR_QM@EG%v5bIRZ4Z(p0h7?u7DK4EXGs>uf`7 z6ChKBOsyrQ&i|$@9-K3+w|h`-^abJ=TUDh&BW|j6?8NMU)0f5F+FAUzwC9vBflAEW z{L!W4+0NnhHy?XSgZsO(>wt0fZFq~!dHYjY++k|oS4M0>@HFN(gzbz;rpw=_>XQcn zbt6=CGdMi~2qslGVG*0qACJR{LFBb%POZpH3y%-0e5~Gm4+EF#drrG^5l>HAL2@A> z9fvC84B`OrS^rt1Vx7LZ-FbfSidag1sX?+>50nRn7fC3>f|rvL-xv9=&W64bdRn%? zS?Sia(RJ?P&mhkZN?vXcG2npL7WZDXZBW@14{LDP)5%n^FKInkbE9!)lEXmnp*+J3 z&PU|$_C9kvvb~+^k*9BnX5dBYSOoveSpJ7L-#pEb``EI>hH{~$gyvjQ7{b>;?77<% zbec?fgO8(*E-R_H=S#7JlheS@#h#b}-_{k0g9B3AFsfyN-n{jB;w0QTFZf_I%Bb2x znugysjo#oZYgZPrv$uB~S&&-l=}V4qtxP@K+vH!S<$Z{q9c4p({Y0c6LE9?0Rf%$N zW~^P~WZ<`Yt;mhq55`Kgu69vT(Uc3i?6C%$w5xl^{%vyV<8&)wc1*3l=WnT{(l6x;gAdf_hya7vR~HnucuT0*)tT~@e2q3NPp!HZL$Cls1Hng-GZc&-ej zrWz%QXr1Fq(}+5ECA+q&s>*IpVD#+ByHBrXn%j=%TgZM>Kfdyf07`mSTHIHSns-*R zm!dX1gc>BM%oB~~Qlsm3fQVno@u~>p;f{rSp~h6}md)^!bLtj=h$hJ7@R(|SyzlCi z^&us+c1Fh323&oxw+=o)h%sH;U7r^@PT7Uq7-+Wp5z-??BN&cYv`eXS;3@B z+k^BtWq10S+P3{S%tmYN<Ol+^J7-vrQ}}y*go&pL)kBA6$bA3aa-b$ZQ?N zh+!SW{8+y#ZX##gR&7eZRyW~pN+kgY+>Ul%fwku)27a!=Z)!wkRbjd$_uI~|XXJ+* zzTDna?F69YN1z`0kgpF~2J1w7Air~jYy=3zHEl>^3*}TCvq34MQq5bvx`H#eKkXvs zS)KASojgrKIld=#Pg)1GwG|)p9QvV$gAe3!DLsFb7q~BwOx&wf?pXL35!rFvfXg{w z3txjG4T4d+`JeCCzN0p~oM4u5Q>0c{6~8gfCU~|!?vA5aq}7=5x|Vyq6wpl*zRKT; zqcJEDl^Ge=cYp1(j_BD@Ta|u|eA;+-I;dR~(1N5m)2Kr&xttSK#=0SfS&o~#TwciM zaiv5h-8-n63S+mxgXoTdrTox~0E~I=FpcG)+``gx(08OHvVRt5aA1G|P2EODiT$Ow zd!g5m`+IRbiSPnKvp+R&mJz+_F}{bDnF%Q)3^@x+>sXk(tv9*Ke5^J!bX3oXzwY~X z*(5F)(wHJb*vH@BHG?h=HQk^2b#B z^2#f|&9-frcN$vFn04ifF1evY{q-4Bq~E3}k7%n}nkc}IGFGp0xGhy%e;9-ZjFms( zpNTRVL!3zcDjz;gqe2-^@JLCGGd@Sj?^>}^zGMVvH@Tv91Wjw)32#I2pbo#yj$O_c zh6ctjBq6pN!6agUy9o?~rqQ?k%B_5Vo@yqqRnBh4ET-k;tfK*XFEeKGGJDGg&4dle zQVnDSUb;VUwsdDhBtMRo2SQ%=u6VIiVUDn= z$$PPT3!5QUWI~)S4BvVCmO2J=5~CDjk!;T=zhyMJ;jD+HJMI?@sJbz&kQ{}!{=z-Y zX`pwQ$ZPOaJ|EZFCsF_zyHvzXRmOx7KFYy_e2c_6e)TfCpv}{LH?Y-}2g~Fcch7(8@GBX_))%^c})hyTK}^xS=T#Upx% zkcf!BiLi}FJb(7j#_vg=vf$Y^E=erCy87CEwHD#K288h$;CZ)4yM3Y5C+8d-rl6)r zKR+)f<>h%u1w*#i&23fNuiSVKnnCn+9R3WL!Fwb#QGP_8H?zd;hYw3H`c4$5V{2zN ze#H#kT->?~+52+MVXKJC9f4r1*9dH{^`VC&Z`Z@_!$cvoErwi*!|665 ziB3xRdv{Qk*bm6ohQo#)mU!j0bB6}kkE*He=|ZLk`((nVFUV%6?ZfUyi^Cie-T=m* zOS9M=`})W7O(}l8~(vQ-#ofxHe)YIe&pZ+m_&#ByIh!gDylz!hBtQW}sd7M*O zN?UsIX^iN}R^X5;Wc{Gtx89A(4sR8i#WphD;5>Q{-v9-;Hi&8ngdY5iGTpf{0Kk?R z`;e{C#ooE~ce&TieUBz=--ue$V#qaYh1(EJ8iX0NIH>o?Z7VTjj;RPi9_BS_bt=kM>yB3Y^tJ1GR47StH-}xVD)xTb<)zR1JpNOp1SEeQW z1q`QBWYlGb3W{FvJ)&i-0p0F<^wOU7zkAVnk} zyPT(RY*mMbX)f~V-#;GR{va}nreiG3afd&s0qsr1z%Or7*DD!;P+b#~w6>?sNp50R zILcnG;%4+FNF=o;ahu=c>{nfm+xOYpjAs#*g z4fJeQa*b~JDYRmx-{ftyJO1Jt(Rt;jyw5_y)2c;_;kzjwF#pZ;Pn2^HUrwWot(Iq@ z!WyfQNE+twjbT`hq*rc*z4BwG9ok}Q;s{MHu7LQgaUwKcor7g24S*%hX$Qmve=@U8 z702gdn>^;a0%G+PVuoe8b?CM-Mwn|s8hp-QY{NP z(I`DYE_cdHHON&Mm|Sc>eZ36eE}0;P{AK4d-aYda7DDTCI!0N4@Ct|eMKou9soc#~ z^SgJCXZP}uqouFS>>1J4hZfl(%7it@Z0k!mPwRm9!RP#mvjRtlc-5`)#G~p*d4`a& z5(r7Yfv^&leoiU`}yqCedi{7I0UxS^E95-3ky%_`5U*J=0mi?KRFj{&EBkW^iw@pfU?qpV^d^Sqvv>kTNGjMn)UTMRp<(S zaI3>&SQ?vesIt@8=!TnTe84WFmtblW`iXV`rS}(>Kc8W}C-5pj{q&QU|N1R}S3yf< zx^p`SlKY#cNjq8>(g;J+s)75k4!>G^+*wncOVn1Y+hk4s0F*G+BZ~{l zZV{s1fc_Zm+3I(zo!K3OMjrnQEWmx1c8>j7!RT#M?ipboclxS_F4FeG^cZu_xf^$<3^t=S55&3@y$_y4Iw0|!g{)b~c;aHb zie2q$$UE>g;iTWmKUe5hIb`!G3Qz69<=0WLuC|W|AyOfQ2YGibf0y6pBDZ?tm9`6t zif+$vFXL^31u8LzH@QL%R5P~*P$$T^+9SGhb683BZX4GbK*{s96q|J_X;>A(f&HV0(E- zFYahhY-R;_v>ydAUk>EUXs3lI2=(PPo3z00z{5gb$pMEGlr(c~?Jc6L&CGz|!D7DT z&LnQVwWi~%Cia8(d(WM+T*7=ymrA}=bgfUCyb9&UWJAwzGZ=?+qs7H8(u`-@m&02h zsppmMu(ThkTZimOw=f_=^0&3ug|gp_^x{Zf%zv&eb=qkF+%?#)S5E}G!R;#>jfPx8 zgJ^E;TvF8DF=6sgQ(UP{BZ5sHwpjWcKW;J`3vT%2Y1a)06Mho8e_|&lHV~BBugk^wN?u z172FxCwcjM+CP;><$R!_Sntj_ck04U!hfAHP?(f1C^gSwD+s2-O_yPYs`XtX1GTMV zjGmQG%WsLb{b>C@UrvLTVO050XElTLqc+MsrO3X=V5}VMl&Q3Oa_`ss^ULF?4zG#_ zOUCIQoPK?$vcoHMuQ+k^H|VaoB7TfK`$Xcf{}qVGQrLdvuycngcz=8jlU=(&8D#sA zCoB6ytfZB^Ce+|ZFp(!!!Swt+3wOqN{nAAMf+!^_*C?HxI;}ShwMR)&z9A%ZwcH*X z&ZY0Pjc$I(CM2OutwS>Z!5(NtBO0gkya{esGd|6&wq>4Hzdm1Rhk(Sl24RP{^|Pgu zw*f8d5MMNU@*$0>mgD+3l$pGj6Rnr6fF6bet1bLPaoVcEo3s79(kb}dL&Du=A`KxeH5lv-v4t4cBahUv+2WNs>>BUz}l~C zBUDS%c4{@#BmZ=TIZJ$bqg$VXHq|?BVs%tgP_~Sx#ndCEjbKzf1lItm`B;ugVioM8 zeUZCH0gR?=hG2)y>8CEC*=~D7U&Ml4$?4TMudHF}K)wQt?@yl7naLiOqI8?2@KB^2 ziTugMZ?Qa0CipaRFePW%Xt$Ak$%!60eBC(vi!NGoN3T-`K(3mmVPl9SMyKswDW|r& zmC)p+*G$4aJF>^Vn#8($p<#s^LoJ5`EZ9CWvgOXo>K-tLb^XJ@K5$ z=*>|6;(l5lv_d8;5hq_74Kbv%=ZQBfR}bb1zn>~d_)ASCBUoLPGNx7BO4%YOx5$0QI(`SOS)!{v$A&iaRNn{ z1>O9Mo`|x__cKcP*`PV+kRNuv{5G^G#(0)%Tw*hN3nq~vUoQ`l(N1H$VI(0W&ITG@CY zJznDIE7FFRP4TzrG2Z&Zn~;`v_3lfchbHX1KT*DYuCwa(F4cy;La7XJwLHchb9;t1N=v&+DT z(|?2A18KNCErImD)}JEg1k-66vJf?2rL1p#QebD+d}Snvu3fIN7MS;|GKX8-)j$+7 zF)FHCw3)P63PFDgrmi)UohD+~>d=GpY7eCBv-4Ed&TY){P%t2buBhk1zG?EanJ*4& z2(YRayu^D$v_dADh3ccT=bGvm&!odOnwhq%0qhy?W zhK&v*#ysrt%QeeAzvUw*m#SUbt}vjV@m(%5uU6|kurDi~KeL(R%1{=XH(fV-{lU=3 z9l?_GrAwUhrq3U6E6}qQ(N2n^(w2d$BSl4-G7kxFi*%`E!X$1(xq^ap#Q?;M-LVa0 zjV@CE9Jw-YxShc_!Sq;d_brESP-ye&ie(XK#-GpGQtPUy)g2+znuJl$4qh5*oVi}B zg6F?AS^m!i_kuYsb4uJ1e(H(LcXzL3aIs4}g-L?XC~6p{-^I}U6lb|}+5<#S%Pw}( z_NeS>ZCa6-jb~(G@j&zZA(YVcI-}PKUh=ccf3c>NGU<_tP|LEu+q)iXIcF{A7}2_{ z_sX4|#sQ4}=3ZXL+P-283(R%QJx`n!I@wgJ>rT*Y2({0`E|S9<+kvmm_vJC<#AZ+l zO#uA}O=*S({Ci5Pt#FYj{s;^w`3_agRQo=&8x zO7w=gPIR1FR$s^=t(ey;1qc1ThgFb3fB)2Jrt1b^z~c>GS2VfV?Y`7Me3r(XvzFA|hZ{;z z7LpB$y|S*o{36I_d*K=O?$-b;Ou<}ou)V?3NjPzC0HaIGF^W?9BGAfi1E#ft<*LJp z)NI5w)hD?lU%)cd#%?2BhBAgE_oJa+@j%X`IiM(HvV=kL#M;dZ(#QUjjY1=H!2TCw zZygs^yS5E0qJT)3(v7rqcY}1dAPoc3F@z{eH;8mM0}?}r64Kp6Ne+#~fDH96_kQ;C z?RW3{e*J#G^~ahSSaZ!<*L7ZJ9LI6m!AG+>ms&hi9uu*kmTh^qSpsMrpr$h(!2Qp{ z>A!;O|NBY5ad;f32}S`D=dAp50VZOhF>STM-8kDUWF46t<;%}pQZQmf+RFE5on|xg zz@sxqD~4V}h8FM2c?#vPinQ85ua(T3mrJ#NlpmhLtPCXPEk7BUU3Dnc2RaR++P|?G zMOi?WYgD>Dw0E61Oc3_1cS;kKp%+;=d{*x6_{IijLG~gJBs0nrD+SjxVTx&=fXa|S1Nyn4*Z|eU$C}%j?U&UWT2POFy{DL z%{O08HwG4z&3&XCx$`pB3{2rtkT(}1H@PIz*Cfi!j{}ltjOgx(E$|4mAmmf^m7-qqYm2N_z!Py zogZS5RM0J4dy!-jt%+zcWfAQVe6Bn~rE57bm@5;yc+n{)xE{q*SYb%(e?mXY$+s~( zdH_@u5*gJKBxWFkRcUR-gYWmUN}GERB8XTwQk7Z`5MVU4+hyi2+J9ZT!p-}~wi$^w zT1oTlSuSMx>6(VlKXl7}(&46}XJ*GV5w=TS`lDpR$`3*Id3CEeag#Mpg+D&oV|h_y zv88alI;_n3au=INici5z+f6*d7*j7Ej~e_ca!r$ z4S>R!fEatHiaF|O&?WH=M*kyMuWOmQp7XUNPm_GJT54^dy)2;PeM z?UzJ7<&uWggW%Y6yKcP!FXQT4FeV(r!!ewhj{zM`qO%dP)=;@yEi?H2{Y1>! z!1%SoR<|LB#v>1u^7ClF07Sjtxz(35P67bq_REdiqlwL!Vzo@m_jTdn0J_{R{sShl zV8esq@)C}mZV#3 zK}{!{o09S$FS6%wZF1AfX{)^8b*^3r=9d^~m9Oya)_0)r4+{(ExWN z*#BXT*TLw8xWIdou_)vJ*9fR_qa=4;vDjy}m21C;C<6(^=TazOJ>)1ZyHxB~o&WSB z|GoSljQ{(ay;hLC{V!EGU2*zCfC= z7&G#lpd4+~2s6p|bqlr-He~R#>TZng@82T=HU9++_=_N!+6_hONV8mqvS0AIaS=y? z!|)n?y{F81MfBp8q&hlbs-zw=aC|cc#0c_=#~PGmc$p&;8soNvB{1-VXCw|tA}!1x z&DSavU7tj@3Lq&A>z(W|z_dk?e>-r=V|;XGjlGwqDN-|4eJNV;M<;~)Tve9Kta#Sp z246TWDK-OIQJOh^)bETIe;l=6zJJ=3K;iIO0&!z^HV) z5Xf9@K=sW&O_%E%hR;A2`sU#otOP-y={d#kGFlxDKWG6{m6nKAcVLnpG)O#7{l=9u z#muYeW%g~klbZGD`5MwJQ~XUF`OwhsEC)#ovmST$4Nz`W_Va75Fs+pbFyvcVucJx% z3YsrrUjo~%j0$i(uD@@A-)u$@1-6`D-wuffn*2st8X6h~?#Z86O0DQW92QA%cSSzl zbk`ZX&J^$R1;KpZ^6o6I@I#Dv)Ev6`l5wcW@pbe)NulxF)`JVp^IIJj69RWM3N_sC z9mx8X5ow-D55QiE^2nJm591;yA^WM^sw586@8{s{uV(YLAZ=M>5y5|FqJGGthY*!S zFU#_U5pL#Ko-vw7fn)LGPAO=^&<~uM0MbeAX%up!)dET1}eyU2dLCO^zymcucebq~*`c5?A_9Ioq8c z=mN|@MA`ZF3gsux-oRB)NMoi>rIs9Jz%_<1QbK*8mny*E$5~~^u{=;n#zFPOOky#4 zXbxX+?lAQ_T-2>VfkGW-Kc$!j%Ke5A{EjmKG>Y})_vkI~zEr9hYd^{pvcRmU<}+@g zi+u?qZ2Ih(g9Yz6F7rT!VN#}FkWK#}N^yUKfh6YF9b2R6tU+z-Ui0;!^cDUOZBK_T zbfr!?_Q|iIIOpygB6k3uVc-LaDVs~%*PTWX1K#w-q{WooORiw*&VTFajDh>os5J z@$seK)&2Q~*R``^YX80Bg4Z}ShESkAndS7O>iNk%eCTTQ(2c;F2sqe#$m+d)&Nl&S z1Gmgbo2~bcvMt`%dEX$gFSqup9$=T49Wahy3diq_8=^Ljk$K%3V+4RHdnc_?=}1JrmPl z_Q+GKS{*)_v$FE4c%c5L!66*fSYfm|V8Ds(4ov0>^N#kL%@7=MWOl|Wyf%-!O{1eK zj~hcG^U;;iNoLS*K*(8x!bWDp%E`dzbDof^1e;;(<`cY&CQ2s*ZquT`vx1ulmwDAn zpA#~}%(FHfh~a3tnG{nH+h@j=cAxSj{yWNI*rm6HmSyEV>}wN3Wni}3KpPd~VA zJ6jTX4|Pj5g!FhF8&()D2BNE83OwtD_l+d+G5qTPC$#SWGA|hpD20(L4@gG8svo;Q zww1@Lk5=@?+o30qBA8;Ff@48%G5jhl`S;^rS4x7o()FsdV>o=TfpjDsV?z8mHfR8o z)0flz8mQShnSuyP^XBdEZb!Ab>Fn#Txe@xlzv2~ukY{m)33;5toR=DE?$4+8335iY zSf*82cD-(X_o)e!cwm5UZ=);rj)_#%RT-!j9o!TMomzd%V>o%&e=_Zw>9(n>KRBvg z)PIs(zFEuly3oGXW`zAR@FbS|$64^XsD=c<22B(?C4o7utBaG-nSXvFU%Z{wF&UUn z<9Itqy>jzn-pYVcxMAaWrNY>`ZJ0wSlNVeWaJvf6JZi5(147e;yQ?GP8oM30OELRT zi$0UXW*46J4)EI~`^n8UycD0M3o+&r3Ha^19u@0FfpyULVp}R?;1hCQ1GAv@j+!_9 z+?O`jzd`-cEy^!Ob;dHpBnX6K??i8+h83|kDzdX%4x462at%+n&fDx(a^G)*t9|Al z`-0C}^0M)Y0m}qH0=6wK5f`a>hrb~rqIYX5Zj-|eg1RTITNmO;z4o7ZksCheu1%Xo zWKMBe6r4DQ*50x%0(_@{vB z4(+q6*L`ETX0r&fI{;;Kz&AP?Z?-+X$9r{Y*6tAf61hXt;@vPgmwG1z$BuVl^0(z2 z-^=(S{S@kY>{4G!P+%%}Ntb%DwEe32w9I`&qsWw4FksNnP~b=* z^>&^|3*r?}y0U2Pwqm=-aGWQynV=w%+}p9hRP9ONbmet3l2V?1DMfkfmu`ZXlC}4Q z2~}R!?Q&ei&eMaC8!%JEnfFP`c;wPLW8EHTukJ9Q@+u83bz_rhwXvSv-?d&pkV(as zGC9&RUHLZGleB)vdSUmMK-+oCA|m(Bx*2*{IR!m;JastrzQj2iyt>G;Pw}ICu`AVf z!0~`1K*QPhb-kz{zplLKi9~7U7%V^?hqq7Uq*{G5w`yWzS^X|fN?*)oEAc8Qc1j`p zX#9A`ZN0ohDgQj673TgI9yp;M^#v2&hlB8Q2H70Jhqn=vCdz#a`WusMsYme~0Tth1 zZkq!{O$JI7UjPSx0%|Pq8{Hxr`|}e9OWXAtrf;RADJUNV$kDtyhwZt9akwM5>2L;5 zN5vf9)2NFlx75|xFo`?WOf&jlK}@_6(}AJaR}y#3fTTYPRb}Z-Os_H=+9GpDf^6bO7=se*CE2a#=(lEu-Gh#+Fl)2-Y z*86r7I~{aAvwe}V@K9V^%KiN2<)YW1>O_+}$(723;Ed^N2elt3{DBJ@!TVbfp zqU&*RpJF8^I4bby!Mx>pQ2Sw8xmB5OEG1AD%`B7Z00=0rD17o3u$U^GeN{?zHS*3?LE9SGT*$n5RPtBP1rDuMB6rNX*^BuWuJT#LiBpM?3GtuS^2( zZUlr}ws9{9*d}jR8kVcG*&%yF682k9#xHaRfd|S!^{`sDc?JZte{1*3t7~n?%sfj9 zmc1OHQx1DuDTaO;>&8_%+B;4c>V%`~IGu8vB2K+&$?|!BDM)E1IA9|0%8>sJ`0S^Y z>vsx7H_1ffYl(SeuO+j7dtTl4DiSPLYiR62Mej-4z-tZyWe>Nc9%b)(()(Ukh}Kr< ziI{mPZ4FHC4HO7a#X;Q}2jfJ{;+)})x0I~fm971xm2@(|Uc05P0NbC_v4hWM#cBEnZThOR#n}<*UcA9@46VYCdn7nz)ArQ*H@5Gl z9OjIQ{D0vXUY{0o|BMK={>fL_K?lQW?6abgU~q)1eX7c8lE#OJfloAqg#94fy!h3&$7aX+y9qV_6a-)zWi)8q4@?<=eYNJJA ze}yV&@sWi0;iAPJu%<*#VlcuS#?(`~e+!ZgDW~l$lbuDVD9lSH=*@tUQ7ft$uP##j zw}Y?bQc4l}D2RM1YAiK-Nl!pQtHycBXyMwpHt8(GuvYc1|NJ^RWj500VZHr=9x=O# zUDd&2^&|zZd5u+dhKN@{lDIe>!rvrCZCkeTMAP<&bs1K?UC58^&zP^3OZnv) z0l#?l!kyw`)8JX)?IkyoBBcwc817%Bj`TMW^14tQaWY2UrIlCmp1M6m(TA8=)Wnb| z#b&iFuFPT%a|&O>SME*@mIH1#=c*Y8k?sU>(a8XO1NQRGFg2CHA*(k9oI2M+=4$?K zV?B0%MHMLqVa0J;IYdT@AkO#a=>|V>06@mJprLCrLg!<$f?}^MWn7L zk`N;OA<#3ZoN$-DP@^#ElV5IKBT@11Pl;!#S4H55%l-Q{Ufweaswd=u>8VX_hnaUn z9R1?%BVu))4^7*AzW*%s-mMFY&?=0{TWvea-J9i@Y&PtAu5yTyQU6QVi043mDN0Wb zDTPrkA3U6yC>q$qm^meM8Y;-Qx(!RdyOy1757PCWtM+GUJ6o_R8{fq<;@x#GTRO*3 z&SpTn`DID>8nmF|&mmAL60(0y4q|-@4RsL`o}%@87_p)06mB9f%+d=4pd_{6W5$ zk?PbG3OeCE-Gc2o{0-ZEw2^ZF*L|o*-gs%YaH8wmIGutWAeAf+dV-l|savK~DAwXl zMhi&-Ei@;q-CbmtO-dgC0FHuzeA9OSaQdZPnWYx(V|<1ZwWa1H8kt87bHG+z5@r$p zG4c72dA3&(+lBcQ#p>&v$A+j#?-9{7?n^3Sr{b|nQxW#w1UpOhzzX58x9R+*MnnvT z%^uIn3`!I5V;PX@3o#U~YvDt>sJWu#cr1FUmu#D1Vzs|&J^JyNl1G~&lnbxFDY&lb z+&sck3Q=M`-5f0oTz&VDJQ{i5dN?ha!=y215h!AIz2WREHOOl9eUdw~Aat2lJ1tfX z&s zOuXDG#8;oy=nd&|S z$+$W(Oe`Z5si0<%j@!X0`)|zA>!_0|ws-4%CJQHb?_Ku6T|F(M%y@de^p60KEUJ2mWm zrHMT7J~@#2ukX)EEClEjq7(|19Fr*chx?z`RVOkVQ#O0;pe$MCLf>2p@ADA#`$IFu z>SJfCmcD5=Ky~7s)b|&h!s@gd{nuVCW$<&7D?}d#B%2{$^MH&+!@Vj#D~qJ4^XyhX z_>0*NEP-6=IAKDy&h-bD%07*0ZI8YRzUA1$3xDVJV|Qd$69otEC|sic3gw!u6OrDq z&4O9qaQQ97?v`630C|RYIA7#-{Ler8QlH^pf6%XL-G-NsA5E&5K_m z>kQ0(J>1pU_6|Fsl>Gl$!pnd&LZrBtOycXIzr>PK?Dm(G)MbhX0T6M>o4smb?wg z0p_&WA2#oLc2tq-Vcx(o z1=Ut4Gb%+{nuTI2ZPYW>^5}=7lUURRgo1T+stQ!71o$~v7WNlrTX~KHIJ|DJh1SJW zu5K2BSH=!aTZSuJ4+r^(?;Fa#uEwSinV7527dvliaI__YWC^&4-}+zb%Ed$ql4CnA zpUN1CxR=Cx8GLWtvrs5#?N~QmPnyoZ5?9U_-_jXZpD7wW;w%bLs--#w>(IK$y=cQ* zM;g-E$K_Aj>NqwiH(UA+5|%G2hSy%rj57HuIan!)WH5qAiFqMCLv_!%%X1lEdL8s- zUj1`Y^y3|{A@>Puulh?B-OZ$aN8QP~9g5dW9^hZwAB9PJ1L#4{&6(xC83bT~@mZXd zLMXW|8+_&_pX==G$0m#P{37<%Um9U*+$Z;Cryj|08lDj`d_6m;Y;flef3%$DTZst^ zww*0G&VE}pxLUq^heuG1hN)6bE=K5{DEB43i1{hpcE3b9fbgPnjKKudwpS6hw`ynW z;6yrOosw=f6gN`%yc(Ncw-Q|jV$@J%E>@AgBQ9Xi8c^W!rQUv0Udj+Z__eNEWo9Zj5RpUi_>|AK983$4 z7<4KOTp8-nL_!Z1>X}_zq`E%J@2-;zxy2QH&6IG-Dg*~rP}yw1##Y?P4`e=I_u4zCMyc z&fDDP#!CIy*O;7IOMZxH;aZ*|!^p@r1#x5g0W&ip_su*xl~3{h;(cAXx%^6;5Iial^E0#m1>wnp0UO^ri^A5(Y`U7AJ24ru5fF~yI0&0U1GLF(p4J5;3n|2e140I#i*2H7`Z97DUWK5 zm$Yee&V|Nhs4d_!{00J`e?Cyc_=do`I3dGwvO4j0qc$=&=`` z)rIuPOd%lVB|5`fTdWcOG@op{G3?eB z^<(Idy&Ga&Jl&2Ab_5M3H96ykPb!sBoS(IPSEE-^UL*g=R*fd&TIMPl0zidXdhjf1 zpWKM~3nH#Nm<%L63Z!PVjeGZASFS1=)Q0yx2i@H|HmdmPx|0Q+%k7H=?h6J?G*E?0 z8t1%{BK>)pQs;+Yfi-wnvFj&L>dm;a>$kT$WJ?4E`fUbPl?C86cYjy=tVnfnqf@9p zoXS&-zj-TilU)XG85JRC7LW?(r!4?PdsHEOtZNA^zNd5`21FUUb&Y(@=ZY5AQZH*$ z9XxyRMPMj>p7y8;-^t1A-Hm>oT0M5Zv+6A64c6{G8|=#+TfYkUdfBWFaU7{z**Y54 zZYAm~p$3btyF7J?J(r#7hK|N#S=7X&y0)uUm3)Pmx-$~R+$y1#6@pIHO4F6V>}Op~ z?))rH`--IND?wMuNCcH64q`iZ;>TlcrR;$Vu4B6V%YU$-XDJWub^f}7t1^qTA?8I_thnYLBcLh%;r0Tymn5R^oHmHJY6+mmH5`RikSmK# zrzJ?^hP5o&RIUKw>2mXIKhf*3W^=0{1@QTqhtd6%h17DvY<^D`rGXssypXz6 zJ{R8?RukRfyJ;9IzIOoPH*3ZPCj9}E1dpU%b;jcpG)Q8@W7RE_!~Lu@na^eX-KQ#} z{0TJ`WjiGa_M`C0kx?x7Y#B5hmg5dmi7DzMM1h@S(Vcvu<5G`i>rsg(uzlZhDGbgq zG0!sYgg7oOC5~hZDi+7?>p9j_F4rgQdicEas{G0J$~i+MVUiqP6jOzr+uFlg{RI}6 zh4jJ`I~(^ofSuP1V^&NXpXYqP=ulgdpj5wTJrM(?3B-Jgx>df6^R#Nv@X+B4qPJ`ScX35}DIlMdE8gPLi8l^##b_=xK^Ya&FuzjiN!$WvS9z4)Q)q1zC zDC41ure+K+u?TqWEo==9{q4QKI6~e@hG0T-1?7HyQTQ4;1}|i>TRA6})ho~Om7Upn z#ZR4s;eU!qQ8szXE9e|8UP^Wgf5FhV>s3R+`wKj+mnSP@fsb{uO(#}jaJ*LMzv*D~ z#SSAf!+yKJ7YvILPDU7CwJt>>TTdxL3r*=Z!>J0jg30BdV@v{yFBVwdIj?^L)%h(w z8pvc4Xqzo=a5!DZkr)di2emjH2*X-IXkvXk5#~OJ&t790PxoDRrBm5+Z!ZK-z0bGP zhnQA%7jQoEFAAA~hzMG`uG=JdjKfDVdA6+2K~PS|Ht~z0$+N!v*wQ9;lh!19X?MxH zz_O-_{L97K(Jwx?L1ktms-FXI3K59o&C#~N?h-CuAOuFPo!-}*#4H(_%~(1LSM?v3 zjRJ3#GDROR3Xu`tT}`#k+qj;b)$d&jlaCAv!M zQ^xzoU+ac=U7#Jo3ESc9p}U9~GKc83e(mB~^rlp!Iyup4>cQ2pn-=BcfMMNcfQb@M z4{^JEOr)4+A(ooyd*OHL3C%*B83MSOtN^yf3;iRox@L3M_kU=8i|P%@+J=Z#U<4V*}I=NuZY*~vc#3)FrX1cYBsvay%y*3qO z(Yxgd*}6XFns&aU7rW}xB9>{H9LiqKMbzH%0vuUOVOwfySkHJJ%nOoMnx)EJg;BnD zrZ>|?f#`p)(ye|Q$#26dB?>DTX9HuZI;Bb^X=jK?kKMQMQS{eu_WyGJzkREUQp!ysN)d@DDgb__uMo^G|Fp*+0XCx*Jn!;8mU|Z&a%dP=EnJ4jVlw9LM>VD zO}^G%iXiiI%3tih(KuKW82Kztfyj2%gMuNcDF~)@(GQ+gUI)S~OGf}+#%HOwN(fpk zvpw}*xp_Us?3PO55pnL_-sR^ApJ~rrm~xtCxYwCLaw(-btu7`pTeoI~LNb-9^RhCb z<&!GY=Xi~WjCfJ_T;97=N*855z022%ua6mMllj95+rO@56mN?yjV$PWPeNF78p|S; zC6tCqyO?7SVpa#UWd*ZEz@KE%aZ-Rla*@D3)4m+C^6y1mahrle^FQ%WLMafosu1N`XEzcGA3f`H ztvovgpW)uSj~n&^1=oRY|6Pcsu(OuqJ&sJuHAm$@Fv`7Rp z#{0I5yrL{$_d?BL8kI+%7e0o*lbUJv2l#uO_32bAxB`(Ny-MqXdo&fXB;)**h-;zcBGRS?`K{D}JZ1Nh%dp+5_z zXPlDOI=vWJVBCV{&ML!`_Un$l&-*Ld0D!<@+|b)qkN;TM@j`i~D~z^D9VeCOL-kX6jRbcR?T>dqI1c~!WfY$k2--H}K9jalbM<=uM17W+wMn^{{?YyG=%R&76n;44J;h0cn zO@}8x4}a!pFsi%*$m^1R+gqIXab~}o3*_2m^Rp<2*8!BqJhIuU#IXE$tMT#icwP!% z5&h?U`j0?~IvAbaHJ3m5IRnDNe_Kn7LWt|*YVg5>;GP^}F~G73=RJRiUhp~|5NBEB z;^M;NWqtX_Yu-Z*OZZ6&MV?5BP13V9@E^}P*$BxNkT90J*ZOkL3|FYo-5?(dON18? z#h(LhTY{Snkars%9Lv5%89ay)no54twC4$Y_7?yC4F38Y zw-hxYT!YnzM(>$`p|U()Je)ERfm(8e^NL#QaUyK#aT`23Ob60;osSDTk@t>|;%j4PNcO zQkWk&_yhaPZ@iC1*1q824$bFt{zY){@Ad{b4*?MCV@(mf>UqBkBI=ZcwjOY?a93g4 zB)>p?bI0_=HVWlWw9#g{9A=;hLG4kr&1e@-k`pZo|i20^1&o_BT|q3axT;wek3 z-@7o}PVJ=o|1qM^lJAPeiR0_llFJA)8KWU7b;;tv>9*4>uaRdufmFeJ-V(oJ;pbLNLpS_4;CpRR#JbzF8he!L*XZ#~o@}0tzGX24L zB9k5L+BeJAy38I7H?7ZiQC(W}lCzH_5XamcRPdg0kpv)z8VAlx5ruS2F_RT?m^&xa z<<0@`1)oU%VAZdopDxi!tv_5=O{p@$uzceY{S@W?BAP{Z3q)w%f$+T4^4_19l41-h zzDbE^=w|_a=YdZQkzlR^A)h$Q*DgJ*IIWVh#X355l2Q&UtwIzcz6p$#W^!;&lLApT zN`X@C(B|c(Pv1vBOQlqrVEaGac^1+RwHhWhg1XZ6m~>Dsl8=$0cB)Z_k%{fQcisE* zy}_MF#WyX1XjPKyau{<^7BaiTzZih2&3xZHY$!ED?0T%O$>HA#I4|oQj+nMe-en4@ zE{S*+DO(SWMPTif2GnjP(U=O8@&u%DS;eC~Eb&Yf*yyrFa3PS_gP)RwJsr|s zxHIZj8N@s2R!Vn7Q_590xRew2B|L8OI9^NQbGH$8yGCU!St z&!1oL|7p%jhTtiBI@uh7L|{{j zDSJ;>sSDLu=hwnV%WG;FlmU>crpK>et^*ldbW2?*d%ncJBoL$0Yh`da%5v-LVtg|m z>!BPiw#XmXE2%sl8Tmfe2Zl;66(3+jsoa{?(jV-1(xx4r7`Esm?FlTJ_%Ykc`JLD5 zhV)AwMb>5-L5n&V)qW68FzGIIUSf__-dvU7RyCvp9bH&73&Kd@z~A@y-VIDU_Uji+ z=SbH;cR zW&?8jgbPp?PCkfn$^bEEF0GT?2D@p+(}Tr^SU?R$PIn-=c&b!u5@;4vNG3qf?cIRy z;^@X(fewZ7yM-JKV3D2C9L%*S$l*p(v*NW`N06*HFVqDbndL_>D-jUMd6wyE(;lV` zr|TY91CLlaNUfxK;2axxx~0UwX=n@RdWy9HS;m|4Ux% zeGinqWZ5dgBCJ0dIbaVcz_1aU&T0IzOgmn9`03-rmxDqdB(vkszFIz;D1>u$=kEPV z$TEPgmX*(1Zhu|v(kYU4HL4C2BVsm?EaY5nw~bB9u7IR-$@n$bngzI)z6{Yi#v@8L zA{jr{E{+PApKrGnnEv6>-Se2FXzA*rR>SxmfRK<+;pjCd5%3<#AWuz?7)W7J1&BFiUX&m<1Z;dxyTVPE8vOmXlhI?u@3 zFmS>NynoPf)`%yr#JJjV_O;3Pc=UPgeFdkLRT-V?m-Yi$e5}RhBj56lG}UG^l0U%w z*+`3ZZx(wjr|~3SSfH@|OA8o+x)ZHxC_aj%Lag8%&UsL4_BbxWq1bkgJo zy}bD*Lmfms4^3bJuR2r=pJT^l2+G&YR20yQe|KyZ?)28ygbXC>hU~`^^hR6AqDHUk z4ApEo9@BoX9~{Yyku-6pp>?kxO0_@Uoo1=g6}DE)j;S>7kZQ1ejYXv=vLMLPpf+8m zbK;}f+`kj+O(pnhI!Y}|9P)kPn|-{%(VRtHeAqm|#41~t$=DU-Kd(1xIR`+Z88esU z6oPIcv)>`=_WAj`yb#&tPJg^FudFmT1~GRD!X=+p>dKpi3hP&zcm&T@i65C13&)RO zcm3J#kU_ztnK~5n2rC*+hrjdYj4W9F@{m<8u7Le;to4I30oyp_gP^tRhl#>VAAw@V zt*P&7iBLOhRTwD|t9DV;Gm~9eQHWN%D4)wz*bHd?PfRFuJKg|92lv_rlTv{W>* z7C+PPW4^|$tMF=}<81d{U1rZH%jQ7owlSUsH1kIoZ08iNDMM@m_SmhUHIF5ikU#yz zIjt({%xT qMBW%X^4f#^)%;zY$@GNvsw5J-SqPvWV@GLOJ@%<)D6JMLRVdeE@>kdt zcI)4x&qfP^ws)sllTzv6WW08gnZE+W-8RsP9v;nLh5mUj{~-{pllpi=U1Pq;=tBg{ z!I381sH)w@X1#%3RsM2>p|HW78IaaR>@=`vfd~$ zQ*z0OD~-A-##1nHd~yj1oif z!Bpt;-*$j>ma$D^+ubdi9RSwyh@ygRORQJ01VIet^C?CC_AcQ%qnMAh<$d%iSH&J- z^cGs|`X=#@+4Pnyc*?ogLSpd?h!wJC2PJFeFV9S=!%9(PW!htzP!2~I!>(3{*`MPh z_UmGv7$CRw%`^<}R#lAG`;N%|c&2>My+syJWE53$6^t%m&@O^HOB)=D>0DFUcDgmJ z0(6M;VBerqdM|F#=_3=y-Z#GcyVBZ~krx0oR`oa^dIt2U5!)O})kZ|CC4M~F=vV29 zAj+4+BpGMCB`-H?6HaC~p81(6F5}0rM*48>kKvV~CMrGyqB;y3?~=za=OJqUj&=%W zEQ>pyXn|6+bk7&{=-c|&Tn`Fmb4n(sN_4NUuddSJ2`{cvxvle}o^em?Ocn=VKi8~T zs0ZcqIg;;8#JcM^)$h-jl2(a`xn$9i>W9n$sw}MW7eLirr{s-A!qfo1b@@TghvyZ0 zUmpG``cqs+#TU)vw_hc!X5PV2TeYePmmT2GfRkn%Ngkz3UiA#~`{1~?cS1?R-IKPF za|_ihs?}AeBk4>y6yhFzh4Z=ZL!YZJi^|XYnq3*ux;Fkt#>1F7t!%N1epl`_>Um} zzh6=t61>%LygG>(vSfhHdAX&XgExLqy1kh~yYlJ{3d|u}lE{T?vj7URnKV9KrN*)T#+-pzfD?56I-}9xvoD_%@qDX%4?_Sz37W(J@7faa-~ttnBS!cupp$h zOC!>d3IRYBl9k9Be0gGR)cEE;g{aS0yZ01-8o_1lCzku& zO?(ki6!~h&PkUlAhju0=fZp9v{K1D-eR1(OCb~N@Vwbqz&H=gItg?VlgU$6fwi&ty zW{#i6ZNa>Mm(IHvtbzB-t#Ta66|_@z|x&C~SA-#yWuE z1o%wnA0Ioi&Yr#zJK_2g{hdGU*HhH#KVFYI?hNCpG$i9OYLbSTMlMF)eLO6o`Z$p% z+jXtpkKJOVyacw0@g-xrV<~H-Wa!ma+jd9M><9}b*YBf1 zdJ5Y;`IGhe$7S?TGw`6aHa!?du3$Y=jV+1$`t7$D>NH}~f$Q@gcD1P&|@y(YN zxI6UQ8lKErp`4MuYG`zS0+Y&M-4Fg#{^_kGErH^?a9{?mTe?;$ORxH@p5WsoNpf?y z6Rauinmt>2f`r7{oiUr*xR?F;1UQL5HTL_XN4Lbud`_HLa6aH9w#4nruVqNPS-$yW zb|@|bqY(qTrR`Zlh3ho@Qo5;Xnn7{3=+zD0Y=5R)0H-_Pybxkx%4xqHD2 z^E~6j{CwM6rpY^c(fEPG&mES;m3drv3RA0Nv@%=v_04%7{bN-qHlgCH6cDY23waH+ ztqHpSg&hL+J|}dj&Ao=qZ?V9w(vfbcnl2-xp4-*Nq7Xgb2-TKIgQZ!1y%qI1({OU+ zDAT-$jk1j&Bu?XszrwCe8zJeGYvPd)CTJdqNPRuUx6n7^s`AR&t{!}jtddJY_U*jA z$^B>gO>%(oi{FyX1IYu@xliVu{V1In2nxiA@umZw{VtVcg(7O7@R1F7b4QL-mE|2dm0QMFnqVPg2-W{yXlaq3P(--ekYH`P1n z$N1TbH;c9HDe*B=^K)$1-5JHn<}%-rD43Pid6TJnXgkp*eMJ--O(bKuJYtw=&Q3#b zU(@#g7jWpSIZ#g%k2u@wPgyP`RTX9>ah!4CIxm!jDYg+?S(nFpW-dEW-HtpwNaPF# zdO~V7d&F2%;IFgQ+K#HlBK$KVh&i*Kc7e%HyKp3ms?Y*egxofM&N0%k~HU^z$n!(&6;;=UR{5PUK}7Ev&iO2ByI4|rxf?N?Me z&4|5X#pQTpmU=wN1EzmVAy_ct=4g-!u%g$yvUS!nP3UpQHFSEB_P>ojAY+Oj<=gK9 zKm96G4RW%3ijPuF^msB^!mMCVy$(HGf|Y5__OSkLUOW_>?%24!R z>x9))v`jV4I{rv2T))AQ(Apf-tMp3s15_35y0#!?mA)!q9G~zn^idLIKR-lrilEUB z1)eFH8&&(ULzcdT*E_8!@!V$0Ko%B3#bCt+(Wx5?grUQ2;m2-rMCxdioaB3HOnhVQ!$$C!Z->#!wdLz%rw>H zm=dQhr!_d(M8ak;_LJQS&HtDI>)A=7Ch`hhfxeXw8MM4%(9zNEHx9o{(20+Dt-0uAL)^K{A<-A+I zsEG)jd~~h?Wk3|SRiET3e6;wrLaY|RVYTm5m(Wh(SnA}fC|pq@=$%~Y3Y{F4z^blL zkLm=dP$d?{>e=!QmlrPHdtx^nAEiUx!@EdUqkAL^ZzQ|EqNkb@AZ$$~l`3+@* zcM~HTAzS4Qc>LeKsH%v}7)y*AH#5jY1{ocz>}PuA-0b_R_vtk__h{+p=tyIyI`uY> z7gCyDZO~Y5imZ;r_a<;zJ3alMyu~ltoJpcR2(eRPHu@JW4!~`lM&QeptD>5erf@5P zGjQKQ!c6c%d=4Av45IbUlb?ph9sQgSjmtyFD+U&?X zGWd?zIO~h2o4Pt^Nb=b(Rh3Se^_G{eGCLr>WIK%u8&XbYot$Aep31OhH^$?JvU@&; z@;Odcd;-r9 z=$k>U7f6g8;yI!zf%;0vV1H`!iVFm*Q~m`l;g8q|n5_%|Gib&B+T+w+Ud<9*ow57; z(o2ucSU$k-A`igOGW0#`haO%XEAR$h&!Ik3$Ek6?)aXGbGLK};&GqN=CBv^d6E9M zcKSTISv0%*+y8OH-U^`5Rz~!dO;R~Z=^;gzP6HVxcF~PZi$55Y&N5yloEYRe^%N6( zcm|X-9Av&50l069w7v8Qc&7LACU;brcEYXqPaFxB;8(Yua&;dkTiTJxy)sichpGMe zT47zXHo8i8ijZ|#SUYFiwFJ`pP!!hgh{JAH|IV-Dl%r5Rd-t(mWe71l~mT;x<3jNfKtE>*kYM&A)f&X$r>iwl3D2HKCU#nyEQRADj11r`&)5l%9 zj0~{G9Skl+LjAkUw?mQU9;{;xpdfO?i#q-lcHqC zy&?cc-uH^$=}tl6$;}&*$q*~ zisqF^L#mpTWQ0~$>Ez3%zHv9Kgx)Fvp)r?#<58c?BR&VgKy~95n`kf})MZ5~8DdbK z@rm6u?|hhc3owP-0QV?~OPjIGU_8FaWch*Ha=GAy5v}3gbTk3TQKYI(w#lr?-|%vB z*6uj3@oE*IMVy^!tCu)>1V1ze`Neqdb%%E}j|41~xDx2rS%tq|K13iJi7~(7BiaJ~ z4`FW|)#kcw5AU|L(A^d-(4r-{m!d&iJh;2GxCM7D?(SZ!!9BQCa4j0#o#GN8Kz{E& z=bm%V_nmX^{VN%RkpXX5&wAFHYpyv_t{EIYrA$1z1-A6aLOlVe0UNL;qi$0lM^7Jz z@s5A!)v7cP#DUf25NZAw$~V;XbdRLpJU~1(Q(nadeFR5Xtcj>voHZP9S)Qs{jnyVM zKb6nr*1aYg)7_#y3ND#2Pw-9&gEU96ingW|-cay<$9r*O*?C_&;!WXt_`xt&B7w+j z<;&5eJM_@Dtf#3Jsym*`>^Nff46z;W@x0yd_R4{9O5k|EN3w-uJ!JRmo$1}%E}PLNJ0 zFKb&X`~QdKLPOzS{SVfWt1(ac53@A!JB& zb10A!r~5|#W$gr3Uwm&rxc#~m$Kuy#@7|@DB2qH-%%1c^mb7?Pt7Tno*>O1XNcMap z72K!y&r(U^ePqejg+-BEs`aO7G9hMDm8uB}-Rl=_>0wkaNVp1h8*Lf!tRKLp2wP#s z^zbQ>{DKJvs$#us$Mb`g@6H!G&o}$hRi9P^g2Y@Gl*eHGHfM+g8bUHt)j?6*I!9ZW#X~O#X09WIMq5byjcOj;&}}4sTh7FdSCl(&T&u4O^1{9Snta4 z&!YJf*qpXlmJlq?Jl9VlA`XlpQ=L7Oy=>yd&ny_}ld zIbUtXPexafyK<52PJ2LDW=I;8b$>g5#P$Q;d3QC&Emw0A*A8>7DI1c1UgAvHHCYLO{DV@UQ zdP{2PQWGRx13(lteKv2x(Y^Z4}W_f^}&;p2IhhSlQ!2= zXYv9uU6SVx7h5xJkG(W>`&EkEvo}W>H4pV<YT=?3Zq`hn4X>P#8p->7v-2Q~5 zIKR-|pvYrhH*9eaFDNRQ)B`}^0$9P}w!II<>p-pFw|9u#(t4eXJ;{nHWJ=c0rS=$< z0)M|p_L}p6(J7eQ;uwbp;X)xISC@q4iGES(8Kn8`) zFKsSnQTuj&N`NM=JZlZm*5NW@s5oskmV?if4+Cf?WiN}K|6{516R{PyQM^6byO^bC zu;K!#?&;*u>FrBy(A6_(w+Y=`@&(eJn5_!0Ok9e=w^W?G=C+|!q;&Y?*Zi7>7oYg( zxeI$8RL5MliAiy-AAQah&M@*6$SKA7;?~z%+e&e;Ysz3AG4c=CRi<=3J7huAn6A_-mr`1e}YV~WH(_0HIQ08bdjsP8=&PW5_ zlgE3%Ix6rnbsYvwONjSTC!v$KBLb6U>St#4=CNW|H#dXqyKkOh8X5XX^`t zo~kw=&){(>m0?BQklK~-+=P}B-guzz2XgBL{O$z-t)fh;43(w77Tlckfqi3j34S9L zSciVIQ84~o1R*f!en#7(G`=12iY~t}ZAe~a@)Gb_6&k;zvYMy`%ja-Go|-Ot@ud}q z+!kontU22uMkeFIlVz%r*p&Q*(>w>0&2_eGwaM0;JM(sGI#zfZv;%7SQ#rnuV6iXL zS=OV|ZeN9#s(po^ zGt~w!nAh^O$jxcW!2=fs$mIgSL%R6opmDFF+E|{U@7W7(t4Z+-4m6+7O+EimB7Ide z-%K)sX!O=_Mww%C>gCaV*{!SJito+xAbW`qk`lN>1#%@i z?`|S*qVUn2?(N2}4KaL~pKWi)Pr0|qO_wEGKt1{-tHgfqx5K@!RXlfmdjqQyVsuCL zVU(c^shVttc{Rq8$}sE$AXsyhbDy4m4)E@o)t1uEQmfFAe>z+Hm_)X?mpo{7Rgc)Zo1H$Tb>g?Q{}gKK!Q@wF)< z|0tW^e`m>lH!SR|&)1M}s$w%;o^Hi#_-oKJ2;TuQ&Z=I*6?dLV$~T~FgAJ1*Y6Z5d zq)x!%3V7V&3<+GdwLN9!2MqhJm%w5K;V{#~FNJr64iI1Vfo`L~*7nODQkfO}Jab?j zu+$2I(5^LMq^*5H$s?B>-c-6zJ2z>APtGhFnTADrw#C1tlY#KMFahC*Pnp%QJ(6mX zan21Br&q}OvN@8}jPFnqtQUUul0#)w9^>myu|+b8&UCDx<3{zVd5m{rKr(YG^C!Ja z+Edq=>bzP&5lvlLw~W&8G$YB4$5Px6n|wgI0H*G_(&&ZE1C*XhF06}UJI~^*;XP1! z#EAljMi5U8pjpFsh#yU#Uz9vmzWWi~OW9e*^?h6tgH&5e6N3-$^}z^qLbA7=7Sw?? zme8StVT4zTL+N_#oGZ39q^%w=Xt83;e^-T7gP-o1Nckm8$ScKax<-}0pqa?(0$%YG zuiXfkxp3!0_fJW>K`{^}10(}N$jh}Xl-OV+lvtzg70dQKe82r1(HDO{_06BH6J_}E zlZqUuyUJZItNyX?{En0hEeX++wNU!1fz0kbda1y7m#Z7cczvB=< zeteTFk+b#X$ovyUM+QhsLE6R=K4*Lqmw z>cY&%T6&ZHL%Wi6>1V(UDcK1Vo{kZyPrB5!EEHkF+HIce z^&woOs^d04!Z}%ZlSwTuTE>UT*g~Kh{dta6wV^zIK;uugED=~{aRpYR(bD)0tM+fL zf;xWK%VaE$^jtOqD#f6mBrGyAG8!DLhr7*?+2sPs{+@1{fN2{{9I|(mj-}eY;3PKP zxuS);6$apA7DgVBu4CD%w*2Y4Bo_x#-g3LQ3BImd4qH)y;T~koOYK^Jq`Vw?H?jyN zAFE&Qjp5{VnypeAbAVn_&K#+*J#6G@jWVhD82-Zx&{Km1S#W@la=|xtGrvS8eF}W` z4&n=>CT+2aq!ugggviy#^oKLz#hW6yt*1qyrsNu6DZFEGi{$G)i`@a1@%?v@T~_GE zr_Wa2hGDGR4AzXCnYV1Lq6KXmRFA`14lZ0NlMmf?^J%$KR4pP+N8?qYv7Wd&>a^%z zV@;lSCi;gR2fvn1s)M7hUq8Ds0@s2&Y}l1+3-Mb`$(NL70WOKY9wg{%;adgrP4~+V z@5j9vo+ta#BhIm&2q}q(UD6_=+q<} zD;UiVsws?42^G9N38dj4*PWa9SZ+lnhf!5v*E2+^1N+y(KckcFf+i&60zmuv12vO_xz? zKK#R}xo>}L;mi2#rszxbDm*YZ3cIA+r*|!M{xkpesz{f-82_RY|FfbhTu#nr*J@b-E=TirPr~)&!R{{<$hhC-O1^PYDcNeV*F0Oj0 z-JWoD5Sg1=^PD+kS+5|Rx;+j=2M#`D$qZ52`2xJkrcjtXvvH7Wj}fO z`K&f9cOBQT>ysyubrm<7ej}hlA(hEknkFxXF3Grt&TSzt|06B8+Mwhw!XoMS;=@c>Pw^9@gq|~}Iy9TKeM?#o3T6G)M zP+OGvF4hgVBk=bw+P?Q*YQMuUS1VmITOk;Y*JS++CE?vXjvKpYqrzgk4M%FbinRIT z%N`6;wj$!?dTs7_+)&R@oxnPeK_Z#3jJLk!x`Rz(+7oIRem<B)<$l&;|BT1 z9hA4^+?y!Ht^o!8mR~4JUvW&WmzjgshAs1}VwmcMHWVGiL&h>()eC-eG%CLqNqC_$ zXIb&9_{yx-#jbmk5)yuFE`K6Hd=Rdh@<&YU98O7Pg_9k~d(<^Wr-ittOyTBo8=d3# zfX7oUKj3_{^+Zk|~XChP6WAF1m>0mV$f8 zFjnl}Ey^(2t+9+blA8}_;Z?PYZ-&nOUI@JRCc4fr6!oU?$oRQ9Vu6e%MU)}GE+SKs zMevOLNcrU?OwiwsnqRktTmc#lCFpHKB`*cb!`SHU(XjqRdSw8}hUB-I9zeA_^~#TW zDX-W6gaXq$U^QHQ;j_B-L%GLde;;*=zk1NSp88a<#Fp&C{DEyRB@gIVOr~&h44Ftz z{%;+UD^!(CA?uKzbmYhRsadup)g-P#A^sD7H5@_dY~9AMQmwA4XZ<6JKk2@1_9sVD z?9GIq3LsD=>P3G}RcHt`F@_Uu-2XXZyn%GxF{are^gLtVNsO zVI#-p*!V)3hv~VH$Xd{kh&QC18xVN1k4Jd8R#^e`;+5lXgRlETy6Kric>n0k%pRso z+IuPz*@%4t4J{R)YG`5T2z6ePlNlW!b>7KvmuYevz)Lk%8Es65r+7Zxzfh}jq@~S) zv}i-{TAa2OXm`S!OnD&iTVO1tl)|EI@y+~B?MBN9us#%a*-OHIDK0)aeP9rJ)i82x zU%`gs+?v$QkH>zvJEyPVai0_;3eQwJ{#G`C|Z)H*SlFZT?}`o z?S?NlFHW^JR2IPIQPWx8HnDpHU?_1R~#p@#g zJ@4VB#tR=|yF)#7Aim~k_SDN&Q%9_d2&tyF+w4J)XdU@gXU3fvp<@V1K4`4nb%EOyJ zmDJQYWHYbri|<=dK{j-< z4k#jAEtV2uas)p_UOheFye;$`v6(H#s|ufl%j=SiSi+356s_lxBsnSTY4P{#BimSJ z;=-i#>rbe*SGIl~{1Qpqw+|>!W3#^o% zQfjNiu9f>kv*}q_<)Ds;@K^geOEY9(W|wgTkQIFQzBD^}vhQ7QF>4GK$-yJtzs=75 zlVsoLTW->dR$w)NY9p>mO_@t#3V1K*vrn&xo;B3^v3Bjo(z<+&`9k>M;(3*q6%S*g zS|>=$DsM>7&du*kQfgod@P->BP!#Te_!F8ut&uM`3y#t+++;qA*IIQ7|iOWT+qdq zDcVvuK*Ne@*aE2XCvO`0`IX5oj}Wm>yiXoSzv2#|i=pft)L$q(6rxy#gPnc>y357m zJA3}L$%joR1nSPkg<6$=$xz7vE9lC+4zmiG{J}ZCTiPvw)NCuW&O~> z_)?TLpf$}xRL9w9BoV1R+KZ0Wab!B=$dcsuxpAIsjuh+5;q9fW?8$w==&)0hLtCu8 z{fIJHa^c?ME(T4Jx0XD1)#caEAWPw?rfrMD(D`q-`L1jg`Vwrs99pE)p3d$VK z0*lRGE&ZZnjFXCa^?fW*am;=xqT1(j2u$ds+hqTVwlI@gmUd0a=Kj`WPNEGe7DGcc z;S_=Rru_wxMx?CUB~}-Gi(>b@i{@2Vt7=045?B54-(+{1w++>{h28E&6Y9r67_Bge z99}=R3-=AYzeF_Dk`PJczdCbg;fOon>5uP@t91%^b*F9WGY}stHLE&ERHu)UQG=A3 zyly!WQTIEEir4(3d3GH)Oa^WO$S;edAc!T~*jcUQvH7EpmC?@5-FKbli>y?_u{0GY z_37x^o!pd&I(v2;*RYG-#mKLx=3jUOjw&W#Xw~?sguN?Zdw;Bx(>y`^`vA!j{`Dd% z+s%?4_J`dl4*N?6E$P;V#!asszz0v|h#IeJ^E=)h?(hQmq+sO$EW!LQyb%AcH*pN2 z6;t6>j6WNnm+3|jFIOz~mg=@Y$?kObr#oY>ya`voF1UNx$=_%z25b%FXWwp=Xq6as zmoWJ`#HUj0D;~4AlV0Kc^tqj^P7`l$*miNu2mssnA|`H$r$@wJn!IRDJpR zBfj$a^|SRTUQJhNCpw-G}0MdWcA5xBiloFXImq~isiX5+A_dSjTe%ZZYWLn`>#CG zNfog7ds(Rken17~oy^g1>}Wxix?K=`i?4d%J(U?!KQXC5nmAZk?^P$E-ubmmLSvU^ ztjdXgM9VL4uYz*#@4aLK?}NIx%mHO>_5C_^HP>XIXf|0N zqnai4fO0Zvf$Tl4AVbz0k{4pt6O}%g7jM3b-}LKb9rBo-n$S+lbQ##*`v@w{x4Pl@ z+^%AhL8l^@JdPgW`(K_t$Q|>^QZANDuML@(QD-Xi!2{8hj@u+=J>0?|dOuNPk2pJ_ z-?_)6R9hR@A@aYu*x$#mu{hj6>cEPeqsbVvk>z`F%3Re^8Zm^Itn$|ETv~>Jy!*#A zn$h+&ZlB|RezS-;7X~=aWGq&HdzTLM3*Fl%O%d<)NByKOd{L~lwoP2l6w*2fZ0NjF z=Yw2TRs(ucZ>7SS5sR_|+k zp}7LgNS#MXP3nPYg_o;}pnKul6`_K%?B*9}r&m(zW<};XUMYY$jCE;M;rPMD)_#2y zdg;QX6Mac4bh=~AB!7ww#AG~abq`OFvCjqzb-Zm#L-QmjEzMqi*fsO+l+WZ>*JlU7 zd#(vkR|Y~szt@jm*2)^sg?3<0XaEjWf2HU1v2}e5)t`(nmhjme50-uR3s2YQKV9}A$9tR#TVu|o(W4n=tpqjit|L|Xyc>K zuOA*^&bb7-{`aN+$3wtFLcQnVHNKv!doViAHMV$)g@*O?)Wuqz$%I^)c{lDL-ECFl z-rg@I_uXQ>acjiai>*2ak>QzmbkpqUkKe)yW$GCdCJ>rqci)F9L5P6s(~0)m$V)%- zk@1vl0S4a4=Hx4!^uSy31CM*^T^6*zMxCSSMeiE>ZBUg~DgeS({s!;7L*sP>OH41Y zG-+&cdyBK^_b|36DH`mX-A2834x3nUwwwr2IZLH8zQ)nQGpGDLqkO$Qu%EiopPbme zWcAnDQN0U-t>B2m_ubh_d;zdXCVAaqe}aG4t^C6XbiVX++j*t$(_Fis2;sJfmh2fp zK7skLns20Id)Arj{rJvXzwgQ^Xf2}eZe4{C=M1!cgvGOK{lBFVKOzG%_wrMvRhAgT zeT_9&3$XcA4?J%l4_RxmzBXv)BiK0?-gr;3_uP;ISQZp;a=U67K2rCol(cIkHE*XP;W4fkn@i!}22VSl7ve@L*& zn<^u*bMoE1sV}aKK{zyF`WRIAm)`Vf$qZOCSK$}HgZvyrDe^lpK>WvmEHKaaIc77 z_(+7&4o~GjVYYM_%@Kl)t9n`6xlt^6U+KasIY*B$49&x3&P`mm=sGd`(KQ;K0$SI1 z7mXst9)l@=4LM|z>a7xSO%w8Y=$9YiukNw!blh)cS`E*+E$_+$pzEFkf7x`U=22qL zi#-n;0-N9kuZ|^=u`D`Xr>&tqWdHk~#O0Ge`HwA8sQ%t40|vB)qO&Ab^*TM zE4=-jp6J3+YT!oxed|?qI|B8Ml~Jp>WwS-zZG{J4rC^f$s3EF>aVTRye6u3rpKn^G z>&oBc)Nbk_O5_VhoMeB~g*qN@Cm=^}gR+Qw9s>ML|0K~j(PDklg%hTDV$=DoLyR#J zS%mQ#T}m9jTHui(ltU4b*H*}h#5~#UW;0frj58N6{8%j&5tiVpx;3Qiw*xi(1ozq= zVe)hxXORjjcb>2IA%$*9>v+6uz{-uhUFG)g)~lJk#q=>&a7zkC_azkT*8nGFtgjz^ zT(d6HUT;}YLIPXV>Di_*;pr=B^})F{=L*0%ap`6yqkB%oTq_Y>{S%5 znydamK0s+P<<1IozLoHKj{a`Y=;_i69?p@kdG1c?=doOPNVtxpT|$hf*#*o|FMY~& zc}qtW6Gt4pYW2Cpk|<9c9&>O$GbfU`e}P*c=>D@C`Kpt~0QULWk6nQkNN{yQ_L)-N;qa*S$nT5m?Z*+oKFOy6$K}zr$j-Xr&3HTTFuQYW(^nb1 zc5G4_K7G41jjzPE*3lx<70c2-;G)ehb_Clcs1Jc11%RElYDLDhU-f{AYzmXav+RAu zZvP;0bt_F-SH$M|)6r$a5BjL5X3Y6$#kR@!13>LNj{S^P zDdW7E)Munqo?M|F#eIb06&<(qiA3ARVf|7{XUF4GTgOy?n)95_4N5RE530rK~fSg!Z^gJ^Qjo^@P+ zX1C6O)UWS4aKnxze^`D@J078nr+J{qtf(6IavUEIkT2|-Tx_iJ`jrb5q{KG8pxv{+ zk&9YSKJn?27s1-s*ujQZ|H@61e)Z52-|W>NiHXCB$JajvRXHq-C#48JUoT9SNW@%KvhAKd(+^p^9DSvi9U_CR)d9A z1h4F1A^0prn%NW+n=-F9i-L)?s(EAB#2ccn2iNn6sT@`SUxoLx+&Y(Gb($r<9G;_T z(GZ`Gy6wJmxi@B49MO}}B8u0L>#)~qG76s4R180(gc-4B@=b5W-wg?dL=nbs`GyDP z6b6e$g3uu+tKW>_y?=WB#GGAx)s;eN7;Wq2OCj!ZF}0i)y&qF$+p(wLUUXG3a~f>J ziJPbX4DPB*WWD`8qJFJ6w|URuZuTA+1>rcXGo3nYp;aQ2{^^ z6|sUg_7c3slF#9f=67oe<>9B?g2-&sIc1ORHz?-v$jb{bv-2uNQ?hv;=N+mgr&2aG z>ZX37#=G65Vtir&JmxuG0p)5eTnOsZ=Sr<^xN{dI;J84sF;2&;^On{ z9k&q~jTR8fHZs3r+1y#PtpSeFn#tZvZ)iEprJzWwDtDAz+A|ygqg$@R_)JFB< zZU`8GV&(w4~z|}r{NZg&l79@ z2T>4QnTHO0dJOG1yRzdHfT0{NbXZ@aO~`v8-jh)+V*uFiEtUgx14Qg7C}i6B4G7(R zw8LqJzpcRvH{sDm@m!h#C`!IdsAAgt zXDRHkVF6crl5IYbr5l-Sm{X}*1Iy+X{A=O;y>`O|Uf!_|=X1(jf%BIKa zfl4Ec+4(Shr!-j8sfa#aW3KSpvH>s8`f%NHIk(yKbhV-laN?}@9Oeg%Y9g#sQbk~! zO}dRb2ZjD(WD~rfH~IQaB^v)i;*A7n1NNNEos0(1H;Z0V2+Q^I1pIO zUuM^vFF)XxEa-`DcTskk^^k7>PyjJVHK4j#lp@6QKA2dWB`1F-I`?h7 zDuw1d-lrCRm(xQ0cWnQ1lV4vd)=^jQ*ZR?GbDy&hsDn>bi-a<>MW(XB zc$fEzreATQ&RrC?8fGy4Hxxc{cZv`U;yeBB;x~`_SCH(VXc?}-!*I|fn_*`P;_I;D zh4tjQyQ>O4bcilNuDUiVEGr@5iXw*Js%yVDg;6;GVOas_gp?_wz!Do&aLGRC+>hN% zUN3Xf~Q^lNGSbUR6Ix{29?7r<<iFNBvkX`INA~|+L^~t=Gl$O5nAR=TS0Y72v(<9racKPg`!t07J%3~TQ6ZV?uk-s zlE(8b?upkCj^JeMbCADZIGAe1ftYMBfa^+l(3J0NuI#G<3S^{i2kj=?Jf3;N6z%3} z0ufxuk09JgtgKvw0Qv%9IN4GI3cD9FqESCN0qeDA7)K-0+fth86B*`zJU*KkNRCND zY8;#%qd7qJ5oyi-sx+~byeYwp{9Lz3c+xCE_y5oWU^A*P12KjzvWlP$(?hqR4LBk< zX@B_#-FLF3m@FD<=gRjm_Mu0g7@w|89?aL!oQ-LGz6NaLVxPRAkOO4S0kX#J`&2f8 z>2Ttjt4#l8CcI1JvTu>otIoW!UNQaX5XyW~hKVAc?OvSJh@jySA&Pro?&u5~^1Jk*XyY6%JjW?Cn*| z=7Jx$w>r%82*aGc6$mH6i)|i}8s&yn7<#+y{-a>>T&Ljy^ztQI6 zKv0kMyc;{x@7eZWkq7-59!;mQ-g89M*;Q)z-n2n)-pWMC8&|)A{E0znZF;Dw@Fxe7 zt8mZ#k~i+wAFC9`iD6C=@Rm?ukj){ML&NN#xmSP1j1p!Qce((_=my4Q^N(fAXZ|Wt zg{jF$rm$LG8B!MyFG4K`Q&?>)!f9$xQIsJ{bz8%`Cpod>0gunt;T*&pgSokMP8n;& z05QC1FSTXW54#{bvoRs8DU-*Ri`Q+o>hKorJV7@KEb6-R#c}<>hs@PVIL-B^lXl%) zppwjnvWmKf_~BOL0D)fcyn!vHZ<;>GJ0b-8E^x_n-K8KNs}NA=6_eu2_WMF-GXWcY zUv`Z)uTw8pisyIv{hs-1l?Cc@oyQWMlI-05Lu+1$T)+|Ixau6>n5h5+i1FGY+1-`z zk0y((c~f^b00N~d*!P>&d-Q13GGRSV`^C1Nsj$zIM{39Yp6ni4TjW5r=BDrn=8S%X zGv0^iN4lx8ZK7s`iJ^k)k9T`K08A0&fH;@^RcFxY`>22BAGDr-EgXUOShW7)cvhPj z^?#Ig>o6vA0XRs7__!y&Wl=Uy9mZO$1#>(%XSQLQd0*TIiA#&ztpgb%j?Luw`KGD~ z&m>g_oDB=IP_QJWkZDA7YeW+H)w~^>sbjT$w+vA*qU03tC4F@vrATI;>u}IJn)Yc@ zzuhysM=m>Gg|pZ3TGs~_Mc*XPFa1c4wbnnci%&waOd%8{; zetYelGcm1ML1M@f=hE4^)i>Ob#dN((pZmqneE1Y>9DbaXI!kkU{!WBJttKDI^_`Ya zAgHh!NAf)B`|m2sQw!#nTEY%hM!j#C|3Cm$AW&x|&Yanz+p{2t16 zf_nCn-}+s1-|P*t53%i}=KAF~dbZ0aoX)XK>SQO%N|Akj|0n3UXWwr8>Z!5*cuMHm zxhYiVHNiiokpIj}e}9ul_wh*gS}At#9M-J^cE)Pp-T`{lkqfI>6nCk%$ca>aGW&O* z^j2xo&UO!H{e2%IGk*zw&vo`V{ONpt^51k~LeThuv{w_9l51J}SYNJ%BSi z!wqrp=9Susc&l6P&cW2byEEZH7gV2h@GTR%+@UXVoWh`;;CeK-Sy9s40vH}Uwrtne z_Z#Uu>T9%nzUU0r0mH;Xu@kV!%?QSv5S7_#U*3Oks_DH;snAJmtG^TR(tKbiaT1KP zxJb3gXgU_)9}pBa{t2`AjjPcYqr2`u5)TuSBwNH=0GAl_b|%UUSbow)wxb>jg)W=A z0m9qhGr;@C4Vme*^&|MKJ^)ebT_bDG@6E^eGbqM$x@AUVt$5w1t?R)!x$fhVsQG%R z)SI#oayXS9{gPJQf~SO_*^I2s!A z{B^PT34RZU>+hbIg>NtezWHJKb6X>n>%I<`Ac%8&Jxo|ZmLJCR74bg2$Hm3Kc<>)y zK+%5?z%z>N>4~TpYZ_qvbM2VOG7v7jhENDJ14&cPGp{3lpg58vpxA$9S{3%kYFW9X)&k%~eK8bkjKGP!r& zqvdspFZFBgY2Vzl!TgElx!tb%=N)ve4oQmFLzvx4?2HN z#nh^G$NP(BTO=S!qQ|b?{4TC2?_pxTf;iO50F#>+rYStYcr}{yg0^+S;p<~8ETuAl zrSU-`V=jJNLw}#+25#p6i~o(p-2lM%FX5G16&c}rnr@=dlVohyZ9lS=FNCu)x)2hv)5BMmr192mJD&8IP<_#9s!+_8K_QFT? zF`^irfOjJ6AQ|ulPFm=pb|L^O)flb z8|(A>6Ky?W9}#eS!FRA(!8g?_6BFL#61 zBVtQGz&WDZ)bG{i%!AdeAjFgDpkoPzUY!1T>d?78^q0g$M3a!KV1|i!y;ZM5Ea_OO z4zcb`yZcE(bDsm6vRt>*BHp-Nvs=a%y`ic&f1{jmH#1<}nfcVFko%fIq_2s8rF+=DIzM|M|PWMd8{% zJ;LbE6G6xL?~l=7-_SXD5ZIaX8H601Jx8gX_4L4~G`T}%LXGAvbfokLv24z5B3Po0 z9AEKj7_WubpGdx$Z4p|Mp?i^C`brtjk(^d2Bx$&ML!yc{nmGJ+f9IT|+UK@6lT#pE zHD-5rqYSW_$>hy8T1@&A#>R_e1EuE%lFO7vvYKB)_GZ$Ut78t(9oHF$9jz4Y$a_qx z(&|SEj>8#K4K%DIZvt!pLo}wx_5k%G(8l@jG#})EHn?wO5^-2-in#Sz@y87GE>kX` zGaVtz5+%j31O#Sw84s6P(koI$Terb>sr%+So2&TwqnXc=1P4S8>?XhSFtyK zm4M&Pxn*+1O$X`_R%6_2Z&EE#LN=n6%5FGfS)n>X&8mZO5gGPv)XV3C){%zz|CB@i zE3w=!Vx@ts7N1zr>e=2~D4m7j`*NAt*;C*zQ8$)RmGkfa`e8*@>G&!;IB)MzqU$-> zl>jL;<3c`Y;KPk9GTGJ>AHZ)whCQdsmrP(?CQ1m-zP!nJP`#pl_bmKYNSf)$oc-!9WaFf&`9X~jAZZOHrxhp z?7Aya5&sg{6NmgovS4HHc=>YEl7rIuY8EEMXt&gMe$F|nLQY3vKAZvZ0td58&-KV> zyxnz=$k~uKov13Qbp35L9>==dm~FBpZe6N@)9D+t+MoGOt|CEMG_iB zKSrpoQ?=6$1ki*ksMPwoUMcuRebC!Gqbc&-+OB@8S^waB8MK%@7yVu8iiFg1@oNRt zshpA2GM|VX_&eh}(3QMGXi@WI&#N-_&gz3s{Y;GqqR3E6^*ew`R)S()+)<|^icgq{ zb>6>ucd%^%bU5=9b)!O68CfEJF_O__A9DTf(?R}=zuyEqO4-g=c)8tdOpK~wFkzX* zrTO?izXBX<&ZaXXw8Yg8dWA%aie!m^&kM>Qb)Y*ml;^Dxm4Kyypn{?A-3z$65fb1d zD8-lR8~TP*xUW2Dxw{kyIA7oUQHaH0o7tHc1TBZl#qURX*n-nuFdd(A$bg}HYUi`L^pnbs ztrJhu!;S)(fb({6KL_rM`4 zQTl*KS{1`+Iw!s9+WB{Z2D|P0eobRRx*13g=rPrcI>UU#!fTadql1MD)8^?W-!A<^4H1LV`=aUw>ZtXu z4;)PYDP(c&uwF7altB$!d8_JKV@H3mn`dh-w!8WfjqGjS*-++oKn(wO$=(vTp%o~NlOw!$>pw>=j1uiJ*rxzQnCn&O<;Z_G9 zcwSprrKW}H$fP8V$a`eknkbl`{#vdCC)e2KLA2yY0MnId(n=bzN6a|)RoITs4}9;{ z8`hiuP!Ig=NFFasz7Ly2UtXtM^ro_zv#o7zF3ZaQ7A7;U(jT7RMAokMCPiOh z5lWOIrDwx`RjY=AY&E&! z-zt}XCXatS#W(qw_sx)ihk0|a#G*H|tZYI75!Jhah z31O}Hj{-R?9+G7RsvBFpRSwA1>cMxgxAhEUM2+T^MVF3UJe)P=BEoIBdd~$Zqqa6S zd0VPHz9{vyBmCcf@xND9SP#)e7;7B))9fa1?8_-Tp#&O=9>eI}Z&Pufv_c8z*WF1g z4W-tHsgN-%w&Ju;o(N^mF!LqWV?V0pB`7UFzhyv;J>|Az4UZx$o8sf|D9MVZe$HZ6 zgKa~DfdQqF*15uG%ms0<)lmJXDE68cx%yH5hDwp=+23AGDWVN> zr}gMiV^}mOFVdploUAQx{E;iqyz%k=_Z;*0n*UxNi^hI$edfJoZ{L;t7-^=j@zV63 z!`da!)_N2&MdKs&+WY6xo;-D$N=29If+V4ThOWh}wvzIepg4A1pmp8m!$n5DonQK?cVI9!H48IO$ifmS2+`DH>$@x`lzv0 zvn8t~5}x)@YmG zLeDRtb0;#R40J<`wN;%>sBWT*A$LKn^F#1)75km*= zx2}hBZ^NElIN4L!7}FRMt*yT?HB$z#DqqfL4rpt3CFnKDl`NBpGGY!nOhuZ|-iYSz z0J??$Ltpw|Pk@i@zmKRawa^it?$J;&?SJ2Fr50B4+L9fM2J7J)>-buM@l#4#tL%>$ z%|=Lv@z`a@GV_ypFF~Xkg-w=gbc_*I<#0B0G>I|&bIRL>ld^5te%S2kyO)ukRbO4# zqadUL0%-r*q-FWM$tvtZ8uK-_$JjOnIOnvW|Ko^GO49|y^sJ8{iNWp6alZeJ`<`T@5MoS;480JR!0^v} z?cdZC5?ma8Lb%$~NAuj&>Vn}@TiAmy8okCJe;6iWxolYWXn$|+5q#*UvqeOO@|C|D zQ|0%4Db^Oo7G`>8A@;P|jT1$IY40yBf6?tO!{PiuAL=Tg?@|5dVqb=^q!2CGH$_G6 zCNm*cTNHvMkBom|N%Mbvvwyo-7Rs@(lu7B$M{w#0kX)rxkxfS&&)-&z1dnkEPGPxi zSdM5@71Ql}69n}}ye$wBI|xciL&>lBuy42Ry+G=}EGX6Edd~bQ0BS|NRViZrgNsCD z?~R7)Wlp&;;*jNorX8~af|)4an)VdG$oXo*FWwwVTD?Doevy^ zrdT(5bz=K6h(*|(=dd6lPYwgtPL=P< z7V3<0rHiRa8*S~=;e3Y*5`yQ2t@h+Wt@u_ip7OtyDR9+e(l0I7@D6E^4E`2k%vVTX z@NFU@Rn%txh2rfI%>(P5sVYCG2l792Y6vPHj}c?wv;MVdm3P~?kYI6lwy%YMe@e`% zu~5~rqm7Gu%ksG|?|-?LKEJ`0#qb8wozUkntZid+u>qr)&yT&j;~dlXd4^QYc0n7? zDCea?Ip@0YFL~Qq0R3F< z@iU^+$+H3_bPkFEaGjOmHtvz*@>_i;GK{ac{g-aps4!|^EY@KirW6m7Am2CEIXU#A zR5_EPxUe}yk`b<)&G>!89Y~;MUX;7?dbpyRx6fRq92yflZ?!#~8GE0_Gv8o)92c+F zAu18UdiqllB9+C=*qt078&0ijyD(SLrlDMhx1gV-D5u z4kP-Q|CfLA%Q8xlbYc>GxgtjNP5+naKpf--I!}!y-C#CU=A2rQ0uS^qjh@Nho~%lx zGHR8~R%%YcvxwAdM)H^?vbkAo7K4NJs@w+$kk6kil4#`=bs8-+cK>TD-e`VFb`%S@MQznjr%;RO z%I5JESHGmP?;kGhGIbpr2>55!JtIb z6s;!O5muIKnGcmeS@I}w=z@vdJRR;Esg}qGQC7}Y z&KF^O`^rbi=kf=X+a!LLQrvw7kpw_I0MFv)BZ&SPptH%yHg_M+LEqQ6Vuy2jOnAo~ z6Yijy3WMQA=T??7T7_pSG4uQIctAwAhzj%0@@`J@;&5nM{Qy%R7TBuDuu*m zy(08_B4V`n9z;b7nkQN>6QkExiG<1-(es?X9DSTQ_)WKfnS?F$+)Jz#mBOGAYJ0-x z!9<>;c8?4=$BA~@_Wb+n$F*@!I0pY83JTlBB_2tR>ud+GC0VuypR2EEEb2TkwPJQu zqxnhkUZfScjCH*`zpe_O9A~^5`L!$xTOULMb`Ahv^qTFC__cm-RaZQ2!t(=zbt=QP z;|7K$MQO;`K!o*q+`|3~x6V-i`wPn(;aVvC%$a#MhQY1$(=&%I2c`J|rEvV?p+y71 z|Mskj5Ph@wHw!Qooagg`=v^d%?teC!$LD?|4tIw|@<`sTxUkHYsU)Kgf?Q9IIERzD zvBBYGiVv6TA1=B~OzX5ECNo`P$m8m>kXxMw--pWz3ckUuT`ghI-bng-EuTh}w#rR1 z4Jw{fxvE-h7U#pNBCpX294nvzZ&kl7&L&PBKNXVBeo`t?04o*9(RYSW)#QPTu9bjm zCp=_0-pf+s&Q(%<5Q1!Lzx;a8VM``(6h>XKgr7wVE1hmDR(yC{ya%H7yp}vKN9C{NDLyw$V(=mzg*r5d_%i?5MCM# z`H&^+%gG9It30Td(*Pw|Pl&AlUYMEup~V^F1hp!x|Bmag24H?Z5O1dh_(VcV?@7Ew zZ-TFD5Yg~CgtFduV;?*|8=ud8tetu~>ly=i=KuOYD?8P)?k{n*KUTc9?yqpx0c)d< z6`rcm>5R(awiVxgC9ag7;CTN2wgLP0V!O>?dBEyq=|D%1_>5i2tpH9cR2#Uhw!W|X zg!V2WJ}eslcWK_SbU@5UF)I2W$o{-HrhQm`A!g+K-ZV|VRV2B*ev*qp6oXxD9`mJe zK(umW2{vPUXV>#j_tOQD_$DjKWL{aq_pWd_qBTYQ)e90f>CPAbju36bPVeG|Pb!BNKjQKq#Slm8Vk(jmyrSmo8`DD z`BKY&8(uvLlWr*}uP8!7>U1eg=5AFj+#hyB4-Z3P!)5XWUOB>^lC^TxVp73#V=?az zQ~slw-xn9@HB2gpyE^4|KkydbxROdZOdk z(MpZd7b+M##mjP&SIpz>gNQ!zYP=q8AI}*bI1zU|JfDt1S0ca14`f* z83f+BStc`W@gp(HpNd(#3)X2=gy{Hb^zq}-140YA3 z@kP8@qc7?%{N|TI@oM7; zh21BJMbAUJbVeA|F7(Q@D}BnZlVcClo=$(M>D^6@UtDeXgw;I`x>@ov!qiO}7t25G zRvN{Qe{V%s<^5J{HS(xlZ~}8$40BkfT64Ru())ZM%v~?-Jo%n#@`0Psoe%vNgNqq#i+CSE-3T4>~Ua{ zvn5!T3Jo!YU8>sDxE@(PTnd|2Ey9UjR|mCVi^>8P@V&Z35%uMV1~(|7#1~Ua=-`$} zCCig%?lf3FPax4|zBAjt9fpi0B9--@ zJLupb@iT{0H>G-XWG9@En(#m-a<>Z?xFvDR+C9#;!UugBKWGpvJ$u0V-89ff6Shcu zTXUaz&6A=G`&)+-J|Sq-=%;#jykZeBsxJ^|@$0#pM-zVA$ZSQ9>im{|k2bq@nrSy~z4!-FtMD;TX^ zn(Rb!6EfC;6r7f$oRGukmXt1@B@A3{DorYug>?D(Xz(`3tvc=J3M@Vl^7$Qsyd~kF z-ORV!(-Q(CXT*f%qejIeDYQ7z@IzefjPZP}*s$|)MT?Kopaf&J8?UGIJFD;EC9O?& zawPq^%WGF>kiUJkx{gE=_3qhHlkIFfxjfm~`kBWp(W6eiN!W#c72QGeS=pLFm0n9) zqb}#(Ox66smr{os-6qDdJWe?UocR~isWUiV_}~ouy0=^V@*{iv>>hq*i^5rtzu~1w zF5cUJ`RNvha`}mr+>I0nkkY znq1@jWHK29&A({`I;+RVSs1Q+keS!22RpB6N^%APvLBUx3pCjmSDB+%Hn6v2P5o$g z+B`>ui)oWh9LCFp6mcnYCV@H(z$L7aApQ@K3%x9`cNMx0Haw9W{D z%D(B{j)ZH78YPjvs@&qG3x%Tnn%ICQ+rGy+&u_|@k1)}==g!EdmB9=xH5#u+J!e*4 z3KV5!v~RDA5>q8$+EQjObb|#+Khfx@vOeIzW2EhX@L#%#)J)Z#;qLsZ6ji^53od@C z$-VDwVDAI`T*JnHKZ`ik$=s_xqmjX}6PYeU;gV@qpEd3!v!XvoJj=R|^XF@Vfp?2v z@YZQAWTa)fa|d>kQ;ah9H#ou;d8koOLcWm+jTW3^iW~gqQ;B>?a&(nv;$?iV@!op- zuSPIPj8kwqoGUUrWq{SGcT4ZR{GVrv2G_l_$$U9F=II(RMfYTs-13h<7e?xSrXD>!YD`RNVpxpy0u{NU|EeSsux!~~z z0k`nRlRqp{rV<_vcRfyC0r6v;z~Gi5Mc`H-b17W~U?Pvg7i=y~qxNRKnj3T%S}*v?)gt+pa+4|-L4)2WyYt3MaXyf-eNQ=Lhg;d4S&WHd+_nKw%d{X5bBs!K#jQgMT~d4|Oc z=&ao^^X8GS&n(3qO7>AlvAG>;=FAO1j-SYPhR)oM=4f*-P)`y>TeqrPRCVdJwO$&7 zRWGwzFh2_R+E$g6_K^Lqqz~H8MY)Z?SgN7o5?M1rf6Jf?_V?p-@`004v=Co+t9qei z?99{8%xA-m=di2e{m)0Mfu|E4h-u!(+GrKulm-WUf`^jnDujb9u(`D+W=GN_;rv@8 zsz3)i-cBH;fo1S_(?s8tdMlwe-%E^Ke#aT&cM&V(rmrR@mngesnptf4<6=Ig67eKa z^jyd4y+*^MhXlA@_OG~nV~O>O?}G86l@^S70C7Yb^UTuhg(Q&no%_JSqWqV9O<2)T zZYt_d0RCY)rU9>yVXPG8w%fw23sH>gur{{GKBddyQZbV}kIP(>I>P}DUe6|)qfFLU zhAk%i%qXGTacxEGjQEiu9uZ+4${cXi)b5B3@7WhQs!WfVtm;9#jabky)lgH;T5~$; z>eZ3{uVYfYuK92Js7GEB=0>NILfW~?>sIR$^$VC+3zn8ucBNh^c#Lf zS!fbayz)v6mYA{;LZ|2~Wa9Af*OPwx%Csd$XZm#!Cn>YZdWQfOvV>&*9A7VCx;l^P zwt3z=_ICScuXs?BZ)Q)1l1z*K%#A8!JKYK!nYUk)4)<)1q_kcIF)(lHa7900$L5-C z0ElU$35&;`sh>v|h1aehIc>^NenXN)jRKb!rRB|A&a1LZFiF3pKgJS^lqw>lAf1>d zKb>0o#zT4!r`=S#9SYYU+V8jI7|J>!-3zD{T;!gNe-x(J7VD3*1~FV>{TyzK_uRYg z7S*c?tz*YUVQ9>(Ddg_YEy{QNlt)79WWI@80sQZz=i4HuFF+22~1P4fO1%2|lHFjo4Zs|K#9lW+yD_h;bRWGsQO-&*!53h2L02-H+ z5mw1$MHae#viJAdG;Kon;Vtm(8#NH80nD5m(lsIk$f-EcQ*GDLIqVbV{kM*)xc+xV z_*LzF-LwORfZfZbi;<|hwfPHq;NVnGI5uR8_FwrA98^Jyh=Fm!E!@0X0=H^1nCMm!I`+ zk8M7@DOem+ZLt^hmj-JUO9?p|gS}A$Z|pwJK?i;P@&tykwaEm5{o}sO*-r_uZ0w+l z*@|)>Ji45S|EF;LA5B%;0p$nZ>EubDh~N+}E!1 z&2CHHL`mQQUumO8bh<>r%~>vWdy#@m>8ZRb{r-EIr{_oRw@$}PtSPN@X zAz69mPXuIi&YI!~Iq@3%XSZM#ht*ccFE}cBd_EhU=}l{g+7icx9rAs8>rxDCMH)5{ zJbipMREa0S2vyB-wTqIyy?&b(ZeJuGIVwoSIZ$l5TgT7Ba8NN+pGM;lT%!uD*;7#r z&qxwGS~C*D^ew@4{dTu{a>`xpm1S%=o7w)k(gXAMTDV|qXN%v-A3fBXqxv)isa>5Y zruK$P;>KR#Rjv_cW7=P^SDjzUE3Efa5v{jbwl!!@nD5pIzYm-p;YehEGa6mf`iDYo zE;2=Jqd8>oyf&D0dOz7coALsA40?S346ydS%Wd|>jmsEQB+@!7U?OAA?)ARvc2d`| zFnrJN&?#)D(S*W_QQR@SCql1JdQ`s245)Lzz7}*;_2^?Jb2^ z(^9``rrchPyt+IiH{(mC((1D2BWuw&6;!G!n=7MFBp;L;>z|3__MZQ3=3W-f#!AUE zGS9x<#D6&Lmw*%xJN8Yoy2n(6uFJ#-(F!m|LPFH&l}N>R;5P9YdC0N@SgjT9@}jcV zhkx7#6t_ALYW zO*p&x!u!Sid6ovDenOT4;yS=8<5eFoRV<4-QTP}wnHau+J?{X51mlk_W@c2XG&VC< z{IxAP;50f<2m*D%2M;wjDkdWz7_cerE86Hjib|ezaj5zTmGMV`NoCl*`x9;q%1U~> zyOzoroNZZbnuCTKTATa)uumhAL&##7MEEVERK3HoPks)b&QZ37QRk{MIACBW0fp#3&CMW_H&-&Hd> z7Ad^sdRPwkO&)ax;p*>3;sc%+q*e=8B}2LPhA`~gP*t=V%w+N&9032i;{l#3KUuf< z@frR_^DWF!`g&~XZJFrrv2F-O;5*$@!NE*Ut1YMKEO)N!kB@U1P#~&eP`6D{G_IjO`8|HWvMZ_X9#+$Ua zP8~th?G|e*iSCd6Yt$RI(ZV!bO~TdS?9RTzJ{DZeaN1VMS9<()faNSXyHfw|Vzu%g z3-m&;7e-YtWB1BM(|i#DfQzdM_i$H&HGqUB(EwvHl|v>v5x8$myE5JABq_<9F;i{+ z`tp~?)PR~bah6Sj4}l0pvFH+03vLazNdQ?zgU`+p4%5%T;GjqRjjy^o z_g zGJyEUABQ2U%b4OO4~0)gjmDDyZGlz`t3z_BLNQit9(JCv{apRB6yG|B{HaY6Asc%VJ1yT2bwq)ETXncyd{RN6^tr&Odvp7{m6zo1nbEVa^}&TUg|FofsOt&WU=Cgvm8_g+HXhX%>lyOnChNJJij+#@YY(|R-|O#SeZOWP zzfCXqNm5SSxy<g(Q~hlgV|W6jviC91xQ)3b=)(5;o+! zvsoDf2;2mnE;%?)HJDyiu$kT449(%}*kAENzVT~bwc*~AZg5FQPg*dJGp_%IRVT6I z^H1zzX8F3$xvb+7HTtdPTD5t5bT$Dm9bk1d)6~a|<*d*4t2Ig-FA=qcjPQz}-l6Go zqt{PIx{!HoX(`nND_r532cv+o;>^a^Eg2-{)O@&UO1<%X+2i2gfZK4Xa17X@;W8t0 z5LF)#vyaLI0q=J{m-kNKjAaShm2LV5u|E1;m~*%;zP;e`+q291?$q#Tw*U&;yP`p> zk{~qtK(rlvMrGy=N2>!@I>IF5$P@|(VhRH^YpAc>@U{H(>Jj>PN3LAH$Z5o-{q@S> zd6@X6^!gT|dhEmXf;UWK13Y~eFd2eI)Er=qhiWNzk>!a__^pJb(c;P>|IF&-G4|Rt zzl$;KSMw{}DPESI^vKh^e7E)*_@59Z#ZL7B8Jk>jM5}6t_HEZ5N*e7Ezgi$T-XD>H z%As8lN5yy^DN*XIfif{C^vArCZ)(%F2mYUaqeBWyI~T z`@qxZhfwK~UYgApptO8fGzo`<0E9KA9vv-zGA> zr#`2pj>U50!Xw58;_}SsmbUaH)_Hsy2oA|%da^EEE3J7zQ>~6H(bk>}3UrwIgtZ`~ zF@=H5OqJ3zKm1KSmY=u)6npM$jF`mitYeJ&YbrS=B>zFXa0mmA-aK{o>^EY%dXO%2aP6T5cN2h zODhy;H)jHW9l&h;bQk^dvI)TA=^|)U;JxX7ugDMsU@TWFMr$qq%Oc(;8guq3iGrpo6GV2G?L+)&i50~*3Pdm4zpuz!%~QU zn!=B`ckhBaLgrmYd>QeUzbdqP{e=DN$;smTM0-zRanai}Rq)ZgyA?t?5AFmv2BHSC~<4 zjn@1_p9fU)A1>M%_%7`&5jDFWheN^C!!H~LOI@MI?^18fwr<2HNU&)mjH{i}pGIEc zo0cyoD0gl}kftN}b6BVl9wEg*oW`<9x_#aeBS`%5LCJbC^jWHtuUXc?l0%l~kKoDY6Al#KnjT02+BSxbpwG=9FmH9i5T zrj~ZHGelqTj_W$OVSt_cIo!OXP|3~@xJAwS0?EjRy@kAZmNui|iEn2`0#+3rE&@?Z zyf2F`+N6Qpmu{P(OxI4Bn|Fxg?b*N1`0Xpr%8bW;T(L5KFWJxck;P>#1NSokK^ymQ zsiWltTFD|bZDaHEr2VYp_jyM@;6;QB+w5{qadaJ<|9R5l)X3#tZNTc(wdOw)16;95 z@eX+642Z8OTj$Q;IUk!hDsu}R-CtP2nqQe#a#M%iZ1GzO8rjd&7xeRkY>US^=Rze@ zst3oy-caYAv%!+%0Tyi4VhLANFCy-~u-SBx-Pb(?@wn9y@Wnt333+MHvt=Ke_j%Bh z24zH`?P?n)COKE|X-8*P)-`Tv?m(hb0?6<2rI!I-vTYjQ{7Xarc013J5`gD-bHjb) zFKBlDi|1%He^He-Dr{w&_-Xz1|FQs{n=p*f1JUpWI>DD2lnV@ut# zn`gE|?q*wiqhSv&`!3Dtx*Rq$(t@t3}+u5ST&+okBL7pjfFNU%0 zr$xZ!=8A)5I2~B}6kA{0NJR>$4Rc5F3hDxvb7;fO`&)Kz()I}f&wO?%5 z4bB5xIaA^ItC7b|KA99b_PLO~?9pdZ-ggG0W;|T(q4UvaJm-d_BTfa6q8kQF8_ECa zzN&g54;{sVFNXJ6#Q~Pfi~n2>|Em=ehw77&H3bK-EDwc66QQWId1AlUKmUjiE{#8@ zacQ(#!rCd-;^OPF zZ>Q$NZ9?ab_s>*Q^}lp-rek0si+zc8KD;L>E`61Yb?wPHB{3`i5i+nxt36FX2@Y-{8T$iz)sJd&?g%~Hw8{NLU|x;TeXk8W6x z{t-rm@}H$juS#MMC$X6dctYbrt<%nxk<@a<5p1r7om=8!+dOs1`SAhWF=9&nizvfP zSVHK0<(OnT7WwvsO50$*+>r$Z6%gT7Y7#fUWY`&mW?>uyXToaM=*h9~jWyB6C|yN& zS^IA5^<&=!I7NxBIJ#W4IcS635b!`a@P9c^Q_;@Hz4wOu_I*p79C+ zB@N*{4E0Ec=m@A>e1@<**BoY%tbES!qYOz0BfRKlIehBs_bB7V2L)SPODUXESHw)sa3c6&W;OpokT*2%-o z@`~iya;N;X8`W73iog}`yC7sycCw%e&8dkM3h2BEY`HLJ2{kd>ee0(!&;IIoa}x%( zwMEjL{#gr)F=`Umx84)@9zg8Xq8q=9KiAZy9gjYaKaT}4U)rkFXt1cXf@1vBb9Jf7 zQ{ixZ#=)SmrO|S1C!+VVLlbz7PU_N`4{H7r1Rb9Rl$n+e#9BnGkqfb9 z2?+PWoq|s4Mh?Xx>Q$9<=e-KIKXwivAnOs$$IkV@1oi$1EV1jIxf6c4^$C};Iun9= zRwS1l_xN(n4qO0be!eKJP|w-(?u;Mo^H}qXZ=_oJ{fPLZ645rc{UOk;PBNCH2T!J@ z@{3N@1yoB|9Cp8r{S0fj63_L!*qy(g8ZjUsT=qCF&~t$MB@hl#0XX%1R_Dr}(e4QS zYu;)~<5nW#M#7NA@d}H*R1bz{ZOPS^+hYF>QLYj-^C%5wK%O^CLS4`Av*Vt+Q-+dx z<%F@@D%)JdbEp3p&qMiwuxcP@0ndqZzy;|>UcMFPqz{koTe}E#zDL%EwSFhw-f^f* zgGN_-mDjD?^zy3vFWXAq6;QnSWp}ztLKdBpDe%!t!q2DVynM!wWdk=^@$}E4$29<7 zWE>3}MV8ZDOYjTAEV_}n)>fA1{;G%D-6y?{nb8rLDUb{H(T>~FyF#ml3pUeI8$}v~ z*x~h+jp7!u%;QSGGyz=pn1c7a@*q-!-@7Jo0hgyb5YcC%b;?q{8EBd>{q;Zy zKABb$6j8bu_?p|^F_`$*Wu|j;-^gFX_UgC)RuMx5U`1&Iyc%t;uNCqWgLQOMzgz06 z^W8cL|Gy@zc26h!G$a3~+%-@3@4UGC$I}zu^xqz;zvOSo-L5j#6N zZTDC9@}ZjlF*~zL8n3pwf&5|KoH~1k<2X7M>efxylkjBkcOB0(O-EroGXy9V!VWAa zmW`X`?VBk=XnVm)ldYmk$Yy)kOI@$>6sg{AGY+!Ji~;3RDMoB<`6aS z$$^AL@#7P6%m=j9b5(}bY4Y7m9op_iW<#pa?WZK;7_RNDnI|u+9`kB=y68?baA8g- zX5GH@!B1!h1@G^ma$5W}lU_PO9cKm#8g8q%{Tc4Cmk$YCG_PCxGDkM1&4Z16PoRRE zM@6WTmJ`|4Ih{6@nVU1@1~uff(uwDAISdY!UI{_htORvES$r)Vv3wWgpeV+?Qq(N_ z&<;Fs^N~_yD`PsFN-=*jdO9`>+ z=dF)|gBeS0fggPZVxnKAW+3*9#?0AT%S44__`OAigj9NoT(Tz7qJ6y6Oojg+@yB-w zZEXtQ6u}5W_Vb1~?LjV$>`^-sxjLhk*QM3~aqz8)_DsJ{0gj#+(*$-RBZOul5_FVkI6^S7cxu9+i;UqEv z?3py)^jG zPUPvl+->_p%lG~zOE6k(wvjFP{uuG2&w+#iyT+q?L&YWFWt(tg_pls| z%ztd3G8E$R%hz3G=UUc0Lm1h9EN=H;$J!entc1vH(6!Dpp^t)&M^)wYg#hcD5Uh_|fXgNy-FQ7Gsl0;*OzEW`jyb*^_!!VfINsm1_%ovI@G3%{ZnTUT z*f?@58396pR&bLvou$r!{PqCy)OHA!|5kbF;RuU&`30x_R0|Ren)Nsy@DMswku|d$w$HoW7ZMtg2KQ2H&Mq4SJo5i)RC>6;gF@!_ui$H~TBoe8 zu4kC%xD&IcymXHTLeZxJD5nLLB=&{4V-;)s*}L~DS*yImgj-x#Gube^IS{LYafko@ z899n*rNGReNb2(T%id4}evgVHNTK9;!v~g0I54Tiu(tpwdB8E(_MZpX;0Y^A;CQl& z+2sRuGr-A{nq3vucFuFZGZxWfgTMPJC0^FA%6kwwu&0M zFFkTEIs)}b#0q<~+`5h&RcX8~du2q!e<;O-mrfVzW79n|{<5q`mvKHR8zzs$Qv&+u zk8Q}N$`U{Gj5z_lZ<^*q=se1NFqNcR@K*AP*cgD^GG|R%Mk+girMH#;#KN6qN6}~M z#gG+~g@T0+E)6O9U$nr{FOvEU#=Rk$s0XaUq{;-{s#vD zmq!1HOqVEXKtNtR&Nm{4_O*OqBcwx~oJLL)6OJ7mOQ)Rg{vB<1%|C+itdA~y$bp|3 zpge&#Y)T~v|1{dE`jknum?3f&Vf@2#QInH|w0GcGA^y(h@PpkqUNNF&9bJRV#drAggDRpp`l zi`0-5()OLVi#DDBFU%h4tryBrZ*Q@NFby^4+0a-!gIAV1<0{Kqn>{6GcHOOYUKT+} z)=pa?nR%slj0_|eWIm~$+RS6SNG-xQ7sAonp!`2_W{In-6-0N5(4Sq|=9G5Hb5A?|c#$7L$frdyWT_ZQJ|i3Dt`9RhVYJWF!JuC00Sr~L z-kRilUhGAt)Qx)eU!O>uyT7pD4++39{Q&& zMG@5}^fsqzebPmg7%d2FM@zXvz$$(FCyB;0Ei!#fdX`?M`+bqy!kp>pSDuM3v9mPy zd0xu4lR`f;guNb6wT*~ImHB764hoi)EibP{uT*f*^ACaoR&!n%I1@Uex2D{1*Yj z^7q*g()NuX4s%@`gLGIaS=a`ekt0@1IAC9b`*Z%`xV9Zw<~>;IydtfFsNV7Rk+$?1C$k#_6Nu}5>|5(}c=dnjyE*ZNi7DjrIo zJU+ng)-nCynnF?EXIV_M!4dh>j_axDC=}5j>EkSAI!{zWO)>lF5>)S~_Q#DjZp!Ex z-w}(a=$yYpqCqSm67Cf~PeQ%y!CwDpYw+3o2A9sPsRNE8x)z*&eH@vnK*2?mww-U# z_(*pyG;b59mjI!P_{L@()YJg_YV^W=V zglbC-3j|~QK&{=KoD|+|LG4+$=1v+%SJTf@^zvwnHEUAfjs$jW!~>YtJ(@O!+!%9L zVdo0l%{Ef_#Ew)r2-fs!hvalr+n7s?|EAEUUK+p7D9H+1-~!;iyevC(gm&lWEmZVB z58m}|lZ!QY22Q@~O5i^u6LHI=dadyY^gUU;!qc7cEYCU)l%8!_^G%K%nE9CxxH&0Q z9oo`$Z+}T~dYQo1j5s)Wk>wsgb=2{5uyN`Ypp(i_TetC9=vvrCB)^R7~H@veaFs?fbUU%Sd*^@7R*U{z-vSXSKjk+N#54GA~wg>0V*BF&`jo4;< znO`>tE(7_K8!Zlf`W9XGdHMX4+Flonv&e=P-(+$4X-kxJ)1mCcONBplrEA*~AO1`n z_61mu2OqE08&sn&L$4-gA~Gi$kc>)CM%!!#&T;7zicCNMlApEH7fsyhZ5NM;{T?lxms^(`K+t9276^*^86{` zw-{2mFER)~Rq}LwScpyD!kiH}@PUlwiiWf!{a+`VoT%H$ZB!6|lz;U}MXN*HiPH-i z*XCXwe1(i>g0ozZJ^xM49?v z8<>TN*ErYl7BP5^YDsL>Xf`3X==eL=#n?Q5^o;Wp8c4)<37#JT0)_3TvH%759yWb!Y~ zKm?nf%cL?k;R4$|A)?niE^rHBOo=ja+!^Dzp0*mG91IUL*VRAMnYR_HGC2x^L zvT6-Anz(G)a)&ceRk+`lhfiR>oJ4%lazQg&tubk_0w^PG;pGRiFof`s%#@BMq{)JS zzv#q{zUWukcCJ=E3IrwIjwPJ zvNNQ0W7r>Kh2^DyAQ#iG_aA@IS46hP-6@zqc}X(tVpUmZ7x>y3e&u_lv$Xs+WghNz z>&{EZgL~+GDoXX9f+5nN4=qH93wwI@4eM|3P|GH|-#IzXo5Jc{-c^X`y!f1j&(x*T ze`u8q6>Y~KP9Cs-4LeM5pMLgj3=5p>vlJ?*x>u{vW^KziayJI*78(CsbISV%a2PTv zj(?rHpg#} z&-7za?Gwmnf==1-k90S!wZU}=nVOInA0ekcrMF1`DwZgag!VW8@1GdClNFO6z{76^ zZ@}wxBDsBKDhY_Z|1X^%wD37F{lGieRK6;AYjIcFTBpsGgmIW*no+B~+tyLy)$rC7 z&(_UWr`@6{3e>|o)m^f^4u!Lm(YbH;-4opmQE-Z{_6&e)K*pY&rwxP)J*mXy#3 z>54EVIC9cdbJ*OJ)R8C+EY>tPXPnw^-&1EMT3aHQ%G=Lg*8j2!1nPwpk}_&mNrxca za%X=k;sj1N=Q4_!nXTssXhM9c%yAZfmI;UpZ}d%{$Q%3J>=KEb+yv#bYQrGF8$uOC zc*3ctG4^N4m_nxbd7TA~&mbO^Ng@x0|kcp5y0UzCRYNS2ahB zyHwKMa2{!P4eA`+o^0 zi5b$cAIBNJL_9rc3a-z8B8S z0GzQ9a7Mc*H(CH6pBt6NN_b^G2-i*b%AUC9wtTLtTRd|V4ps8Lns)WO78VL5k_&mF z*2E){<(j=LvsvDfji;U0Q)jsOl==XUp6;MhMt)a-3J)c}EKbvsDCc?GPu`0ylG;zL zuh#iyO#k5lgo|+g7O}DXBdvF$^;q*F(kR!Br9XTwW~-qJ8D|#w|PKNEG60Psy%!gbMd=6;2zO z<}T@bAhPYj`I2I2G-PV`j#(q*sHev-IRZugHHYl zy>0XoX!twGt5>eiGcpryU+PXwB7s&|`ORP``_=ZNg98nf= zt~I-qQp?p_R1qGee^phlR`5x(#J2`3NsV#njxZ1%ol~}k)L1CAo!5LyZ=toFGfwO6l~MnIL_jtT6kZ= zl%{^V_tSPgHUbZI53DsAJgvOc+xc+p&3$hP;v5LUU&A-GKN$SKcvu}(U=@dUxb?s- zc^YXzxTlVg_c6~qmC$sdo}XBI>wiw;<@V$`+la_F!%Sh+6z~L53?F~@n;YFx6_mZ( zwzY}5A>@-YYkxY{QhjKT?fB_Vv0Bdi!;*a8g5-*|cFTBXTr>M<|EVIyu|v%eqXmN< zB2RdvU891^RP9_o04Lpp)$8h3&!LQ?B4SQrhQUz1dczX0vey+ulVAEF2H(Ry_=YC> zyb)h@AhU1c&*-DK(NoO!Ow5S6Az=EeR?QMvS==@9hE`YJ@B7`p$7?v{Q(43^>Nfpk zMQWwG_X!IaOvA~@} zf*n<|Xv~yqAhVPuGP0g$Dgtf~M{xfbsXbyGrXDf8tR3#gD+flR=-qqqm3$cQd}p1N z?u_pU2Wp|vaM1l0cp6o!u&t`JY~d0ZuCr(^%rH9OVMNq2_A?rsG7oCPbUSG$izQQ- z8Q;5}GpZmuA4GWrPa>c!!JpuY)tE77UkW;^f}z&DQjgnLOiJ%{dZFLu%`Ww&xU+AZ zu)mDhGAzmHC@MwTBB*p&PZyV>6S*UmZ<-4ov9^jwKj=0a!eMF;+SS!74d%AqS0^3^ zP26kh)-{P}(<5D(WfJ)bj%S-oQj2K+kw_dHsq1_noMrpKzwN=>SWRaAGFU=ca7aHh zDdY@+52Ekv^`~qpWB7i0)H?FPi~o}p;vlU&xTkYe!xrq zwF&6VPfw7@H`FcFyxhzD zBaDXF^Iwg8k?pf^V;<#)AM=dx8^aVDcQVJgG-^#hoc86n^mbD=7t+yNk?$Cv zPCjS^mDc8=-S%AAAtCAyV9hs3nb}2nY2c_HZDnJxI@&GWnK59(H`4{V;I}X ztt13T;9LXcOu#zcAn&2({|$%zvBv!}AdY4jXS!ONfkNF@cd8b>Hx|1$A#g>uj6t>) zrX2LH1qbB^dAW9-@ei?iTT4NyVG}w(uQ)^YQU!_7MQ8v1x)08VweMnL5r8dk_t~6mYQ{9!a20&Xn}}BVhs8M_wRWidC^auoYZ%tQ`?2{1d(>MHn5lxD4)(i z?}VIzk>>mO{*}nDY)?gZu=`(brj28NC(;ynjxK*oV#Y$7;6dJD8sGDzKj(P1LtW>h zM5*2jWRP~3{r``#uZ)UwU9wJag1fs0cXxLS!QG+p;2JD6E(z}LuEAY`J2Vj7X(T{! z`1)L%bLTsEW`6a8)xFj$CA;d`wadeZ_nbvPr32z*bii>44}}nm5S{&TF~ez^Emq?B zK4s%D?+aQf0RLq4=J{UxVYh%(+%^iMDH2)pXtsC@d-ViIJgPB#e}2elLvZ!&V7@bT z36$e%bx7nlqk%F0(=B;CbU!-dvqkR1bg9Dk8ZA^PT)P7iUo}G;pi+y}@`Cpzr~IQ^ z0-k;6eFm`TqIs{!zP(rMmyI=pYOYoA7Yh7o@Z;Ni&XSlwO^hO7{ud_Q`cQ~yME>I1 zYKOPE8VuVav(Zr6fY=&9JoFBB50fN|2~m=`{u1r3L?#cdY| zQQ_Oa<^Ndm5rxAAQ1rvD?+0YKc4g_XX*Kwp5`3$QbKKnR_Zjn{vQsF?NH*@yx#Na~ z%yUfCsPLM-E-lqqf1s}U#GUrx5Sdsw-HO>DcSNmH-k0TAdgztu z;lK-**}mo{dX}R-#T3k|_XRm&&q<$HyolHC0Ad?b6L<;$tDMa}M=$8U&lQu(m;K<} zRx1JxH(e@^b%b1!J?k2CHLJSK?G%7Nt(wqHE?@Uj*&GC+VEP6gz6w5bSRmYNtz7|l zI1=oF?MEX6TODi5UxSur(?>ZI=8=uRqF$#|8OU#3*w0JKrb@NUgFy}23so`o&#Sej zT)n2u@4>$L%jv_WC-Ei04vZg5GXwz6DBlba^x{&;Y)Ggf>Q!8FgM1eiL`4U-3vt4# zRHs>FB!?y{!5`C2uSt03Hh>qJ?dh7Vk{hcD+2iN z0kU9WZ!8Gvb73WO5gyj_zYfWq= zdYRQ4HAfsr$o)kO8PL0nETts!cs<8}b01FTpI?p+PK}V~GvKxKa^2zD{*1yOg z6FKS(!Qdzj9p0~4GvGLP`Q0C$ICXu*XkGO-TNhOPV{BjI|`kd?-@kXyez>r&vqu?gH_2yR~x{$MSU#L6ohVIE)(+dz;VKBvU7c zT2&e`=O0z+If!N!fNzE#S^{8h54cZwF1$eHj{zdtHfWf{WknQQpxd@r)6?#!2O^wp zWP8fLDQEp_7={-fDuN-Or#{}hjvkddZ8YNPi49cQ8^VBdQQhfF@4INPS*K(Rnrfh( zunkaFCicXrBh+DAQy*;J=3xDKO1mUP8e479OL_Ratg&&up=0DOP@;n+Vwoc>`*%>i zmTT)vAB{~6RtcC87Gou%azPCcpdbN{31ZNsBeZQ780H8pW}YygA2E~slR6Z6GXj@y zD}n#5gOe(!@s&W3mAI5)wgJD*$Y!r*O@O~%i|JQNlmrzNfckNcwNA=SR?Eh&JE?Ke zADkLm<#aJBzBbhNU!N6j9oPBX4_de!9*`A!sWC_TR7gOuRocf(xYt&bsd@QZT2;ET z!XjRAAA&$wm{u9&^61P(1+4N)Z_DGZ&dufpZk@)<<6L6M#vs!v3>{ zpPSup2sB=#n0!GTzM`r$F9rg$b{*nKz1R^axZamR796l=()z!bErGaCBBzJZTu8Oo!CPg&?sRm_WI(d{3Q1W z!@$QKP{C~$GlT)+?;j(d*py!&kDyb^w9$cm3p%bF=4)$=>%%#~1IV;Et;$F{OSnMj z1u|{&Qn}f}zF%H$Czcv*KV18)ePK_@+K&?|pM3>Yneusz>-e13C12C*#J*reY=D!_ z7}o1nb`6GZP>uRVI~F0#YVgWex{AWwuI?uZf>~?LLV?8#hw-H`#K~{_)HU6USwH!1 zXum#BvGYHRx}WC=+^C9pvf|Io6M1V0Xmkf&Y=vJ_$gb`P3i-^_pK(5yDl_}p7~f+2~)r~2&)H%ojZuzYStMay3* zltN>Q(RB$l=@*UNP0lWEl)l8xbrRYTN8h2Sgt}7n&Z8lOUOxImiL1w4j55iP&)vn= za;mdEQ5pLm@+E<>#-7S=9o+jI3<9dL(D%v7%tN{}(6j>0U86^w&_&_z_?JgjMVE{V zp9k8qbvdjlD|1e%kNEeP<)nc*E@Egig~01;Jw?Jct=?M!w3@889Dj})X~1F#Sr63v zPuyD$)x3}PEOGNMEgSwNO75nZt19sfgtr*+Egr$XWJ900M(j&Ig?rph2H&CF8bvkVwdbE}s|1SnHPwK1yE8^=H+fL+sQx%pxQr7E!fXL~ zwE12stp2)VdUDm;?0N+~>mGKzFEICeAopJ? zRVMd!EX+&J-dXUYSXpT3%v>yY!?O#IkKQ9mi2KvsZhEm!0)OG3*1dRgSin_ESKBp;Vryh1Ja!MP$#-Xi<&P zQ)=NoAHhmG(7JQTYGBynOU_poNS}E}ZsSCmxacC3P=z1>Ee?m7Kjn0=Fe~8wlvja$PUaI5tw5PknF1X>*2;}z| z?^Fv20?=k9{wQC90?DA{&Vknn|IA-`2ttsZk?pR>H@rrHALT%5UWI>>3H2k7rp&P7!@9?Wg4+7_^$09zW#F^- ztKN|wOwuGS+PxnzPHE0-qrYs#w;8g##84*ME--$TAOd}Z87j}Wb+9Xlg7Ohbh;XF! z<)wjY_c+UKYdUvTS~=h;g%E3_m+}b3A*v+%H`!-9H~j(Ia-qJ|S*b)e8gzeu+W$}j zj<-Sg0xxJ|#;|VxNf37}6MRZXUz4rpfQuXDT3ojpMk$AAc zK~B(ee8J2Ot937&4Q04Erjy($7&YIpZsSTVwj6c#oj`31;ngf#w7w>DIJ>8~-h&J| zbPcD7#~O7}+_QSY@P|&H+fr~TJ65U81Sq?i8ij*aMF@(Utt-S$uyf!?Uv*Z#|TUs+v#`=88XQ3y4)A&aKhm!;f*kedRQOd zqTpYNv@x`IxfA`pRq)@%lmCTc5+vSGGbiIj4G(XW&WTXswZS5H|``{T?RbWF?h3*@? z*eSTA2bQ|lDtol=x9gGv*_@pDinOEPU#k5sMfDh{sh6H|#kZex#g27Uo5SZtuBU`& zmwY2i%V|BDPiQXc)b;eo`ZS;8(O3w-gZ=vFBUw3FrqSYDp}Zskr)4o@MIOU*hxe7b zNb^E9*u2pLOnCguO#2694o>*lg6{anTNSb#Xi^j0ylTr>6O#c^l4DTI%{|_(CgetR zXs{fsj)m~Y25k?u;M{Y#Y&E3+O;#&*u231U>ZxY_r{4TuiEo+(y_qGUQ_N0Gq*cZ( zU~*S6Bunj-7}2A1E)<%f{EP_aOUoRM^%|@}Hry4iMoHO7J*|k@0_U+Y$;`kh`B=Q}0b?g`*NLlW|lEp0!4) zWC=(Ua9HF*MnwyyqxR=!sATCOf|rqO;JE|eHs_ZPJI{@0wCNp^)!CQl$9e0`&l^WS zeTk+ad$w#Yx5G4>jvd?%r^U}0d7t?$IX+fvB)u4QoxYwL!hXgco@G&K4S`1W^pw8{ z-9#s+kdZ*3a2$9Z+#qYgYr*qWH8McJmBi%Y>%DRI~2|I zU--DNurY3w{9N1?#9?hc;fC4dezFig|4s95cL#0d_IAS`+WLm<4RbmfG!h=m#W)zz z05Qfx&=nRH-RpUr&7wq_dYm}U6Y#t8A>UuZE3&e(E>YT!B{8DWC|dO# zFH}@sT8<@is4E6v?!1ILuKV`T?=QPqog}-}C+4b)0lYr*Qv^RFp z6Q%Pq5R}`~c^ys>ArnE+Wd?wm@Rl0s>>~9f?q_MqIw->Gy zM&i2X(m5Lp zkvVO4Sp7V*B;v2~1u{0%7fZ5A;p@bcV=8F+#HTtA5v=?CYi|s~XCU#89$7gs_F55G zT6B!h&PIiv5=PUA!fT0Ys`_hF|Fiw8g<{D4vJ{Q@a2MVYI_J7nw=)de7DN2Z$41|W zcUOus;r}WF+gE+66)iKFSZ&M5vbNtGfPk};-MA9!nD{A{rV#cxoYuDg!Aki2iL_33 zvnfJuTO&3Vwi!9_{wiJcq-WY~6DYP>CrcVU6qC^tCn?hdSzH<5$IRyr2Pg&|J?fd@i#a`(6JlGu@j7X_pnNF0nxPVf4aXix!PAIUDs=} z>qp`J3H9-^QlI%RocYgp_=ms0BEv)`mFjGjnvvu?=n-wuF!HHhPE>%p5C;75WH}K& zIVeBcIF5@+mg1*h=ZaB=O>8%C7r!&biaUQ}ILxFqYyw->H)w|4I9 z)zuO}~!6jTsfiV`eJ2#*!jh4hQSkkn!5FnMyO zFJh8^*z|M|_JhHX{rvo`1IT_sxI9da3AQObd7>pHA!D1wMLh!`zs_LAL4poch3Uk$ z%>aJ0n=WgjGGG*%$dm+LpeIPmPs*OM%I4Ey>i>Eve=`tb6a;d0q8I_7j2Q{a1wMcY zgdiQo@)Mw`vm_`J&HiP_P}=QT2jB*~a}0NnT87I$g(j|Ogjp+!ABVz9KTr;(2{nN2 z1rt(QRqKO6*8z4x<{Yjqz`878{;N>=r%>{*Xo?C8#m-^3W65EbU=nU7AMO#$hVcAJ z4Y45|{SG%i1D#V^9Wkm+wN@lQH)2~&8V|CgC&&}zHKJ9wZ@ZJ4`f+C(t)aB`Y7N2*i zKQAlEBU`Hjxd|y}`)jOfeh1;t?E?7fytfNI?J>S&PF3#@jqXphjP~C1Uo12uT2f-j zlL6ZBfNIDe#=>y?j~*9?n9;vuocc#lY0Q;VhHYQ5cKC1_Y}kS?mJMOr8v&ONC+K(X zm=q@90DMvGRujCW5O4TR6C={yy+PiI}NyL$TxdT@qUqt0r~RzdFhU(D!YC%WQeO#$Bn z@{N(7;~8aR07I{wWTRuekA*UG4P9KNv1_zKjzG$Dt5Of)G^0M3C2W;DGq_L{wDenZ z_R9D0jj20uQo>~2#Z3+ZWHbax6b;Gl_}mlWuw>x z8(NRa=GE$hVTQILu{7#;DP7BI?N!@^8D^K{|q7Q{;H`b3& z!qshg{8o8B*p4S(dD9^*UpOONp7uP=oQU6B9r2T&4iX->2Ug8lSvb9~rP3TUsu#Wah7Ii-R8vKiA1+ zn@))+|b&jK%P4O;_oeNJL ztdtgig1?b=T$Ji_o#XrZZB*~LAd@Acb1Hk{WPtXI7%i9Gr_bLF6M^{^$z#kzGwQPD z-+R-h<1A(gVMJpyTz{Ffa#W2(dygyWV6*{RFk&(|plK=qx}Y6Z1?4Zh(1S7Kdd*j# zY|>;1-`aJV8Ji9ywcsq0=MO)57M{4j&%KK-mHWSW19nh z%tT~a)1qKIqfT)Of_dzF>^%go1f>BW(`7Py&W2Ezh_oSGk<$V`XE-xtyJ9pYLs!!t zUnCZLbUvmJ{kUIU=1MhDdw-X_l1vrK=JfYv_<7t4g>*08eP!UF0qyZ2s%y;rG0 zg3MBeg|leo>*UhOrfss~23{ir9j}L94Xk%s7!-*3q}XiiBu8T_jrk0}XYq_>auzK% zmFBBwI3M<5;AkzVQHi-d#=AyGx0$UFPK_*7%D!G!9<80mOEI@|(qX`>pP;u!em*yBT+d{+j_@fE{ML*}^iq*#ZUHL0Z!Y9!^E_7YdKAxm2ZH;s`$H zv8%Z_o}9ZF%$jwBKGgETtP&aM6#>3d9#&vlMI>n^7W^m*)IzR!j4cYoJXWwGy5-={ zG4k7%8)vBUO<_qkxw;m4t2mME>C^?CC}l?4>;xN<00)bz0n?f&nh#(6fMySfdA4h9 zu}Q=Au2ee(PURyY9jef@xRMLX-(&~WEbiL8Piy66|2x+G0}09sLAhWw!3A2CkcRR^ z#7m(Loc3GnFIhuhzHjP}8e`+wUx<~1qKw3s1zbv~i?1QdTP_sWMZ>d>2jYqnkEGBH zquy2_8U!#&rwGkdk5jp41`IISlN^dknbjU9E;1c+J zef(V1vBhD8TfoDL9xK%WidIHy8CXg2S_yIRIXP}KRNN>p+WHN+ewL-Gjn}H99#4$> zxZ4$1B)cPIJ3Y<QbCI#PRMi`IAuRTcDqsAvAj2UK`L ztw0b$0`N0B9)(nDcqJw-EWl0!u{=ioYTfD}{(~&B7n~pLOev=Ieo>9LTb{5|ZxDb3 ziJ+uZx(bZ-T@q8WMJS=mpA_=jQg<>imlApiY3e6ch+ zH;JM5$7di%m1^N7q%bB=qPEAg)w{hAcx62i*VZw zTRHq%qZvHU*|;L7BlVCNVNzm-vsfE_wlRdcYR zViAc1YHe<|a`MW|=kb~BqA59M?v*J6gJdT;_w;`42UGiVKvQU z$g?~Brxt+d22>D6mOm-w=C6ZQ%GMR;F8+1>{=E1EwN_eVZ2pDfrun?gdq#Cy2le-l zC*MM@S59J_?Z@_fAzfY;QH`A&SM$w|*2UR1yT#9)ru+iy?b>%Fz(`X>=Wk+BfEp=|rm@;J#^UvDf#BiIL)A;|P~&;Vw?=b70&QnoF!o3cc9^nF*9 zRsj+*Pf5d*cXc8RW#k#Co{KQn^k_5wE~a!9j!FWVUd-{>OGbAy0VGVj$b!(F*H{03 zB|STL2S~T9d;zo;!TD1fWrZTR+gTES>Z-RsH`;K)Vfb$aM>t`S0kzdpQgZST8jj=7 z)-AR0+^hG0|I(8rMo(27$~HNnzZi_FpENy%sG_LufbUT{PFkTMzYi@E;KpWfrAcWX zw64*k<&)(v<~J&21wLM^)Wr^G$bvf_nL8wZ6<~NwvM{k%|xW~c-4H}Nk?YT+k<@4d!J66M{ zcLCXaq@@n*E*`Zg?wJXMvANh28JR}+#K`(jiF zT65_SRz<1Add+VOjtDG+WRL3_U@ngf^1Q6+i_G~Oc{4-Ulg$J?KtSHOc`EdYc<$AM zCHax>n#%ulYQA8MT!+}X*;!LnkKY&_3Wn+bH1fYSGkZjFg8UzUi_0rT=9vq)5$y&Z zf1Gc{`2+p(H6nxx6!1u}$|)j{5+UsZ^{)#(kkhkl%mW_iv9Kzd2~~0i4$&3+xl!*! zS1XPDbvjLjEs|NFCytlG5gV*@zFL_T16rEFCeQoIxa#^PdhUnw_1sEnkGx+ft|B7< zP*ZI0%W?Le`|XQ59xj z7+cBM9)gOQD_1)RJWf5bQcThZ5NOt%5sbAp0Z2GeDWR{`nFzjU`1(O>`YnRUD~)eF z_V#)PKkD=EKUj`omTGihTND@e!UIaKmcvTta;5maELLpJatyjCxaf7?8tHS7nlh4{ zyK~BpdsU55!Li%%^z-g`6jUW1wdG^n1a(RD;6lf4>kByJV@I@~V^BHI%D3o*q zy)9^G*oFtDtL*^ojmo^FWfOf177OtY#nm=gjksbgEiRsewx1;de2&9!;b70$Oi2H$ z>Xv;AwKt}{366~mE;`2i+w=cdf%1}vu)FEq1d&tM%KuH~^UP)cx9Eb(4V4E3$*Bz_ zLtv0}vYay0ms++#lY<{IYVFoUrK=^vf{LuhggjH6!0*6YV1SerfSo;9Kq9{NSW}2I zR~;qfFu2PFEN<%Wz$XehIf`x6Di6!6AK^6 zZ#Um2pUV7dww00QE0UmcbF#-aq^d%087uzw+2Q+&8mBN;eZ33PLFynuE{UbDU^3An zH%e+D4YZ4iH7+!Qng&iQ@uw{@c1m;IUc;}joxxEdtTNn+t9J3`OP23|3D-=V$8x55 z=Rh026R&IKb-s=r0~K)3o{pVXKS495e@6W^jz>;7EcO)Rs? zYqh=O`HI*;2_Jbsu&ZBrJQl(M@`0Ogp15TBfr-BVUEJ zlh@;F4L>GG<1W-(zb_j0%5>=Ie!AF}ll<51Gg;RlXVdSr8A5<iuVgp}x5QtOsdSuFo56SP`x8d z=a|P_LaQ~EwXRw4Pzh@gq2y%t+649B;~*i|BNLmWg?aliaE&~^z`+cREN#%v>0dSe z6BrCxQ0|!@#bK*JVqqWSE3$+!oU9^cp|UAxwiMZ@%Z>UBq-i#@%b)4vV?L-l)J8}HDRxAc@x>eK0Md}x;f_B*Zo4qc%mP69&WZuKM z898oD8k#;ld3(W~ZBPz@dir6~_ujYev3Jrlwi?|KrYh^h<5ubPn(MnL8$UmATL0eP zQf_jV#%;8jeq*Oq)<+FCptgzlT&%ZfsRSpc&rs7FZK5X^Hm)QRm$J{Cql*gxKwAR1 zeVF5YhSApB8a&{A@VD=F-Lz*!l4^+r9XCUn>xX&x*DM=vx7Ol;fsx+{@kKvBpzhLMMta5&`Rs|cVD;Mr`5aaxGf|_y$G=?ie>4MfBN*4) zF{i~#z4ETVg^5=sm`I8msZoQ`0V48SnJ^ETk+CsB3nT^hk*N5qw8At?a}3J5Q-1`? zx}dp^K)p4r4Mgrd*ii z-f|$FL4@H$1%113v(12{@{|x-_mfN9AKVq1mg`*Oi_B?8*{r9tA5*t%x0^rRlHNJg zUp>wL*cNbFzhM#AVkulT-=1dBII<$ zF)+HEsI$#x_XsnI(QSko@aFJz1z^``UH`FCy2ZlPC8~5V?p;*FZ^sbARB^=tkOH-3 zM5!=E1Fk)&8=i+sx1Eu7k`;@uY@CtXve6Z>Tp8)M79-D=NGBob3NC5fpbTZ32j+MvJEAJM}Q~J%7H&OG$Y7`t}z>!ayh{C<@7i zpbFPeTlwI-27j?BRe;N|Ujg#Mpj4#{^X@dc`{eNolHHD0kK(k|++tN`-s;;Hfno`Q z8co-GQAZ3ST+mNBCv6WNC-${UBjIrmLp!1yo`}?}FKI3C@e{@^mYh~F=XK6`<124F zA9_&7F(>sJ;PzScgG1}S8^VT>>%{BZW;E43vv^#*Vu)1ZW7flO^;3xU)yY}#R_bD@ z2vtL82d%<&J?vSJm&b_uE_CLj$Th00*TMNDR~#(wr(Opv^G#6|fa6w^%O)L%91T$c zt{#19N$CKBp3wiXeS>Ar3 zwjG33W_D4`IPO7E*R?OQdX|H+;?Rr-915J79tcf(0;9X^E>(*H!%e-W7fbl@F}3u7~^Y=L|M?g@JC7_)a(fYjys z#ICMD)mj=aTqx==sd>l|c$1W4d}EVub5LfM9Gh7lPnNu*1v5tDHK@Ub2(yW&FL51R zVVh2ixiCc+3rn_HXQp{rv+Kb-bT2m5g_6(qac8hXOUHFXl2JLOi0wm@QA~O&gzS*=HhmHX~?SLjYMJ-V~$_OCHWS+Ik&A$-EI1 zs@zXPwu}e1SNoLWLMf{$w}MeEnxujbZ*s0bW7FOr;i|Xa zim{ybFS$~iKWf>Gm}0VL#E_+ve1FW^NaLuOGi<2f0Uv>~C5$mReP#@*+eQ~IQ@;JJ%k;~@O{mFm zmDml4fKz}jpP@v}{K7sVotXTx3~9^4%qm)nP3*TW_*{KaD^o$C|L|R?(E3~GeV|HM zZ;c3oAdh`ejBbVL!rI`S9+a;qnB|UqzTn?r*nc2^#Ir$3EmFF)i^6NfS1J#ZxLsb) zOV9uk2%=>4q()-z7A@3eNgHOH7<$j#^-cB;352w63wLsThH?F9nGtQ;&CSQmGs@OU z!T>i_aPKU|PHmzib(8vPWz);Z3bOMN<41@aA8C!?}L_|(id7F>D`0~F2? z#p~(M0{u-FP219vQ3lQXG*s=fdgQ)W9pBgW-wC1f*_H7VMl9Ecj0knGgwHK!0lAwf zk&1AwXBp&)hz4M|6twA)NZ>M&9aO+?-Sv6H2ESVO{@{-?d7e$Gb>4QPHjnB4bX24u zX0;co_B}v(9*l|-=Y%+BJsy74FVkP>B-1xJVJg~=2vbJ;@7xBed<%aM- zANCb>+I(o7T>M;1STbh>o~G*9j%(zn8~owNEgasoH{AA(hh4eoZ!Qjn;)5 zyzhV<$SJMT&v`e<@FV#CJ{xqO=ym4~l4)`_+z24)rRaI~8z@o;d*{dEcg!Wr;|EVuH@iXkbpw^XQC>kpfjk4;q#iCC5sqY$Pno(U;pvj^`On;%c zr)nzY&**k#4%-TKi%_jH2G|`4z#pS^95Bwib><2vwS@YB1ON+4<@oTG{IQc zL1ceI#x@=lic?Iia_Zfm6WI8%Z|bmc8|Dg$Y{OSZWB6I}ews z+AXEom%^-_DKes@$;^5c7Qd3mMiu3Gk_&QtPsv);oVsh$(p)5^UXQYO>g*ssX3hhf zG2CM%VsB9_C8rlj_p6RdHF#hA$$r~ER^`g|Q^&3SrUdGJs=j6m%tkkoW)@iRxTQirB9)eI^3=$su`+CSfMuoO71)?Fbt+S8dvprf|-1OTV3fky)?tS=@$~W;jn$!lk#ngUB6dE;*O`eQd7qNx zlK{f!?!>@-qI{nWOj~G)B0jcIpe+vW*)4xDKebsZHPHvk8V>KhGKM8oZ$zK%OH+z zN#LW2(SS^B>-=}d{$`)42WBx=CkmReI)Dyw>wt@USZxH4DnfWNKM(a<$g&lG=O8_% z%y>FUKBs67PnzLGBwf!qFPA7hi}b475KxKQXEtvBy{wARPfE>6g*|qbp;D={D%$uQWj)iit_!qD=o0DPZ)W35*Ne+h&kEkuG{JAYR zOAB736Zf&Rp2ujLDzHIBMhY0_-99|h(6uOlH#T1zqSDJQHT8;`j}_mMv1D$^=8i!I z(j6%}=zZ-{x9F+-j+u5CT8dS7RafU6B~ZjEQj;-qe5XfkN+z1K)l3*CaH%f33{Gsw z-N@4JYj~~+55qzV6wIz8dwp|)YuUTtBno#_#A$LW8zzZNc7vz&_8%Y|A?!^;dtA7Vw6PSSezZ2iMt&c67a}R@_knaTLwi}&!bv0R zC{@4jm+>MCz0!SHD4xc2Q0xAcKR6XeCnjJMJ3}OkaQcvu%xS!5$b0|Kq%b9?FHhcKiJD;vU*s z9~Z3J4M#{4$Z?DJ%-xp=_>UyrSOXX!fDb6kjH#|aP198s$IQW|h2NJi$Nbm{G)q0b1Pu1B7ZbmEMq<$ zZ@Q!?$Dzv>X(C(Ioe*xq>a;b2v}4?tWVs@%vMTclzz<5v1l$!JpZP6{AAExiNjuEN z4hB{{L=llLkw;RERFOvV7D}nQl*MQl&$u5~txA=7p<)D^gA}tLd4)bLx`%%&OyUFL z2bf=UZ%v*Xhfgpr_4XmoS;_(anbC8_&~xoqCPU6HZkjL=L89GW$-}_PqS=$kVaS0K zmv^D`;x92^%R6qO9bEacN_k^-h>X;`$6L$rS|*(&1$VukY%r1OZ8Hk&$?~;Uo(vWJ z$1VnYz3)AovZhnY6on}aNR|wXpC>ACAyR#)E%N&;{44Dys}D>qt#UU+InDyqCAi_< zfp^w!c$&4gG>VdYKEqI^^|ph4LshwckN5BOn^<0atMTm(+sB=j6O$OUVHp-3;Z}Jo zKUbZoEnPXuD{^niG*nwdJD7J_-cY7qKQkgeB62VpcfKveR+W8?qVVjl>;Jk|u)4?` zp4r*XJU5F|E*UYqXTmv@*djWdh-LJ??C35n-DwoF)2i%!4N=XUqW+kI$(n!jJhf#6d_gbT8OLl`14y&_)1`LUJexQlJ%#p& z8EX@Oue#cwGUO5*$8YB%*3=GEvb*)7d}g~^ zd3wjfqu!PN`)K{H_0g1$W2;Uru?wNF`ThzctzZ)NYj&t5H`7~G0c=Vvucrc(G5a&H zeU+y|grj{H$k3UXtoo3{@-79p+Y|p=t-q1Y#niOso z93oA|SzN;{T`t{d=FN0DVZ2yG$%;oXcxO1-4Ic~UpRVo$7tIa#Xvd-c8bM3Rm6_Yg zvuZ$PJ8Dm;BObu-1cY+|{+hx!q5zmK!Js`e_dyPxa|}RS zWXi+<)l6vyQBrlF))D%8wo3{b-cR^JF;IwE=dLoG1ow zX3(*O4F<+E?&1kOP>C$pA&a!XDj|HDV3O1iAm7t{vbjmTj|x2lVY#$lk~KPOR~xDb9CP zr^#-fVzuXlfNyhWP1OR{3Kf@)G~ffs^6bd`2HZT~9L~s>*5pnkzoE%%Fd{W+q{%fi z;5g_gjjl;_#w_UBx?lS-g2nM8S(f5{=6P`(!Q-V<>jzY|6GJtWi z6vaHal%Xr6IBP&kU@_-yJKORyVFZDMQeZNp!+@B{W(aTZ8v9q%Ul1pqW_mJ>%-eDq zh8ny+5|*+0ur*cA`4419e1xFJ!<^)j%FUS8AP#8$+SuLc$qICc4~X}>9~U(pIBB6+ zNrc%eUkt}$4TNFwvPb9$P$m+orx>X&9TUv{MC8`K$&$)*3Z42m%v+1p;2wc4a9J-) zUSMx|cU*UcdV&e`^E+=oi^X?EljLcjdZS(9SaCLOISrQ4D!I>kZg`yB^c^hHGg)u; zuQ5sdU4rNI*^*OMT*k`skn4hn?<%%s3rr;FI#gk70E;X3xu9!F7;O*06*_fxf=0yN zp8}lt;OK=h`ThKp*A>Vk&jaQimgl;bu*pGk%*Ca!KQ!fNPHH{h5pVq9hky{=^{FNx zs42?2=jVF+#km|_R4KDjKDMUQJnG?F)E^f(`OOAR4{B`^mZ>7YpiybZxj)G&6YN8v zgD|$DN-w-*b=b|AmG}z7O|Il?#^xG)S8xqk_nQXYSGNq3`j@Wt)vdj;4DreAELe_` zjV9L9DUBeQYL)*6(d=Nh$4Z4iE6K6EoKSGDAQ3jG-3{$BEwJE3Wx0%E9VdP=vt0YS zoFz@vaB|-WKJzBTo)%5DMd7HLPxg+!w^%mR|9$qw8mdKt_&NA`kCVAdz8LuNF_nli zCC{BK&9%XJoTi0C${#9z&hTCY12P1*a{>&Q0Q9yLD`Da1@Qe9aC0Itu**&&4b~ZiA zIN$J-`t`r+Z~X}UO-Le}Y<1_1ay1W$e3%Ffd*D?x_$vvE`Col^%9Z^K#aZi#b+mx? z>7|Shy>5FIqY@=Pwb`))Qn{w#TGQoDysfvPpUjTGsN2kzF;`@{9GFz&#qu_DJzl1H z_N6vVYNK@{$EiLMHYf!I4Su!y()>aCpUIRQ7pkt_cAeURDR5@Uw!$1Vl=RNQS70mS zSLU;B(NFeNLqV+SKwsRan;n2!r;D$Rm!GlM;}K@ z)mn>VR<$Nm0RF|fs_8CK3ss$YW{Tnfl0)9Z8FQ9*HlcECNW8vH?-(6vw5@G-(&-L6NykpdcE`4Dcg%{-j&0jEE4FRhw)xfm&fe$jv(FgsuNoQ8 zkIFM@uC?Zx_nh|?E2nGoP(EamwhH6Seu+0!t^nEiYRQzYQVZwM`2<$HSxAP%7ihj* zzo~ae7Nv&S=)TM|4+nA^mt-=zP5U+uA=2HjnH z9AeV>EWGUx1{9c$d`ASDM+fi>cwWO<^Gfc5vNbeaRf6x2e3#vyU@f|Voo-={6{R~Y zwGolL-x9|$z6t8K;6-xYx@Dj3e06P3ZhiwFoV?vi+IlF`j##{gAy+K<9+$n_;gZUv z8ZyOGxjA3%wA*U`^dj?g@Qv*}agqMEp3OK`XUstF3hQ&;KHNF%;;Y_eB_N%>-E@Y& z(YaH(_cX2DfNJdZmXnmX&e?LiK^p&>=R&_WEySs_i9FIO8EpB;fA$w{9l>$t+x_~d zUxd1S1qH;comlP6Q!xS_pRY|Lvz0aCK>huB@S=79>x*i3(*pGqtja`2m$?O+j1L_i z4R1obpJztfC}JS zE80LC9Tu)d8^$FR;i5yS4mY=-0+MQC$<_x~um`asI#@1-*y909`c8mov9=f&D{wx8 zS^$`!JtYr|*`)0yrCQEfYz0oKnpJe0RRr|Vb=e7*6oW{XN}tzh3#Z`@v+;VeCV6bR zn9X2r0P@&wAQA}#T_$APdvOJVq1QTYrPQHYhV>#ihgAOPkYVNart$r?klu60$` zm*04Wa?~iu{e}On(6A{%LB!NM7@r>^q(|(DoYBPP^{1w)_y*bAhgZByCRD)**%V~I zO@4C!czrng1HL!5y6Ll)-cEn8E2`efi&Vv&mh}ZY@qPSIcfrD*a5TiQbg_j>seJy6 zuC$s8WXM=-3TiapQ`qYRaAv=(yX&>1>pE15kvijn>aO|3)^vXL=@NjHSt4nul2w-J zdoO9+y?3eGkY=AY!BSA6gf4@1f|>UIdU*9RU*RD>lfS2w?fCoHg(H?Dt0$d7m;d(S za4QjLefvb&)?`-jwqgr!Joa3(os>2@YaZ=>l_Z@Vu`O{S)Scb8+S!LOnxc~w(BEQ6* zmYf!u?kjcukuB}peQz24TS6Mcz>UpBdzQN562tp_hW9RL!og;PXp?`K5tSO(?Dy#m zKGP_^FNNTyVQk_a3VO_@w(aT(BdSI1NhQrG8!h``!)SJEHWSaEYMUE+jQ43lzLX+A zyf-W$rVMPj=0QH3OpiKDL(*0|{&xcni}nTXE6#JwtHo&6D<(G4H8%5}wuzbyTWQ|i z`#0R-Wk0^YiuipdQ6ej&zj*Q43h2Yj<7J6|jBicf&RF)O9AX!F8ex&LIG_39PX=3z z^LJ_Q=)sIgXH~Wy1Qt_wihU9O((8r$d3pQ2XuYG z$S%3a>pp0V@v@2iOaL5^>!S4$>Ck!P<@H5>;WFzwWyoYB1i?RISix6{PyB`H{|!yA0Bso8dkOENJ(tu zJ}42GATyV@z>0@ns|m@`%oN+?k)86e>a^lMHURKo;*=)d{|qx_aIJJPv@nD7QKj)@ z%&9gt&+0MYu>*?r7?~W6o=;p1ZaBT#KFG%2>C6M`xyiaH{9oqug z7)jD$hL(N5mA?IVJ^}{eE2d$a041Il-beORTu4ia-#3m?-5Id#4>2xaJGytu`q?~n z;@nqZN}(AxamW>{UR3Ax3Rmf3OKpNYgIN}DMyBrEpy43o3xGY_XvqXB7nC<}h~1T| z(|;SztVonKs~1s-YSb&N2sy@CUcO>SVpe8oy(Ue59v#dbSgn(JdT}kYwub5!#SFZT z*AV-?XtoU9;e9}P%B3{I$n&0D(vT*yi2%l0uiDT=dL^YPc)+gFtI&S|Nz zFk!Dk_q=CwvlE}CLgO#n#)x`&{7;F1;JGrL6sW;FE_^1}&rwEyD3P`YIyL4^*Th5f zv#9qyh6M`E0$M9;&MzPCW{MN!`EbXQnOFmu(P^r5JLSrRqr|&bUyYMkj$L59E;;am zr!pfjdxWgy&mZ?$sde0=sj(k!q;X~wmBXTkywFRT%`FTGYk%J~I;>bHfAhq5=n3C5 z&Y0YCx82Cv?D4nO6`BFS4xXSdf^vdB%PaH>I1LWb$9Qb|ICLgWXMpx$cl?F?NUW5g zK*mm-KuVs2)yZ7WrH1UOtCoC7LiMnXuk4%;~?lI%_$t;4ALK0s`#@K$P zBYyvGx`=}_`xUQMIxCevRzh+LqE@g>6D{Zvh2e?9N%>^=S~Ufjspl5EhuWuxMIk;# z^>FpGyD$6;XS}YjyCIt$eRhO~B~$5lUEjFnYLMz0j(xyhfCzemr^SA&M2d-QMgfW; zj^k>>_bRC3F15E**w@yQ8X-vO71ToH{Y2h=p}P%$P+;IaF2Z9UCSzva7?{rncuy>B>XuXKc3~Y$E9uYFE!&|HF!Qk zs9&q8Y7~uh=${F3kdPte{YAyDRd~k1Q}_T`$+i&X-7oK9z4{hnHNRk`MTE_%5CygV zTo!ukMH+I1vB9Y&apTm6EI9X>OK(MU;5G#!owOXrcu|{Jao1UIBiGU`N}uIlmW;2C z#7b`R$~ZgZ8UmG@n4A%NN9s1 zG;4)x@hb{*ECk3&-LF3UUF{sI4Gd8#pwSNS&+%ypE7IH*QcPHEy~=tm7s9w-0m$%kIJZkp>o}B0t3p|MNQ5!^5=dZfHfl;39FR|_cBD`8^6*;*}HU8a3< zJ;8G0{ithjtwzaN?=9=?!{sg@m1^s`tX_oDjD)E<@*WMXszK6Nt*lW& zh4c>^APSHqNnnrm{XAB{JFd}M4f<|Nv|vTrr;fs zaha_#rQOcnq&G@U%@ix*Ao{5eQ(ZItDB3qEVWa~;pFH~(^@w|h8!RY5Oari%>X)8r zS)XD9_)xDB!iJnK#C_yjdk4CUw!vm?+?EH|tNcqOfW6 z9T;15mkPF5LHVmsOx0#!-w^)FnFjRKv{;B+yX$S;y1nzwQJRsz_f&UNdF`Oma?qNV z!K!J@Ve<=d5!^_YPMeBSxdvklw5)rMmw5}*cV4)1BI&aMFhEO{o0c8EF^o*$eDZes z{rafQNyH?ise8ZPHAk`u;>#X^rH2s5#2_H!n7LgYvgzs?|BC-Fn1@acE7D)E&qwGv zi}|n6^*@u(If5oJ&)K?$b`so2B1%?e%{6S>WLa-j7HDiF|E#>MXdm%pGTeZmKM$^p zx0ihtC28AEO9P&*&W9|6?VQhptY0U)LH;18K?6$7>8v$@ zJ^YCrAKytv?cXQ7?UyfURs!GKAUn4KUB~4I>;@e|zROD-YdmBbf`9~!PbcXf*VpwA z7H_9xYE5?vm@JZ(%gwe%+>~uRWf=b_;OW&*=I0+-t`11{+c1#`*ct9@>Qr>(mm|=EwC{6d7FO47tT~O ze#DF-*g@2?EWhW(YK~BElc2s1HE`1p5IXO1<<)P%a_+k=t6k_K^*|NEyg6%)l+w6a z28ncAfe2YU8VA3)DNWWe(|#2$k&A>j{E`59LFL%(k3{?O`lG8*Xt(@UD&2dpDXl($ z-37W_@7OHwtMc`V3^cpyS%#L%RA@BhfE-BVfL7XKx$P7Pf;p#}g;FWK^h}wqONBqQ zT&9J^7TAWv)VdK>94?cnkBJHOmqFeUHot%Itwu$D95En>Ya&|cUO%$&96EeF;YSzu zSNI-FD#e533rOHodXRd}AbUNzWa1DWAp*sz?RxBTn=+*lJCb~CfDnSw6tiG0;PBvw zR3SS~GA^NwsmEOq!dHNaB;87?T(KH8@+ED;4!5tCJ>L;GMP0%)d6{mfP$uOt+PFj* zAd+})sjQgaQw1$vUr^U%Wg-lf;`nxQsRzFU+9Pb_{wI-HVR#`Dv@(+V3Vm8iY z+Czc!q_~u6Dzt%%m0W0(u9*;I+PBnM43amD3Fh5DF5kwNQ|6Kgmq&-29G^Hk9>IX$ zKUP|-k2eaK;`ib7YT}v-@GEG^!_%CxyJq1$pHi$>QF|K3+i$UaQs$rObke`T7eGzG@+kAn7lrQu2WFjT~4gfH(>7` z{|w!#YO0^;>!R>TI>^q3@r>fHc@btRx+5D)vWm_$w)&Se{707_B06}$O&RI?9^xcb zWw7$|km#?oaYe)E>TlG26d?jAX+}_hw9qjFWRkf(Ho@o{kJ-aLI8ccC zQ#WH{V!&pN$Ns8&PX>IvPfk>E{t{@kjUxs5>VRa#E25~Lc(VyOq96eR=TfB-@CYnU zAlTVP9wgWE+^o%|=Og;bnNa3Jv3i}{0b7kK9R~LU!jr|x?xnwq1n6VU2{L0n~ zH!bfdp zIL^yML{dVShOLTkb}ASyaNVMh=~%9#av-$CO*Whd?wM2=4{kROWT`RGX1u`GpLr6T zEj7U$rHgZr#WccO+24>v(wNeGtz&RLW0g93X#e;|%$3GJUWmIDOD1YJkgv(Aku@<{ z0M`PG_xh9Lt`qafW8%Zv^RFW>>5W~jv+Gz0*Ggy#$Z-1=XRiO2{SQKiI-??csnK|lJ=q903Zk<6SgWkn8Tpvnh zJPiU=8vMac=Lsd=J>g<}foa2%c`X?d6&r9KN#%ZsHng4vJAb{VxpI(vfyv>m68cqf zEWSdmjN%_E7~6HI=(PssDqkEe;93#^3(oZ#YYoYbF5UH&vu&N_=cl`qrSAp$`sALK z^wJ* zo9xiOe#{aR!KUNbO=!d_vNWVr7aLNryI|n{Zj%=9)M&Q>F~-6RMbnbeZz30#enP)E zRw)bMsB)f2w$6dnIRq&s(32y$!OQCi-Jn|{oP!r*#v+c=k=qCNi6pUWl@CvHf$U;x z)1haqhZ0WYU{UF!j8n?!X6H~|m;YInx zNv81zifV55sUSKS83{L=J;@~G#B2*%@D5N^DV{jfb)^gyrwYVpjpa&}j(wdpiQn|F zHjvU?WLYzP~%(BRRKy zVd;ER=gTy#J~24a@Vu_TFu2|7NvOgH$gJGy9G0<%E$FA&z_x{3T_kjknuKT$8>fN^CdK-@a1Pfzu zp9fOXg&}>8i8gwf3`Y6WI#l_R_<{D{&x#T7jgZ80wS0vDhy1|q+T%PS|MSflAqz;! zaeLhgFik(uoi7u2%zqJ;E^=qAIl-Q^2UK7-n+;vhKijbWum{Urb|IQVYv`YyWt+&_ zeBsT0dWZSRr^{nU8(04IvZy^D;pVx8x7~r;+F62yx6_s^-E&e@?ClL3dQJFhRMVNi z_aWx;i%@w?`E7RVb}m_9_5{+?ZXH?loO|$?U_uVtW(jLM9GUJT*I>JCKjG6wi6na* zd%Rz?L>|NK1vPP1m8&NbQk*NF=ZI8-e!A^5HnQ36;QL=px5Z(^MZGIK4F99>mn(i^ z82gyLPN_4fEl>4R|VyKQuIBWWc0`P|oK4;2c4tkh!`3aldW_OVVjO{BNS z1?5t$TTQVVa|RvP-G16u`sXXua4#f#+|uDecF#%9TZ z`UK|VDa=AM5{a!|Xm|RwTdz|~gU+T3@vm6ld>FXtqe>+gT}+wAN|sgurLG09*8(LW9$6Ms^)8SCvJc+aRT z-C2*k0FJ;SFBZ5Acs*fAJ#N9ho!}o$%+88Fw;?G(@~C1Yv-=@D#`R0a6Dt(3ZZY@Y zn=pR(fDGRSsy4{@`$JLn5WGwZAg_yLGQgP%WgF_Tew#w9w>)myu6(0QiyXsb$8p+m zhI1y!1#YIi)7UcNVe%vJ;n7DOs@0nkgumLCGhZxbug_z#Si;pAkN0icbY^5Yx$!<3 zoS6=dXk6H;H`}4I-OtTltEFlUs>#T}dpsPA!mG;_>9oI8lW}4%RB2-8_Xu4>I}@kD z{>ux1%%Nvfo2;j;*&h7DlFt{szciJ#WT36nJ{-5EIt$rPsr%HHf3U<}op|YG%Ov~Ib$)!8Ab8mHe58?EuxM?p&;yOg>PdNmMrk%TlZrh* z0?_rk*uUn;RA6;D1<-iBq?m9E0rVy*K0a}HYq~;KjK@=Zqj-M^$2uXWJ4xu0S{U(^ zUV2{=)|E=n{;}wd{* zGKlIK{q&@eXEiT^!a;*5T`d2$3bdYlTx+;)TfW7AMgx*?V>4|G1l>4)tJ5PL{ZtQPPUKS&k_mWVsqcoAZXvlEK9>q7(n2Cbrw=ddq0^YUL zR&QXDMCQ-e$%4OPZ|>b|GQkCSg?M8uR_WZe+Zgiv(4uB5T}iF^n$ZwYgd z*v8=mR`z-$FMZ1YF>TsKYgKd9`-5XK;WB8TUH8lTxM0Ms5gC4lgk4*dgEckSlG1X5$Q=C3=uw4X3e1yrRa=vX<^c3>kd78|QB@x<)iH>y=9>!Yi0G34%V%s% zTCR>d+*q~FX1C|(`AlU)7TBwu`MUlD@8Y~^S8W1xW{vN~%>s2Xy(#`Ynm;9;h{ol9 zVI^gxxV%Qch+<5?vH3k)Z%02Q=Mj^d$4}F-ZuR%(+HK{u5Tt3 zm27MJm9v4p(?`@t13*1X)ex{4?SvI*)YtdS=&$%h@KU+AmSN?7q_8qkfE%W_8+&T;kc7j3bJ@pa|~-}o35%AYBeZC4j* zwOe*(&4~W=U2S_b9{&Y9bkUl@%v3Ct36i91U1Jgvy41Ap?7f-ne2Nvw^N zKdc_6)jY;qne47eG3g$y>i9lis%&4p z{@LY6f0MM?wTt{7Ci?La*xELk6g%~|Eq@_(Z9{n=w+zl=OM`_imtPBX(u(6r4@FTX7`m<HLr@QvsOH7Sfzf z*VySR=84d}aRU&md<2fXAK2xP@i!6$R;jX<$`Gn<(|r!NudSsGgHMgeHLKqXl70j# z%5wU>bD)IEK>~Re2%%iW@v8hCZj-vxcr8MdPwAnaba{10*_6&7pi`H%G0uJUDc3XE zyWWH`ZMW}xA!x>raqUER%22M)^YDtum7r{2xKigNn6i=WDdAu(O0E0DgpN^^7WqHavG) z**;+BDKHp$1@eULiX{o#zMbST(!ZKhl=ahb!LtC;W;_owD$oY){fWSu@4f($Y+kze zRpAEIm~2-!EuJMei?Y1Hoi}f-A7lZPcL9^u+QY-cR|lHbUt`J*2EzlbT>cu$q36<-I399d$Hat;BT@7I;m{674}- zn@DNg|2T@1-MUkh^#NhQ`RZT87DSpPbLbj-Mc>9SX1MF|E_?CFGNEL7UvZ|Ir|@@F zrup|DI4}NkUbX}ocp*VwqS0tvaVrC@xSP&q!u-aRDxu!;equcK*EJbYAvGkcV;7cp zRXBYLVgHx-gF^!q?sBfeHTa~*CHta2QNG@0PT=vnXViq;-IVtYT)XJsiz3iO)g~YX zIB~)bF#U!hldIOg@{|!CyjtO+B=-6+*jrzs$j0vDMW$JA8e@cR?KjbK9t9jRZ+xG;aV5CB}2z}sK$qx^hZgnUzMl*enY0T!wiVx8C&%>xrAEWH4e zed$dU2YULnOf0(ISZ(9TS8wsBH$-q>jJ?4-bFO4aKKE{9ce&6iUJ!-A8B)pXF4Lty z!!`!R!dtx0VJ7VD!Fa<^3y9W>N6r)zJezg02ivf6R;G@h9N@;Ri_{ zH`~!*)gPMR;h8yIg}>%@I^Om^06WP$xZLC*Ler3kN+>JK(M!YgciRtyW4Jp4%$B%BXKw9C*;FXg9Y&vSfk+;C}c>N@Nw()vl zvaBe}qqnTHTZmCpq_f$@17{>+<*9#av$Dq>H54;qyi-AnuqMzF)s&6pT2-+#0U^Kp$Tt^3H}vRb(0qX zBonGP={YEi{zD1$Ap-LOoYrl%7SVAcCFWZE`?&U2HNjM#37sj3zh&($wTiduZIA=` zNHKb!Y!JEsR2yxWK7Kezie^=|0Ql4G`}~A`=-^bX_s&7?H%z$q2|`Q%Aq>8LMV^nJ z;y3DfvTe)LacbmW`*?q}WIN99kfIEOrxJ1Hw4VAFIo%(Ie(hRIn9gY(>G+-IopiBU z-T-eUkeIT+7CMSOFK^<^h|rjLcEZ)Gz&5V1+F;NLgZD!gudpItavQU25N|eicy+9H z|LIZV1vhR8NyFV-qBN_FkU%lFQA{ha&o?+)F(xsqXlQcKD^E03jgc1a-HC3Mhx2HY4M$hF3%hU(i`)X&TQt5ZvX9%Qecy?a0yx=`QfdF<1{`6t zrr|++?>8`V&U&*t)#IF1yrsOHS`@ANi8wYUcy1s9TQs8;d!o*IQ^)0l-9%)C z)4H>NxidcCL?>yCUlyXUpg?fpW}gs7dp2q0anpM;2Or@e{+tuJDlWQyFW6(o(}6Iy z_F*PZ6ajNo#L`D{h9-jxL@z=&^ZqM z8lyv07Rt5#Rs|QgX>wJ|)w)aL6F_tSY*>hL;18xvBP}BTp}hPYe;AolCB-RXO3m{D!Kae@njv+tKZ%NnIe9T!Fz)%==emr zEE`n&f=_7|geF3zRPiq?7R;x`#TM_> z1}v90%p;gvZdw`6yhNz>xs>g~2h|(Z#hcHU+UtM6PomQt=?uuQpJ+~Z5b&po=@D)q zm)BIPk^&pJk2}Q6sMKOo!51#!`P%cmPoAt2&evf;L7W*o+7Xqk+5Qe~39& zv#T0hpWC6`sy%`TJX^mcXaYQbADuxzsti$$SNxUSjnh%mNYRxcw|APf+C64YskH!F zt&I&0{atU3pi#_y9_uQa*`cWa2JOj?6{^YB8ukv&ivV|v#&m+;8qr_uq%_fxCqm-QlkYta zQcP|VY3ujx+h6Xl;Uc9b+#(My=T&tARdwCJlFDR)gXoY!wjf}FEYAnVLX|H5xYXdk zS4RJR`}s$>F*AB4|F2e@h>c{Ak#{(8SV5|i5e9^7nkxO%*>`*wgt@*UIk(0)3 z-VjxgpD+ZPa^IzC!GBy(l2|-5Qb{H^W_;{;XE8iWLAY8-{Yhpzv`+qQ+g6NTq7kw} z=*S-F`v+!6QH@xS5#6bH(K#4O!?z8iz&J=JOLaO{Edqj$_#eJSW*M#Q>!ajNs`DTQzp3&H>>@fH1~5p-S8^V1z6E`-DhRPH%p zF?Np8`S-r%qAZWG?J0G%0QsYGrIlJXPEO83cS2z2^93ZSF_~lV8y08GceL7QW1oWbe9o<-jsz?-$_0HdRW1uWRL<`zRi?^23Fzm74w*$+ z!!pX6TN_yY2gp-uvUN*mmEfdQzOMoAa_`QuBy@IaG78?Qx^k z#aLALC_>gigvwzPXubITI|5#K3t4xkRqI!)j(wG`9kS`te7!r)JE`dMhys-T@Rve^k)!*^&AKOH z3l7Z5lMHqPEPPBd7U2Ss+{Rzf2>N#QD9{ivH??RX-%tyFS#GVQ2L0{#>pPDMC|*x%PjWmOjcA|p z-lI}20Z#+y)}HN#)SD23iSM^NZ~BPGk&^6y8cJ3cTrSp{JezvrF+SdZ%*OJzcn0=WZP?hK&ks#DW@qj$(t^gM9Wi_EgS!tmwpBt*B1 zRsHs%2NLlktNrv#c8rZ+g-iv!PwF5Bj63^;+@*+=!Jsoqz{G;RFeXV3tIyn|~%HcW~%Z z85|Jia5w=FwlN+;6xisgTLtm*$N?)3p~cdP)X|F04bf$?ixk@zp0A51JcP)Yf^MIRA~A2mh7)v-JUBoMB!7Aw%QRiEHTlG z(3}wG*Gr8cQJHDgzbb&;=g+&_6I3LX{D>9~EpJSSC6}p;{tmrrr54M5^5NA_BG)m# zR0e}o>5O@CL;9eyGyVS1vLtnt!N|*GS!FNI$r{s|-0#LMU|NI-7;M3I2V*5+T0AXo z-UZ@mfmeK1q-KhRQsM;?Ne4AOl@ae#X>LslEwcp#e)un|$uI zbki5Vt=hhd;LP67l^~Y_45`hhtHfsy2FlFp(DWpPqdA{8`C+!0=bg?u>GjfCd>07j zs}*!=JW>cPRy*c1H5$Amf7YyG>gIF1J5il!HkwOXH@K&1|LPn&)fy$VnZzOFWcdh8 z@#z~l`Wbl)7z^JOo`5PM{LzN!19edaRcc@;@XI8Rs7B2MzyAB;&dpWh55R<_%vyRl zLGO@1`d&VzhXDnMJu}sUJ7>8S^w2Lei5?DRuWjk%T+Zq0n>=58cfD^XY$o%0d0#Rr ziWmq2FYd5GVE6Wi%?lh%qzE#b&*i_|pUmzJ$0=R&e!fYcuQU{a(!trwI%9b^(t3?X zOJUI{y!rJx+ws(SN-xVp1fJ|YDGsaUHVOr_U{$scLApjp+yTP^-d46uUT>cDcKaYK z7AvXoROX_ppdSsGlk;)?Z5C(iGMCfn?=QE4%Wgf*$}cacdP?RTjRS$-++4k zdGpBanm`syHBk!JMV(%e2y)rXHcJ}rf$GqO_wvY?Zk(rGF!U#>H&^ghIvz3QvUU&~ zPzma=)a_`BV5DJuY`JrGDa$Kg`|T=?)7i@D$2(@++{bV8IWa27^u%U2?}`uBy%&e` zhn$uTjK}rI4MoHDIc#K?vFC02F^FBnv6y^ zdaGfkuZ=YIaS`?cWyqOtPK0qSkfQaMV8%fbA~jq zf^j5a=#(i}fkF1xGCDGIZrBc)#=ibf5t&pt!>1_22h(|V;^q!9bvc4;wb{asd(awp zFkk7ZgY0CsVFW^n?iZu=411iN6;L~B;?)Rj-rq<#9yg)g-p3j1U$Y!lq{A5j44mFi zlOie0>kKgbJ8m5OtVdAVL}`CeVI@a-56116P-*!t=-F55UG4pf&sU3pghJ15#YyJ4(p= z$tYckw%dA(V?i3wilJsDnU9>1Ak!iZWJf5rnLm;7&TjLEm)T+_`HxxnQrW!4oSfbE zLH@1#B_(dgJ?mm~D0{ifDu|`~74k>nq}#oUN})~7Okx%44sP1v59%~lYYAOX=6Ify z4Z)b@;?1$WcQS5w^73(xrda3u53H$9`~t}=9X-F~u_i0tkE?dOhS}VJ-HdS4#Zn{K zmxI;myM0x`c!?+5>V#cH=ku9w$6^bY=-drMNO`4Q#tS0{(${DrM{xWgccNJv~EKiD>u2zwA%Ct8I(+2d(yO1f0=Vj0`wQ{gfa>u(` z@2EQbxkuAr+LuKTchH6tqf_(RXmzIRkvUEw_X{9&%4$yAIv|R^jHol2T#EjCG2-`O zwgk9tuvjESiAmn%4Q_YaesdK@(RAcX17%MX7LsH0>flyO&EIF1dG?251ocirbsjuz zBiDmL2e$me=r5+cSgn38)IoHg`Mc&i6Cxb=CJXAk(k#5OgjXupo4t4taFJv9TAGlP z_QiPruwIc&7E}Ys{EW#yBoO8A(uSxt9+d&Q)CCdq^Zm~m2s$6T(tdVX58l3|=@jA6 zq0FhL?H>2GT22`38t#omZ_a*}Wd>f@<4BAD^OstH`cpAUSJU8F?})G{@vdcY(5xbj z&60lxAFL717*>(tUwsd;p_iXPmhYMo{zTt?L~8P!n^MtMUYWx`mCLA*9LNkm8W4$C z*=25sJ_5%sGQeLHe1hu`w_^iUp4Raf>+VEoS!Y7j1YxP=ftfW>(x8ds;(0LYKtCZ0 z-gyuaF5@PNQfQa+{s*hE6v|%*$AJ6*+JmR;i<9p+OoZUS8EbPo%M6c@osjLGrU;65 zroUf!Yl{c>Zw%sC3#qdfQ(tVI&?_mzQ@byHBV!ah& z)W8|(Ma1EKJ%-Bj|CK?2p8etiXONidiA5tmAG)mAh4t+N3{)KvTg=u9$5d5Wvk_N+ z@dnXOZ)+q)c`H9JueNOfS~P!|C6K(mTLxgyLHB_IfvR>H_lNTWclr7UTgNxHb=nO( zE3O)hbj@Jzs#h#rzPC}6c1TQQh$-%K~EbY}P|A}{;NKcnu8R0qKa^|8V z8|U(UL9(OoxFpd3pyU4U1K|Jubq(f&L1In>ZporKE5fS2T5Y8*k-%ugro3Re#HR_g zF4_?ejpl822#1l^taY&+iK9Y~c-==IiKReJaLZ$hYg|044yrKkk?z5U@z>lfLxd54 zGsp=H>ylvApfh)gP5EXZY~GMk+T-aBkrl8N|C35IE6+@S)ty=0bLJS5BAMuRJV!)RaU8bpV4^rdcs~Dk*^0 zFqU0-I8}ST^lt(i(|7n4dJBg3dw@08r`1`X|Gc6f{M0uN@&BI#{f`X`Z>>{w82l@R zcr39$+kEVQE=y~HFOwx9F7oh`760>074gcpK;EI@88G0G%IMir@U(n;FoQ{I`m>Hj zv+=O$2NaHM+nvoqEr=$YyEBrT5EVs7f*>VgB$<$Vx@bMs@fDK7-~}%9_q>A6NLChQ z0-Y$(YBTqTCW|7d*^S&fbFC%SL(u4n@i}boGAmi3P)xiaw3DAqCWBb*@xc4TmHGS0 zJJPHC`-&sE=E9*V$XVJl#yz%FwW9P+>?{dG`Y7P=Rz9HCsQHsZqt=pw+x5jCYoS8$ zL;Ov-{mm8??9{!hX_C*M!+hri5zpMDxSONosZK^r1F@ckxZ>h0mUbIEk5~(4lUfTo z2{s%oJbYA}2HQ<6yxrjhU8I;Y;9@hkx9#l8d+^w9pg>CAd@6c&oIkteJb6mGx z?58OtJYGIPQ*ahoM+frmvr$*=%BkM9{3sgu*Z6ktlp_mKEZ&a7=qLv8JW55P#DO#<{v? zx{9EB0^{kvBg=Ij53?uuZAk%l_HrmX<{l)$#F&t3$-W<46jVFYJN99lZg2(8WN?K8 zx(+$)U%i8;OZ3O!n(L;YoOz z+yAO*>@b7NvXh>JI#`Z2v~68+s_5#aWd5<>eN6ef=twCdn4}teB+&LwsY&%5VeC=L zC3_-&S-3l#iY#Z2ikM8g29|qbp$IuYhs~0*gYE1TNQ%tDp6N8vw{irg?G9QVCuEAx z;msIl9Xk-ZhbfwM>+j1hR^47Gb4GcE=x=`^|cRM^}W-%4RJQmT{5W-*?~X0hWE zO1^uF1V!TIzR6F_WUu!28559c zLu`tPNHtsuQXX-x9&_65ZV6tQTp%)x{61^m+h1;pkT7Tg54Ye*Pe;DBTh(6*^J;`_; zFYKS*Jj60Kp}=TX1)G4ek)! zA-F@Z;O_43?(QDkA-KDHt#j|mdH21lYE|FR_TEe8oPBf|ad+hTdOxtaD z{X~0!Zf!0-f>muiF5MnLEi<;P_A3Qa8EG5qe5JN&dtA!2GA_n?||A{OAd7l5t^$~OsBW?@R zfH($}vBcI9nCCK?@k-(|s6fA?Fu*z-TtDQZd>WvUkTeGh}x}aV3F8tphx)^GN&xIr-`?TBR=NL=ADKi^ zs~N?$2Q?D`L@G4Y7O5=ed8-7(m9YZT*2`sOW{%Bbkx0?p#=ODTKc@^#`NkWqmRsV3 zmr$h(&~sw?LuaB52F>1m{Nf@FCQ4W}%xc4aF$UF$T@1$#GM`s=771UnQRuF7JA@7| zkd7uOj26f=I}ZImX0y&hmHxn1rYYCl?RjxQNTXftTcO=qAr@=EOo-_Ah%3%Ems0Zy zEAUH0b<$kD^$^VAQCqH2xly(X$wx7vis)e9s$Uh7aZtM=+PM(Kn{TJB%(?dz8oXZU z@fMnyypPx9Egmm$r<(P_5tgeWg?D&4V)td*=;SbPS!s}0GuNcB)1_!qUkA9C%zDfE zXFCNgTI{a0e7nDrQT>5#|Mxq2G5bQ4Isa4%L42Vg;gAO!P=_k*@TDs|~?n``Ewm1$XlCcwP;; zAaG34&zHtPk`?NCZ+vyTDTzqJ+fQB892Z1!M4>tuZ{rTevZ+<0&oZ}CA7)|b`j zr$ZdK6%}XgIX&)LP2i`pb;;-C)&Ih)|Jz0Ldx#MX!jeS>7Yt|cwv9TVb1g-GIWP5j zSLK0U>vU#wii?u}*QpW&4*l@(5T(0CauXF!&XfGYO*w|EZZeUqCuG-@z2bvBpkrLR&zeZRAJKhYKVcwKjjrL~4m!^SOeo-vlil zkBlY+$_K^Cmp&QlUbS`--iAXHJ4`@;7fYYR{@TPF9h-N|EG4c#RaV-FlPypCpW7n zv0-nKBTVOY|0(Nf?t@+?3;QGd&hg>`aADU!~?kBhF^;C7P z*w&!GA^QL0Mk3NcKM02^Az^_-|0s~mqC@1XkX;i}1v4zmO=R$omle(D`t0u0z&KXl zz>;l(#9DQN_9(~_fk%C{mVWm`ZCgLEUa4QNP>&-JO;3h|96Aj17PtJx8T|3FxkHsw zEFw**=sOa4o7s$aAy{R*b($FI^|su0vBP1FJQAU2JBSaJ@1}o~`hNYTQY7w3qtf@DHm0pD_O4`>Btq0DsW3sgJUMOTdr4CnC-k(p6V- zF_JP`goPE!!SCU#l=QF-r#2M=>x{|R>Z}*vvazHP4g{Jt;!^USa;2y#R(_S3D)nM& zFhze^Tsb9@Mq;E^31!O_ct!_NIc#=K)flb$>|S~ z4`=&Q>Y?Lg^-LIRKgn~CGoH?r>Xku15j9t2tJw2Jy@p?-+Jo}-q1W`|r%weF=g#@S z9w0xgU=+6scmfkUp1r~t&TM9k<)3Z{4KvYIT8&vge*Bm-Ad^CwTs5s#_nr6kX4|<$ zt8r$qWUgcekdMWZnM|@h-S2;4c)Cx`m8v?{+m?N;W^_DT4VW&F5(6m2yvh#`eybzHOK?= z@LNL$lP>`f@`{c;JUyGwP)gLQk!^5XMLT7Zg=he9qq_ww#E)guM-Z zJQ$@r!J3OSdtgQQ_#3Zh`^r0%z*znCp!IW1e`7Tkw6xq zE|ALf;h*-J@Q;-RrpD#*w)5s|HQUVu$>*A#F0(iU1#8DOn$1MGdCte4t+z|HKYIw^ zaysev*uX)ONQnYmc#hBO^K>+EU_8Zj6Hlu*FmXG2{XGjC5)z7%5uH&WO1}+|tfsQ) z0u=yrwCO-taY^|bxH_(D8KEwGj-NDp=f*R0*<65VmY7PaoW&m)4By6+>v>@}2IL4=Z-g#TnT925Tp zk14FnF!iv}?RTTIkAV95O=2?g*Qz)#FE6vlPGg-bO3)7IiFFGB{Abn}toh3E#dU_G zpYV?{Gu?_MHzX2J_*e#YKx}^5n1SC%bhfEfy*`=lVg2m}h>Jw?N$-3;98L zWmi~qzWEhD4{F00z+v--B+xyJZ7NkOpgFGBN%(zlAtbYFb;3oJKR(a&zuKRaOHST_ zl!r~%bvra#ZnTMa<6ZC&RS@-SnLz-w02lH zdYgDU;zo$KL^6HOuq=f6&Qn2dB*qMNt#-C6bP*w~``o}TR+HIT%czYJpR2qPH1ZWc zria)6!mCOST|^Yc#8H%(Jh>{`3Ojk!icLB&yl7<+pAg3AZg#k^~@3_KI-o}P7#8{U&=Z=1*3)h}}4 z!6i7d(6x3-0M7^^lTSsV>Fa;zK>5Rn3DD~qJ~hLcigw)vrZx`*w7sPlM$$S2uai|! zZfShsl36=4B=22QWO0I{_{Ja$7j{HTHBI-42qd)E<1wRfT$7a&_G^?p8kJIBfA)M# zL;-|_N>uax`C1{={WbrEf_zgPeG&@vjcCe6( zDj(`=B>l5TV~R=u54j9k*J~F|gmVjL=d7vP@^Q$YaGK8Yb*aUw^}F!t=}Kdf`pkzC zc=0BtLOI3ol=|7`M>(Rm3rM|W60;vfu~6_QCQ4k`qh8ik^N^HBk}0fKA=%#L%Z{dV zCGmB(y>4@kH;uWbOCfV{?6&&Yt_0nRg_7g;@AB#-y+jSJwLkq`_l9E^3O+4Vb8EJs zd*?!w>oz6~j|wwe?7_9z@3W34y1J~hP<_hkz4vyJ`R-Z-{o>xum@O?u|rW&-1c^XX$x=y-p!`e|avCe0!*{tAkl$sNpEOshTkQF-Zg6}WwYKM## z1I$>=E=41wnGYddOh-zk4{n_}! zX$LvV%jx{`m-`+AhK*s5(;X9jO84wJ3f-Hb3_pfc!G9ECFwmf6=BIeGIYw7kq1`i8 z`tn5U1xZb$YhaU({aQAM!bp+OwnTh6R4iU_6r11DFfloZAoAA1p&gE1cwME^mOsE_ zD_-pk7sF~M6QNOjjnZ+==l2&bC&sKu-HKdq^78wZ9|8e})R!eo&Y?p|&7_we3L*8? z1cuhZ-FrQf_gNP~BqztJUow8~`0W*{#G=L!6asmQx4Q;;zLfwqmQ<=>b@J)yr`kcv z3a`t>j}Hh(V&Bi<+V|gY1MRk91(%o9?(AFb2OqV@3{qD1Cei`#fVm)`voWRc%QY#o zwhoPtt7UL{Dj;RIWCM-L)`GVO(cTEmGkHBr#5Hb&@S2V-elR{C2XZ#W%cgU(yk0IK zGt0xM`IU*_Qdf;XsW+R?zurtGXS9UJ)3!`_aJ%1y*?zj$sW8K7f$@ zikbxs^1boC$wvJ^h(=ANlY!#h2`t>+)TeaAhq#2V( zc;BH8H9Uv_5p#7Oq>Idx&1os}o7345JPY)oNaH9>M?jyAfcF4>G-#cwXJ{K1gVc|<|+!?+yb!t&O`q5 z!E${Rd(rjYM8Uk(dXB^4wEdE@$X>U0r7VHtngj-|&euyx#|;O|VwdYZN2C0rQ5;-> zx=)xFq^}I;&daSPjZ>B=t#9dECJAnobuW#3xjA1sHr zFj&FcH7z`@$GL8vI9{xI!V!D!Xo)DbH2hg_kEg2A$b_H1JMQRW-PP=6_IlGihvcRa zp9?2}@2Hb`%-gbhbkH<*ml%@}e7Cn#w7NQ=zV3v&lAz+KC;Q!s#`<(6WztaxpCM%8 zI5(HE)NTz*%znM2ywq{eDdOshDtBET+hkY1e8#>uar=dPtiG(7?}`1`WMlqqRo+|M znslW|F<#G&!wS2kaEi^>zP!-M=(tID=t1SwAvpo^bBpvSQzqBQwx|AvYGe3;=~-Zd z-l>)L!x85}$@No_(SiMT&_{{tpZw?p-rU}uiLU6<+8KlzDOyo#t(c5e1c*}559AEZ zK_R5LhHC#R>X^YM1s8B_BUr@SGI)BA_+KP1*+s3C62W_D9cD@T$Akdy67tVr=lvX~ z{xSROG?LocUmkTI8!;!qk_*w^t>G4Z|m=pZJTWXRbTmX2}lCbR8=cY5wzr%@Z}#PAh_2U`;8+fb{R3a;PSBoc1GbL5V7Nf>*yNJ?xppD zAa2p&h8Hu)Yw5#uia zBUv2+f}Qvqi42KP`0%b@{w1=`ntPgo2hgl8c`tXT8Go zH@^clhFI&~6fZw2h*C>`maptUr~pk4NRp!}K0e=-kuUlNCV|Or_B>YMB6Yb+`-edq zZ3Cfc!AvxOsEswIL6v`o9gN3i=q--%{L>4-oS8>&pXyVK()IFN~LhAx~ zNpWrUn7#YW0fV-_h3wkoXRkX>0@Q#6hITS5gG1Fei-8Tt|`WdEpV$NwKNiEcz_yPXKw*!mQ_f6xXvF8F93t2}u zE9rdE^~UV52%Qqixo!x0<+A+~QMG%f@U=j{npUUnhp}|3Ib1|IXv7UOR&x?yfk6s? zdm|6%ZEw9l@XmBn<+0_vIk`mgNs~!i)NOvqV7qq~na=T1Z?rY=%5%r5z2j^p=N*IK zL7pHqm^{-y!tqY~Yajm!GTdhY@%!q5DMG>`v*IGr)kf#nYkFd)-|QsCGrAq^A9lLQ zmp^F`LRBNs24(6=EA~=!S^9-1BV3p6suaR~plHO4xNK|8yUXxYa^0a` zNxq9ABnpn~&xZg+5kDpveNay_XU_(z_zI$2g88A(mu*hH)FD3g8Z{4LrKAyj0fILI zMAdZ}2CH4nD~Y2EPB9qP&}I_7(w;&&yw9}ixSw$PKQ^)68I^K2g?Xam^lhL;XG$PP zAaI_XV@t;3#m9)q6Ca+zKp>OLmX)cL8$v=rP%Jd5INljWZ4XvL-EZ#9Fbyv(s78Np zwC;8-+V*!T31Wl28dn$e&}bSL2~&99v7{cOiP9F@XhX6)PkH9-om`dO&prm0K9R?J zo^0&Tv$b{$S1bN8jd6j<%?XAd!v-X!#~7HHLkU-tJ#(N;h-X!K4U!qZP%_zoVx4)F zZY9!>;rr=k$Z{Id^!VyL@A(N9M`>*$@%|;0&)rGf0~h{^`w5vhWPmjcKs^ z_&0~*36IhLaw_5RcwmAPk0AbwCUyA$S{6&HPnXy&Aiy9vufH})XN&B1usJDNU35G4 zN}zy@1s1)(t&dO0Cf-N!rTn`cT*7urQ5X)7!YPYys6i7iyslost zl(tONwsbE3C%#zNt*WD+>{IE%nS*Q zp#~837W0KHQ3f-1;rQz&VGE|MfkzAkiL;4u=B@%{kIKGu!EC=31eSVV{%gqgB8&uf zV`Zr+-M?R?D0(E9o&pNK+Up%2OP*&ou}C>fA`4x~o3QP<4^y1gB{E5Dfnyqf?%stR zgwjKIR^dp`{07~R1ycMkepGa-Txo95_Jn_d%Q8fejr{|ox%HJ1{;?EYhT_Ztnm$UO z-62zC)mXacp1{&=f;VJ(DCWr0YozvnByClsi~aLEd5h=GUCpm*Jx&Av0$QN7f!}0uch6V`!muRoW%{HM;4rY-~4g){9v(yRi81 z0?k)3MdG16E5(c_pSTm_FC6R<=l%TqH$mdER4zRP;xFyLX$t-q0fN$g!BcfxcN}lp zsy|Dbpqu#n;+8v4W&gdmFO($6zpnn@`f#Nvh{a=&dT70;jhxrid)aPy=uOS>#){1t zL}g}UjOM_~(vW|v67VEg94iUXt9<0#MWzRO7SDW0+W&|LJ_iB>u>p&t=&&v5<9XtL z76MQ}fq;>3QubOe0mE16@CHB)g+>0nL;Q$AiqIDtyz@8J4ex*#v{EJg)ax{(qfJ9w zUKTN^5ZZ+c)U>Knlx#KNyB11C@iS!gkJ!ja{PPxxKA)lfl=*a6Hb7W7bBN{r`=;uI z@VkWuESFxn_efPH6p{Wp1%&ZHOX1a$5uXS|y>7&GbPoyt{N*npffynK63U)k=#$xy z#Y=a$94<@f?N!re7RS6EG9&~j0x=@2f37CeSH8ZqcPx9It3 zN(;_A@KLO;h`+D{MCZYIeksukjcnulW#Oe#i-YssH6q5%DR;b>vfuONH7oibSx+ptzI$^6KDV;2IvR z{4r`CG!>Vl7oRUWgXUU`ks_6131+?ZT-@14s~o{GNxv=x*55LfH#r3p3WPqW4@fHm z{!;pA@t*}x0NrN=fu~Vq(whTocqdk@47J%rRI*YtJn5Y?D3J)%)OiLl_Fu!i^gD8d~+R3H)^U$J}syonpAeSmA5`wO{+d4jbWBx;CTm15;PKGJGfe$2;biu-_iW%V1*BL!8nIcF&?E$%M%G~PU9jo| z_vuz#GL<#GqycMXmCo^KmieJnuVf>KbhH@A(TLtARr4v%na>^W>lXZq@mBd77;%o} zI8AyFo`E6{j05lVoN-4=JoqN2X$$j!&9_Y59tiDMk0%PyXa+WC6Q7~&Z zU1WCnr!&9ekfT6S=El$r#Yw-_X`T2ivPR3Ezn)~r}8T1WJ9pRvl({;Xt zjP$}^-SdUz8-1BCs(yX3be_^{`&_$M;wsotN!QA|Kl}Jv@lo{~9IQ4_BngWC==?l9 zcxLcwEBHZp?;m{HCj^0~?lK~dg|JVl`1iX0j_-p?saSM73BqCSz7)8NhyqsfHyLWQ=n5K)9#zofG1LIv(@l>m(h*eCo) znsjbk-xM}0@lcEjAnxN0BoOlpwYi+XHrMPb^Lf9M#PNB1Q7M;%aY6+@PD|0vba=X3 z7JwnwZu}5ncAXYBU#+5D)6Z#AJ?}^`SaH~ib-Tr$-WH22_F7As-F*|F=T(`b^lOrz2sk^-7YEgGve#%5A~28y^35<4^KE`41~V# z^)IXTOGQ?xdtrk*sq#~e3cFMe=j%M?%Xz#snon%-*sRmvMZ#T`4Hu>WVzwu?2sNA4vY_(zpzxX-yxCafhGOL;@09iq1vH5`M2yCxOWTL``30R3QrpIFAr!@-+oqDnW}mm=eBBY(wCZ5}Lg_YO?I ziS!l!XV};4opBRp&9?8LfM^m8bh{J>5?#6bLcz4A-y!r7`TYPAK$ZvwyS z0Y)zj+O$IQ$X>ep)eg^4vM~JIJtpS~OU}tt9oJhHp=IU<7hbOy%(YJMNd6AlH1>>7 zc-;Jd3C{Awon(kp;!+9J%no8>n}D-+`pW1X(=KW_mYnX9VZKv3Eo%V$(!X46|A~jbNLO`4**P6^q4J|J=fiZBCRo<4e zykp|c$8TzFX#5VT6R!gm&@3^O=(!wQs%1XD-7MIp`@qPBW5CYrOh+88ol*{z_OEQCQ z6O=~uC0VWVNpob@+fs4$7!Y^5+5kUm=FZkQrq2A5j6=R1(3>v*Ukl8UWG zv(V27m0d_~nmZi0#XchZy#M{y{prR`Tf`*!w?o{UPK|go!`o%xl(buiL?{N$R~d$l zSn^2hHD6y}wLMBOUZni2timH+=UE_BZqItwKUuX3EP<(luNI431;?N~#?tTOh>*yi z(OVw`K-!)?)-xGRhI6!JZ8jPLtk-HtmF(%!30%g}*G(pVZpv3H7&R1CjOAT`vxow6 zOi0xN_Hh{Lj$~(rM^MKtSzrZpC#N##DKTmvQmS{CI zpm^_V@S}Ksyzp{IU@XsEla6b0ZY5u)cx@aO{2~bMpGt$#t9pqgc#c83)m-UIku+$ zq~vUHPXpuc&Z3(LRtN`{@0<7l3u35?NBTsK(io%v$p;GItQPjSwZoP$=H-FuO(+H( zJxuCU0oG;U{rN`W2rIojY+~;r`@~6>&uiSA)#VncQrm*r4B5&}FO1XYi6mZS^}JuatOJ zd#3N7&pYI4XtkQYMGd#Wes3C@uUx9x&jNfCElK^fU-Q8u!lr5Bu0Y(A!PnV`42>sVR;tKzQ` z>M{>Bi4wu#YPJ4v02vyz6c`XT31Vw1nN#vNBrQbzy{q64(&~B4S_!YMq%&JJ0VC%N zy%G=?-0L`3qMe$-3$K8;^V{c>)!5tq)i>&}nzcOzda6{tShvN)gN%$0o07F0@EsLC3J`J}DV^i^+HMrQQ8)7S^=qm$39 z=+I2aO0HxUr2PgEvl`xuo_jJ(x4~vczxOa2fCg5Zt-;T0dN`~}Ltkfe);&sG9fKOrBF()+r$ zrWMO^GW0u#Nf-7cBSb3=IuiE!F{t;vLcD%>)01eJa_QTvrS zC?E!#HaV$42BSP*3mxisb$OOhyXo#=HU(=Dh&Eiy_5f|vP__=XGA!oX;^SR%;Z*9+ z9nW$GeBF&m4z%O(6Oc;LC0en6DxU_U3?Aes>h3`uW5mI30-bY8Su5U#2k=-%REzRb zz!BQ+R{Cq^YQ7n*lm6J1Ufaaj5vO%$iM8( zk~X#6T+pE_qF#37*o|(O`yJe{oVC`~i|3+9!MTr8j#RH}iT8CtV9eiIk z1o5XR^l=IJfhPY2z5enDdDQSFn3zy0E74xF?ikj&F{?ylOuWaE^-l7{{PrMU{;Rn(x?n z2z0HnydPwA&bdj|g%=O2Al8Ye)YW4lo<;SRSxBj|*tVWfYQpOkLQa>bvYCCMGhV1r zR%{=x4h28nAYEj}$EUCA;IY5MDc5+VYlOGW59)s&iKkLfajJbt;)DBy&mm~BP@YS$ zPU`EAOR~#ep?jvqv1GN!blY8Te9GC|Z&&ENo{ih;G(BHV2>bTEda*$Uo7CX_4O}Vj zJK;L0LXb+ChDbb>(%0?xT8H9rEpKmcPOmMJ*H$+c9v8%|5+quJ(Ri9%-k}Rn*9ZC= zjmhnwC&n;St;omeOA0pmZ7-L25VM~mFOK?>A?2Z-0yE`bs9?US4xT$58A^X_9Ym+o z5Jy-FhgxqGcR}nf}-ePe!_p6WEay~ z=4o{1b@CaGLE34K`DFtXL??F-AJ>{a1Nn(sV+!6_gRgeoGtg;u zN;F*>6XaXi_Re}XV7OAI&E6bw zU!JABxu#Q$>%XWgjt%#!FmyUwl)c4f&N&0*H$FbTC-V!C7Q5XVqlKkfr6L2dg^QC9x_f|m&k$Wx4_MCVf!rmmjpT{EyBqZ zj`SL%QCaVo`XoF%O|4vBvPWZAcq|qbE2r!GCK3UHY{GB5A>{1YJ_OhQFnwDbV1ly) z*Ra$xD1RX&f{)N$;|$2$gOFqhO6c|M-T}i)p3j19zq(Pd*^&Gag#dr%UX=zpyqwKv zA)W%C9nXQ&sNb&>ZEp+eW7ain;Oe$Q8D`kr*SwxLY8zV_h}Hxl+YI z#;V8(O+wGYpyK>vI32w*+el@t zc0-JCdfv`U&{!|crw~buYRPUNuestw1S~e1w^tg_6Hk{L>df@%>^FTop(~lqrfXK# zu|G(dZcK-$=40JyOfO4i=9G=Wfu%0d0z%hN%H2ikk85d)H*GAvw}fZp5S zYF^&$j#`apwqi3}VvpJTEwk>&?N5tsE@wejjzhP;I$X9pF(a0UuVB~jPeRIT0DvEf zqbf*M$E!ZR+(zL0nlRdEv%z}7Z}99Yz#3%LhjzDp&Q==!DPI!x6I+D(1mFjKd~R;( zxg@ihW+WfNXYio#WHM);WNMZPTahRJnVhPiOI9VJ`ii9{d>CIqt4K=UZ$Tq7XLIOq0Je@dT;cV1@9g1oz1 zZ-cf&D-v}K58AOuqqv!;ZIns%|~D=o1=K zd9S;Z&vyyV^JomyWS@wBmrJ=--<3fks|*&^w`5F|S(Pt~6;SJTw8gy#V4yZ9vs!6T zY2*ckD24`T^6}}4{OAz`8d{!8o^Uv+FTa&H+;D4>;p*K77b_OZqgMwe35#$7vE8+1 zcd^~tY6-6i9FBuZNZ3PY&1Ir)kB~0e*Is#u%Vgd-es5UpOVO5r}{PRwR_Ad*@1u z4U7&YwDll;fX&QACSqBKCo^fZTEi;ly=<;tvXanBCl?o!BRf@LXJp*G!)ygxlTgVk zXirP2KcYCESFbJ5)X3Y?Tgu3rW6aW2nl9I@*bY5sY0HT@kGgH@CXTy8Q`oTuLn0k1mf2Fn^-S`R9COkNh!5_l@t(tW2M_|8Z&f z55>AF0%9HLs8Mg1KcR5RCixw+$uRD{9|K0OsY0tcr_6+@mTmfaf1=n)eaWaswn)tF ztQk>CeW%uLh{ir_St?QRAsjGq*AR*Xv2is?4=hAG<$9#jnCi8|<~9Nr@h>)c(C)jE zU;-<75{g877A)$pF|1tfnlt+qL(#0ZaG+(k?uX#vnRDPtg}?jjtYXZn;&3{VDqP&1 z-WLmkAN!0M=4KaG2i82&m+QkSs(z;Pkdr_IK7-GwKF^GUAkvAf=~Ev*N40!6aC;ci zqZ-(;-U~}!EWe~&9t17VtP1#o45sC`z%g9#%!!LIZnC%NpCDYGk;?ni$sZOp9j^I= zjGsI#90U0%`eTialN*ij*A!+mrO!9Ko=;(l?aD%r+k_A&w0UdAuLMX+D{S{2*W$>@ z>ujJF;r!CB=VFcZ6YFZ`>+t*GPre}?ZI(5eQDWl%TUq;mJa-?HIb25ER*Dd3zJ@{BXibsiX2Q1^uCeh@& zW_aVoOzLe(A9l<6nm2zco7GKF%2KU~YU<&b1!e{!+-Ul0^L5eWE;!U(YrE}~vbI*b z7`l#&*Ji+rInM`dzpV|MjPIqcAA5w`sy<(RSyC3xPyaXU=l2jK@P5OXb3m_J_?0Ub ziKWQp_=F1B@-lSv8;1zY5$uO55|cEGb=o;ke{T@FWb`^0%F+jQF@XndlvpOiZlPZq zZ_=t4D!#miTxbF`zEZ~AH)YKd2eW?i&3pJV-~-gkazsKEfVPB(zp{n=O{CS9TT;B< zJsSk(a}dNe;v_;kp^NIh=yn-B1ThWUV7T9FVuD7)t^i(bdd_0O^sOf#fo_(^<3YTB z&a-SMo4V!@m98c1?G5VbZ7}lyy;ZX>70-|+hObpg*cb8$dAHbJIryb&YIZ(nx{>bH`ufwsiyWPszE6Da86WQ~4u-y_5&alCeXR9&i?R8)5 zc4w-o$!jP0eG2`;U=v|iY5BGuESo-=#vxOxQV}#kDBJ+taA9yT6=5r8IFxMhCSTpE zsI{I-HIWU^cjCa09LQJTTy^_lpJxtt6LnR%T5)0g#M049Rj@C&$4}jEUi?3N!m*^i zQo~FA!gnyO+$kS3g9yY)6x{nDq@Q+z72~O9?WU8Z&5|~V69las1 zD!k=LJtt|kUf2dR5!}Z!m?n1#Iot2?e1bwwcTV1>ul2;?h?Z7%P^Z9Q0Hs9ts;Mxm;XYrseXjg)4ib;D)W z-4C|7@pP_0f>wq65v4+)`No(YF$S$xmbk`{#w4D6bu%3b_Mjfhvg2N?Y-Y%+u_j_I zfoVVFVCx;YV#`F z8M2ZIE;jx;yx+K!iAiDo;D-XN#T&f^x15kykv{JC=cO}BI8b+}nl<|S(7fL@SZ!nj z9-&a5wAvix)pvTv8G;l@+6^Ea#TP-tFdI1Y;p;u-_Ep5bG#@_tA#f>FNr|+AFV?$9 zRvT!c^e)TfF}0TuNV^zKoROel$)<1=Gr|OItC#9p+ImQ;92xWm$mR5nHMd%Sxmi1y zQppKpY}&+pJ#8Ft6&!Mr@>ur&Q9maC7s2RrAlhZ_Gk759^9Q@L8W2-^jU-ti))WOahtrE$+B31 z^zivybOvBV1L4D^E9|Wde8SF40Pek!kQ~xVr%3c zB=Z9*E7!IA*!CK=l`37iUVHvo-;BjbqW!;hNn1!z4~+MRUW89`uT~?dsV%rGjkPSN zPLe4k#f(8hyQ1sd#WR4J%5=Ugc|`kCk<1&(_~T^p9z+bf6+g1ye${=6FA&6fWuwvU zkoM%Wh%7YzT(Q$1GLIIwC6)^4{}d1EK_*%@sYsf$1G17S%rHKtWty!GyReQD;4z}= z9Nbzdx`?K{8Iyq2WTU;DFZGz*wpOGk3Y4o9ohJ@@Z988%bYd4ilx zHzG<@ipLmq6~8!JP%4n@2i|B>-zSH(x&v2UqEY{mu)>nosaPf7&d7+zXQG!) z=`W;$XpTg2d!lubpVgjH;M=)*yHaTZr+YA|10#(c{(`eI3)!uN7u zu-xoU*ZoR|td$6sc=W;r2{UiIs2&MXMkezX?mV=hh+g!o{TxHLi1QW7w!jOA>E|8( zOQcGrwiv-4VWnyHR!i^<@lYItbQs^(hU-Bn1P5?5WOXh|A=A$dBZ&gm_^)bvWAU17 z$|{brh0-h&n@3g)8J;^7vGMm@A?NtFCO-PXG&g})FK zXuMJbiyi1=#m^720e*cT*RVA|oUGHto3!1U&N-Fg33cGU3`LUnDUbb)@MXs5fL_N7y+)6HSwyJF{X`3{(3o9Z(>X4V<5+ArsW zhX|P&?vo6xYc9K!CO2KUXE%Qh2;tne7d$ZIzaldA#|tRyOyUzyS$K=g)~o(|bZU8L z<#e4`f?eQhprJCUjS9((MpLum5fz}U`QHqng3J!UdeC96vc8mY+D>lr_i1ZSvSM_;F>!H4pPC0X6&3Ob?H8c&7AJd-CNJ4lKVJ{v36Cot>{;Y2&@SE#Pc=6IwWElI^IPtSCCEJo=hr* z0=hNiZw;*Z-iezAa$4M(D2+}v&Xi%n(Kg?OuNx)7q`l@pHLvublR)9V$b98E8I$Y_ z4gKS%013glzwPz{S3J)QDEnAYg|7Viz65(SpA_{&rq6;-@|kO1Uj$d9PMF=Jhq+$?L&5nLq%CA6C8A-i?*CDD#< zm)@Z{o!!noMI5pjoF?9{jtxidv{;|A>`kz`RpP**Jc}!=V!kdkNt!}ws02esn+O___*m~=*s=BRxSdiG1bW4ZCraL7>I;6Wp zI;2}dkVd*gx@*%&gVNpI-LR4Tmd|rM=e>T{=YPmz&9&AXV~#n;xW|1b3?#8s-gO6a zfW`;P8eF@P#ZK?84-+d2sG7e3$NP=Ofz#5}P}{{i^HKSJ%H$8XRy_|H+_ns8gm)0i zW8_QowHtf4>>TkQs{H%+#%umhS4cY4loEOPJL)CQ^bC5Qh)M~ZR4*4^hSuDKmD{oUJz(Oc&kXD=y!hlc<+6> zerLOZhCFx6nkc<0=<#V%a=Ez#D!<%(U952`j8XV)`my}*3iCEkDpoAx{gv>Pk3$dt zm+7{kW}=6t&{f5`tsl0B+;=A-WM}~#>{$shKxu@@#qYBNVs)ek)n|fUi&QEh%4X=$ z>E#!+gK=2bmRm-@l^^B{d*2Z@-nw`&A)0!)t-NzQ*pgNg1d7P62CKoTT-Fub!r2%o zW493^VS9JZ&$m>#A@;v7wvi==`hisg+A{sgzu|zz^Z(+B3<2ccgS-0m49;*xv~8i! z&Jm&7Si0Yo#c1X*P@6;MtF4^%DPMSBVDr#ZMJCa_>em_*n53W>nCXO?-g|U26|zZ3 zW7570#i1`bgdVRdR`tkd3M%#bNqBu~_Bf=K57`&)FNL?hy+r~oR5{;|*rs;9&3*KK zl!C%*l}{qL_D3Z7un+bccLVTs+th5|zA~)=0|7j)qeH3*9h6#6a>YDGA(uKLYUCOr zFf(#$&v^y81q~qx?$T>9X_M?--(&T-7W-cymx!Qv$E>k%^&D;oK+-8iY2b58jEd93I-(>ADH!AzzXi(WJJi-%SV{Hdf%Ca)+)^(M> z+Mw-1OXBOiA6{wmQXS6}^0Lt-8_jxafSFy?+JBx5#E>E>N(`(jrN{F^GRuuoY*m9s zOh(;CQ2(CIu<6)riQIE1fjb5Bls@UpEez#ZJ2FgTs4ovcHC#7$y$piKon7I`)c1SI z=9cYhdTcD9d(bHNL_Gg;N1iyPN@nPto?`wbJ8iP$g+1Ysf&*L81Po2Tt3A#kY~4b{-Uh!*SH!*;P{pqYj-ew|xh5 zmYZrNe71R6d>iw1r(CCjNZ$9+ESE`(6z07{v3lk%Y!~_#jRR;64VFAl1EAdp<^W6=vWtp+kOo9HY<9nK{A|wiJ!*NI{s~!R7+cZGC}jTh<`abRHc1 z@f{RFn326!qRy8k(BE$}azi!dtHcocKATRsqVeEbXCMO6?60RMb+n8J#~WczH*rmx zQZFQ1g)F|_GHJ$NLCC9!h=rUZ)|*hW)cXc8aOrP)^<5&7q=rN{2y< zIT}ELjM6V>kTb=sSrjvQ_;T4%9?EW1Sy`M}*+5dRju2FIU0+Il_kXA>NBYoaY$vuJ4!_g|F%gfKV)@9jJzN7m!Dpn@)7TM2y(E7yG4)5kYPxO3<eryn4*$gK3A z=EyBSG+JKbz4Vi0565AWDI7^xnQl}R(QU99*VWnw7OyChX)Tus5S6B2bQ-H@Y^2#> z;%4$s;&?75(0(K_4=dj#LL?Di*ZTrt$891~0nc|lZk|Eg=PHx1-F&X_W!Sz3T^BC% zVQPZ2X;Vc;K6+*z&JvX>M-{UN4cnc8h-fKQCGP{S8A7!&Lg8;0AeQ%d+aqylD|Gr| zM)2XP@?k_7-(z5!+=Kf+#be+Pm)$qJ9L5i7*;u{*4YVxJGc=btab*Z7k}?d=Ud)Y~ zaBoDh6WSgH>A4^s-Wp~qRWE1PppQl*@B9z~^a|aN7kKY37oV-b=!ow#oDfV4(^vXiErDSPXO5PeJ9xOi!22c zA+ofs+*OOD|Fn*DgFtM=mK}ldYD}k=)wSu-b=hzWq8ksiV<;?>K*z#o_pkm5G?CL{ zc5-s0t1PRvI>U8xQ&Yuilc7dM{Ugb2ag;`Ny(!GI{r5Inp*TNHe*wu&=W6~ghO5qQ z)=@6;A9u>V(l+C{xYs+4HP46BI!$GQJ)|D6eCpIc*&6q!ERno+zJf&`B6va%@}v#Z z4^PJz<(gCa2?p6T6f=2qT6l%T-oI!e^6f}$-noil^M_`KDzm#@0;K!WY35Z5!Mcrd zZSLokwhMKlO>c&~PLefhgXh0o6UUdDX$s;qX{RGx9a>DTdK=ptS!T8a6tqEkWm<_N zStck=Zu~#W6-F=Y6=On1zA+Mfj*uV9R9_otQr&02^2pN1`FR-vvCHX_P^C)+(gnf9 zeb}>OU}qYgnuXQcox403idh_JzEJ&+>xb#VaiMTFUm^~5tytzYf{qrqV|8XP$tdLN z9qvPn1VL^ja%L7VB?-;FrkNriHHM(d=c#vcv%NMs`-hvd&)~-p^%@CkFk?6#BnNTlsoE4+;{N8bt4SqHhHTW_=swFu*OnNx{FbhIXiamk1IF7aY$G1^s2pWQSeZ zx+8FW8P1xcT&RwQTRZ0K6zb*qkX&w--h@`BF6x@Vq!DEz@?@#nd52Y@2njb-^~VU1 zHE9(&8_Iwd*1S8u_aF=K8ZER*v8dle1A&y7&Czl`{9N;L=4i3et1)GZBo>&7feXNK zWYm+6sg7nMUH^uyUdNAXnw0029;4e#vZGn2`N5|o3LXVled~>sHgyaw00O4KfV2tU zt2WU~v^Vg*rz_jI0a(u$ByL74^jd)Sx@&dEx0OKcs5!~7p)z&NiTaeXrSnURnMNEV z!Md+jH??y@iM{ejI$y;7dM~~~9?&aYwY@AuTxudz|E3}*5qBIDy7Dm!ei3@PGF4?{ zvYqKUH^yph|LJ*e0>#w)5dp2(E@L52uTQ-~R|_qYO(+536_K2SoA1ZAj{vNk%07EOco%!T4Y9Rc7-e1IZf^WLLKAZM zyl|V>H~=@a>>6!XT3+CqhQj|q0rW1U3>;gHYZr}|ROVE%lEETA1%17TCP+mRIhs@2 z{*?a*|Gzd3BIjnxeEFxFLYlkB<8m5v84gARvm-a;ad7&FV>QW)JF5W-e#AH%$!#Tc zJ%gu}fq-N~qTuhEh4BWX>TZ3FZ=u%(v~swVve3T#*%Nw4_WO;rOq0{@hdp8MkX|Y-1~CrJ+bph6w2=gS2hT?t@afnZvwfq@>vrKSEiHIS%0$MScq72k1c>%kWxMc%v(RYW+RB;q zJ>|ni2cztiriWTK0qG??b28Px{%+qy`i$}3)x4Kh&a*x*& ztyG)EH2ytftFyPBBc5QE0cqBCM1#~YsuqdhGODrruGMJBR<@rPV8!=6{Vu$_cL$`a z6LbuYZ$D(VzUU-n4vp2FXD)xm+T?SOH*E-AlDb{=+~3xiZWj8iXEyO0of$H|3qYvG zvqb~71nxtPx<8BY*IhC!sU;$d9lq{;7`<&BjLn_v>UGgn8X<1soR z^-~#iiwq+xs*aTSW5ON3ZZZ(Id`7#`RUFJpGh-!SwvPexRq+sm_7^oAaF;VASkJew zuMnJ;ms67TJtV$jW1M1Cs@|iLv5Bdn85L>O;=xr9sCynyCjofwxBDb`eD$YGf)E2p&o+A0DQ3gdOT!{qANGD4S5pDM#_a#>rmiuqnP37i99wpknU`*M?5^a}2pmJnn$bj8cNa7$+#2y!C(M(@zl zrYJN6#O3_fn=obGt&9ZlfnT;ipTD7@qnKT~(oEp9oR*(O8oWY$u5(>ZVnXtxzW zSD!_EX4Nb7#ZgY=yd7q8@z_$wcg+~p$623r0vQiKzr4f#kyejIYtkXl^`l|3U{n=$ zwPDpeU*WUF7FqlAd)dTtrQ?Us&wT~*836nEOv)!42zvjK-b?RYLy4A8Q2os83%cIk zzKKWZiY%Z=^x^&tx|Cyr=oxkDcaq#;SpJx}3MjMHJ!-XSbh$XR3%5=61lS6=7F%C& zv`l68otwUWq~2UHS$K7|y5cr^b^6+|?D=k&>@KW44!?%jW)LoEP*G4g;!UWa$VdiL^YvEr(p`AJvHd=$U zKkNV6F9kVVkO()(5KLxrS74-5^C4YF5ez>+aZB_6`N6b}d>jb9%UG@fn!9gN?LF4@nuSN0A~ralppA0qrW5&91v}<0E2FgaOYo0$`MuJ%pzgHvPi-vIlRyliZMP?L&nf z{*P6RY{THxjMGvrs@f_T6bZRTcW6dK0+$sSCEe4nrD`gOMsR~jfPq@zQxuhagA1CW zPs-2C7jn-xRp{r16m&bP6Zg#X*0Sm+33MoqH7IyLD=T6lHS&w=dv28gZ_EJl3}Mpv zS?CLm(@^UO_c703E7xqc9A)|C3Ews9-`waSOJ##lLX>eQy7rK@j;`LBXcq-(0I*$-EezTtqDJ%*?g4ckLJB#U*Q*{vUhz zY=d!z7q0E4=f7yIIbcpRkIigU3{TOoJ`kq45y9%;j2Xw#@=M>qHleb~yFQ^mp`YBj zOusg&FZwxz_L)bzx5Ve934d=Wg~JZpa{TFtwPw~2a9S^yIRQKR3Ci};MR?Kksb6t7 zsT;AIRi+JzYs~mrWz-fUj(OfXvo8`;6Orz(Zgh4&?bffj{nGc*YSPFB%lTIG!1Mvj zx-ax-dD8a!WgPmEPy4YR*(A4DnpF4?9fdD_!m%GkMZf*ms@IO;rsjN74<)qSZglKh zdo!-3=K+gM#_|VQ-mwYM9=dIedE$d^>-ue8FP+htm%Hf^TSor-=Z#7JD=*4dL@K;= zjM|+Wy&*L2b1b4x?kF%Il2PGH9EkmFCa`&ve~x(8=v_ZrZD?rV{IIZ|4+n5JB!5pV z&<~SHrGcxF5IGeh*MT4S_16=C<=%k?rYCP2Z0Uizn)FR`>TY8CTm2pDXMyhI72eeS zNY%EVVe07UVC%`>1`ZCO77c}b=lYu1JjJzNg_*QpRZ2(S-yp*PPURixzk;gh0Xc`1 z?s*;S{n2egJK6U_OTycw``obNO(l7lG!XpXAoa(|fmrkU^9xt$vfexwvpF%vYmp#r z#n?p8hY0_d-QQlBo^#Mu>_;Vq*J;0T>{c}Y%pKaRJv1d9Vt7bpJA1eG)$GNn>9>Dk z76$B-sL09QlOst!{@-^?ryxIt8BvP+^uNgHhSf3mNyIRQC`nO4W-H&GNVQt&aMfi?bcc&MSY!1CwE{{-NF-|deZK#@8ExJA(Vu=5M@s%8gqvQFZYbf)gY?q~vP z>>qGVFYn`rCw&4xysDc(gx8jpamQGD2}Q1|2u@&vli>FvTwREFjVz0d^ntpwmU@=vt76(A zbCa_su%CEKn++w1n+3o9u{Oc=-*@{nw65ffKE!YTy!eV(2RTItdDvUS{hfivEdQSk zCl+9?zc)Gq!+11%B{l$bIe)L&vIAx=t);U4N*~l1?H^iuV!}xC?^pK6_z45c{xR+4 zSia2P2hkT3Nzd~56&z#!_nsKAzLFjEIox1y#2L~n1v2?~m}Q#fU16*@MGSgg2j zx{GR<=6ZvZ{W9VhZav#*Tf1T+FZ@n=cF@q!a(a5Gao2=|GE8m@h&FC1EBvYd9qNn; z)>Eu}Y1rqGNXGjAb(jCx*C}NTO%69JT}&<|l?SVE%s0&~X{jn~@A35?2Wa=a-ZiE; zu%y&6!|Ok7GEc&y5UOMFu&~5(a&mBp@eAQN3kPs>hUsmdoUwZ5*Dx~cu(3+sEpTSS z#iS+N+_{->PqM5SgK32%yo4dppS6M^SPL0Ajoan4-)L} zBsFa~Ml;-5y3ROpE@EO-x7hE0f$L~#`c$lBoDxBB@F8@cc^F#BY2MIWyjl4z{Zgw$ zi~T=yRSS28VB2Q+Dz$bw_VRy^!U(sOVh4P)0W4ufJ9Hr>AQ-+nKkIgj8%cchE)99@how??)ho@`pvcSBwkV+ZRo~- zu2G^LNc_*T^S`?T&c7llLTll%$`y-;1oPK$o*F)YZrl6spun$q6*`P^xRVh_)|u7*#Gohf7k-nsi#L3w zT7$ALV%5Jbg2)kUsl)3+-=txXb+dh()YZoycsF14(j`Yh`oH)7-*mV?#MS7L6SQ;0DCEJ z`^<5I4E(?MUgL!Mov_Bq&-dZ4yDMVGSo~1bW40{&?>f3B4)?mYD4~IktT}H&^`E!1 z2Em0?Nf8fF+Ai5fht_GAQh>fIOhs}_0ZYN3!_O%>`3%>JBS{|a-*;G&2i8Xx@xYS; z=Iy@@jse@0;BO*kYnM;;_>YNfDZ`2$VF?IQDmPJm2`(+fJ_uqot%I?R{r{WiObT+b zatmHrroTh{Gp(3b+g{{w|Crzo+}yT<<~tme{AyB29+y2_aq~DrUGO8h4r!w8|Cyw} zYl*{4m^K3gAd(=ADd+w7?aASi{b!TuB_t&$fu7jy+<&fq2oM3fEQ^e~zo`E3<^u?r zG2jspls!HB6m`lrIqn+R^k-MAs-$G(r3>P>@?P5$FT4oXuA^t8;O<|fLi>LMlnCfn z0H)2OhOpiIu?;%$_WwMad!oMv2*RXOpPk60U6fg=)1C=1D4%K}E2sT=!j51#A|AVU z0G+4`O=?&zb6J)ve=tRNybq8 z;BldX+<kUtYj5#t4N4^bMVWP;PC2Gs+7o#&x0wyLT) zxJ=4Hb}P-&vz4n3gK8S;E@(tbs;bnsOLZymF@_~dIfAwuF80_CC91_;iPoadYaK8R zRWV}0B6j3s)h3AbdA4h{dT2=D*?D>HcI{riU!Z&Q(aq4kq_5~fI@V%L3jy3Yw#AMO z92txP|65r8`-M8x;I8~o3YtpX=_UV~@IN0WLL};+@5adu%N!lc$*679-F0)d&z{#L zJ`+W#IItt*>`ZttRZWF!6ss-^v<2q`hvPNrR<)h3bmEYbD$u>9XNv_|R3(7qOKzLj zjk280NYnWc04JU<($Bc5rSrP47rp&BQ->5B6cnmd>O*fz4_71gBC+lVc%mzno0T;b z>l;?>+^73_ik>L5s{tp~5^G z>5NV>LH?Q~25crpHhvZ!*Pxfb#qIwwb&(UQ4#4^iAmkGarCNB*5YGMfUkfEzHWYbQ zuob0DHiHR_l8^V-`2Zj1cv!+Dz*cFk+NeZf1?UQ)k#dIiMcs#EVPQoa{~D3`4EviN z(7>+ycy0__)xZFpzozRPH)&-|$GP8NFMJU;XmseLn^H)>GEm@_KEQ)@MRLEfGi%^8 zCo~kQY!cuWSQ97iq%eA&G;%k#1cgi3F)YR ztW8k1W5KY(LWcs<6e#jhlb}BoefO&}1p`=2Nr@aF>T3SZK(F#=XCp=~Bow*2JxNDH zlkzR@n};s7sQkxKnq_E;owiqfxJ3D=u9#)fe|>e$1kR}^_l7gP4&a_<&t(7v)%aZw zit5qH_`Um^XV#EC&elZ13yF>?j9ZCJsgppt>Em4l;lpMJ#^D*@S4U5`c*`7Tb^!N4 z>v%3sh5zAfsU(dIPT}P)%UJ#K;@({KW=RH(Y+|;r&;3Mt(RsR-65mWrP>m~t>cL%4tdir4)YIN*wKKTlTNYfFJ+(+SK`iOC`-oM zcCLzotH>bQP$*ouyX}f%M+ahsdobD3z+gR=?WLMkAfKhM+_IVvRM?Z*R7g-ZJ5%ay zwK?LDmu5HtU>Tg~M+F51^?sm3us2r$IYZDx`5NiB+v&VXU6gvtRy!)JLQ%xH*?0P8 zIZh6}qz?+r+Mi&xqQ*N{(<%$sVwA$7U2JW%+KLE)%Z7(D-+jpwIGIBrp z?BQ+}==%Tenr_)YlfRn8!c7RFwen?_wN8NQWA9TpwFd#qZCvb-@^mVYcp&VvO4 zGWn$5fMy8@ng$yi>@EG%cpSCZAF$914QgS&3^Hj-!GIgyb2LR_m0IhL`Hm7|-(7HorTU6dO zcF&0v1n2eZ+<^{sB5KVGF8dj|-u7UEw4Olv>w}s6D3XQAag+X!C#}DoBYQXXg}jtS zcf5fPXfdzYo0DZp0oNm?L(HRGLNe<3_ z)LIqRR!%OWCb2>}zlNXrIR(RE10Sty)Mz`h{iTZAI&J>lGy{f~uXk}EE<-#tf5+U4 zaf#IA1zupy2(4znRbnmO%kz)bXt6gTr^1tv)bgQz68VqB3!(MqT%DA320%hP)9P?Z z(BtA_E77~YCYhxB5o7zymoJ3SBqoi|&*qEO)3K1Iy}mLWLc(6?Su3GHt4+DmI;9{? z5km+v-Hwu9YuRsR+gHXz4VH^v!|+-5C!F$GDb{4+(%m!8^G~+#>UVZmk$S_DvPJ6C z+kV9f+UvF#^kBQg2JnPmIsZo3x?}nJ0t0rQ+W#JO@}{v;B)!)M0ZP2&=J4FiX{ec8VSFiDOCVQatBg0`nq8f+=G`QsCprd~X z*o)_wjMya;@QmQLSt_bO-^>NbB#$V;5hED_g-f>`p01}WZGa@8=qBF+@?`MgL~pP-{n5st z&%A&zlUR(3vIW%2^R;R%7#Ve6w|CC82zfg5XcL$ikm8j--yPc1d^}xj$jbCR@B^DC zedywdk~M}^h_Ix`Uk8s_t@?yQq@Ikm4&kt-{p_DA9oEHGmIPaDQ8tjsN1AcIkXtj3 zfZu7iEbBiL(m-$?;fnj5 zj@?XOZdfv)%+6Noxlns0UQCs#CEeW+%jL@u(!NW<~YpGPmKk>6lft-^48*&vd78#l1Y=u6i z=nOvtK+GNFPYhan6lUfQW`b^lpx-xWWH08rT_DF_4)UZBLBLk$1@*5#m;DVS_*fuU zU^t^kQYMBdgNIm3N=lm<6vm*L#&}=DNX24Z2^c+6qrSq*FF(V9a6PsJA&67jEtwe!N4x^&XqcWPG8q-Qdh`i zbMAc8%HS&&O+4dA8(kx}(Nq*m)RT^0cEH$?c#GeshSe2xmAwsxC{Uh%t&FQ2eRySB z`WPRd2d?GDwUpl+v4Ypawsh33Ey#E~$`*^an|Cgv;NU=~UK@XNG~X#^0_L)um?%-w zY0wwX9Kse$<1rhZzMcBDN#AV4mq{1rfhCtnWc%jwIny^5vASYH@vX1r8;hA&8pYay zq<+S5y-PpjOEp+b8m16`HxWulrg0WNy*$}=fZN`$bo?GM+FzD%LfiyUkjgS?*L~lW z6tuEA>kPdAcvtt;+3=ZkQ&Ya8^%XoG^)|B@>~{?C|ajS}Tp zIVYL}uy2efx|Z3%mazlXgX=(8FTR$3mNy?<^x_phCQRxn3XTbNuS*pvVQ9J}(?y*v z`jEk-$Wp3VD{4bhiWH;$V=La2E7bmA1nVtry8L^i{#;axfjYrL>A1eB3R|5hYp*Z8 z0he`_m-Nl0Iy@n1L|8<*y4k7CqSNjoKgX1tgVR)ZEkDxSb+QvQ%JLf8XDhDvaFqR@2e5~gm%>BskVu8LoE~Q z3MwMG&hcQ&XjioHHX^u~2K*0A>bOdg&MN@e*w2##0p$;wp`U(F^vX$aS}p1JuC4r7 zUaJ>YK|pkSE#R7L;z#Dn+Tdo!s8)h1biM`J{&I3yDV&#_yx50Op;w!JcS9xzm}}wV zz1w6#q;+J!Q@4zh6Bd(BGdYj5+8rHS8P?C?(NCpH-nSy3fwBy>h=23$y#r6)K5#s^ zC4`Y9`YgNE`uhUwM1^N*O{i})rm0n6#yIcmp-IyBMA*M!AK1ZWgWPqCB+3i51gC-u zRSFfy{lGtgNy2)kJ&en;L``K6?7)*i5IVALwMzBKdRvxX>N$k!ML;`TE^~$eBmPj; zyI?cMCAhQ#-`7p2z!_nR*>3hRsiw&filon3O!n4H2Mujd*)w3Tg zH6c#hj|Cy)&`AN^&AG>m+~Z4plkwTsolX+t}Q5^YpxGYQ3}63B;jA_#m=-+`T8w?pBH7i%2>a}JlM5FTNv6!?0f=le_5s{ zt=D{$XEkk2U%G}yte&RDKU+E*ih$ah<$Je|Vl`IvwHX0^UZAJ?dq~3l!J(kLMJh&M zqfbc1YmT;83C0=|Nz8iLxP$on+LBauPLn(3^WyKBa2Fr<#>F}PPUN-=h!VRi+kfX6 zhhKE!?LWF1s8@#@cy8-$Z+N2V5Ly44_L&_>$j3N)59>MVVy(`zGUsclf&imgYIL!G ztV4+H#2z(}`e#We-$hz`!s$KTqnz=4($@5l2j34EiV-DU1qwy%f z6Q${>Y7EvHV%D=FxQd91+A#@?i1^O8LVwZ70G!3s*Jj*Ao_*`QMoDQ}6SoNH&<_yzfp88D*X6GRIPH zE3k{J)N3iwede^93dO?0j&~2!ti72yP9|{m(2W5UU`9E%Ulxns-+OrnHxX|M-|B(gOF))Hrq(WrE;nDmmv)@3(BbAC40hGW=S3HN(;KY3=Or z1ulbbkiPG>keOYZ@1vEggvVnP>wVP$51d#JdeGQ>DfER4^Gv0|U})P)ldNJCix)Zx zZ&eadVE*aYJ;?9@r;7!g#U#X<%$=>iT?LQthmchWg3&#y8b42T`j$j=)y8UBeH4zVUhG?BIj8qB0V2{${WXWRkM(q zG+)qoxpqULOhW1SijcrG7OXqq4ttl1tD6=kxdSMe53!P28%PFRAE6b;OQ%9IFGw%W zu#ZH)2Vu=X5Hw136Eb~o%z9lGXCh19%BMj9p*2t0YCgXw8`^qa{Gm0{*S73vS^mv> z%Wmc6HUGr6#_$k1AZ;Zldp9m*Ae`7%>s46f)IYK7k?Hj26us<*)J%ZEc8;4B(Y ze*wGNKbw{(=@&Uj$T&Z3Fc2!!H9T4e^auK}->);Fd%jc0>N5yiL89_ViCmRy^Y6OU zHzKX9mLvEiJ0j+u^z)|_gK}OG`&xK-I0UREc%a<`D;=1G6WGf@!l{YJ`IB|yhKOGRjEqGk+SU4fsy5`#4(!mI7>T(Eh zUs4T7#+ug7e+Eyb7Sx3?(L+SE@T>-lmJcY7Hrrj-X9#A#-pA;!Xg-NYUGx+YREd*~U%Zyg3-Xzw2O$c3yqn>)X1GY*(07I)l zj<5FVV7qn+(Wvp24s!If1!_{83`r)B8$VjJ8%T601Q!ga%S3VNw(2cbWh#;S)}Geq zVIMjmqk(M&X$=jzKb|EkO>#dv?5{`?s6O1T0n?GKpORr6ge06-Qnjlwr&Obxz4G#I z#45u4M1WUc)$FtJYj+AgWc01i>_Z?+U`XmD3q=XYLhIc*bPhTvEoFi0_tCYK$JZnicD;ybXNYtmRh^r_1zD%N@u zw0kYZUL2w-X_f9SOqb5QN;&R_RHxarzBSG*hv1N&h|GICSy_caD4n4KT@+lsuI`bV zQL?Gis*P30r*H$^L1xxSjwyO6a@{ZabeQ|dmQsw3Yes+#M>-j2pqVXyWu1AVYpB{_kYVEYmS$hqJixDFUNSEZkKfp#!A1F5Xbd8tN@C2`y?~V zA*_jR=&k)98$Yv67pu@-YDTXM<#_w_><}xo% z-(|itm=x`LydVKUU%0I#jBJ#~DxY5jbQ<f1A+R8BObd@AoEBV!BK#ym{FLKfJCQ z2a_;ofyZZo6VH^x7ahP8)L-_X2HHl{zA%umn^GJ#C=-i*=*Zgqsuhs zsapi^qEaeiCOYW1RHZvTkth9ZS!$=X(Z`nb923K;(zOr`y(Z?y5dM(vXI?nZ^S9P~;&XA`;sN z0Q%-ruO??#y{&a;)km@bnujQ&;R>QlhC>=nQ6PIFFHn|fJyWJe$qVj}c}f$MV1hi` zEj3DG)5@vZcAM$mohD-D-xyCV;H=M-2gG{6))pYPTI!+Q zt-op7)WDocNj)oZ$(K>XGu29;EVBiYfrhkWlm<8NwC%n}!pM}9%p_JNAJ1FA_;XC6 zn-Yr$LKH*Gik>MB+<7kN&8Ptf?n`Jt!4>1k45SL=Lf!cdS3Z-k`(eJ`eOz~2d%i9r z5d3k&B*nN@DeELJBg7GUXXoFripDCi(iX_PP!zSz+iTRSDhJbFjO}+!R;!9mcyOOl);r# z&z}@6{W3JoI+fgT7HAG*sJXWQLB`DnFFD?ZJ(-ElPr+Z6>+tM9LiM?uTe+FKSDFRx z?JDi~nBklP{8zAH6<&L&KA(;FCsBLT3#SOl*qB6l_ zKl>8?u2mT>?u51OMaH$fD*7P98a#dU2z@KHYn7hwbB}7`EaZ8mdP-hI^;M{=^WM^) z`x`NjT^UxU5&cq|Bzh{ZBW#8l)w?}j4AVu336*~^ifYS+lfeD;sp94C=y&n5V-duI z`Pw8bHwwYsJ~(S_rft{K1t9Ej-D)y~Yt>f;3z$-CE_$*9M`HO!L;8tS(!rCvjuu3^ zPrtdWXNx9N@M(esUnSB^qC!a7NX?f=)7o1yq`jFvo~nA#MtGe3=DH zBwlXz6qJZ?HTRo!z=juOT7a~OVX=-pPd=AQ%2l@6SSt--BNk)Q4HH?jo-3l4PrIvZ ze&({7im=#@)f!T(V?ou&J>W9WsYLD%VEUzx9#$>j5$J{A>cE$3i0gU0U{*`$3~U8h zs?yeB;gM5tgKg{3cX652)5EG0Y~d6MoVEy+>TTe!Q9TY)l7V7qkTjBVhsfz@` z#Eg9%RmvXudlTK{=Kzxqw+hpYBZEfC(D9-|Cq-vnkWismoRkzI&C3@)sLm@RlTPeA_b23Oz#z|H3H-Xt7*|GM(os;r9Oht!wwbe zq^lj^HCtSLJde&Trh77|LeLo$N;R1C`CW+5Pz;4yrp0vMPhgAB>S)){b=|X-dWhJB) z(Xrq3IDgX>-dFHbJtM)OW5?{ag?w(QY9`M#gsX&I2*St5W0Lr{$|Lr|E*b@wIk!w* zIU~8}B=-HCG>s=7Wd0t0=Z#?=@xSFp!z7?Vba-wrM>xbySHbbz5fFMpF_Ykb%JQ2t z>^$Qv*8h&s8Mrq@$T3HkOBeF_D7)4C<4kEmLPz&5(Ap>OcJ8i^iz|sI_67@VMe)=% zP!9@mY;yX|UasGkit&9W)_J4HvDSt_Cr|<6K28Z~C-=IRl9%T~(fjgJqe3?)AQ-g| zALL?8c#_8+-eNII)Rz}S#+*KWY7RElC|8%)f;nBT4e8a{MblQQsC*Mz*R-69H#^1{ zqE;T+^K| zUNxornz1uck5oKcO&tOru|m3!As;j6q0dQNOwFkCxi<%>EJ4%OW13Ap!TH-|DLc&X zwITZ=4qqc~i!iJpQ>oC>_+S=cU1}hKp28|+$5*6UV@l7_aN%~nSK2ehBJ35tnPf49 zP^MK{QPVNKU}WoYu!U65S}yf0e>X^v&-q4?^t*zZXBFcfgZbmkL7>{n;;C>nL-63{nl|>mHPUTY8PK-T?uG$Vg_o_vf$6+%Lu4Ye6vVPQpNNC5w98EYzV2ung^M-A|qzx$&| zX&PxV`OT0s_)I`3JZTb>g_)jTWRmEIDSA-v$*Y)?-)6NfLNwmXY9Ux(*b83*@IAd-28G8y_c5M4~TI~63nIG8zRzKL*) zd_}^a7e)CX22@hC{2X6o%Ao*6)5UN{ALpuKYkp?%xJ8}21I7P@V5W^VfF)Ss>y(h! z^#+Eu=&S2x&6uomsR-?E_-lronb9966C@OCPyica^Y~+u`M}UqiWfd(X(*picfYwv zvoKs*UfyW12P4ExTP0S#x1`O4X)&XBvD+<3Yp_qX!WhG0XN(BM&UIF9?W{RLI%PY+qQ8O6NSr!I50;2Zeu+O zzq1(+-Iv?FpW~r=%$qc5%ps5<&(T`kqT-lPe09)z(JCj!h}FmBCdk40reu*xq1{xS z7Nd5%T>_f`+{}+h#PjgA_a-(Po1$?EYK%!raRp5K=WnvUSGGUA%_K=)_avxBJ8iQs zs)^x>l=OO-!?aqgP@#2fkY7|_ICaF%SbqbfkB8X!DAm#l_Xh{y1N-)Y_1nQBrj^@S_Hiht z;vxQ8&q`0wy8(l2e-K2WYH)zw6G$q%`Ip7hd;FWT>}Usdtc`G{8xI{5nCXQ%;%E+a z8LP^6c8UUpbEEG{UQZ7mG!s_+idp;;OuXO%_7TJL8EvuGbAUkSSYITud+P`*A(_W) zx!!l-1rNlV)9*Raf-=cU^@-7DG!Wax#7In;@ms&AjY(9hRcSCB)mEZem+)}O?3HG3 zSb}?cnNWysT5g#+#6(n(JG8owKJHEJp0#_8u}!6At$CAr5toZc`eM12MA7t*UU5@*yUiEwvn1Ju)Y04VunFys;~y~7=nwHT-QfjB1p9k4Z1%B^%wXZhr&OB&A$*23Oc;FuFq%I(~>hS z-O7EPRWIIe_xdew?aLZHfd;4hdnFybcN8a-Z;g8axA}~)DxjL-6$&ri$}5%*Hpo$? z6(8!h6g83DI-zTQ*m`yBZX=ukOAdn2+C;V6I(6OZMF&RsVdM@v$&qQzr2m0GH3qyu5T=-@x9x7X zu*p*^S5dLyccw$Y!nXp9)o8sqzp+&~+rbwLkFQN+L%nsH;64kAv0BNQ| ziZzB6*KxK|M-l`rq8Yrbiu`qP+cBWd()q$@O$d5M{Sar9Y-nd=ltQ*LOHPenV|;9t zVzAiPA`f(tecb3l8VFEd^n1K>F}t?rOCe)UqTo-XW!+mYM2}WvT0bw2D+mE)siy7@dFfgU`GWfszjtY>N&A9rB<_49m-nO2 z&o85u54lN-Rd!E~>X|a1NZx)qn6`cgbSJT8a+@qr52U>zYo9_>#jE4RS8v1w#{*ge zeaYyI00Hxsmao~IvMX!&EYj7^AyqtaV*4|9qpRgoUNDw-Ec9S{kngn{B?)aluJcD*%k3$jKD1H5^~d>) zWA3K=_R=)g>FVH+>`X+G2ud&C^vv&M+8*|Jf=mI69q^6UyzyVOYa!Acwo`^B`iaHC z4_dKuj@#G#lJ;1MPgPCgz0$P*AS^I`(!enrG?&3G1R|n46;+4#>FY#sQL2|(GU&JR z5-TlL@skn`<@DU46Noqvq9*-H40IaSsZ({djDGzKq?edgZaaJKoweebz@SzP zu)=Tx=?R*G)E&_>ozV6KMva_DoAPkDQ@4ECq#S_9i?|jK&`m}_ZA=41RNl3?9&?_| zs*|hZ?+`Q>AhFr4tIx+)YffH1Sn3&15mgj`AWv82{~up(8CCVx?hPxVw4@*%5=wWM zNO#AgLAtv^8tF~}>F(}s5TqL%qXP@^u<9u?s7Gtb`TyxGVei7da`j4qz`BS`)p_l0yvUWltK?8jT#hMj-Oo30P`?+f zc&)1PuTKrfGyUyU%V`EW*QMTYVN&oDO^t`)&KO@YeX5bF@p~2$VIsg?!sq!Y)>A;! zeW+Ec(V7h{sbGV0O??5uEZ!aWtx`+MUerKAWyZIV%nJ!i{){sG~x)Y7RvpjaNY%)-< zKw|5k$d#708DsWzb!cilf^ZppfNqZZk|tZkmbmw|*6ZekYd^02gmBq-;!D$!zLR<$ zH{~SfAk<|Nn-*@VVN_R~n@HN^XR z#9zdU_EczrtJG?PA>}*XTt0sobUA>fN;$YiU3QR5AiYE#Yw}?{PPg=4sP15+3N{!4V8Vv#lBk6p6 zN`;C^j)#i{dj_yRRC+y~IgG_x#PuXO)?Rw-uW6_~XNuK60nWHmX()s6tC?PvGOb?> zGQRAHGVbM9E!MxF4p!<$RbLG@WC)C9S0yw_o&DDDn$_24nje9(`k5(IpxNXIBy9*j z57mf)D5P!a5};{K3|codNlr6s`#5exyb1$-%of&Wk@*eB@cc!P=cNDVv{Zs*wrHqp zw>7_Q<|zO+iwXdkC!8m6p*3_{ug1CXPPYkJKIRL49Y4E5@7hTz z3W6 z$jQP=C(Px>@9th)Gtx#XRBXW6UXk#6WP$Wl2)mzr^bM39fjGqGH(Ga?zad<}-pW56 zPEt4<)ov@enqx7Yma~~+_yyzp>IdntPDF&=V(=AkpI0l)1!DuX!LkI71L;um7X4YL z(*QeKZNQC0uR014r!HR`{#q&nmgBlC4?-TGWz z$}!StHP5~u&m84ajSUMASMJOsKeSYBlg5G(P*(zgJbc_g$Ff!23LLNYPxSlPKhJRn z>-fUJ=Fl6~yPo5WeB(&v>B8;}q*Tlo1-OI^3*cx0VKJGHUBHn9?GI(bl4t|~F65(B zrm;z^7>P|6TGMKAt1^n9-}G^LXm%NVhxTWtSShAw4r*7SLQkj!w&w0|!75G;(Q|a< z8-p*W)6SrP71ySP)yi@Uo-lP6QTKkgMmaHqDHCla2*+1pU31yEhd56#-&I0rqRHKc z)3b=>O%1wn1mP4Vf@TYn93^A14|gXQvEML8=~z%%U;gY0TrG8ZrDTZe$g4gkkX;jR zj$h>%zU)~IXA$!sC^m-(|7fPN75xl4jo(my^;xK{zBA>QlvRHOLrRtXbg!G&NR5}o zX+kZDMm&9EPAi_0>Fzfz$%^*j6ss6u;z!_mWs}@afFhmFJHS_eq+EI+QsuzwnGJBn ziR6!$Y$ItLY7Q`#tb5aD?NGZ%;-MZJ6-KkE9x&kxEkTe+0{`-oMeOk1cM+_KrvCy+vja;akMm6|<&W*h z`pb(PgI&Ukim|qPX1j%N<7**4w>obLXBiRw5De7MGpL(qXf_kehvI3JZ1ywslgOL% zQrT@5?Gxs1LU$&HYtLEfqqK`&pzFrOjD(TbTF!Oq9b&d9j9h>@SgdfwjZlMhc!UU- zUEL`BSGkmvb6Cf-qR7bhcx7(&XH{tCYDb?jXv{#J?9BB1j;6~)kmS+gG?9tA{xEm+VA>RNrkUCuDLY+k}xfEo)yf07zmXA-l43eAt0u?J} z;yC5ii9f(emr*NS9x!!dB(pk@csy*5if8x0q1b^G)?hmBg*lw#pX^^Syo*%{wEE>* z8qLPx41{{yotmBl(K%IQlbQVWhIA^e(G})KDysn)FA$(Xd=mYEfF=HWD6#*M)Rvu+x+Dt2Lrkx5Li$b zRm4)r#G;uoOms|}2QI!=zM+F|j(b*YOgyevD~D)k0Y|ddEwQfT>`MX)!hZc z%d$3Zd>7@N91)~GUk2;qsS~qYD2F5O>oI;bb|%e``VVo0$O!K9Y?)#8yS!XikH-Te zW&KH7HOBO(YUjq{EJ8V5-#TP5*8;|Lxw)o-seBBStC92J5u@gFj<**y`dWybv2d)Q za$aTcYCe1D2a_{tP8dFWG z+&$rG<+{QCmg*dLgRz!5kS}~Xjh`OW3>tg8jh!wWwHOE|Z|eI-?~o*QJZR2PulIpf zD@Q@reTJ{xn4X!Wp!8cnqr_lVIik%~cGG`g%?nVyPj|Q7R{3!J8v@VWs$5sqvGBNl z|I$8UbK}S4iqH)DsI3k9D7 zOPd#Ssiw8sJmcbNG({)!r1~cp8S$!EsZ9FEC}wXQS;B5M)mfs>{jpZYOPHt(0xF9( zK_|D!xrx2ZvPF2GwwmUC(BU(SE-M!~?^h)YvUCCl5 z@I$pK(~^BjK%MmOo;d#x^fBD*^V%IPAm5yopWl48DRVRtw5^p_d%$T!-Ax9sB`Jxx zIgk=aTcMKU3v)46P9Z!NyovB++P1G(PlC|2WW1l=_8HsWS{AmCo3l_5QV)=%>RNDF zYP3NzUz#2(Hz{T7nq2Mn7tyP|9to5rp=2tXY}Ol@glwC}-ve$!f~(3{0m^Hk z2Kh8WDN-TUkshj=GKiO+QrzoJ}X_kNKg1IU6CUc2ugoDIV= zk{E;n1S3kn5a^AW*zFEn_No&mN2PNbGzW7m1Ztv0-0euPV4HTf>F?yIEa&pLIsTlY zN-(}2f606nm1jKBTf=O0p_t5N#K|){T^7WE@gvRWA>}MVEh*e`IE5=U?QZ217^#p0 zvi(>?6*j{zKFvFswC1z>2>sYux2-d=@Rx1rU~p>kZ3Ey3csu)&Vxyynp~_)vew6=3 zRV|m+fkvoC!eJ&2sy*PcuT1;dBVx_hnYZfpbp$j3up~N`d@Qzj2^6T%{1%F>}~rffcoTI)%+Dar5?Uy>6toCTw#EbKDk^ z&niVW9Z)SZb!WurR7{&^or7|DDbODc7-)K5Y6_on8(DBAAv?vR|htF!a{ zH@=VinZi%^$RR<*LKcTMn@RGMu$Z!0^vNy_m&Ib9-H5If*Gxt{G^=`2*3ti4f_yZ( z(xU3fpZ85uugbaZ0TU7a^{Q%|gEteqS1uZf?#Wl%ak%>lKf9#oedLUjhEzXcOM0{DU()5E| zp2SE09SMJ(T&v0%m~>-ua&iG!JK3b-5|L^Vf8x-gIHZW^-vfDhdQQvo@ zE$kCw>M?=4u#ko*ixBeL8u8bEm-*K5{P0aVb&`xo6VX9VmVGB&+N#cP`^Mrj9FLj> z#wm$c7oekEnz!eS9z_5UF7wMXo}`Eu$>mct(3%?#tk{S8X>fgO=D7F2xLc?a!EwBb z>=DQN-)ts*JRZ9C3sPQCezW+#jFcF;JJCF(s@i{(x_j>XD$04s zX9C2@?!M)-61W$}jDE;@O3Udl-4*eT*}lK6We$ zuSbk|={cM@L;E43AV2B+t%jHZF&hmF$o&G!|Dwi%x8ff7Wm$8cB;Ac|xsbH3584YHWC$6F)^yGcWk$!!;m@VCNo{VW1F5}BuC2_335BR@cE+2~Z z!YsVrI62uK()QI0)*WAzV`L~X6f-;d{Ha*($99wbm(*s+canPysfNtWOud$oY)6Jzz~0?K?Eb@*Hi{&Ms{1kZ#J*lU91V1PhOIjhFTG! zgE2075l7xcDbnUPL-AEW(n}9y&%Dd;O#ZW4zkFF<;uajcLVWJrRc~|8xjB-Mo-m^^ zeF*A!z`|J68tXw=8=q2XdofemaA-9s_X${JpaPHTS!m%lY(zf&K)W04s;B=g z=Am{p_a`F7ykzG!XV(8Dlz;6OKublST}pr^gyHW`lj)0S{6!DntqQemC(vqtGMll= zVA*4xSiF|_9V640eFr?BJfsFI`#BEFyb5$W1f&z9CMX`bZJBFKr-bXUTU;-dLhX?U zrR&h0FI$jJR(X7xrqJKK5lU^cAFAdn;*u3knmH>V_4g5z0=LTRfBWW8J(~OJfFU?)*vynLzM)%)|F67bx6Mzz}-w+TTj2 zu}kC6*JSU}+7s^B>wn{}@M=q|*1MLc7>%E>_2CENLOcFg+5?VLqkNBOeWSFQ>e6k` zUlizO^)~i>&O-^R;7934x9xP$AccI6k)nHNy*{s08!nAC1fgr99mfN!hY_|t8uRkQ zVi~DRJm{gBUEf`rhh($!!2A9Y0m6nK!qeEGeS?^6t z-5j;SDVAw@=<}3oeWN#_q*1N@77*d=4XjFGus8ZjU!(1)HB6>pCS*n=KY+5HWNlgs9T zS7-iU59@p`nB5#@mbE@;Sv(xC)Ac$A1O`sr61sx{XxaClZTDh5!Ea`yWuu)%pQyt zAqnMi84a0|d53D?)Qw}c@4h+3mhY7Axm&Mwk3#H)eGWsTUJ>qjx1&NSSD9TwZFcW> zz9T~DC7tgzIH@*StLe7RkxQjiq?GrwEg~llj8^uhzw5qpP}Nl6EmO#&-F4SknYNh6 zmhpc{HScpY>UQKM*wN9^t3MAv&*8EwiK&V(apx~laF}{j#*#KY&wY3Vrd01fofv6b+a{* z^u>W{DMW*86A`mO>0djZ50Canu2>u#Vmfv^Rc9iN( zj`*+w+d#HPJc8#B%0~@c=HI;Y4R(QO97RfH8Gk;;Htv-YR2!a)lTl*6SCu^od=DSx zcv+gtY|U?#%wpF#A08B%-Qwn`5Q15v*xKl@`{8-L+9{@KliWJF{nnXD@OHg=E}V}6 z(5)}9ShzTw&HD8Fbd)c5dlsrvI<=8fz1961)M?UZe?mrowyi%BS3hP11_0_;vqV?A zi~QI42qZW8xF#U0zT3a{J-*TAcBV|*jGE$iIMLPGP?;QQom0Q><#@if$oTh;OOw3( zKj&9OFK%Y@j-K6YZWHc=%`mCELI~*8Dlvd)Ss=6JKH+d7@=~*n@3QkLzLH9ouvEUt zsFpiYz*yEN!fbM>WO;jgHK-N3wuf+OJU;2m*EsyATf_1snTDwF1Q0%1Kt(5jM_>~C zFMMyOO7(GT$`=14SKObM!oX>9HM!O#I?#!I$^pw+AMBV4>r$L=zwSX6K(! zfSSp3f6`~{dYg(osp}vG#uD&vsK(JF_ym}YB=tXDd^+dpyoAsE9ge?XJl5`69Z{y{ z*4i4sv*wR*b{u&-<$yod#&$5*5@LQ*J-zkFbMn5&=3AWzf#(-;sk@otWJ1rYfVP#Q z-+hFwIZn%-OU{Vq$CoD$O;!_Kp9tR_SgpvH1usHLRXqiE&YjUkPi z%2Q}HSlSAH5ApZz=NL^b(PxK(R;L?el6b+NXLjpV{+>eu^wy%6HDTvH>?N6v6Ocpf zkj>MD&vCien=$|KsrJ88WzZNDhvFrh6c!Ot0R5^kLKUCL%D=yDZ-XPM-QKfm?uz%Z znpjz69FRFPtlp#^{%(6AVGpu!EEJcecoBOzHD z;If$r?_Jev!GHG3Yzw`M0s>0>paqpCK4?tUIqVq%6mz&u`!WvUfd*_0 zJ52nb>%f`w9;=1P^&f*^ghgSm$0fGON+mOR-Mz2XXUqa?7;1069zjua6BSyn zw1%aUC%?{$*mu;uyBh6r=2k&Kgmgz#7XkF?xC>X{9`cRgO0m3oMv*t!-7df<@sr~Ib6u1 z8n%Yl!^4KJ0VHI$43K5c#gk@0vSE zx6A#=WDt%2uR0h7N*eX}tM+O#KQ6vz0F3!)ez;zX!4M{QdrKPM-nU(MWtmPQuP5j} z$^+(7z30;Y+1*R{{F!N7bL@>$=#b1#A^6k%@rBsP$jE|Zfqi&}_rJq0ejH8BG=zQl z@FD3>gR4k|UQfP&KYTSXaaz+>ZtTIL>@E#)roRHELt~#o9!MJ=#GZ7qa^>2bWxmZb z8OcIg{IB5c6 zBYtMKvb@TO%_Vh|hjK%7XR-s`H|j4$TPzMhA)l;T?ptk-LT+kp-H6Cj$m!WQue>Nqk zO&@b=sjMHR(>Qg>LkajCCE>n7uxsOU&wZ!9qGJoVnVJ?d{3tK+luly&Djez@wZup# zA3uTOOgsz8{Q=ZpojO+|SV=xE3UxAF10&5|hiZhGeDj7s;*q_p+3`S|J*Q+|V}5PN zIK@KQdV7^6Ms*kvbt&oxY5OhV5RPw0&yr5VgjU^d@%R_l;1$jHd#DOZ~0<>g(tl)k>_T~XV4s?RxupT&$pz3{zSdN1no2@VNK zfk2$zdml{(w(DM4{s;Q|oKuaNl>E3;nmEjV*N%L!&MiR2$PtJ*h)1R}n?z$f_&Qi1 z5G-<+@EXEs*2@Jfj5R2T07gqt#Uzu_k1-$rkWe3sx>8M5Qlv~cV9$11@A{JV10eyU zA8>@01ViOP#XEovmIdcp=q*FNEnpcYGZ|Utess|%$0`O1Tk4a%3eeaGdMc_*XfTMs zM`?xW#ugirUcO#J2e~7t8$Y&>lh9Ley%~DJ|9Houtkz|z|IvDbuC3q}0B=={y8_Oc zI zAa1?XY~qW?r_14b)~`EJ-0MKlw|4OcOvh;pJrXhOykW}E#;*~!m4@XGRCPVImg;Rr zj8Plx2S|3uTG2bE{xrK()tL8gg88+}F^^P3@`Rv9x8GDW4KIX1Bmu>j;_en%ecZFe zZSbfqEVIJv;bYLd+aFDY`48IskHMd-VJI*+-xj%DH~2z7$LRElM@gB2aE>bD#Gg1Z zpu&$zs^51*mptCC;@{j9jVgYdvub-x0)%(TD=iZ^pUb8r57Dl44|%nOwHBT8`4REi z_Vem^TH8lSmv`E7ArBC)83GwMi(2K`iOA{l@Xv~XOjE9f?iC**i~POo(9$DDjD=~Yf^G@ z?~&yIo-b>XWw+M)>@|J^2fj)i*cnt`cT%u=ML zI&KQ^xIou#SFu!sV|S&EP+ccA=M9x|WmBh_>Gu}Rg<5+$gns?L@QE5r2L~=Znj;{` zUmf{!;~9ZHZ9mhm1t(*f%Vn-a;fRM33#L_-5=c)e3LDPL=OPP~*H4w67gR2$&+_Dg z2lX*9X8Rhz%NW{v^M`4^ok1N2sWm-eFZTSA$M-NtmLM@ehyra9hVOck$^MJbLXirS zh%vYO6;X#BKd1p>%~ZQ3{mnKb_-^<&1C{m==$eZ)-ez&vM|eE=tIWPU!U5_Wmwd;O zXw0WuBO>=VOHwPIw{ezQ)sL;Wg!0o>$6ECEzx6d71M1-F83=gSUK$wOlJ{ZPNTPhu z#pm4kC9;!8*rwoPF{uRo;N*3!qnAa5TRgF%2<1~ZKN`Bf!4|f96l9K+<+Tr0kxi%%efS!)*jVj ztBp?VK};v%2fqauV?E8~D8cr!)<w(cJeVW@*%Vl9= zKnNC{@~sa3LaT=xr8+C5M)w?N;l&O62aY784!he(OWP(k%UMw#w+o%U486g|ivfys z9ky@kF6FJH02%RBA17Sykf}(qK;V3DMxQN#%z5>OyDxp=M+I_3L840pFQekQ4G;q= z)VP~z7P2es^X*^ny%z#ag6v$Wl<~5*aCr};&j^{X7Y~6Mp~fM{=pvTN93C2D7xrBLc&WW2u-6px_Z=I#ZCh z2-_8wqjmH9aXF`~_1b%DSbZ4twU{3-Xb=e-)bxpzahu(uh+tKCi`-x2t>N`7leFHg zDa7Gx95x+&Oz!arkXW@)ugmAn8lh`r_u;)dRsd4jGjYdX?W8M1jItT<(l3jwTJu~^ z6Y{SLf)LDUKAIB_SQdNTdQkUJbQc+gIBHs)+f5a|0se65Kg)Gx=ms>+PF z_FrOj$8>{4tBBiNbt}f=k+?ho#vFGaYzaNiF|?K~M-wDohS+)Bb)!dA zh4c@7rhJ$-V5p&LGI+4tS8a6Nq-;4G4;h5IT5PaeOtY)@y#;X$*XY*%3^OL8irwuS z5H%}ie_(TgPc>kumPudcR@F}S)FqC`ElcJypVhZdg$c=%PAU{!m@a|*oYD5mx|yy~ zR{@$&wPcfjUTzXTRk(Z{9-n`Xcjw@7`W=yO0IO^Bk7?FZA00y#3Q<#T)uX zF#=w9za$OineTSn(uyfV{sv5fQJ|^(LC$qN`;pnN(%y$(G3|Y$<9RZ=k?YZipj4p6 zY>YWNuC9(da0ubk)(LXCm+up`vM?+)!P1yoBgkoZbjV#V&kYL+aS;7prOZ2+Sf>M5 zV>u9`q}uN{3v)85@3pqRwr^15is$gok+PVKCWh)NG5+h@yjOKYTV*81FQ^r4 z%IYN99rxm0LN#e33=Ik`79eZb$Yx7>cy3dbWwkeI_136Mc9MI+p`r3e&=79Og#N`e z>giOJ^JUP^t2*yoi@M$kNXk!{=Bjo^6}n$q$&r!Yo!(FIy30gWo-Pe3=IdcwRR1&-J-8nwA!%P!#k*o(e4l?JIJu*JVUYjG#5N|8{v_|OIF%UX<77Bki+ zKJM&Ft?er>9=9`kNbx);VPEE4Fy_gn;qW&x5!GTrah)MT)!2FQj~~4;x=XQ6{6G9q zuBMs&^9EB*Mar)pWOg4AbW6Tr;<2GJ;1~@j7WhpAZq&qB2C@P;##MuOKDk{UWC446 zd2CEG-5&To4Mfs1wU{|QxaQsIf-LIK33S?}h3z$O88?VaI1BsYn~Yat3npUyPqgNT zIz=%6zp|#VLEG+6IG=(+f zB%E{E)NtA;i^X3p!>6r^?n_sJ`gl;b>wq$@IsTCN3WJGwm2<7RZ;2;_tFIan_WTFA zh#(}k#0c9WEU$(&EB#7UB0RX7T^kx=hH-EAn7;Ed$!}iRT&XEC`uEfs$~XFG$@PEPySHCPQ9Z$3>T6o?eiHD2UT?a;Om(V2x zHd43YMcn|z2f=Uxx}zRQ!=3eKMT{}j{#Y8N%>x+h&&fR@(@U35zy3(y$SPtkqMPb`R|@NE}Z%1^98jX@5#Q-wO4uv^0nO@fQw4SF-ohIrh~A6aMv)Lj=Puy zttI{+{Y|hennU>M#BZyk$LU$ zb3X4tq*#4Q*%IT%X0`oeZDEN32>ne1mRbzn#2vhExOjS3;%boJiI#!Ox;m80hq_q( zqQ(*N<21!BfE*}Ur`ggBY&*nu&F`dj+T5h< zDM<@zw=?Hh2*SrtV0H1DYSi|Axd6|-T9h}C`=>~r+sIGfj(tfOV;kc~P@M)lWRkaB zqR+M0)02W_Zu%mH_5{T9uy=P}vv0Udlq}n+ue#-o-M4(tq{@W^XEL=8N^j>Z-XV8#w%mX-G%;ND!5eKiKcY0p^V81)xWMEjW2YfEXORIKnjE0n_>7o*7j zByKTj2C`eZXcTELl+j3Ca#dQgM+|MhX<;lMt;RERslJaN8s0WM4B6z+$gxa~zh+EG z{RuPCJkP?glrZH`LR&pjVaIf1LdQ2KSeY<-R$p=#-}jmEMbMRNC-d8`xNZz<3w#L+ zb#=%>-oeZt1L_GSZ0rT>bDi`H1|GuORi@!`x^;J&vRXj`izR!L+4R!Eu?u~|SATS% zzL4?mzC|ceO(qaYvwjf#qb-F&cY0b$PdB848&(<9x;E}uB!BQZw(GyP#;3l@9Legr z0FA2=+YfGEC?!lmD`aoSgmbz?y_M>#TG_}BOll%0p-}D7( zUp9?OZL#U&pSYpemnX&wIoSYdjMMmqY;PiOG#^M}p6yOi`4E}YcEDpx!oT_R9g7aA zE+mxoPfSeo-(XIUqNq|SUZsWO@e2I-@q@Zng{1pLv(>zz!B9!d_Z3n-KHq$KR9}ym z2Zi)E(FVl}11dc+@KgmQp;WC&{_21dL1&VCpWYqU_8S@DbhB0<&6Q400@lGdhmF)X ztM}74LF}QaMh&P5;@``Cv)$;ICLnmJdRbs&om-2yehY_C2?sAeT~P@YAPfbb39E zPv-*OkssglmZJ0HBTd)8W#PQb$)63)zutf4!an3hqgGtff8n8ajf|+4hd#ZL;{guE z&gf@{x|#R>WV$9?nP|>GBI<7{`MG4~c7-S92J8Pd5kaYe6|}Rrhc9Lh=)^-O7dI}q zMe^SYO$H=T;-=|yrx%E9eXb$uS;4x;uMVA7T0P91hNKzv%EPacc&~`zRaT)B`fjdD zyv=MMrq9+?n%t?E;4LKX|9QI^fAxFM^p^dV zte?@A=k(YSCUgZa^&$- zjZqcl7BG$;++rGpBE5DL`hOv|pcDArF-`6M4221)L(hnIAHI!(aq6?~fK>@C-}UQK z7@-uuedAA~Wz`^Pml0f2TNbBZv}v;NrTL5gi$8Y@Q-ozJGj$oGbw=7FepJatLtTim zWusL!WpODBBr+1e)g|IDM&is|I+h@4m6E6DN9VVYwi|8>?S;(nS}P0ONk$KkERTbc zggu2l?V(-}(rK5qyQ;f=@?OsmUb=@DPa)+;q}^?QpPEV7IW68)r#d|%KCUmu*Do2K zb{>h#;yHLDYw0No;kkbc6%J=CqD`lI3xP4#h(-z0feyC|y)ZBr;tFib(0+Spi)tRp zh)0Yv0GB=RZDt?QQj6P?m5-ZA#NyHmbFoPe%9Hkvle;Ot^{-bP70hq{+FvHo@tzT2|s`(OY@VqbiFs0;{OslAMc$}A(>eRqnf6!E)RePl#zr3O>ZO3N* zw!P16TYQBUllNB#L2dsG8f{&KwiYbrd78G>m8tg~l-1k1YlpC&IfQ1Oev#$vlK((* z{{k_V+)@2I~epE{|mZC1l=kH z6(yg4&ngo)3;`m}{enb}`?IlpUY_C!v@~RTD#z9#-y>#%J(__^@tdSvGJPZ?sGsco zkQ+qook0V&?-)OR=WzY&2mdt!_z&F0k3SK8%uN{X^hfrKr$213<8NPTc?OgN1Gu>t zKZr$li)Y_sZqe8w;zMl?su026i<*q*W;Hxge}{%c3y@wnW|D#oCbaRF&o9*K)43dQ zNxHQl|D1P7*}3fSlKaMP<1-b{0~1H78Q&Y0ZZ4x#@ZU-E|8g~7P=f5C1@pt~^CVvZ z2qM2Axooba2^hP579`NC4==H}ef?`*Tk&_X*$jcXf2yj~X79O~V&i8y*Nc6Vd?_Rn zi-Y-dpCzsJfb#;?pFWfIavlO2r_W!&z%8!m=w|)z*wFojz(R}BB4a}Q%^7q>`6@C@b^C}D%sdo4;e@)wQ@z% z7Kj#{oSgEYHEeuvLsPA{2?0!>!i?dL4sX}94aQn=%_>XusmBa&%9Pt90r797a5P#s zge;chp(RS|<6cxV*x?gf{u`1ujqU| zy!ao{`~N;@)ObJ{N4=QrZwKE6NkXp{DpQ-hNN4cSSZ>exmEilfmQTf2Ol2A_ylUGu}zkX%A*_P+&;gzxS>P~zlxh{7&sVZNe%W+ryWS!#s)(FnH)eEm2%Oy8C zpl+#%EjR%3pPw=%DGCYF_`r>T96+eA_g}6qZ56Rf^Mu1E@2>=8cl`(V9$~@ zzSo9B@u`5_V=~G1W1@WpW@3?p=^9Tt4~rV(lfAHQFsd);Zi)0o5N^6CF>p#R|DRD# z1WiKeO^10n$N}IoDkoGY>HN^`^Pk(0nTehH{WVO#bX$Caa57jKSIMpCY3Dd9ZbN3 z6OxOtvok?aZQaqfvAQZc5KYF$uhHg+#N%w8{u*yq1Rx%ACAIzLgX0Rvf_{1ZTo;M> zz43Lu+Hr)EvLo}oynk?<$wp9y{n4@}@K1)XG5_iJnqX0emzQ^6`YH^~?EdZ!(L+as z4<^*${-#EJ`0Tx+>Qohrv|{J>{eik=x+dmrIZ>!z#qc+dFrXtX0l-MvKeGbRdo5`> zI5;ZkH9xlCuvm)U-#khW#nZAXf)wc;K8LNSO%3bvPy*dgqX#;g^aP;MJ(l4Mv$LKj z6U%O+XTahX>c4n-w1PX|BVDmZX51Hku&dGWh8cQ0Gpz?!UqB$GNaa4yxd`$4f7mGe zv)}&r=7Z7!#~v_s1w7nE7&JA0RonHk9?13x zyXjjr=fAL7OkE-e>Azn%0Z(!FlKb`2oJT#Ei`&6eGJ`pB+DxfJ1W@wS?eF5*Z#s%D zye!jhVcZxB|KB&{f3|8OMif}43`}Gv{bOJA`gdoi=V6G{pF;&!Q%F`fFg`UXvAof1 z{Q#T6J}3AUEkMs~T+tZ49&j}fd{(eo5L7x*ERU9&j8JZ?;lIc2?EcwSGAO|O zV9E`-F>lqyDvA~eeCEe0hMLe0$fJ|@(GT13+ofKoY|>k-HAfw6~67+((;R`@dppB$uIgFo#JoT&6k_ss5iNq^>i%H zVxNV_{pJ=V$wKO!hY+=X->{o>>`P!sDi~9GrlJ#ifRK?sVCt^Ux;#MWf9ViRK&M z=va;CYaZ7Nxeyv*L_z_!StXmr`V+)+^Mm$H`n91_%{G4=mV5~bOuB4f$U8nbwKq3@ ziLTk`?EP@rrftrmU$r>zY(tM33?`njv|8+C^PO(0SMSow8vNci0*Y5|!GuwfYiWg^ z4dN>CR-yba5}^W{7{h9lb=RuR=qHu2|0UG^IV*x-p)+loIpp9;I+G$9z^5pt(Bd=Ag}XbLI30YmiWUjlcb#yi(cUb>6+8s*lW=es#3jzKHx=)5!ygn^q}TJiFt zLXherERz$0%yKf_x0}Rb84Ow;kL5nKae~=3LZbhVm*781st(_CioCbNzpAU>ogi)v z#PrRphp1C;1Y%9knDe8?LfcReIIR?XBH(d1uBIm>Wx3mSsr)?1zmep>9r5~gcx>n%|8KXOv#(0; z{P<&neXvi^Jw!&+xkG)J5aweA^O11q3jXrffn|NJI&J#FrIOTdW+^3u4$;&@(66N4 zDIC`5WA8uv_Wyh2fwWqfNGKRXvCPxs=J=Pd+$Y#~taiQjS=@G3;_;M1WetY_0y^?0 zW#l&eCHJ+$sk+Zh<1Hw^6Ag} zg*KB8Wxsi=!|?<-FntB_wYvNkt~6XqAvhbwv@Fq3q~sEH^gFBRN!;8&>+7GF`LAc= zZB0t=xwxXt)8W4*YdTph1eCdQ?r$#(3_~zz#HR{p=wZ81lz&xN{>lE@vCE2!P`tA= zK2cqu5T^rQGzX|W6HDe!zrp@fI5HSl^qxxV?AP9&$V+&PRR+bp2D|O|zp&#w<0w^f zg+egLQy1z6e*Tn$s{}3TY~aOG$hvmSZZ=&ggv(l-7lK7wE{p36X0V0bny{lQdOj>b z0K}mPf@)er^|AJ;Jo1($|MIp5#kfd`I!8z#~jY=ZGtW<8c5^pF*B=1&UiYHCH_vujd_mDmN<1 z5K!iq*w|4E)!DpxxOW34Cj>3-sO}N|R%#ndl@3+9p+H&!obw>zRD`RcrLB1XsW+6_ zY)f*A@RjS;G4Ws&6NSNWWK^G1sD3=>_%w}rtZ0a>DxP+eV;E@U``1yvdA}-+rTV?a z`k~o1q5`;K1eaLpdlZ};SP=cN)UFFU^Es#!>G0|$ne;3&(%J%{56b0ww@2cRrHbWE z22LT*2kyDpy>)s*Kl^{Z+5fG|gw=-vNx^%owB~BN?boh*r}6MuK+jKf8)(j2`tcPk zR~ZfogM2Oz)G+dEq+Vlt`EiwzOxP}QyoHY+oYL|Hg$yj6$6){3 zApjR6s#*UEb-~gj=CX^Y9)!Od-kG3YzCox92ws^D@6JEx`vq=ZAFEYT1q8t{88BZ{ zozB(So9pVkUo!AJg3V?l{y*=W|2Im$W?m_=Cl!R-asRz$i>?1^yz_OXfjyvMPyNKf z1cD@wN%FbkVs%#6+aGn7>UCc7I~V8Uow zzu>Kabx#nIQ?1zgEHTq7m0bREAJO&pq9h~DgX<@Nv<9D@?I<)lpJZ~9@*>ofX}7T^ z)4`)8u*qc#8m5e-w|%MX2ac{K8Q_xG2RkustRwJviv@Qnm5QQ$eSJ0U*qAYT97%;s z9^u|(um)?+GU9`~Bzf(<8z(-Ik(IZz>?<-DT+5%fFX$4q!WYi&8yoe1tn{aN*eA6P z5t@-nzoYqV)4!)u7U%Fm<4uGA*8z-z8l~5uC?~wYk%AS^oPtdPu$OS zU)Oma=T|kxMn_=wqF3@um2`gIJ>Ff;ywEh3s~QjXO#M+gch!n#b==WenG=MZqv9$} zUjt(w9jkVOnza=)RSaD^ksq};=>+HPMSkvi32ul>NhZ2$oN7@66VOSifD%y?<`G*G zH`)zill2}iU+heHYwo8cMEZXe8=6n>`0+0&EP1}8tYW5B24nbIETRr$bkDQZ>UpgY6_M7nbt$Z=gseIPt!OxyG|Ue` z>d`B({?STG(uG-&4pa>KD4vG4Wn*zy8z_=Ci5&k`6j6Ogr;_mdU;A`_E^R7{k0cHy zz0YyWttnw1xm8R~T&m4{G%Nje#1IhfGe3w73ky@pbF%X7(W{ajW700?d_YK_yD$W{ z%CCD;T`WD_PppMK)J1*#6J%pwDg$fCY9j&T_n6$G0QE{-Zy-k#Tba-#L~pU`{+_dX zn4=t!d)upkmv0O-gAM5KpAQ2(tk4V`X~I(SQh9b?h{~@Yr&yTjVIM%!Q*m2v*ZkFN3J_X~pvFrvGQ-A3Wzt`&q%P7RLn^p4*M&2|aLD7Xc59b%~Wi&2l8@-eI5(F$vk*$1?hvr4m&Q95X zH`_~kmZ<_cT(JFHG*9FkDhZ%97y34fwa@i@OIVrR+worRQ{unAHSQxM${{WVk%HkI zyhHjNI?u~OQw8jBUdQ%i&h;NMv7i1wrE#&a9*B2Qff+n8hv%bWulq74@XqvPUsoPVu=aUvyf9DO>qfpw{)8AJpt1*#IhFLopr5*Zl$W!l z?V|TL&`&leXDkT^DP8b%q~g?rnVIDF;y67aSYS#LdGhR`jMWk)SkeCTe!?ePluB;7 z&X~^rV8O2RY(AF9`~o_vz4IA;bt`^+ezN?KKpb5x7?Pl+t=-t>#=$Do>{(n?WRt93 z*({ERy7YeRF~Rc>Pl}R~Y>LCiv0J7+J)XZguq<;!baTF} z779SEOp9QvXRGcLaVu;~d!Y5digWokP~3a9mxg&TOFbu_j9&cz z^CaAsI$h#(V5iSC)KJ1}s{TE|*!NXPj#TjR!}nwp5p+nMAy{t^tF-Af%;#8J)o3Ox zcxy2>0A#x&;s+0M5C<{QptV^7o~M=9NfE-uM}!t>FjLa4UaLf#%V&HhATjhm)Pn!2 z80IYSxclwwZKkWP%WI;&{6A=eet0=XgvuX1iXZmf-mATp$KpXc2pV`Lj{`}R+JC+d z|N4zh!gJtd7~naHhlCd?d>F+0TxL-^;wi_~>0&t9#N@D2qyq2zz>B|G0KM|xpW%6) z%s4+{j5?e6dfOCPvg3(yP|tk)`rEU{?N#JOdabJG&2%-l>m?1VPk*5z;>d35n4D$@ z{oB`n$r1mzvwU9^>8o`1sF>#N?jaLNfI3oKA+!>k!)7)F%s+9zoEhQxd?e*CPw$qA zV#3RwR+0eEQjP*Oj!e7p!HWQov;CYB%gGW&m_g#b`LWHrHL^H3I3h{kz-hS8hm<7f z`JlFg)~=@{`7wSHKXJ|N*{1r2Z_BFwg+a9t|FtA*>%T)7{_SFb?g}0d8FS~=>%DeA zSZ3ZoK7KH6?>E;6!fJ6IhtyP8!!immfOMEeYVmb63wb1y#>)u^3}o14f@RuPczfLG z2%4+%`k%)lpU98(=U9@2yu;ekqEr4lH(;pog)@PafK|tLZeAiu@bqjj{ipIX{T9D- z%e)I>Hsb~VFYWZ8vQyjeENEfUC{fs)uoEe`P%nhhONNmJyv?Z^1=ob_#D zl37c&cx;;C+^W#7y5GxT3osI&jZ{eFbu?#Y9Dppr8ASs^K>rmtJFFmNU_sxiaBX^s zwBr+M6AKHAPk=vf%*SfbpmzHFuyenBb#qgeoX;`S?%`8~hRd^F4!mvGWtTZE!|P0R zj30IsvdZi1W=IJ)K&^j(ILf$xl3E1g#=B}c7#o)bJ;G!#X&H)vc`IL@?$Ik}{!*#5 zuD7LBGWB$lMGM>Dv6-#=4fX-^4a8$V6J4A1?j-f&Kamdj>8uv}(kNR&AA6XV9@hut zj1EmSb}H7p9U(`?_6#KTgGrMD7-{`d#c-n7?u2P+fAp+d^Euy(i}LSupYFHSWdjvN zNKQko?Ul^mvMpQ!bg@$#?x0dQ2F+Hgcra1|ntJUzv&5dD*-*OAIx5%V`4Q>ie5)kT zTW2XgtbV_g3azw;DO}8c2^Uh~byyWX4S6^{Yto*QmpuLYr6U&n4*P&o40^MxGjtvTJCSC z?-O!;D`~>zL@Cs+rQpPpJXUKLb$=)H@uk=8q9yD{`vJ{0Z!AB9oX>eM=xf^Q=2`Ga zfjdqscQ~cc8&KDz8}~wq_L;WW0rxD7jPDg6NKl-#Ul{_^C9|&Ld5Cu))SQm}V9)ti zKRF*Uy3kF5rd<1HLX2|jX^cn7R(wu_agL;>z3?N4xdA+0yLHU+>m0f4BYk<%6am(t z;+W__$!6i1aEgOU2FAAy9?2z91)6y!x)(T@DghzO9?U5-cago>poK@Z)~!$5?K=x+ z9M-xy;@FKI%+Ht9)0erZ$8S{GErM}af%y+oPAkPlt)6io9X|>3BF_tYAzivmvxBiM z4`$8dr$;NgqB*X?QHOKa$e=+1TbtKis^_6l52`mDr)WX!oU=Q^G2!K%!Ml~Ug1zyL zAG}UsKHa`ueBSd0ydH<#p=1I9$6G?e(2A{OcC+Di9Q1>$uW1rW5t+R$b(9w5Owc__ zcML`m=k4hfaOM<3<2cNkY#K=uRn_@8tBmID!rLZt)$-l|zjv~KaP&aq!SZ0cOmt3b zKRH$_Cl|J;{&Q!`8RQaUfXJG?FxxmLKjdPa74kghmrHy(YLLxh-)h>^A99%FJj|QG z>zo2a#PP=72Rjzyg`!}LrFQS($@WZXaNxBENZ^PE6I!!zyJNK$PrA2-)5mI+8uCIq z@sX{`B8yMu%tlrfjiGOPPTqRp)CQzJx2mB1`FB3wZsdJ2(-cTlnN(|FxB{y^4Rbf> z!e_rpfJ^5C>>Yzq-;Y?4;m<(B6Yj8e&e8p|B|oY-mlwGxpw?v%zbFd3>HZ$OljYkq zf|0N=Yz7=77t=$KGCBHdd!}|3AYj+SW8ye0zQjX$d0lp?!2BcT?dK(xmV&V)FO0i{ zo~Ahl?0!5*cI|0?KIplm?X!I>pFE?>MYK808DxZMs-S2-a5 znzwC%M{%LDe@6M>HG$+qEgE<`;h{G<&Ic6eSLY2{#Os5lgao$ET$na9a1PEHO409R z?5FZ1{Ht8uKj@K-y1yhcs6Lb5-bOV$oPY&Xw7AouLJyB9pFfxN$F_PiS@JIR(Atb1 zxzWvGL!|!VSl>FbeBoKCzoX+G{u9#$6m^j+Jtv(?>)CY8a*NpVIE#_=7r+7Cx@mX* z3(_0+EOBipJ@vs-k77qi?ApmI@6|lNvjzcs5FPVP|Hs+Ea%SFmVKGtpgsElB&gu)p zpWx3k#8^C7Oa@NvyoZy#F`quag8#%1e@ORc7qQg;UA2KzLjA#t{>D#$R3QE|SX|Zj z?Fl1T36xdI4?8K>4?gwFHzS=rvseysSUI+e<8`bV8{vZaE5r(V-di6l#|R~Rp(XIK zxk9*s|522_e#;^S`k*KLka(m*&Z0Z&30u;l>~MIC`}jlAU9qt4-bX zL51_w3V!b}a&<@35xPEN5(bs`DPM6`L+WMB&4#c4hfG6*M zJiV+w`2OYXs5v8!{qL?qwQ5lptk3bZ`RoGr%ONCFYr`h1VAql>myZo?XIu&==aWFg zCR0f@2SJ+ZU&^<2(DEu_@RRPy9tS`JhnR;CXjROomBv!i z??!_2D>y=-lOu{zE`c+lPrFKLWAgn&7Mvq=q>T~+#?_(Gylzc=nA?`z{iPDe4K;YZ zJ(v3meHM0WU5(R5pBi*gqpLP$+B-E_r2TW5!`XY@ehjshUR^2wV3ew^=`y4EuQFXM z+O>nQhgq0v8FSba0N(tPkKMxl1IOaD_p&1Cv9RC4KuT-B@znEZjWlEC>x_z{viB3eH?cnDtr3~p|3RYIf-eiHQEDByr6ms78A;)g+j3?D@ibUhO;fal> zy58e93>a#cGr{~G_jWaa@3*4!nGC;en9~kiyj|v=I+{C#@wPLTQ2?!As4Rik1;e0+ zKwUHhOOsSltFYwh3igi!di~s!36TMdR#q8w7J0iXotpQmo=yQ+lxDci91>L~^QDeH z%v>h@XPv7Qe*JH5?jo-?HMe$uBUJ0D_~ukUU+T8HJ1AUN_FiUuu~5K0@>x#fj_GzP za1DLoEh1{&uGi_7CcQZQ(FZNQQw!<$l8_cl~OH%SM+J zQrn8Fx6()cJ5h*L$ezb?PseJD-$L6IK^N^hcoGfI>gob_K!u04g zeeJE=v@A zMdC&v;GE64R}F)ynDrlm(OV4=?h`-w?j4V%ZUTZ}HGA(LY$k86X}5Xn&-NAQ9vezU z{X)pu1K)8rzED|{%mwl@(B)H$@4z_(aT5x!yl{~T2W>MjWi)klb@Mu3r+|__Mg9)P z6ELENoMXuZ|7+Rvxub<`PQz?)uSJfQe|mEoHlwgIlp(V|UwnM0Ut!k>O-;`wxmMIU zL~R8Wz$zK<#hq+UrH!a(ji;Qp%sR?)MpCq)p9#4HuX>O&AVtr;E?uN!{71EemwVTe zs_j?DuaQ-LNHG22?+Sh{w>ZgRIuYa)t1*YVw-T*$9i>=28^`7z#mNNuRa5+-Og!|i zH}bF8i=q@voFqEg7%|c@n`FxM(X@wjVZ$^|<7VegL$)9M6RP$Wim8@%uFww5`%{#G zwnRj3GW8H7V@rScx0n#vWT>%Alh|Zlj*XNUFWc*KAn7qNaO+~zXFE6A|cM?3hTSQgM{#!H&HCwEn^iQk+n%RYb#t# zk7O&4e~lgz`Qf#cpMyT0sG_Ww3!?F+XvE(i!k=FmX}iT~eVUfbnIObC(V6P)7pbK#k-Q^O)uJU z=n*=eu{NB!w-EFSO0hkx);H(ZRn0sYB!^RtpC zn~8O_SG%p@0Yr`Jn|eQei6~&pz41l)vK#hYsgU0IoG(&Ul~iUSb85~swWV9*l|?0+ z5;QII=O( z3`Q?D7;U?WB>>|s@r*MS6>V>fVCW7;=!jSFvRsaZiFb6<>5r$<-^G?J4u+E4ANl>B zzIQ_LiM#y(!lblaMY>n-2p=(H|28vWF#o9=u65cL^Sn6B1jQjk%7c^lTWq|mCy4B5R7R~Il+4&1VqH&UqG5XV!3=7riBY!C zN{HD^pqLy1J80?f%@>8eg-f!gho|8~a*4Yld{(@hbbAO_6peRuSj|FzdZ&Wk#3CE+D z!L-P(Ty13TrZMMxr-Z+Y@2LMCtn6oH|FE-@!Oc!u_dP~tY#Z#=aiDYMc}`^+f?r^cq@I{-`jiP9Hcl~cS4aKKT>~FWV4p#?hkM4|-i14Fqb*N=%YY=H1h!gR zx&90JxI7W9Kz+8q@;3i-@y0&rHszWFgox_cDs2GHV&liFMWMuZ zCv68joX>_%_q-Wp>Nhpm@;1=6xU9y0w1**emwwNEw;#?-QR}>=V&A%g2N?h(;CIvx z&w_2;=^f+PyOl5?!E>n2eVTDRhWA)Qj?=D@z0*>dSa#-ZMeSF9rGgwuGu4m^busOv z_9dV)%yWPE;BCHoU+Qb>G&eB#FxH3P5R2xH#Y=%`3Si!3lml6cr zB{XFB1Lf+ut~w9hM9-8V>mC|kBwsRDItW-#RgBttHh3LG6&#J{TrlMKmtQ>W)6G$6s?l6 z%x#nbh!jgS2lULy#`;RDcOv={cuR~tA3BB|T`dZ#q!>KOZBF9zcx#q}fw8a)U=Wn* zvVJi6`JEQv{?BH><-`D@Hf3V}ko+my>p3ux)l z*Z><~Cu{n-2cpvkJ?PuqJ>x1?^Ak>Y6phg@vEG1PAbxS|swjtT7_j4(u1VJFbR@la zQS9_=+rIkrhg;POmln>B%OFmEbUE~c0D>40Sd@Hgm%Ay)Azm_=WCMs*u1DwPj^V{e zQypV2yOZ%8_5n3sg9tqA#Q^(!4L#a^Et38hBYRU1&{;Nd4o)5vl6pX*O4^-3i~y#U zT9IOe(8>6yb8L0R?%}*+b&7r$=ixECFZzuDrLx5Z z=$oIa7><}<%?BDcc(^vUc^|3fb(g=i3Z|5idj0M3G9?Pvh#V%+r}kHF7ihIu&jK*Q7Ih2)a$nyAgOv=XSWHk7fX zx`d9!n7C#0*$-M9>9!oLw6& zAw6-yU)^0lh|hd$z_60e4~+^f9?e=W+R+?sWdV7NJF(S98eYcA9RHf{IEt6}(OYg9Hy*_7jc5O;QCv@TWos*gDUo_X+o{9Dx~~slJ*ef4n;|-U+%Qj>ac(+(M-jSY@0*OI!I6h1P!U1aYq&qEd#VC^Nks-q+*)C7j3NW$DV4LiEII!Zkg!m&hHg--G^s;P<-onZEbBV zM_Fgfy{5B{a-YCU_1*a>L1bv@mf8vu(jC948OzrggnhN@Bcu4+#HA*^>Ed;!cY|^D znmM9TBYxJYBf(sIpZqES+MjO!D(Lwk(|5uw#^}(ZMvRqyV(fMkGPPQ%+Xk*dEMYCt z7(TqVJGCm~-L~6s=P3JI>uooFXBIu#;uuL^VS?`p%3#F_svyf~ocMA7gO3gB{ zGs?&%R~{LTP}=kCR%$sQVA^e}Po)XYEH1R^!r+{h+`#LwTTPc3&xLOly_#*32lHTNb&AP8~L zkXEHG#YA=5oV%ptb@@`UZ}6L7Gs^uSQ?9#aY$(P4tl?$c3`aDxE^q_QWb#u^TsS9H zUm!tj=ltL0O^;1m^%@PPqIPR?Th*{jA3_@}W6!%G?GKJr-l=2=)C zLGOt)R-^17SDCDfUm!mXpgs055w;u`(>z4Bdqi0^vc!b#ckI+4=`TH4%j@feuYm64*cSz>{0MSn6nQHT*K2%E>m6RtiQ6s1 zBl&OJ*|&m2-FRU?h&kx|i?_P^GpIFWyh#Y~Rwq>Temoy;;R&y>s=a0|ddJ~qqeA4% zb*gv(W~0|WF~Q!LKVDvZnFC!U>F>`JniAe3>fbKN8tbTL%frJN+mhSKz^}}?-p$u6 zf6z>VV_;+E^a_bfAE<~*8OB7?t!8RCpcjeCc{d9kp=r}2rZg|k#l3Tsvy=+^%LsbT z_quL5wqP6h!ovAr-R&A-J~aJQv*6Jy4C+2!UY-NS0DLnc&r4xS>X!YDhe8ggO^e4z zo|5V-IP;vE4rrg}yBx{MBGoUN`=bR<>j?)reG_$wqi&ZQs?>*ohf6Y#nu6PMm%_Tz zd{PUG6ek1k?IB6$9roxqKe!A1aPCvNQ6o9di{Mb0AMc3{Ou)1wn@nn4@O5l<^;BiN zEVZ-bPs2Xm53!qj#m~f{4||YO@w9fve^gIlc%?rHGjNsC!vf=_Zi7o9lT*30@>BT* zw8-U^qR||Uw77F9GK-Bqx*2l{B_ZStw^Ai(mL38F?V5@?cq0N@y(HTQd*Hl>Lv5pD ziQya*gt4)`{i+d%EL%uxEASn*56Q4m@=Oxnd2O_S=W$)3UxEKbuG8w5#*qD8<9T0H zGDe&9lIOk_Q{tA@#x~}=q5@7?^`ch-PBE?eO}Xkar@bqS_S)`w6{od0hHV^KgytVx zTW6~cQtsx9a=gN`3)Kf%GN#FtkNpOlKi-3FObeOLXjXl|uEIV#@-4x!BVb{Wd$^Aq z%)|bzo}cQCNU?kGSl_Nx26{8DWiaGO1u}GMIbG!?Fi>nuIZ*;2FXNCnej|oZVzvN7 zoeStobF`+H?gCJEo?V-HIWk=bKIrW166*5yc86X1k>yd+UJRM?qaC4r8!J!WCIkA| z+SxSCur|iol&8koAP%x|+^<}j)H`9C@ulu+ z9#3T>3JxsSF51cxFp1fUJIfA6YUOpyi`xz_(2nLifbPhD-Cw<5prI;zY@6rY)xi5O z`|CPSgqiMfU6EovLoK}UjjAhbaFfS=H1&ZC@pI=Ztg{Vy0@2D>A0-Zj!eFztJ2&6+ z^!zqnMwhvhcQefpmMvOFPO&*#*f*O@mP%1OVNLsb{oXrSI}loi%T>3Hcj#HsLyBl_lCt;VrD2#W6|Ny@#xN-h5QoRB*88No8CB%QIVQU%ch|Q zZBkFif68rf_0hqILM?5X)p%Bku>~)XLyqKTf=koY#acc|u$R$72Df4v-)psrSp$G? zM>YUkW^?GBP$z1RadwzXWwh&&rMOe{y*$1umVn?eFp$gRF15|_C1?dL?FxpW)K{0Q zvt?#!_)ehF+~>{ht=3YclYe|Xo27=#wM>wV+wfPgjEKk`oP!?*Rl7a0lbG`clqnehsSDGM zEvT8Bc~M$AdgHGttjj#Cf)N7%zp2Xdc&g&;b&ndfs%!J8hxL1~H&nFBN7b68;*MVi z8a~DI76F8;(_~f#nI&}7e779%ii(eA3CJfdbZ5)n@mW8`g=sD*A;iUWZJwmK@1oJ<~4dcJKFT4XzDP zi<)lLU`cC@L$%h?fQQH9ny=gkKWx+WOQF!%v|wShwLlG{k7lie{uZWlWAQtz(08mj zT0O0jAqJIA@{|61ETZGKCYU`*JFVTV8n_wv@}Ts{40&FLD$C7nrO72qy1b2{KDXFGvkc_$ zBPStio~>ozWnR#WnnbTIcGCm39~q{mN@xE#`E61eO!??R`lK?e@^@oon z^6!umARpxUajdMjgkKYuCDp7dV@7li^ZmEO+LudnAUWZ!e=006z$FAQZ z7T3ojtY?;&fmfGH$};kWsxDQ)s(lN*yLpWJ{a8K2mbk%N#z(4&K__452d5Ru)zt}i z0ng+g0l%*}RX{05`)Bf`8=^}w8yy(h-6XD85VOG-e%fTgoC6TJ*wn33rv2)+%w}^jmcFcF7 zax+n6?~4Rxoj}G7MzThO_LoLS-(DC#T^b`Sd;n&FBGAcm2^pduFoDkr%y!ji6Zd%K zXFQ0{wExC7CPL`iKry5MUw_n;enu}CSDlL{jE=%|DnbwS!P_1R{|9+!`=I}ofqePA z9@5!}(d*avme*-L-4C^mIbWsv0f*&8P!tn(G4BjgN|XR~hF;1sw~&^kZzO%)omXw; z-&+i@kJLi|WTX;*dfrINz1a$=3F#-_!*!JFAO{BWuCPm{aFq8-+qwND)ew&I#%Df046%J zzGvu>Kszy1D;T(B&kq546qK()2kULrne7v-Jc%~l4i4kEZJ0@6%nR*j+BFWj*&k~8 zpqm_J#KDRdXa+P8+{>RQI8}#!ZwrKONV;2!mmE*dH?VvkPjj`-I5I-0z8)?eYlXwr zX<9hBPo#d0m&VWq2gsdjwW-*(-Nwy>h8`#1llwd18p?pkAf*;HppVWbVC8If?uhEW z?zffg)ZgHb_ev6;ko?i-iUG+LEc5Z0YmBfZFSi=jtX3-0$ctj|wJ-r9NYkzX{q75r zJ}8gV6;AYq=8qZL%SoU+_o<mzekRwnJK;EPvy%SA$qnnzv$hF-Q{!DS!QpuZ&MUou z)miT*;U{AT`k_(9*;Mw+zq;kl@UKJuCC9M_{vvs57jcFZhyn*}Oe-I5`_bA&a%@36 z1^rUW*ECPQYgmn7u~fS?TCPtwo|F?}7Ue4-ish z5~H=nTW$uyFd74M9l{*N)&R@-xEMlNmUPj;aHZN~A^RU=v+Ob^%u{)iI5iGyNLI5Y zk$t*#Vu-idQgS3*>}`W$l)a!wMf&PyLxfV}LKf5HoI%5tcYQe2L-aMkI+6yo$#iwJsq!`z=0l=Az zD>R%u^)Oqx;B?kb&z`X(Q}&di%ctOJcF{8(u8G9gZAQjKoYyUi^W240oSV%jj`_zr zufanVZl?WZn1Y_V`*g4xhaHwUie4w$TSq8 z2Gp0sapiY0PRri^_0|P1)SzsXR32Vl|I63zVhIT$00ih`^X(2rKJ{^qu_MJ-YO3QN zU=JL@b^pE>z5^NT2qr3fp=~gH;cW9gexaC*a+;p6(;>rIu;`5JJizGf&_8n0#NHzn zPxu%SQ($i>f5Lw<+PZ;swm-48ju({|LN2`Mo{0|_-XH@uGt#EYvvfpvaLiet`_J98z6_sJSgVlo)oIR%* z4<~u+(%U@7-I7Z-CR-IIOSq-E&dPA`LG=;0u-_+3^b?e-(*Qm#3yjQi*JdRAC^y?F zGntTquop8OVdRqJ81o&oC_wmcTj3z9P$cPofwke*Trb(;S%d?vjqkv(VAt7gMnq;J zI5a(n?I!FK?Y8D9+`^fAJ|1u}UI)nH3MDq9=5s=>AW*`QxVT4 zLkJO$6&)Bo(5*zH?ONP<u$I0sU38afuVHg(beh({G^BD)*Jw@mQ^@!RFy(fUXU zG+lhkCB{rHeRMtMb6Mu%OD+n2*C|08WWIDW1&t;?{-Q_O2C$l4OP(d?Rp2eH*YG z-pV6RnI_oiuBwWkcTBsAgv@!I&H2`FsupM|dIxR(Evi0!fa04u{aN9H;LTTuKaO5d zj~DYklfZ6e%)1=>jsAK1`#aC%Fr94{5 zi?>%P7lmfTnjFwNl8o@90m^RTg-uxd#fm@aTGjU-*_%ladqnEdz z?epcKty7pdrO+v?M<4Np3(^94elG;o@Y~;aA^4epN$UU0U#J-HfCWc!&9YnT&(Tvq zzT?~)7WU?F`3R$w*{J*bZA!aY#jn|4J<)x6xf|mJWgA~kc09T`ocPb13_nH|{BwHz z-_OFoK2p&KkW&=rnYzjTd`5~`)6YqN4^Pjk@_u7zT^o(XQ!mwAG7lKUfE6D;QS9|( z5@IQo_d?&264CIIkL90g(tmVi|HB92PTmjNSnP7@cvtu5ggmFYV*y_sB=71!sUM}F z$`{eY3Ppicl#oMeh#qzXy!baj=HD0XUx)kG@5d#$AEZD^(3kq_)t}|y0SZ~d4<42R z$FFJ|%N9Z9M5GHU5orFX77aA+ zbE5)js}k(@-;c@vZm8!a6Eu+S-=3_rb$UEQ96vhN^> z0cjyruaXh%A2D+Oe6Ih;mA68o8G#!==J<2<6chg-VCFyCWcLmKAo|Q7R2Exvj6M?0 zvo}^YLn>V8Uu%p zEZ+JKmy!J+q$gY?CtTc=F>EQNzj$Ax=wi;c$?^@9w3qDj=R}5)kKQA-%S2_6ju#F2 z?X|A4$(r#1&tu%11YQXNcPuLTekGcb0J74u|MAWK>vt}e686&!HckKY(C%*G20@s4 zJ+TcuG@%Ym8eM9+O2eBez)!^&q-wAO#bfV?4&P(osyPE>6Vl4 zm2yYS)+Ut?%L7-cG}^Jp7&_iNX1rfwP@eTbjg&D`U#H-6`!ZIb{mRSBOOs=LsDO2* z-afvr-YGW38z}NramaORAkl_<|b_0 zp}lIDB2UG{LpYd}Tf{z1raDl)z=c=Z-~eh+NQqIuxDcml=J{-`N$t8|Kq=c3*%&GG zobx?Bk1l7sPexqx%ANK#q38*1{X`G2o?w;!v zPQlZ}k|XrYxoyVnP?ic{I?hkV;%ah0?e}$%8aVE^`o7bQ3>u97QCP2`l0 z$S2@uD@pDQ)P(kR_A62Nem&m{#L#1YZpL08De!pJq5NK4G&H^p{napV~|*SOU8fh#0_f2Cg@jJPvEe;D77rGAO#_||Ku=0{{BM$~rhSix-G zYWM@p(ladHvJRFQ9jpzuqUFk{cN}l?1x;f>p2}rot*bAzead69=d#jD!`7}f<~h1F zqFOTS89qBOX2{btS&13Rv?6rd|NR1s^yLSDv0A*>DpFz7DD<;boxY};N;tbW<^@J5 z`2nGJwTEJPwf+^uxqTM`&}kL(M3@=+FHG)nSPX{oI3RT^K%-#}1+~4?c9G zTHNTu zmlwLyROV$`SIJ4?4!B>OAQJA z)H0?t3Ln_AbKmsl4_6Ew)wG~ytZjm%MbL$E29;@A6ixcu00(b*Wix!+1Vh`?S4OXj z^GzauM)#Y9r{wLQm!vJ!m^p&Vp1GXuqh4_q(=ls3hkA2E+XbKB{^P|lmUfk`nnoFk zD##pxm-n!{C{Suv{ML0+{PD$n^!n@h(Tz;CRX~rCCjh{7u8V7aw}Ds1x!vrS;+ySV z?=4D#MCV7eUm<6<-kWo{3ExU;jXae=%GVH$E~z*0Zyk-k)BW>4evI@FdysPHNVZ1A zz02cTZA81-aApQD3c-5Z-=hTs-*q*#WShAEKJK-<{H4`@P6@{+F`WTX+WNM@}^ ztyp%p55qhG$7ygL44Kq+3`?FcE5XaG&D}SSvC2npke%Bz*U&N2GS}##i@Ymc1=H+P z2L2OOwazxmMel&&Ze!Ms+lbmcEu5PpNg<*`N7O2rGlV7Bv$0BF4Rj=5|2XAaKiSY_ z*k+ohMpWBJEKU|;4e?YAl)d{?PKDgRoQ6HLnymQ9qFXP40b!nRrzQ^RF6R=uocOTJ z4B#0?7Lya~4iooz9exuf2zdKQgpkR>xcjwkZR7>e#;@nsMM(@}m66n<61Rr4TK|4= znP}E5jA)kOO`e-ub0el4_2#Qa-HYLCXI@JF5a>96j*>S0oaIe7;^`)u90{jr)sbQ7=vU46?lerqCSG zAey`mU@8h@?JK{7&^pIZsfp<7Q5k^d=+)Cqfj0C-H zzN^YkUzDQS*`t2ymPf3&w#Tzqucfn>U;#$CT}aFeB-rN#TyhC7qtvb{V*p7) zhO%0>-aq$gX2++8{ifV56Qt7)2OS)arX{R}Up`KS6)Y;HONnPld-oSsN8HOj2jb5f zyDJ7LKAo~ragG0!VXuIFGO`14V!KQpce!^sv4{(^_RDZ!+UPC}*F7CS&(CA3{p%sY zU!BNdE4La?G?tB*b_9_(g#Af_`vi>WG+Ab!+h=is2Q;;W`p26DPVG;50FnTLX`xE9 z9%rT?u_rSS=CUD;p)M?HIWgaQNl39a1#lU9MR#9ELKi-Hcr-S6(#y}*v77Gdi9#EX zcjO&6Mzi!=0~E&l60$|wAE;DlxxQaQU}moUjG!B-nh$4iAJ}PBEJ_r>QUzGid?w$i zN(-4l9P(SsYso9+1TaT4UN-BgLgdk+n~y1Em+_nyeJ_S2l@E;N z=&kFj*xk1qHy38To8Kz*^(T2_flOTtwxqDbH!Faa)%BI#bN!L|Xe#Q#XHokq&s|C1 zXMDFd$WnJ44(pL179D>1o4zFZAdX-V>8alRm6niW;fxxKnD<8*C7(2K^o+XO-(14I z?~n_)`H^s*e(n1qC|bJwOK~q$kt;jo=wPR5g-K`nl)u5>{8bak6#lug1!d3}y5XXQ zU<15NKvD4ffHSaTjY|~t%*K+#LjVZ>A)FF63ZEX4-=bvkAOZ!F0`&!tO z`I=_v9z)OvVoD*eIrW@3zX`hym5~atdf>?pYjbm5+kv9)-#ciVM2CUrEW0XK6P@DP zr2G4*UcyI@plB)A14yzmU3jkNCD`2r>I-G_aan7r;w%E+nMgECA{$v)AOgg?WaW|d z6O7eU%i$($j97I+q^)m@M2X&ZBd+$?mnMr1EX4ao+V!$eq@ywp*VqO}^X{IZ3Vc>- zmmW1+K16po*|svuS?(EY8rN6_vvp7>pD$qZ$3-#zX)Flu-WRsq8Y|#)+=Ba$ukvL_!&!CokJOWCY&`;yrsU#Y`s*~hif{2O^KZvS z4Q)=AuFd&e<#H2rMisnmOoRvKov49eTKNKKiHVOK!w#_JcQcG>K|xIp@+;|q(tCdA zdqiE+T51Zs7s_?tI{NEvBJ*gjstFFonX6*2<2me=Xiaml2URW&fa}E!rN8c7Fy{-S zZBSfVyUDp}4ZplP{#@g@W)L&34Ef|)?akaCveqJEhtqOJX3zK&WAK67qtqudkUaIq znc9=&049bVlMU_kQj<+R%XwH=EZvMmeib+iboCm3?~$mU{^pgTH~J1YTw(FHqy00VWWP6s-X` zCOCLS_bKE*yF*kRnXgK%rXWi+q)Xt*OSPOV1*y4mrgI;zUl~|#pYuQXI^iy)YOn{q z{zhev8xV-O%%G6{ih?4=xX;xEcbzXI0n_R$kU5x+&op8^Q!+WE@Z?WL^WV2DM7QKKWJSJC{^}4yX3JO@#DZXC~ zn=_3A50n@VYIHmL7R7WOP5FS!kT5o3b$9+sIws(Vabd}NvW`V+OC$Gku33QB zb)QJ+5sL^+d$BlUklOc&)#vXy>R*_%z}|rG(jT=9<~8H}{fUK>`Q*7tg&w@H4G!Rd zF!$BCOWUiv&>v?Q6oh>~+IHpx*{DKIh~68ownoA& zpT_u+UHxTmlAwR-)m2H~pQ&lJdMPx(S!RT{pgz-`#Eq)i;5tn*lC}Wq^>Im$zWiz1 z=-+Xidd?I|+r1wy7!y%d6l|}@#II}gL>1vCl9)cVkrdTy`3WZTx^zsWz&y@RZR!}P zDT8rq+CBv%WS0GN}FK_5*lLn?vi+%nT16Uc7odJoPX+-gNm z{Hzk0^b8f@Zge3Uc}j#7FU&gM&ke*;WAeJ6P8FVvrV5I-Uy9;XS}ryeu<1?h8#OCS z9@fNxWO||dEiRW_rg;5VU;O`f92k<9az`T5x z8?-J54RPV8Xb3BQSlwSi)PF&CJhLSMewgiIVPFWZvJbf@DB$qVHrxhF&qCzd;g2^? zvSiG=ujEw6{VLi`t+J4Uw1d(0ki}`Xw+<|Z%0ocO@;cRiJ+K{%%3dQ^slKrE$8Fm! zWWF@HK=YH_a!Wh1e>3uN8v=Q@Q_y)7tpi_AJUtaCe*z5$%^UhTch`74n$w%uxAPQ)89X5J6&+GBt2a)d&C_WaP1m+z3bsNc)VNBizp2K z#GgtVkGLF=dJd7MQlvk+O0jIwwC6~W!1#7ZI6v=Vv@wu$HQ!(A(8#%&7@5-PVF^2a zdLF9*wbpC+w&3Pm00A;eC@ zwCH^E4dm=(lGz8Y!|1{nkwc)*ti7(rRxzNSlOc~@DVmhAJ4GaL+*Ol*Ne0vm8THajOZAanqGVJFv+;v;tX`WBq z94V(2sbsMiF>Qa{-Px&LLJG>(DX}iuV9TJQP4XOndQkNE3RBP|%ir4O#6OFb%)W`F z!+F~Qe~rVUz{&RhcIN(TQNw1k%bjpY&+rG_^!Ba|DT0F3!{~?K{a+p=VVFN;6FM2+ zWQjh070wHbwmrb?INEajKDx)BSRNCjYW>$;Qvm*aXIMT0r(|C}J~1s(@>Lm6`5Sos zw!W#)!FUzXv@zKnzrQJ7p@7EdCicLSN(v`kOET($CZsuR}4o3?#?K9-NZYEa^y;f(?g z?G{N4Z>vC2Q@=algltIUel6(H?ByFQ3+ZpZatvtinnpZI73%(Iqs80$iM2DetUrNU zu+?=yskt&(rSBgcD;j>o-f_7y4w!}U@#w)v>iAZtzOw-U~yT=E8 zr!(N3f=zA!^D8C3d<<&k*<-n?@?NoY(v}Y0m7=fL@|=li!x-?%H28hqEBl@ItFt;} zd*K?_Wn#a@z}b-9H#G`7_J0#xJPJQjX=jD_fQcpzpvxw#&z#Z2mf`;0NN>JC~- z|G8{j+YOrujJO-xql^5~s&~e}_V{*Hg+`hlq5eXvJceyTcBr}`X5QicNym=k8aese z&oKT84{xQ6--(6)Syc)4MV=qZ}@;R)#t!%+r`G`h@th_kk zxix418_Hm0y*`GZ@xyPOY^VhkBblEU9M5jVrI$WzRgY~im0(%#n`1<P?8@{DCaMSBqg%aFW)K(61WgZu0Q+g@1=7u>n0N;RTobC&-=Zt#m~1`6dt=?@4{1 zV@n(*2#iMjj07K_vhc?=%ncEob(R@qb5H;y*bXo8G;i5 z1k^}=$~$UekK^yXt-}pYWjM?$5fLIo1wWhs+Rv{=G<;kBLV(fxzLTpc5RB5HPP*Sd z>)Nk}W`MDLk=HW4XYWr@fCtJ=Nd)t5v%mh*kM}599!D9prGmz+Q`5mT4GYt}g;sMZ}CE=&VeyWeatbOrQQ z>mNtBjBbP+4;?PYZ;+G_;=s6HolVmGwl5=~<`Dn4Q{@ZnF}~+Z#xVg$UwFh;RD|wn zfP+f8C9oI3wOAN_Z)|LgqEj8=0jzu77CA$uMd~wodF9#39C@k?%Iz&hx^d$4kGmw% z68!!5iZwO{o>?#8u+&W9HS;7xz|!L(fOocc){WN;YN=u$;n*l@S__1g}g$)Co-vIXc~Y`FG4KIj@{#Sz(Z$k?@&V+obMFjOG6@xy?rLAzqwzJ;YK0C zclY~AtUow>l!*vATLOHH8|`mJBJa;`FBa^k7ZjHf2YIt<+%I~+Wk^!&{$|4V<&TKf zc9shz;`|h!wRxSdSti2gc+Y#K;HwRP5aV{;-C6q1wq}3cL-yC_Ju-44A_k+uWVUe+ z=^H^{Xo`5{-lu|qz)NP?cv5)Og^Ys2ewN~T?wfz-Qt`ZCwEvElvGFxz_5n8WQ=6x9 za=S=!Si42#W4*0EJLkp^y;M}+UpQs1Ou1jUea1@oP6qG1$?X@(w$EN2P>`N*sae5z z>B=(FIYQA)Qx5GNAvk&c!)XDG50Xm7vsMsxB4d!i{OiNBPLw2N<3>3YQx}*H|Y-dq%Tf0yeC#+2feubvJ!%~x0?D`hHkcC>&WBiXt$Ne`hTYKJnf87Vi zL@+)44nZ#xvCp) zz~lOKYb|$FQwvB(aoTN1^-Xsx4&sHfb={wvJX?3;61_dVl&Srhg7g}PAkIujb+!l+)3GJ_JX7*L{ z@2nUV1sb8P1HUgkpiq9H<&#OcumQi%1_4@;N`hRtLM_d_pFWrGh>5v76L0P8&}K;| zk5~YK!s=(QGcK^?xEj~?pUlnk!d?&tDEYAJ74Bz@aBb8L6$W^Sb9ykG>~EFEBP;}o z4dVXHIe97NaoPyid&FrfK-JeTr8a<|cN?gC71MOi%3$$283;{1z4v zz{)SCGl16IX=Yr$W}`K~UE{=qum<b2Lq?=vr09KpQa8>vWOHJ_4Y0A_+@aTbdWnlW@*`cO@*AlGLo&%ZGn^cV-0x1AcD zYz#z`i?*0+0&iRy=hNLBGDwso)G^`cmJJdwxLph+qs0Im%61l)*?-c~vdrSej#qPE zmh?8(k`*#O-KTRhv!p>WWypRGg2jwWhd_D~lV0W%Zjx?YDHSYRD$Nb4Nl&E%m!#soD7(*1jPRiRu z@R^E%vpUYAiWOMfPJacU56GJTS$Mk2GKJN0;X^z-1URzL4O`o>f4aW8I)S4-0a}Et zT0^)D8dyHcv&FjJkT@MU6nOGytrF48@j(bD(>1nPTUEevgBb|rfOdSXs;~Q{RW@fB z1)APC3XeNeR&}-GG!QH$YGm%_N2`nkWld?sJE1w%eyN1&G@9W&oQ1Mt0{$vLd_uMu(h|{+D*!z3ezop)#IhZLq%RZ>F{D2{##W*!h!C%8gk!7VA()1 znmHK$_zE%Zpk46UGx6Wc;d89Wq5n}ryo7hX9gn?MpJ($g&7Z-0V-;>L$E&+H!?uCt znX7%e!{0=SgiE6!_7heZNXWZKrjm}yc~+Q4=Q10f8k5Jhn4LF3iNaUyLQS^gH8Ten z>Y*?Ec@v*F3zZr6e@41p-%RNwSjJ0ksdv7Z$S(HiDmk>mB!u@e2V;<9Fjfs)KYxVU z{^05Y7Iezzc?~P;>lx0H+T{BJjt!W|3*|BEltpT0edk4A8}Dah(=E9>5i1HapQNHG z!~OQD$eNFFVE7OkCw=P? zSaK7JvzsAQ=D@IL>`6`D)uZW3NCNto+Z$KKrQKZ4dXz2`T++6sN==~aNWQN|Rxr-5 zap!S&Wn?y)f7#@(11xO%!ldIcJKg~0s#WV+=QI2Ss=@?yzJxc3O7IancuM&?8t^-C ztr8fgqw>lrB*a)9u**1|o`fyXs%?z2RFEgtYiTz%h-Z zAh7f>&i4hP=7d%;n?a_Qe|Bn^ZEkzJmRyk)%3o7X&uE z%x*2f-*&c`Q|n*jI}AqG8_yV+f^;D0*1^I?NB1G-=`(J}U;)(MLnV=8dCD@qjJ*JL zQV5t|J9Zt?T?(jlo9#zies)eQ3rQ~!H+Vw$)P$BXw^c=iUQKvGI0$#913qjKqypK} zAA8^{7VzzgOkDA63Z^&g#5?_I+m=gPv!0=+W%|pb98!wxtZL*Kv6!wWyoR5&h18C9zh% z)}Ed`5a;z0gg_tI$&ZEHR=*4Hd+yCa>mwxDg@j~oz$dgTs7<;%!D=U8g_K-?#*rnH zV$s%~bnW?MQ0^tS(=iq{sY4#O8+l|cLK-07vYidV-mWe}>~vk)w*#Ld%FqBiKP#Q|)@>S$m zh@cvphgyK^;Z;D*6BzcA)AXFQX&|Ms3CE@oqVD<*CtTYjNe7YQnZ2iHK}ctb+peR! zKLh)rZoOf@sX^3bsxLMZ7~Ei4_@xtiII06){m#`EB-r&TFX%l#dM46w@+k_Ui!WMQDSq6pw zy*~USJk>y3dKsg~1Itu)UOxd~Pxq#AOJxMSD#61n~GStUm^E0kn>4QX5|(CqU7 zpx)#}iUs$(jJxj-NwMc^8)?5{8zV)zhVzkrk=Xr%s;RdUSX$aB5soPpYEXB{CEy?; z^X?AOHF6D+5^kpXB1&c!mGjqA9d;Q79(Rn^IaELhKpaAJJeM*aUBrY`< z9E}YhnV={D0dVLKgQ$y%mpFQDGBMnqrd36`p+9Hq<>WT;qo|;G@oaL#O+U&ocO(k#2|E0qI4;6S3cnD;tK{Fcev zl#?G&RDa|4v!-QY8@|oJi}uQFr2&*F;Lj`a71-YAlw&Ba-5Jk^4vn6X<$JSYjV_YktSZ zc_E&;hg@SyU)F-q**1rS9++74#wB&aJ#nIBg4U*qtcXs@LFH+Y63-hyqhzNUS20yP z$BF|~fx?r-0yjsvTIOOagUcV4eSr>^zFx^JMxk2J+iSjTv*W!M7rf;9!n%k8zDtS6 z)9;(OwG-Pm<-@=hbr!%pR^gyaWd{+T{QbfVEcJ%6%*2id=ky^*C{Kmfm0Me9RXBq8 z?u}}c>T2iW+ZMuATXJ@G7op`od~PV|zm;cyeCWyT*(8UpN&k$k@8US4x1$yd#SR3D z&TIoBqWu-^zD3HhmWaN)Dv$Kw<^!k&zUpAZ9M^)gFwxX|Z!gyN6}7Vuyyn=w+ln3u z{))xQv$%oueCun)0ya9|lQl&5Tkc{5!5mXA+b?I~=!czWe^w`9>dX_&1`=!|+jLybhX zU9!1SVA=Vm*RvdK!^sAo8b|;Vnl5R>j5^rEia&TEm>dp!Ga38$1#7>Dw;yu=%PiC> zjw(p23(kYY-x&$-r^@A#u(`sR=CTT_WdV_<$~O6Yk*`5PlFFYBtTgw$UK|50B3r9| z(JmAChHROEH%|k8Uxv3h>FRtz1j#0Gmv(J3!6Mi_g&+h zsfgbeFDCBXK@V6E>Zr%?d0c;mz!r8A;u2$<(d$mYS8ObP#&A&-1F3`puI^@-eZxhRXB*3e8`YcrRq%sa5mj~Rb)GUQ7}@~ zlC>L{XzxQlm5@_es6mcaC@9mdWQRyRMHzTJ&_`a-%7#DU=DATR)zsw+VSVZbtXlMM zug^Nph)Dy{H>UAv+vWg18pqSRIUxM@)mY_0wR~2n$Y;N|!EevduRQ}w-lYR&+jQrv z{fO~vQtfQn_tYxIKbG}8c&fyg?9pC-{E_XB*Zj$kpoLCJYwJG7D&dPwLB%;Dwt2P- zfn}#G%V%l$>`8`B0=eeU~UK1~pDL_Cafoh}ew8ra|Abm6Z)27D8j5 zKK@)GJw#Jn(Jkq6xFkhY-LmcGa^rZ+c}SP%R_){ zTQ+6Mtit9+;=EAFDLTM6MXeD3e& z8o0vVzm{hWbpCDWV`vQWnd!joY{Qp$@Vp|QHwld zU4$b6gem#G_fymRJv)kiRa?S566?MK$NK`J~c z0ra8xZ!kYtEK*2%MV^AGoi2;VR}@-v$L(AJB^($d_|_Bf)m*RPD~KBCOI;kl+weIK zcXS9zx@rVFH{qaJE_!W9PO)j8`92exUE_f)b0S(#XexhQ_KdbU+II7x*!J2Ymw(zN z{l{MZ&nKnPk3MEJ*W}i6ed~|sY)w}Yg4cf=`H&=cz#u;n(3-@df1=;J(NCjsElFS} z<{h)rbEy6)rQtUH$A&`^pIbZ^1iO^23|9K4VX8(_IWi2V#$X3TQ-j{<$o1aX@0C_J zz)|s6=Ga{3Oovn_M;yz|9u_>N5DJr9vHM0&6yWGfKX6lTlMMUh z5**u4wgR7G#<65IzyPs+l8ZUput00kkVmzq<212?!UQj7iqtC9hznd}+cm!oKR-EPu`9f`wivwS4tlgu1wWWD2W6x+t^*FrHoSK} z&WVM?lZOOaWzs|y90J6G*;22M^3hp4gKy>d5{XUxPF;;s@?WUMTp$c%=dI4McIMYU zF9C`Q9ZwKNbgnmZQ90b!BF$*lv?dw3RH&co#)|xT((IJX;jipjir*l+#(4L#XG6*b$@EQFbf*%R5{#EE9oEJ)R-RC8uD$; z)dY==L`4kIqTPNru_|_cEE=~O&t_Q|YLFCp>gmPEcR#nmq+Vglwlz~w`xWDPzg|^l z2W-k(qLzkzod5G>DKmtMW?Ku9vHouPHemR25G1$PyMQKqqC^ME^|+TUc&$tHX2g%D zu@)Rl1&F}8+!OHY+-`1w7k1ZoW*2MP29-3Fl^)h2R@N+}pWd{>f-*PiDs51_q1u*g zQlYLc7q#lxhC0({7kM%fR=KG6y0z1$Ue>IC*113HUI$P2Tm(k!#j?_g;^=?wt%p~Z zq{-izlkkr)OS1!~^Qz0ncMi$;T! zJEY=ouuNMfufh`$G%g?z0(Y;ljf{F5X`U8^x{%t!G)NTPoRg3M<12TQCYt;@Lj;;G zN_gSvI(tn{;(xEi|G?hGLLR+jXV7kl`oy9v$12Z565Z4G84^lHk3ya4q*G-!wc7V4 zaaBoJEttG)Ga1jeHpwlK-{IOmnNKuvmR>a2%bUcL02VFGeRry48oxB=P@E(W;gut_ z_biQ#t;RDjc3ahjhDN%su5K+SE4gP|zRUv`mLwFk5r1Xtq9Z)C0{`^!PK&fyS&-J> z*LNd&%ZkV;>XGjZkFzc(J!sJ;3NNYUsL_m>zD2|~rLUDgK~*^!+@B1@rtL=MzoRMJ zpo@YFis{|dzL5c{B{B1@UEfZ4FIsw;Z|;XJ#|?z$6GrhD#6^22;yQ9Z-{{{BWa)g7nAe$9pZ)$i3o zgW(nI;{_Bgwwuw>mD@eNJ9?blx1>ohh!m zdt7yt97e48JZlVBZYx-$i`iNC6gu!`qnSx{cOA2S-F0x1eU81+v?->9_^&u*#-d-# zjdUzkEmBDa;n4T9#qrqrT|%LV1LMVVdaR%~br8dUmuTv!V?J^AZvN0;G@i-Zx@?19 zc5S2q>Ylh|G;=!5d_3GKm9Tbwc5)Kwuy8Aj!=PnRs11q;h@0A~$ozc+A^F)h#~Zuq zjk0l<*#-C8J((PEdQ#iixd&aXEJYuC6y1qh_3IK55goS#6?N^_1i`LWEMR8mY19M; z<3S_oRIjUop+~qm>CnI9V1Mkde?0M=d;diMvR^Izk^;29QK+o;HH31>KfG2GD8!{p zHsxmTa(#?8Vl;5s>%+Z2ofq~_C@3r}7O=hJBcrM1Cj#;#scuPcq4u~w!k%xQnaz~f zuqqE94o9GNH{I0(hXMSNdQnFC&AnCfCr_VtU#4_)uZD$%_bBFyf!aHB;11!Fr7AW{ zokgZ%@ZxNAjBx7vj zb5a36VqO}wB>L8K5UkV7p0~v4HkeK1m)b*$sQYUK{iQ*oWaR`cm^2uR3?o>+jEMO9 ziL$M=X#%o#xQymxJmqEs96+5mrZ=S;smC)|WyaiYws0|=FN<{#0V^T$g8xRLP)Iw% zpQvuIkI7h;f4WAmR>vHTRU6tEyB6W^FAhvK)(UI)*)}^hpyvc6AZ`Tn+!x7h%uG@4 zmdgR}maVazpt{33mSdr>!3__3QHv3sKLakUPxz_g(g%f2%1o!XI8( zY^<)S6b{6(duz7bB5a;kns=h!=Z``}0;E{Ji4x!XbKd314N63i2^(ArUUVl|-po3_ zm@F(n@vA4@`THD^$oClEWF&Bsi>u902K^+JT9Zn>8_B0 zgzf%tS=G&9>kE(qSH0wQ7UF}Rl6%6NPJ@s8G{A%eg~#1d!dQ8NtqpLy#neg_R%m;9 zd&}Y1yht0{%j@uL>)h#UXyCWszm2gWKjFN%JD9GamK3kn!e4UZFz|;GkP~uIIO72` z6~znDUe6~`3OYIkxKrX_9n+B6tFx*_ccxn*QPGSk#(|yXEt9qxdUf_*J#znqlBqC) zNxS{IX_{lpSO7mK%B$vUHKQ?OB*R?r}yxQ31n&DDRq*FO;)0eWC<^_Lqj2@ia!Rn;m#U=4jFD19cd z+R>gh5qzflPG@?A!b|i)R+Jj~J9NThG1^GvRvskLl&Pttl`LAd_EID<&1j!4r#kVLsj?qm8o&RV;JjMOhdl4XYUYva`7wpE2%w^eoLDI8K$OB?;_ zJ;1tiZKWMiX|i%MY9p8{pgYFbk0=I|THlY-kWR|!1UT0je;jNP#As+roX}~c2lx;o zuzmVDjw&RsJdtCI+f1%j57E^zs1R0JCKnBzLP1oH;H0Pp&U*!18SYshuH=*5uQ`#~ z>W3Wp1iSoo)P*@Y!=P4T0Z#k{*De_a2W#xRg9m+cxwLBKan7SS5sij@Wp>`2g89B~ zchjB6bBK(Hb?(Y^+BABdu12ut>UtJ`o;v&`pIB1?VcK>#W4Y-eOk=`0>H@%AgUi0| zy8~;@(Z%+(CJN#6h#drk?UHJa8bi84p~qghz7pa7`9UGyFa#C#NGn{}_Mr zHIgdb@he8<>P--C?8zqiD|Yq?rI>|~sEx06h3!GHpMQ_69LQ#K1B0K49GXP3xuUWp z9ysI94y zggLVh`TCV9xgMAj4`fyBakErypcZ}dDHjp5a2?nJ#mi6w2mn|~b+hQ4z<59xEcxFnjG2HH+6opLEJy$BaRtJ3(GIe%K<})De7m*qtX&3Umx_cV< zu>{Ad{}iF;U8pcJlCagvo3%APKRQ#UnyJtkKb_whjQ7#8=@9M_P=I7@%_Zv3d z<&$HwqOJ)u7AE2Oky43TI13w7wBK73IZz-k&lS3fP6P2k=Nl0dlr@%-EK843BBI*l zWUX$L_GC`{TOFvg(TCa ztmUkw<-E=oX@o`UAF+z%^iCI`UlEq~7a2f%L94J$g9)Y{f3sZ~fEgBS8=LtpM z2%jFuv73*n+{LqxJ5K#Fjax~)zYzq*`>Ro-foQOl^GIrBwA{`pl;_iH=qj8V4(CRX zCuR@K;9+8Pdy3^m%WdtWR}@H93`UL9lixd%JPr!7ue1VdViRx?23 zli6iofaTz8qfGcUGJd8>F!fn2kVbRboJZAP>*|!!T21M^f1M?r#Cof?>VD^|983Z| z5B+T7##Z~?3>qNq}wMSSKE|7WqJn+`xF3J)Cz`f^x;ca)Fd{@wB7>%tL;xv7tB%rZcQt z!eAXMF_`Mm>zg88Z@v0@C7p7xtEYIvhKPVgtp;)^(ORTcL>Y0%S7ZltJb3hioGtev ziQJpA7UM<}v~?!SU%wXDRDC-9mH5^qzV3Enr&O==9IIBsV&E;jRzA`7qoTfYaNO)* zX0$lF*69%$Id*H+<6EwxT7JAq(yR_=y)Uc^3)84|mO4Sm;#aVhxV?tr${a5gSL;X@ z+Q4`-UVqqOgR|96ighE>-+38_+jr&s;H?o=RRQ>GBkwY7Sqi2i5 zJj${Vb!~UHP<$0pEOEdjS`{dL~MO{C}XH{UzSt zYTopOM?5kBc%-!59FV>!`3D>8pO?rV&q<*0vf2H76FiuId%HfTXN8%P!4;?DWNZL8WN@V~tWyxEfu03qzXL#2BE>szd( zz6cbUG0^=NsQO=4$^Vz{uoPjyTlPQy3SIKB#|AUzzvU84UQhoQIOAV2j`R?KW|Uih zqWxd5R2S=GB)7!>{aZ8<3NPW1k#0()RvPxle`C~M$p;?f44@-Y{j-pRO7j1%SN^$! z8(xdBCXs5t)C7Yv#((`=&);qTzhqqh@~L-*7}ao_s{lLQjvc<7Lv%VMT6o66Titm!5E;~R*1&dbc!`v%+fQfeTnT5T2a zKuXiK2PQ2sz~13&tg^dmgKLf8e8D~#vlIy>=4TKM^Ghf!<~11srtIYb)wQ*=0?1XS z<2{boIP_{CfKoUqXnRM>XJNFj0dStcvj$wNk3ZhI%Qxza7xzQ$n!elt0MoKgok`S( zd7;70ABdsTw6+3)7N2qp!q*@WzG*pMsCO}F^+QIvy}G{c8A=t*Fjwt6^0~RaSTr;T zip~8AlHjvaD(e8~=o-oBU7IS=Q)1KpAAfgdu_k)&PJRjnun1T5} z7{-9MP&NBDyQxwXET@jSvTjjq zrF*4+iiDib!L3bdQ%%`iv_LuD6jubc6F@Y-Yyl(nzPshtROU}@@Hv{bF(yyK=76Mz z+1o8P3`|T=9r_@2ydWSj<4z{{(_-S^U$hcM?{Z9EeHCZpD;soJ4^Lrk86!r3VKWs_ zp6xvamW(LWu&NGO*9KJ89RxVZ6^E>QBN=51IUiLsf#wAoE6CKrnbT%pC>hI;^XS)9 zB{4R(!OS>d1q)K*vOT7w*{hcyOy)I1{Q2PW_Haa9UR}*xiw%l^{}C=VkO`&tO@kjY z!3#$9JisE){NV;DBoGfdAd6#?OBz^ZJ}n>;>e>dsniC#(gHDVPtYI@$YOA1jR_}7y-qq0WC;BbrkJmxdc5VKo9aJmtMaW9P*cFT$8(#l z72%M=$T*sI)3vQF>T$NSuLei>sgw$XM#AgwYsNQ97Z_hwKrKSK=(g$d5ak8gT9Efq zjsN}f{pC=13VT@!|Hvr6)Sf7k;fDP(E>0 zs1+h}UjF{QclyVS9-G6V_p6Eo=;)~n1qCl>sD6ii2;HblQ3VhO(zE2D z{&Q2Ual0Om1WGCn*4GWVpAt2n+mAcKQyqJ69>y{0WvG^A;!FPuY?8#~bfEfh+3$!k zOWX+onL|0|m$w8zv@VN5sn{LHe;0o4J^k(PS@XM&`{TT*N#Dd6(&rDJv1`+EKi8I; zpD0-e77@E%raC%1b`Ldse>9I(TgQ~SlTUWtHsQ42jVnh+LW3ThiVZVcHk0`?pye30 z9~&Icl?|G5MN59FXkHltSZ0rIZF>r!Rz(gr+kBIzH7r*3#c;4A+?r9FeuRcdT}%OUd;GgW5fs0$t`TlynWIh6F`9nK%_ z<;236b(%=N^P0un)oMwrEvN*n&y6Z;yIXY3)CjsbZMAP^2=_j^+6`iS8BaPg;7{ys z{;}|_f|dW@Z`MDbS0pl+UDyKj0{diZR;GUJ-|>=huk?QYEE0QmD+kwNc6GcSVr23l zYme4o4l9@Mz6dzW-SWT$Ta#L=uKK}xZ0PAHsyf%@el@^>^L!CVZ2kDLS|)q6{*IpB z>RQ`Z%#T^p5EdLqoXI@pLC0;fHfHmSeO?+e7ctNV41S^B=o7;@{t$vkycUNn#zw=r)n9ux@ zYPegh`dFZ5r=D~o0z?+p>M!`C8YlB3&k`!T67Jp9U0vm+1xNCoY*(kD^HukwF5%t} z9ElqBGLPjOIF^a(Adgj6%!J7Mtm=%TX>tMV(3N2{Is`*Ti} zLxv!JvZcL-Rr4WiaOIRR97v>ww?*ISitW%=Jf=2L${R(EuglGvlh^#)CtU+)E{DP{C#e?Mzxh(z2PQ)Gp-%2 zav|$N6W~7&N8f&e-2_}p)BRc7>`Z_irAIsxn)&jmQ+CsY2P!i#_IE9SsQy2)o)NJh z{Zmdx!i z03T8BauEY^+OAB{gvu`b;jcJ!qX5ElBtBbi0=sd-cR#BZa5`XeaBz@okd-qFz|Ru! z7?K93g%lOmiSnsKZxjF*A(D{W{_V>~Kyy&X1^n+U$n4Au4u-3`=!l32N@erA8+b_K z;Ck5mXQ)JDFEyXF&(6+{&4zLE@M!RX%-xm-j8InASr?q>c>vv6${Qwu5?yIAbbFG2OX$AUf{MQ zV47HdH2*#@oX^?av2(@c9we1(B_2GanzeS3oMlGbtOui2Dd*N7pJN?H#NexD1yx?@ z&Z+pb6U{6tYr9fGH}fi%oP)kIYpg1d%dscZ5WYS!o-?TY zd~bDi6%G|2T#jq_rbwI`<2_tRdeO5=%D>-nv9C?{4YvzQAqPtriwTZlvRTrEVC(CneVi_cEFLo^BSMzNezWrM{^_LIVq#gtMW(5O`k7{5U z4)Vhnt-X3&D5Mr_xgFJAsrxiLV7AoY3nb+qndBBZ8X-3QaD48Q^KsmiUeOd+nl3y< z%W*>PO1wc8$C5(L+L`hP{#~X-jxMacyv{|r9u%eQV%A5S;?yc&`h0kd9P#Kb@VlPWaOxX^C#tt3JAH{&2XFY@!#}nG{46sMm@# z+-)OzP9pt%PE~Aa0$zs+OK5ac%ke#6Q+%NLRuj*Co+I~Dzp3f{NVPcT)k<$szqsLG z;`cTEO9#BPtypb0`u=#1Skv*`UJiUEr}b^N$8rZl3)bMW6O_<@*V|DN+DB?sV(43gJ*zQM%n4qm&qmAlzOkvFmGq1jhh9 zrk>TX&?vx3q}V!JX%9MXDuz-pFi2BM$CF9M(8mJiZ&&2~rGLNKb=zg?jaeB&6NgYPozK#GdfE@X%!aT~%T@P(H3em8a;+4tRf1Vb5zvDwi z9c&Z&;H1Zw2={QRykLw42yFL;M=y<#px*+;datt8Z$47eBl7cJMhsr#mo#>ros%*T ztggV6gTy%U!5ZX?KPpycktRXgDY9K_ef^cjik!2Ry*G~nB9jdjbbB`GMKoSsH~%#f6f8ept(k#%rDr7nPc`t<1)*-E1L?CQ3LgM=#j z{WqJtxh)MA%{p9Oo)gLZvxOcb{?Gn|&_IPMTZ7OU1*7(-4;R^r0RC-Id6h0a51=~y zbyI&K^aLGCN*8bQ$-YV_P-8WF|7V)LB=!S{DKMWF*1}$>p4)GYP&@;td{#4oHnoe*w=u`t$0{6uVQ-0NPFXg zp{s{fLZ;VlKNMg$d2zobCJQyk%XzO9vG{)G9A)NMxphwrCRGlXD;lw^_nUd!M(ZR@ zPkt4E7-AZDfD7U93dV<5dSIeJJwXGz_m36wM;`N!CnS?-m)CiWaGwn9r@nZ4KM*oY z?f39)e>F`MWB`sHyY7n?Qw4=6*NZ(4JbYhV_k8DgDW_UXX@XMA z`m%@ePxsf~UIZ+rawKDl3bRS}0_E&4a@@JO!Wk0Y{MNDC}7x$FFg zGW#Sh419bVmQ0!06$%M4(4u;!bW)+VkatcOu4mtRZFesG@uvuKq$rL66%tVen#Zz% zdYz*+r^`lgzDCW+TDINWH{X+nhFVeBt`M=ppJUT>Jxn?|4W|i*Tv+Mr`v`KcmC~!_ z$598pb&x(RuG*&ApSfoUMjME8`0{+3&1{@ms|lEHD;%-QRafwzOV12II87sK*-fzZ zBe|0WAU66c(*JU7{rR2NAxC3%1U8_w&jB7nN9vD)(1Ib8#4L=ai^eV~JW7@9_^~IN zk!o2KvzMfJAcaFl5J8)TQ@_5xK120ngTYsA^y|F5Nk2NlP;T^x`yEDgli+g)P2r{0 zZMr9n6W7~Y*G-)Jk4FctwF ziCzm(0~zwzYz};fVem zsq7&?rvB2h`$z`vFzT(VI$ZW`kq>1P5zZ*Tixp_-Z|%n-kvY@G(?vhgbJrB6TA9Y1PBZC5c3c znv}(xpeg;ZA3qODu)m$z|M}!yCC0nAD=qAl;oqry?L-LrF<@*LTpTeE#qI{=Vz-;u>X~nfuJS z_t|^xwbrg6csY`%&A7DIjKoV8;0|h-U9Z@DdV2Xr4S&pgbe+yXN^)04#?q)02ZN$o zm2Ik^!e5p+RB6--k@iM9@hD*XV|flB;-F|ZKvQso#@Ku{{eM{6{3RF(BS9-Ie2YQA z)VZvfX-UaQ*CNuA=CE4veRek6*~;c%-By=$>N7F7xlL2(@W%M_ta6_wnX9U-ljeG0 zaRJ;MPzhuEn102p|8`mPFeDS%WLBj0diT?L;E7kU%@Z8aIb?2={w(@!XXox`^k{&a zveD2yfwB=&yknG8$qiTb&X>_1_d&%`6@RW;XA@2)Xgncj1rX8ret8dq&)LBl~cPm?43FRG(kklOb zlT<=--5v&&;RnFqej1LKlhB!Db0H7^3qkx38}QGaSXGLqS?j3e_mv-z0dZ(GtBRUC zGbti0u3TWyn(;OK;RS$DM9AEKb(sQF2HDqU;C*a~zw7FsIsMz<>D+w{|+G}cS57c~Tf;5XE*_eeYxt!SiB$>U?I($(loX=GoE;dzkAf;ZL>hmtTZ`W?L^SM3HuQAq}I$ zhG}>`4=~JGLv#x}HQu%xblk8H9}N($zmf65FsNYq!_)ZUU(gacH4>0M_jyLVTg>*0 zWhBM)OuWTE{6F^WyfG36{?}O0U%6tl=ZWOhE*gf$0`r<|t~Hd2vI^@lO1wu(B))P| z2w+`ZoYp zKa0-khdX18!JXf=Y!Ax@$1pnNk@jcEXzUh!kxP0^dt16dJyM34D=XHTVtJx488Ee` zeRY$#oC+92UQW6=gnD7%f~HH3GQr}0aIYX2X(`m(L^_!X6vZPX75C-=fL!7_!lYKM zUoCpdYu2F+rY&=uvp?J^o*#%teWMn+ndWqD=?ZMlM7#6NGqJF}gJ)i}a|KN_A2yyW%J#?4LB zKdchF8BwU&^jNF3czlw!u$uOam9L7QZ{OW`;m+_O@|yC#y361c?WSYTJHVi*!1W3w z{zfN1oG-&Yc5X#XE+_rRQB@rwl+rBT+R-8T{rem>53u4UFkKMQBw_nUd=tWlHijRl z^8L_(`yR`>Y&Rb>JjSTK?~M>Arc^uxo>ruB8?f71 z|767{asgI+Wc7TSfn7dVzEmL5JIlCF!_?CFSL+9m1M;$BdziuLxiZ}#HYwX6q+)qB zF8{A=ArbA)u%=+r-QktDE=;ZM#x{4bmWpkY|4}E-^ibQLpE&Hg-S@CY?5MD)ufGI^)5bd&=JpoiC_HnaVVfY+{{@|8o)GNqFYUA%=b z3f1ptc2JRjjD9K~uB6KAwDGku4hH#SEfCenGf!7jv@uv^De^ZoDHFN>xk$3)UYnUu zI{Y?s_wu^YRD2D{ulG%BJ3()t8D76mZ&_ZdY7w2e8MT)sL&p3QAn`Ut6H3%_rGm5i zj+tEU!*NX`lZU5j@$Z#c5=B@F=KU4IY-O%-dqX$gQ|4O;{Kf;Qszcu5$D3Bc#g6+` zCqzi1-CvRi@3R{%VnynnY^x5Ekjj9@agN-3vLqm57}KeA%opW$`YWmKm-{FmN%`QR z)k*j~?r#|jFtY<&qOGHs*;Tf^^w+U4?{d{*UuC9v2nv{p0Z3ymKDU|PR$ki;(sCX5 z<7!4ptE0Y8c5A9tM@KusuClcrBsf3UNT`Qe{-akV;GQlauG<;@^NpPNykU^?6(v_; z%1szP^3OKR{Rk581ig2(gAY0a7p|ThA&eBGl21L{oXhFHbJYg)OZ@2NJz`Zq z%gs2U##7Iu_?+kxa+4TCNzM53mxcKL}z7X0qZvGh%0k52a6F1 zDbzBbuiV)xEb-SS`Hz?L>q~S;io1RKm;k*zKlB;~EJ9m>162MCNMcHM2G;=E zM2><4wfJAU{9k*uI>L)SbXZC4ZbrBv?s$j$0L2jz z#hI*lgU6uy85@9SGSpF^(`xv zxvDrpPY*2;O|^-8eU2)Y(crYeBO@c55a9g&U4H>lU5agFs#sy^44Ua75>`QFLx6Rl z>gIlK2~+|PWl2ic^*z$1Vuzd)V|JHpNNp@W61N2%CvW z!L;%R01?QaF|G$R5l}GWy>xPlJwHAC4DQNq93s<@5@4|LEc7nNSD9sycccTctIM3b zFg}xJ7T3<3CE)#6TxL1;9NG*6YA=^vtrt9wYgvLkQCzRrK+oH-FSYF!F)=+*-!??i zs|<6-fUkKq9B-S=6hI5y_8Gnb0SPtn92U=j7t_9RLsa79m(M%kYBtulJvEDa5)f{E z*R7{mH^Ds}6dRlA@|cXnpvsNg-kP+V{NHgV;uG4dwNV)+Nv#?y5i21f;^hI8h^cq5 z&s@`PIfvAG{wf0*jD}k?ry*OY6n9dWdIiIkud^$J_-!3G-Uuh$-s?{fmdFDal!T1R zZ2Otm9gMXV+vN7_i((_Tvbu>4mogvDv)Wk7YmSKUVe>dU94?sRa){lSJk4oz?h8x< z<|`4jiXL1YWfmi9EU2#bfYptIgX6pqo!Nb^JzXyhFjLu0{@yFt&Ioiecb1YH-kjh|3XojC1V|0R<9!BG3ZzK#G#@Nm^@aUCeBB_$g&Y8Rq z@8Z+usp2wp#WKq(20&e!PP@5uhEZm@2$<5Ab^mUg{yOkkknP~|77Jnx4VBn&7 z_wp+k^Smcf6FAjbz@=|Y-!1os*f21&2(X;)>fuw;+Rfg)S;4vV=FJ<9{b6UoYoPx( zKu4Vc+#l~EB3eo`{pRB7?ietEikwZPz+q~BF<5{nM;;u^{O1$~+0{)J6BVI*>l0j3 zM{{m}b=-d)Gv0}kx`?Vvqj+6Z1s47(XHXvX`;{^72`s8m)u_KBe;_h{m;Z#GihPcA z<>Hi#Rb+lJ+w;9Klx&vhuYo)sT=@bYF3{2emIEvD#y{Ig z1g)|TQ1N^oIH%?4i}8we8Xb>g?`;9!kyV3m{!d09LTETmdURd~)M1gpDw(nv4T1m* z#dPuL^Ftfr6#S`pz`6*LuwS785EYx%MuVp>u7YIvML)w7;4AoJ5_3MUbCO%(pB5fi z+^7v8D&CoN(q<=ZcziMCO2+w`61g8x0Yo-w3s+S$a72`M5cODGFA~# zGcxyAQPmmAo)`7oJ$?kQP7gkWHu6{_xGEWj^@T3aH|Zsc0_1`IpW~d^c{I`f^q_nB zE;I2zGo&k!GFB*+*_sJzu3-^4H}v2uYsRQV3u%i5ezn<$?wyQsKHK7CJp5aBov<&d zHe6gzX5(eq+wuH>KmvFJT_G=*dbAch{D6_ya30>qM{A>axtJ3!i_p8xb>*ac*SY$gK4YliLqb6_d#-X7H6v z&~6P;J@D#A@#qx5g7%F!^FaS-5)rbAC>Hg{AuAAhNgv1O9F%Wnx9hiL4JMCDlYu5M z`>tOmlZeuvhHQUS#1C(Kq0+RnLo88WL?!TBs0Ym|CvaHMf-i1BK81RZ_mXqp97Bb< zQhjH&aIXK6jPK2j;rvQ84GcZowjk=0Nsn~y3boQ}-cW*Dc0yF!ucD*reL__x8ZP#8 zn3@v{4v85ZgiRTD>s-gn1Vg?B++d9X5qg!fJK+!ly>a8l1cvV;hzj%)`yP)jpEyNc zDCxN$Bgtk9&Si_6)1|mLBcaGjGu3Wxp#a-=YBAzK4S=dB&)$smH6~(~Ez4KV&%kX1 z^FV^Nv=Uun)jDfT`!q|F5s&5H91j;xj|Qed)o`uxrosS4U{E|+xSjpgQjZmzgL!Ht zZJ5~VSfLE>#nvnz4>`^K+vMiiz9V<8r*n%0J5_@M6lagix`_Pa2s-If; z+E#@NoRm$e$g;p$4nWLJI5mc?iR`uQkCvKbN<_wgSmVFX_oT1halK~oyuzqUB6Q}F zieDRSV#|Cm%W6uh0;v`Yasio!dz{nFQRg)kOJ_~(h2<-JGOl@2ovU3chNA|vZrEyG zJ>hL*OE{$EOQkUNygVmxq!z`;(k5io$(9D^v{-*Ae*ID>Y(ornUDw+b8D zhk-|@FF@~cdH!&qeQ5iL@uOsTeGLu#O?@xlp1skVZ4${NLs&NtF<*GG(DkVyjv-#e zE%Vi3tB-3u?+wC9`oyQYVmoJB-ZVGZlZ|$`qLPj+d{KIo63?nlBKaG*<;^E9)L`?F zRmJG(U1~;KDfKA(XLQQam^PMgN;;pO_DPZv+sFh)WChTi_DeD6JdP)PkR#$3WQ?Rn z-JfbNW!nbUu0sh^{5`GC+5=YKJN^_e>;NO^>nD)iWPF{T*12Nsg$cSHErw#W4uCeV zb0i?U>V=gifjl&e(pDUB{z_d&u!j?})mO3;rgLPs@wlvjGPIvKPoAnjl@)oos7U_Y zJEN?nn6{gs`O&zjs=p+2vxT^Lb&t>dH`>2z(5u2~h7;F|5M9A&xgSNsbf0O43P<25 ztDCsjS#>K76TM~xLI6p?5Wd09Iy>|ppI#fDw(JRJ?@2t-DAKLi8)m744(meQXU+pr zMP`BBW?NLtC+sEQ9~p~Q?s|U0F-KuWw@=Gbl<&V^Hv&nZ@tGMex3Hl)ay#GekVpgm zogLDTNWoo11=?>`*a2IrrN&x#jVoq#v9vxjew#bcw+i7!Sy1cx9ecEO@e-L>Q6(Xo9ATHbL=DS z3xwKLg}Qjwj0cz^_w|m+CJRKjwv<~>`b%t;k5k$J-)>5ihsbVRm6s-)d^2-d1(oiD zh}wlI*N!@;YA#LNOqClHzCsriq0DF$6v$7m-{L{j#caRlG#3V*@mYLByaJ)bu*|y| zy$N$H?=J|l`s@Pc2F6u`(Re1tBkFaBiMP`tL!Kj>Y81*P3mYeb6sKIghtp`|I23|z zgD^>U?+d}3uGSqDL6+2czl6bj_H1S>sHj+Xy{pD)(}2$<(jM=oFyM^ZQXzl$nAH}R zKHcuPQz!|E-STa7wRdxVQ)z9;jwu{cT;>d~>mFeHT)ibk}b z`+md%3>FjOWUeXyQ*U_Ju$$I&k*Jdac?TR<{#n*-`T3XsS50g zjlPabb}wBMI0bitnTSb?)L5){S7#*7ihfM~&T{6Z0;}LNQqMCr6JhT{i(j3tziYV< zUQ2K1NF;9P(`$1^6;~dai>o=Q8p06YkCg8=V@y9fyy$*jYjXJ`awnZ7edEpTkyrb> zFH7xCGm2Km!V2YeHcCL{vP@=1`Y0vpa5H?6xl`c;g{coxS+TiSp;{dpdl*~q>$_@9 z%~LO}E@e}{mF5?LQTQD+2NOtYKr3gMc@ATJ0r5LB8AjnXZBOBGao9liSX=LC@~pDK zU4}ey99q0_9cYDRl=IaKNX?|ASw+4#zhja2VL9maycqIjYU9}20ulKg+9%f^@d`N%d=YGDwWQIO* z(eAw(X^b+}d=z#gymtEX0xOPXmi=7Y9-0{{4~|BMIfoELESdXW*fzACd($8aMIThB zL#N7P^A7t3g64yOF{mbWdmEDCGkMGjoCEcc`#sO*n5San=8#a(35C(&TOqo_mJJ?< zIbPag{z+ur!SYoI%1sOqrJ1?yWe+=i05sT4OU7doQ5)#$IfcA@>o4l!L~#80rA%E#E^ z3c*0$l5X4uCVl+E1!@V*gx~qZhCm@UwD)E;^;7SAlFY5QZKDWfkg4rj)?b{^8w)%R z*eq0iaedQ};gSEfV8@Q|%R%?-((q0AP|grb^YO}1*9W^bLqkhl-(EDhWKSZuQ3bsU z(>uXP_d^_5$HNEOT-syMBwTCPlf5??=q+fP36>G9=zr5-xFGYUDfk9r1!|D;dpxgR^c@g~ z6Pwr%H4oq$w@^+Pgnx1RF*BI0n6U&{_og&?yT)WX^SayH+s19B7giz-UdkiP!vWIV zd{zTH-#GC0P*(_;wWUS%&PRNOM4hYcXmeey?pgZ0Mo4lUZle$+)q?5^u9oErMq~{# z?_?^vJ0E7v^LXioC>?@2hJ(Hh2s!heT@zLazK|s{4-~8*eq)Jx^FF(l`dieaz0>WqdP=R^hd6P6*pD)S3u* z6hbl}p21rc!!rtRpqZVnz{F_IKg&OhizTqgphH0ai}^@_#UeUBP~xzzHxgU-r5)=7Qp=X=+4QA=ZL6^pKg`{FysQTX6Zk}0OqR=nDNHItCiWCkFeQ>&M>_Qd?D81? zM;c#oj%}K5TQx$T<0qxD1Ws+K`kNd&O;1Ym`q<;*x`$-uoKESVbqWIn9MisVW|CW| zu4LAzPQUHBrZKYVe7^fa^hhWy+%>#tbgR|RyR@={@yjgQI(~*iOj1)V;df%b{K?e9 zLRWoJrBD0}){XWz`UdVca{(sy7%X4|QQeK7!07udaOOwv-6W$e-zRS>w$~_IE474l zS1EkC>UTwoS`RwNxK`@ko5&?tNp$!h;`kZ|Mu6pF*J~^8yuO)mbo6*2gZZZS*Bb<` z4VjH7`VGuJT!I%#x~Kc~q@;yM47P%zNAPR(Hm*Xugb(Sciu~QTni`}{oz_}%ohEsD z{kBvG`!Zxu6J?D6bRaJ`_x-`w3VyU%f|P;Z(Lmcu=o3-LuD!jhvV6DuWallv-FzUf z39D;hDYx)Pet@Y}6M@Q@WvWp@LE$9*zJxs^);GLOsjmbxfQfH0nuZ=vwn9Z^Oc`Ja zLeZ->m-ol7$AmtR$BeXDSb&$74l$ z`M3&h$_I3NYaRBO+Df6Y*DNJlc481^OR{gaZNuc0!f?f9V8JP;QhYog_A1Ompp;GQ@ulCg5)e=zN z;nM})2YT>F#f+d08x*`0>O@x{-f0ZUtZMJ>n%qd@uMPPKDJDW95raAX&_$^Du8Pwb zR|ZoRs|I@$GoG-+-zcu?FVIE2;=(3$gt=Sv&7wsgw3Hl;R=b80(x+jxj97< ztxUWFLed%tN0`Z7(yooe8YjWW*oKx+b5y=VuQ?vqhrwQ zO86Si+~P{O*-^HL;(ga&eD-23JRXN&PU8LC%ef?{RwuUuir&&geyLTD6amas!Hstu zu(%fc_}`gcPFU9~pRZ2!&Labt$6&rPs2N4`IA2+(S};o|jgS0TF;(-uOxTd|ThR(F zd?KQ3oncB28(AH#;(AGyv7TW!o_Bi~cAj%YB)4u^`c4qB*W1@`0lag1-YZ+J)W4tr zCl(;S&ki?mm&2BS^cmF9!EzVRmi1bdVH>~!VIVO7pcxnw5DEhjlQsUfX}!M?uZdjT zI*_6{IJjTO+8#o%z=3PUGI8@ua(_XluW|ex^ONpJvjJbJe;AzXML~_d%bIxp%8RZZ z*z%&0yV16WT1{~BY8(6@qm{BOczy`m;$=p@?TcEj=S}gX@f{OmWUD*>0hlslgj^>l za9nAhW52XfL*^CqU31nm^Mk*lzfig1XCy_Usdrm)7!_TlqY)uH4C2G&3DEv_`-+CbrBnDlR}g%VPXriSaaNF=a~4d>pbBo-k9 z;;C*;M__mL^qa}G?<~No3wm#x!3I&)PLg?eBPA+Q;}~?ecjAIM>MUMjZ&JZ9YNsur zZBkJ*=}W24wZhmKvQ*1V3tI4y?pJAS+WS&oY}C?b7l>Cal!@)Vh`vEW49FJtwT>UU z`Cmgq66-r#65himKQpdRdXVpK)!*!>3Wt0S^&{0a!8*iD8r`}j+ckq5Ufeu4Dqs&? z-o~sUz^p2i^n5QjUGMWs;kY407lYYjzPSzQrUhhSjWnFG!-P5&d1m+eCauNBsa03i z@24h0rZK;#=8&B$H(`35-RYdM4xKWeV@)(drZ@`hV9Wdni&djTeC@*FFj9Ux&(n#7 zgKw5Vlb5gKX6<3tM9>cAM8`*G9)y#yva-h8n7yWLi8X>Xx=a8~8A&k_ePS>keTL3g z?0EC~6Y&WsES5n{Us-H|c^zt)FD@zB6{{1*HJe|Aj<1sl?*J+QbFH|#aW`Q}h(YD? z%7|+{m;^Y2c$yq)HG?Tg%CnqD)3L1Q+%L7yF` zeTmkWA9(iD#e+d|We3L%1jgCs%{}dHZ8=Bwqp&!UKp#nJ%;vtW*+b&(k)Y}gA}U~f zQG+#qIRzUWn{_t@hj+khm+R;>B;WV^#(;6og%a;&#@Vyp8 z8~PF8lJmH)D?QHJA4szy69;lYgSYtGBn|-4vl+Iet}r?&Ne;H~VdZA`$m!$!RSG65 zWTtv9N*g9I4GSpaHbdha9_89#_B3IyBE+*wP#Lio9k4sn;4w7+q+I`D5|MAe|3eBp zXMB3)W=Ny1Rhy@+h~QR%-+RBJ38-ts+0Jd=`|R~V+?rdtQY#xbDXal9HrCnqvogV3 zWBe|A?5PQOj1+;wuq4iPVycycAAKEesAVGed`~tBzV^#E-;lYV`To8A1CmG0vnRKw zbCq&wKXvd?N;!~1lNqI0TF8ZVKP=9>KO@ln%K6e@paQE! z2yW&UgU~Cndi8lntigzfdvoE_9Qy8=vbZPb3_W~QiW$geC4nfcwn=7ppokLQE5`^_z|}LI zZQ_v-SDAP93*bPOaJrW%JR&<%z<*!5?TN2?d)HktgZU+_`6QvTi%rjIF6~rkErq;( zQzL#6usS=IbZkbefjwcXe0daSCHeRs*9-Sf=vrmt?sxu=;E9^&caT8+WV6 z_1>5tZZlDJ@vjylZ`a3$jaVb9hUZ(`cag$1zrJh_dAgWb=(wd8fN~2!BrEeHZ6?%| zgx~(fL~y$e>9>`ukF_}|@a%X7{BLK6t?IuZmh8Jc04SaYTJLwCXT3c(K;_e$T?m2~ zUrCxmZqool#-eQ4?kQ?!NM+)=%AI~eLpbXu-0UblP-JZSy2c-5PVd@4p|&qdFP_v! zSh2req7^Bmtjw%bA?~SeqYs2_h{r<1MOs9RnpG}2=C%tqEh3HHV@CcS2)iX)Y?5d^5sm%H3$`F??y+eQnZ7BD{~(w=0iHSDYAnG1(jD z$}r=9RtzajRP%xQuMX&kyWYg<-NRqgCxNPz&Jh*wc6Ra$)0hM%dI#lgEw;lb_|$!1 zfzXC}e2h_^xH02bmPE@fBYa48q`g@9VaVn%?5&Vd6Wl|RSulNFkQBFep^)yzq*q*@R8bpxzwDb%>`qv`J}NxCVsh7aPQ89+R?%Hs7oE~ z4UOjoH5Y|-9}IMLt}>elV#o}yoT;kEn~_IU-^KVG9W{-J5@f;-vK-{vG{E>F9it5k zyDk9{Dyl;Izr-rPIukPoxL#h7F$9TtTrBZn_iCRdaNgT@I^phxtxZGZm?X#-9JXx z9K0>vyQv~pf4k#*TRsF0Nb}njj)PeNgSBN@pEKW(WI!;Ufmf+wM~-3E zd1b=WLtWPs&jFmw3F+kc_u+344q%$>@%%ea3+r|EYQvi(4}N37%o`%rx2ozGT`UQu z3=2{X|HYd6^`Nr_8Jgs9u(rGy9l&b40=}*4z-xBa;bfO)Om|rW044Aj1Lx;Y=XXG- z19zV0w)m}j`qxYT{a5c0s4eeR#?$YgYh7fKT>H-#``?c%y|3|`+uSg86#nfK{MY{! zF@aV!X*zitmq6e*{`KXY(tmyCKduKn$2n9;{lrpzVRJ^`B~=`W4$AIrmy47>)Y zA3s)o`}VC}&&S8Ne!Fs8+{Vq^qq^un*kw)-Ly=^M8Tl*+`Codtl5io=yH5i|(dTt8 z9AL0=)bS@fJG+vB>j&E>z%n(F?Qb)bG&yq4gLq#*zo(j-nkRV9F~1#}8_?@#^+D4b zf7ad+oZbojOuzt!b{q5R`!);`0XnZZvfE*Q5kb5}XI2)vp7X#l{nP^> zzqJ+Y?s~h?4NB+)el~0Q4*L~0OQIWPQie*$%D(VhREN_H)|mYw6P7$7r%bJN>F4a# zr-vv0`QaJ~ynTIHTR<^otXRU`0CO$7?A3ey9wDkbth#sP(Kd zzYXjP?#UTx?T)TrZwm(k$r#Fff;*&tV6#G;x2v+I&^~{DDv{T{m@)QKE%NInudX-# znwa`oQqZ)@pDO~TxsG1${Z^m<>Kl3zaLulN+_q!+#T@OQ-0x$VZ9+S9=B*wm9t zn~Sq!8Kxsk(-@h*Ui9jLkUs<&6*Xa6a@&>GL$GZ#`_C?XC*-=nKo5j*_$sOQegr8q z?V}83XZTCXS%rr@lWn`cf=8R?c?S%(i}3aJMFd%o{(d{AJtb#lRZz6kWal;`+ITD@ z&G&PIJF$A_bqHk0yAlYJCW2*ZT&I%%B(Xm+Lgf0_j$}dJ>L|ik>g__|mZSX7+Z$-6 z5Kt3$v$FaxXCZ+p;pf-Bn_XQ##8(KkqmZ)Of3G-yzZL#?NnPL&wczvfS7SogxS#%K zBZ%MLA1uAU0Cv=!)&D`E{^ugkYawlHwQsnK-dFP0k-cMnPN|Rb=eP8W>+s)yLZ3z& zurqx*(U(jaCculiddEg9a;WFxp4AUOt$)7DzaI+?Lwx-f-rb^pmS%pRmi8$?l{4rL znP|ZAcAuL13*czg$)&r7MA;jCiQ#Yn!wvGS?x(9YfTkcYs3H3XLxdvtqpo~B2j-%0 zLhBam5o641C24nD{}#9Z_2~`0guu{Oqt?zyJ3!?P z&jq&1_me$#iY4O;eF{JwZ*3y$@`#wmI@i^ApPv4V6r&$S zdao-AwCXbSt@Pr+NFBg8Xjvu@+26vYN>?pT&A12Y0p>*S3?##O9CpTKgB@{=za$JZ z^bEXa1P8^zynX%ErG@~x@NO5r`6cZwE7ht3WL~GEu+V^ezZI81X^ekgvycP?e%jMu zo$&C-427uCZiY+=7%#=%dT@`Y^P?+j<}H7U`GbuC$vU&!ZZ0JmT!NnNjlmTrz1nQM zwM4gws&#_0I@YrK4AKCcUE+4kHt>oIFJ(^O;H}Qa;-6js3w2J@td?{t*_1$W5d-{W zI)N2x=r^}%_m%}OZNTBdS;0$Wu$m~3rr>D^7dRttF_5(ps9qoe>e>bMLUo(%iIzMQ?n~-eZiNsyRBgRQxL|{q3(aVNlb7 ziVuT@Iy!X{!JlVa0*pR?Z@as4^p+hTk^^Y`vA{M7$lCyaLy^Mqll@ek&ld1Ru#C(X zw0;=`RA&!CgXb;K!b@ptCMr&)ic8^%`V46}MV6U?*&K(Jx1W$pQ-seXkqBJkM3oo*g)ib6dlMu1*Cuv6(Mn`57JpSWOBg8gjS6 zFg%|B8AHI)EktfLTo%WmRU=lQT}uZ%gkmW~1HP!tb?|;SJim!G4=kV93{GC5F)K=d zHmfzC!X(9OM$~zjR)cju|Dy>Whm}r16XX|D_r0_6t@snr1cgQoHPjimA}!x=Hlcvm ztgpqfKhKhcQ$F`pzA#k%9@j0JYT%B4MDcoy~zjd|4Bekq5*EENa> zU!dbNnEFcTh~ys%B?{Gd{RFZ%LkTK;;in`3?;y}uQ@NO?F z2o5g-(XBIEkybx1-^=Z42GTpM)e+vQR`H-a(SWP@G`2uX$xSpGX7>Tlnmv|2f3RD(&t4>z!^qB$~) z#%#L2&gH#7ENWuc5unON(4wA!lS}48HIwBXui5_fmqg7u6Klo1 zXKXzIzP_CxILtTuVU*Y{pfA0J?tc`wo{$qf7h}?bn|_(K;&u5-cw68YyqfGJykrjB zInly?a6AF8$aJ+q*I|X`-Yao`Jd*&N2075>O$QEV>USy)gSoh;G+FX)H4!ri z2ndL}>nWk=7bXKCmgq<^P<}K{3X|)M+4YEhmrKSED#ynDJB#}}g#8)O<|&aNl8Nu% z|6tXJr8WazCchYBC});@zK~;c)i#8s5!Tc-9NQ%7a1@C9V2N?3MqM;%d;=G^eWKhh znl6K|T6gxk#wTMLZjZAnqVW9WDb9QWTdY?fQseDMtU8-8icf&ya=~}<|1ZAX;RU`2U?(w_4C;*;)3tv=#jrVSnqW(sYf`v^j^X!mHT>hqO0=@4z*cNvq z9WTyMcED`p__#+_<1fJ2Uq--Tf~OW+2=23t6+6$y(I`SQhY zrQfqm&F4ED61#J%tCyQoHLcuv|4MY;e>Aw>V5i83%ziL~kGg3ifI4#{wlA%pg}%S$ zuq#G}+k_60O7_J1d^UjWvm}{2!xee6E`*4EJa4B;T&qM4q=U5~LbDRIU@VGK9)H8D z6!eOTjS?ce|CMbyM+)hGcNinmgvEswJ9`?)J{9u~&8#l4vrp8Y@9G9ez%d&PatM|ig&$;*I&u7jrVerM?1QU`| zd28|UlYQdA{i<@SiTnluc^e>Dy?gSw0Sv5=@ta9~UTMv5Hdd0(FuCo8*{n!VVKXhzt>QWcLtI&m&+=4yzn1^T%IeH@i{5Tf0+Wz&gQYXZENn_W zQ_XU{{$3FyhHh?nmBbw0XFSq!l>$vx#nzP|#dzplfA{zNCfL?};ee9yV4gKT{LLGM zk$s0NE;nr<*?rsOfbxO+!@yZD8cb@+!SIOkH`2}~tz7!by-8;Kc{AtfCyT)>JwB_$ zjmb|hI{^?&NAVR$6-rQkT2=sLrn@E37AZsMsDpeE1o2e`_76`S>`j6VaSW9FB^Bb!3MY zzubCl+n8qZr{UEe;ZNOx3+O2TL^db^*$q(^JtpAh>MoAtDA6nW+d~EN1K+rn5Oq@| z;Ob^sOfFfyUJAPxDOgztkdZM+HKdEr?Z}o$@FMqx2%COB4sZ!nc@YJLKiyrxP>igs z(=}=XL#n>Y`)AV&t}v=@)g36Q*1THIDcISLcRLwgoa?4R9R>~@orKrtGZ?w_^EAhb zWtc1=hQBJgKSSKVg5La1Bw$VWwsPuBBVJVe$uxJVNp^s45pV+>g+V-_*X^)^{v@<~>F9GB2`nxuJdB_f5N+}}hRu`h@5Q(2S#RDC>iiNXDEZFVH?19xE z+STY@o@`<_Fl_bf8F0k84-hSuQ{a8bQZWC7GgNf}AgLS+WBY*GH~!$Jv#o7J6kU43 zalS?zU-=WtP{Qw98Iy45;F@w~HZ2JW3E(gy$aLk13491#FmL3F119SO9k=cDL_X*K zM4u7MLT!G)(@VdV`?(@=&1E1Xw8Zt$+WumuNfcNMQinUjz^06FMZ04?D2C2q$q?)G zgBgo{WNGS+?Z2fjzwO-_%4?f_U9kfr?0L5nS4%WXG;&_hzB3q}h9RvZVxJKID6i1g z)HF{SN$LuosO?VRWItp9W4USO|> z>f~gkZLP!V@ZG6uI4M~_9{Ge#b!^c+j7spCE5n6m{bgtdrvwmdZ~pr^K#qf3h3_g8 zlkGziid^!+D^t`eCcYQ%=kU`lswgEB`(b*Vj+7yyb^X&?-&DDdfkEb7CHiASAezb*WKi6Q=t$M#Fe z%y-cM#Kx_iC4Mmi<_eGC6EB;@nas|W|jFR|R!kiB^O z!)ZZf^$N?UDZ}#LasGeR%T)u&h=Ov$;KSm}?FFQi3Llr=0yfgJsR3aR)xZxBcT72T zRbcQS{niXpwM?CQU`_vRZhgWjE7n4zJ9eUPK0+L}0G!9(^Ob`ZQ^foC7{+AlV; z6~M*q)mPTn@S0!(W`$ma#ZSLe`IOggN3)Wz?~j9FtiFKxE_Ibsk+z6C$coE6F?8ZZ zT!j)fWB{dwjJWsQ#gi2MuhIFBFCfAS`O$bGYpnxUh~f$&4!5fhcma~OfcE0Dy)5); zrgWUST|XrQ_X@chG28?Us z1l(($K3|`tZs#-WzkfBpJ%p5By@TWz5rCbvd@JXJpl1@U4N$buJbn6kC7XC5GGU}v zh7{Cz2xp|ezNIwjxGi2mXxRUo-2CfbW_qBV9~G^_@Xc>f1FAR!mSAFDs`1;#E>2!7 z?SiSBa%z>83?eMOiQEIQ0gAQaZVrpWgvT#aCpjkGzbA}i(R;m^i^X0Dc(*Qz(-l^= zjrNsKA}KTS*S=P+_Tl1yq^cyevB@WZX3&^ehVy^S75TY|odmsS68XgE)6W;dG#YGN z?JNLWJQ!rl&7gSMI-({iSusmH!S?G0_h(QI?=B?d8n^Vs5}_|x-DY$V6j!| zDr*GA@o16Wr^Wm!H^~#@%>VP=tPTb+HNv6cu{y}iNMv=vAWk4To;?g~`9D5^_Zs=f zi!!y6Zwy-9!N0nR&vCs>);A_y|B2xuquOgp)5$aZhidO17enri5S#I5BYrQm+JFx} z&#PT-W$<}4MXzyN00ZHI!o2{^EZfLE`Yne41^ir{t-z5^w@qboT#FY>Cso&2G?5}; z7W9Jsj}-g&U09L;7G&+gmxI4^@ZX>C?|*N^0f64Yjlj&`TB`r!|1?5v1Na;_O^|T> z#-)YksQ=IJ=+_gRBfT^}IBc3EqKJ~2BoY<=A1nIT>UuNa0>pvZ4gUVWpDw?DS~gkW zo8KO{jsAPw^yZcR_&lA?LlUZ;k$4BR(QWDw>J(tAd?N)7jfGx}UDugZGWpP>a3-BRdZg%(%(273sLyzYBf_{gF28eHCfhp88Tid`6Zc>CgQWY5(iP<|W zyG7ca+@PDox$QQWSm+Aa;4kg5dqbH^d$qHl&(_N(u$5Wq7NstZ4;YR0xxczp=$md1L9rl zCuC}x1u)QOpf?eg{QUhzU(U#l2DUlPt>a|-GZ?qfABzT#lbwZLW*~~&nNZP=^_%X+ zbzQU21WB%NP_}%nNw2JZjoR+;^Cy=-+%Me93Rj%qdFuP|&odp}LG@}XWI(G@@cQhe zvJgzJ*uXicyW zNw^SrpT3jhXNKwkCXI2SqYn{rL zICi6#Ueo(l*Rrr|;=u$4yKx?tYaCA5?LCPCrtss{?RD?^4kJ#-5%tOU>^s;Ux0_Mi zJ+(Lmu>nn6QuGB?ryY_pYok)46HYA+dL5w zIr~6}bb8h0_SO`>7M$iI`ob0RR6##f!gW{j3&~fJmA&Y3awWUTOSXDn7L}RrVjMB{Uvk7Q>sbKUm=-mVeEMENEqAch_|(0we?Sg%&s5LbtU zI=wTB=2peL$Jq|+yEstk?XvOMS3I5(^c*QEM$$vS$z0o!bd+t0s8a3~WNsMdG3iZ= z=^(v)ngL&w{^T@<0~?K|)sU^fdl?5fcjqw-rj|oBJ`C>#71hhFH(}!X+w)WWwJ%Jq zW`yrF(<5J%$QM?fq$^@Zr-q2AEYQJN%VglSP?zoxkxmme^ArN2ZfJ0i5+$FJ--7WKKA(r3PQ` zNdqm0qoWqj&r-}`?+A2Y&!^nxaGn=viW50bt8SWC?mdpEmRP2|6LOoG?=YC4_ub20 zI5|+aIkp2##(8;QbBe)vj5qYlHT zjue8sNM6jXkAwtheSVvsX57uQ3h$b+ z8p>0n-*22u(M}Mh<~a#*+ugrJ)_bryAh<{{v>wB_YV;; z{&cC8Ngl}O0!Fu*p>gcGsjzoHk`M-C^40rehM9jbu!&j++tLiVuFkdQNLJ+e6%6 zFlh!VP}s!VUo4yGL|JKYWlK&zzn%IBygS-_F#jtz%txduI9zV~C@WK+OvI}v ziKAOgsi`jRsC#MWgn09AZwXNIJD0t=0dvQ`$EhBV7!YZ07BT7wBQxr6EgZaY7@r*s z%{)KBQSdHKnHmY+Ie*Q)vT*D(fGtv~-z3x`ari^T`)p?}28&IJd(@=Q{o-UFX3uQm z!8PV=?Xg?i(7Bhbvx?v$vgs=|k^SsjD6qSg(GKTzdJ|!bWmF?xhYWJDnZ59PzHFo% zCluLgxdp8`sPpJ`k{AuiAD;O-2x>IAFZ9|SZBe*0UFwdn^p!T0Sq{mHrsKy>)>d|X zB~naW8k*V!%EG6;+BXcho1II5K+^uhAt34IB25b}dOQRoj@X+u4WHKCx!YTKg zJh6@RCC`S;*%YQV0Ikjb3&n#LDYru`8${4a5|8svm2<<#TS>*oyY=t(S5=PPrVzWY z8UoHHF-)#;ITn%MNP>3{-4GO`+GkLItTNrJw9vXe*K;=DDlpT1bcWIJ7H9gh7E>8# z7U++Oar&7Xj#Tvx6qA@=MNhfj-fXj9N>$QirteNDkMTU;b$AoRbAOV`MQW*sA6QiO z`*)Yo>R@chsoP7w*FH_8#N0n|$o+cCOVPA@j(%`?xI>0Awc5*nDYfe%mOLC^X_}w( z;qX}>Wm{QjG-xDL9z>y`kUSylK@o5Sa6dgN_S!oj{9tHsT_}_YY;f5RlI#Xr547gw z%E8{!q1+hWrL8m3Geo_WePggA)ETXJIDV*$nliO;K>2tlI;6wnLk-sa*X4I5>boU8EY-eOv%SrWlApEqjp_+MC z;LlSU9M_Ha$RjE=S3OypE^>=*{^J)vk8)6dK<|0%CX7h`7yz9}?pH@%q?fdliRq4m zx9d*|!E|~BlpbHS69{v{N8qdWG@pWbmY?pGbpwU& zn4M)TqZWC>Al04kRLDu4=dLo=on_-rI>GL~Uj9!oQt)0=V}4ifkeyUQ#M6>_?uFf9 zcp=~7bHO0PtT>Oq-_xKfh7xhc#W&iR=^r!)#cB9(3!CjX7Dd!UG$an>@xvikr{%Ys zp@c~PA8T(N7uC1#4=b%miGnnUf=G8ah;&JpNOyOMq|%~vNJw`Ljf#YH4=|*}&-26U)ol`{N{7M#I}Fsh5u2TS~?8@)08A{ls0xY~85fzgYS46iCGB7IKa z(Or*sJnZ^$^zxNZTUH5i7@7u}tl;&EFx)D2$x?}1GgW3epqDqyk9qqMHluBsx~Gx^ z8m!7ID7ZMW{P=!}R(afq{X|7RQ~hRfbREx`H>$Thb%HFuK3umWscW5+oI~_LTO1*Q ze&NxjFxOZ>kWcYiYUQ;ZQ#c@gxxajb@C7gqvPD4&={0H648H@&l15TlRz_-0df7z_ z@4jK=+Ax$!2^a(i6l(kR1h;jd+;7gD_gzAePM^pa+&kc;Ez9FZ$Z(}q?B`w`sQV52 zGcfDc48wivIdPkUr14K@0u?h)N_Ey=4=!GDjiBF&KRW+X|vBdTVELLV45WhXJ&Os#|~dxH6^#!;=mWavQX1nYc3hMnedIv6;OPkzzi*!9GawT0^jY6aDYeCHEkxra^ zy34RVPPg!1H$ceG2+b5YaAl+`P_PV4lL-BJVTfCrlVMk%?pXEeMH+MJk4P1mW2b|I=gT24UyhC z=N!R8vygz8eb=970c}X$hu8NNG(0~(#@xttXyfV%!+jxVb-XNjrR0gPRjMi3Uc>WI z>v~VV3wczne9b(rQ4(?{5bz?T&Zw|EvZ8$=ha>`HqR`_plajRG@?;2t=jWrNTHAFA z_|*4DMXyTBfb07xi&pD9g4;0^f{#5f*JD@(4ZAEyNi&#JgANNskbIqo!&)vz{>S6_ zosy((cofl}w65ljz82n%2P!8#i8kD4uR<(0#qD9P4#S$gniNNVhqVlIHCCk;TOmed z#&-tUeyA)pl0T)76YGkpDW=d^r(Xzfle(Wc>;E)t=%&* zibu_o`~0_p=%0yHzYc8W#oO@BS5CJq`;Ipge;MbKhM1e-pO;lWP731{J>d2U@PEB? z%H+KQVHL>u4b=$tl_P%P%e$n97rJm~4*%Oe$(_nEU2ScVZ=s(-f#z zkQ5=)X}&RhJb&!C$@KA1@U4tF$K?skWBSE;F5XU>ggm|=5R#p(vF$eCiV+PCOKfGh zGH7w`@Z{7e(Uzu8(JmR47)dX8-V2zGON2dm3 z;^blyv&547-oeM}hZ5ZSj1nu4Kkes5F;J%O{k&)|c1ZDUpA7Th5?X35ed{e|sF5|4 zNRzw1lmg`e_6Z$OX1XUOIP;OQeQw-G>w5&e!XcYurR9FP%VAQ_VCtl;(-b45gIRt= ze(7PcABHCJ^-5K+jpwI_X;sakcWZ$&m3r2RkI%GFJmzDBY=_+EbPg;Xlbry4(jv&t zz&0$htJu#yUCwH2;p}bL+KvIk*=tp15f-J84nJ?!VnK;*orl_f@3VKzzZU^xGE%j( zFZ*)AT2DFyeX~WGlnG$&Hj{Q(%8xjMr`Jc-(Yk?fY>El(*o0l~+=BY7A{ncJ5S6D9 zx6Ry0@DuyOxrFNpbg~m2ME$o->LDLv*5WUeGr)GZ%3+sM&r~88c-^YkgB4{GTRFpV zeqM4U$3iX%E;gT<&mC3{i{0hrdeRqu3aHP(>a$p`q9`%s_;RtA4e<^g`*}4oZ4{kb zNI-%*abl1y_%+_oh5k)*oJuN}w`MX_+uR;}s~;>d42!TkmI9+X*zDWkoD%g* zhbY(#vF)co&Ffvry+Ewmddzwv{nzpIeou=vnYfXsw$l)g#Oi|EAx+0qWbQ_C(Y8zi zj(T4P1Cc3W@Vf*jPM7+4!^|RG#^o29?Jb)=V>f7!ti=n#U*U0hMf7`3bNOC>t_6<0 zcV_ezQb#_6;`(isg5$w(?tdwxIX}9M>^c_YXSy(^YIqh$@0jUb@I(E< zbmKc-+{NPsUn$F}CP)1tSJM!j;FVs7WegGL?eJ>p4=zrM=m_b%kYJ^9E8((SIT580b?|* zpPAwyyMHT=NZzXjs%b9MayFP=Zt+KRI!@CQ@-M?j_n^F8mc65}A27U=Fwxd^RUG4Q zr7BH8%^QdIs^HgWeYF;O#Lkr2hJ_NOHQpkUTOE~1k zqtpuepNkv*v%3G2So%94n={1EIGW#`drj-H2wWx_M<2a-_*JJ+u! zq@rbS&2Q)II{qb&;@#WudT&Pw+n*v*6gFqC#-g;o4<(9^)p|*7pE;HfeaD}QWgPxM zWY(MKx%0zhEK^)e?2*p0ONjOx92(u6Y}_fynC-%N`p7W7v%3!!Jhjq-7gWn^y>O;d ze;Z>v$OKC;Qy6ycpOhN4Ro>C_?s@oQe3tEpG%aK~ay`Be+e?<<1(C$|FfAtfyPE#v zh|PmS6_dkk%Hc|IPhR%gR|P{^CD7uZU=P~Dx`3$IzRvg7n-U0At?_q%aJyv0D;QQNqGR9{?J+rzrRI;job z{z?umV?LK^S*D(kl`Lq{xLR;IP!rw!6>Bjyfh`Qb6L>+6+nDniW@BxWlantm(xeWk zTxRrGQ+0dcAUBN+_q*GsYxR_m6SggdN?PEM<1R(Ic}@|k#a|ARbV!PlVwCKsOk)?{ zTfFgxI?y8e4#U%y$8E;k$L}96ml=1iFy=bG$PDW1dl;lsHsaDa43U=UH$IvT1TKG-<9|fboZ8-Aci+L(y zy~KKYNA-EJ`{EC;ek$#e;MEY72_<1Ng6WA_t{=yb6|8*vGwbd9dt95Oo~Z@PhO(iF zKaD*ZrVf4@j2%*O`YkAitdd*2g`L+{n>lAJf&hhX73e?PoNdm}ah`Gb;VkbhqS6W3 zRj-yRVyStqd55(qHfKD;AEFjYP+N2wO9HAGm8>+Vex960rE`ug-iSm2H`0PwQaS{e zomGA5=w5p3y*C?xxV3zRnK8sxJbrJNU_%4Tq0T^1{ih+&0HzCVLVJL|IdnYKhNx4+K5yGz7gCDw=|&o!H4%HxB^IhgSv2Qx$S7^lXZR`|iq0RIgN3-hYsp5Gb62q@ zNT^S{;_V=Ykc(t!^w{NVcy*u84(2g`izj=hP^$LJx4y+-$H&Bg%OaO3#3_*9u_D6y zVo#lrEHbnG`)snwBVQ-!btZ*vq7CleM}Q~Xo<5!#2MO)$@#ayr-I3%f=PmwpP7^HV zXrJMxK`|Hp9UH}m)=jS4Rz$`Nhvs{+!{@fFh$-Ly8oU%;Ry+G4DWgq32$9vxbr&{W zzJNJ}Lm@89A->Y*|84yO+Ctq~Xeh{S!7$v6_J084|JE%E6uVP0rXP$aa`CD85`hr@uZaSQ6PYkJiuaZa?of83e6c z>Bxom`tj=_mFYYyHYDsDx4qV{{aM8~aKcqauf28^@pgO5-OBLguXk5OA31ynWlmBD zA%yk}a$e~|f^x#^YPIr?7D z2PB43kHt)2(adyal=ac@+86Hx z7Er3&RsNvu1B$`%5RcRFO7lp3c>)aYLdNpaCSfDwyuxW_D22bi|JlLrQ>n}t!W8x6 zcDyU&o%iMEtv$Lnp1Q$Cb#t9N0%Q~A;}w1BQ8M(aQ3woY9-lDYxtzH={9F$kPg6+$ zg?-Uo<*Wlhfgz{EWIhGg*?Z(^)VcF?cHBb6kun&v8Zw z?Tm&{Itf6IQ!IQZ6b74r)iDQT64p`H=_E6j8I>8f&H5aD7V+C1Z*E*t{nWEZ`4c|P zDeA>A&QJ6wb_!@Qi=SgJ^_w#A`;?GV+!QF#q;7fDmf6gGeS!l|7%h$Umb~F0lB~)T zggBo&@{9bvGslQUElPtnwpH~2Z*qaFg_p{6O?GtrlvM<`K;HA>v1s9?L8lS&iZldD z@l(~aMOT%+#b!Yfb5LTp5j2-n1{cZ>IybKeJ+ng#EHZHd(+qw1;1T?tp9mcI!YLl< zc_VPMJc0Xj*_Qq4ilT$<-n~#Q16?~J2DMkekA0hab4F$k?&N;tlCHM+{z`0Uf-*P77Zs<@g~ zE%ZXq8*w?N!!}3AArXV<%~V?!6>Yc8kNNkYB7--W4GOfP3A#BLV@@`sb{2b9c zFK?6JBmmTII7->`!SypeCOL%357X$VxiJ~^qw9+zZXbHqtwxpQJ=vxQX9=o zR3p2pzdTF+mc~$H5>~t^nSE2Rb9oOpUBV6{uu|ZUn%Q5~Xfz2R;O9>|Qd@RM#%sBI zQH!TF?*fvQ&L ze_&R0Xk%?crVmznQ`xvc?`VMZwxQw;P6+b$mUCIH<*)<*r_%v-4i5gTnMKsf7^n8;p8Wvt6*6(D#`3yh5G9x!RE0A*wg`&R%_y1X%7yirNyFCRP&`e-(k zxtlls=9zde04!~}JC2qVcRhIUa4y8X831edMLw@O0nTz?LsC)_*XHsVp?Hc4iOY+f zbRgQDN17+vTFCPH_MK%%6as?T^pGd~z6Ioz|N6}SoN;cp#a`UerqJYO!#fl?;af*i zPkJ~FFotN8j z53&OL&W`|3hZNc^-iwo=OaPWhX98wDKo*(~q=y8yrN`@|GN9>igXc0{2k_VL_(e}9 zb3}HPy?tHArTDe)tDx-V*3Mm_N&H`^Fh>Z%O9G4i(bg)CcJf`-2=bUc-4OhU*e+mP zd0&J?#E#yY4)8M?4PI?#lG*D0O7QdBU{gU1^0ogx% z>HZdl{Ns85eWRWcYuPi)eRHBztyoiWi5vMHld5PzOaDa-B{TAbI~M$Ea_TK{7hs>q zVLzkpyf#EbJ2qF=gsQB%+zEE3uivN41=h%%S;+uxX9^(D0Av>o6d9q;pfPNr4L%YF zgg**T$r(j2D%9ZBTEJJF5oiyw6a-#-3qFA3Dh1GTt2MmtTaR#L$eFQ;nAprfTks>Wz3lQl1Oo9d z5}0&~D0{oo&L0^8dDE}HX9v!IIanu?i;%B?l4T&KEAWc#=ac{ZyztO&jop0rT!=1k zM&VY3+<#;M{TILz|5+e8)%l|{W1tb5`)192$(Zz^n-uk1Tyj1!L+^EItC8II$&Ak3 z*|-PLABQLII*UJ~xt_R)j8Ytw;*xMk0YFW`@6Edn?#!C)bcoo;(szqrdJ}S^^#bq> zutH1iuMNV$8558O?mVMab};wRiIZ(uzn37MXRgF##~Cp7mhFnBh^&Y>q@kgCu@Dm5 z2$Xn$`DZ>*A2sYmP4{P~t8gN#mpBR;FV<4-nx4gK25+5aAg?%n!Xp&6lE%=qR>Yk6 zDkYO{jSAddaWE!!Z_m*Mw4T6VUq3!u{ucOhs!dew#zYtBuN`T8HhU7gd1tIZRTw%L zNciu@(Lesb-Ve>WM#gTc%1m*f3$*JCyVga*1)ww0>2!*u#cZTcz&{g!%62LXW^tIU@I#f^P^ZCkLFfZ%naubsNlbYF zyY3^W8OlxvAkatR(}n=2CbEQsz32^Y%t3tS#m_z;0HRiFaDEy{zY9DC(7Gy;k`960 z^R1;z?~79>m_iDS!>s3}n%c(_!xmj2Ls`4qjzU1Xm~IS2QrL|1x9dH2=V*a$QSglh zJOJSDRvUzO>@^E}>@?qPPKhqp?)cg1B63?RvK4|AqkU40Rx8w7W zgt`P`<@lUz4OjG(uDqwG+XF(I zVz{{=gpgk8*IcSEmW80fzU`@DjqJ{Dv%J?7Bb}Y=SDXSjBS+&y&xd-NNqQq-2k|EN^+l`v2a_z zN=)Xo_*G`mq|yPLYdRFufnQdNjlD&Nt{{eIkHkVS<~k^k18vUx7M=Rj1@pZ$mXc3G z5nGieT?&5TlWb&HBq)I7qM;~^)sdBzr3RE$YpQ+c3eam#Gy*)}y{?Zdu^ zf7r7myHU}T2{-xV0IO4Mk=cy{9wL^MQ|b394X5vr*p?qcqN1aDGAgmiB84E`#+!p| zz?{M)*JIc4c`l18-sJ1`VcH*i6~-|H?)8Q(-n#jaUnbZz6RVlhNMLrSX4LZ9qA$t# z$8)WsPahEoKq1RR0ueo{RN+^r!dZ`PatT5(@2#-{ro^YeXbuF~{AEVK_Tgrxcd`e@ zyrEBb3Y!9AV!!(TdFAe2RoC%xowg2?mIx_ zDL#oylGEBRgZtg1ujMf7P5I5afwmN_ya*}jBCr+{y<;>yz4eI4 zw&3ntH#6Y!K9VKrLx@}NxcIm;o=9S6tZ+24J4qGmY6HxBO47drDaQfFCuIW_-6ToK ztLhFFu!5xJcU~^Ip&L+o83>c^J2?XHfrlbcS+E}F0zI_@AiRHCu%d(Z-DM_g@S9UnKQq2zQ;aP1ZZb`-i_$A!y1PE757kD#3qMYMh3j>m=Olwb&sPaE0>F zCr9z&Ob`nCfjn5TBMVZKlAgf02kClRaI$%(K@FxH!O-H-^i?*#^95Jvf)Z_DvjnxQ zB&Cm@3dtop?P`Swd(6Ke@&2hXK`ld20La^skNDL9H*kl&46J;=@-uz6R982@*g))^ zbv9XaswSaUnPz4hUs@bavFL?q0m(gC=-2xP8?6PASEa{Sn3QbOoo(|zP`~H1mtyCZ zGs~3g)3vDtnjmbTM!rHO3H#K^%D(T!1}Im_FdV`fx9tt?hc?)~7hZ>^@Bs>?dHkZV zm`8#>kzVNP)y_<@qs5yMvN`47q~r}JKo&>@_L}D3 zgxg{}PgQE|IWvP|rkgq}&bFC+efBj*XM6qRd&U{9t`$$+qu=|jD4>9uidSM=^y7PFeq3gWVzeD;~`p7MAlLXWdB>F}2eF4ze=;X@IahjaRL~BXEDcw5(MHJt zhZjtAM!p3SpI2H^rd)ljQbT=MSyp#y5~2{+#CrCSQ?WfnR%}MN4QvtUpDfS?#-d<8 zSGWB7D%zsJ|8a|1o)@>_%=m3+8mF~~>D%1TpZg-oO`!L>F zL+xj|4=iYxm_l9qEd5>nt_AQhmDkR7pvhz56;Q+{nmS+VN5?^)?8E~`4~YdQWEJH* zAp;H2(|ZDJWZihQEJ$m>+We!VaK7fjBd zRW@;}n}9B2pf^rLL$Ba#g^# z>vRip|JB~hxile*ztZLZJwl45$NEoXdq2fgPmqWtv->p$Co<5^HhCo0Pin{De! z{v<6oLY&EcW|VLBHFj15lE(Nzp1}^NW-~ME)pAU0E?-@uz<(|;KS6x;vKG~X7xXWr z%PCLvYeCyZ?;sL{R5Sf1jxnf;W=aYP!|x&G66ih9$q`Nd+|zA;eGTAKD9y-P}%GJyNr$Nu3`HkS1MNzJC9o_q1Y4=YgBqeiQ3rE24{QdI|?a1_9ne6Pp zIB&+Jzg6u)Yq;4w43{F$iXK`Zvm>r|<7qtBT=V~xb{~ZsF;fSOD&FfidJcbThq)gm zvD5h;fVd&8(aWrh;^2{StV?{u@zkp&C4_0wblzKuQU{j5ocaPw2*Q=OWmD72KRgME zVcVvor&PiLBK7Y0zT*`OcXQ zqmNOTNpAg5Y{Rj#DxEZUymCJJ=aqp3vg zJ54t8A&SL#`Ys^5W+>wKm<=UwPJ#oWGyM+nk+$nwOHVJ3gYQt1vselTi_|@4W)T1- z0$|)@(DS*RIt-W6u{NI9-6bG;daFtKfpvAvQ@y_$6=7nrF|l2mxwW4^{s`OLu{ep< z`%e`k5ZeRg8I#~&!agV6>!bN;`(dG>g^!XK$Z55TVPL__m#~bKp+KAs4XKa_*e2c0 zCRXe=b?RVcDxoaGm)`{8xM4l+{}0r7r_{ew<6mJ76uWz@6!Zr(Zby+(rD;*!8UV&{ zZ_(`O1DCV69V|SyBL36sXpbHE^XF!j4U}blHa`ZCZ1j=$M)13jR~j;}Ug4`vlKyxA zu^-h$?_oQB!puq`=r*z`bl5iCC@wC}@p^%pq3FyYkyWo~`@v{h+0%Y(Xr?;eINscK zOqb17vsWi7(TZj+XhR2T$LPW8X3sZKk9q873bJAj<-uJ43XA1AC5 zj%6NAYpKmHnKieoIV$KU75%S*WFSGfD5*d&^M6|0D6Rm!^q;odF%0T- zz28v-L$IUQh9yJh%#HI& zC44hD>*LWtF@+jR_*+Oqd1hn(;x{p?w=0437PCu9p(TYpld#&yL#JL`cNSmc&^miBUNj#;GF!D0~>QJ%8%msp@-gRfwdxseA$ zAW+@DaU9;Kb_;v%t_*qo{oV8B&io#?&9Zn3hPZzyhD|%3EmCEsS_6(Mgf+tJE=AVuJdO$ZPkR6247Uj9?}0bS_1D8ykwac51D>X z3AL5QO6<3YDG>8{@>M8^YLYT)|DUOA{}jA~UDS#w&^P73s=msP3JnrIaYWwXW2sky zejlLxo3>k3)GZ-vnh9Oly*Qq%Pr}RptR(lZhg%@J&lj+hMlSS7n+2xFcaJ9>jwKeU zxcQkBL)coK)A-I!Kx>K}nEPe};OnaO1}+0mc2E^QJhodn#onr7k~ehL&wl%1IW3Ml z98H=%U(ltV+8Z(JWq1?`Pv@7Bdh+uAla~V|??1X2{`kmK<$F9a-QLG$Wz2KE={2#w zURG9ib-X1v2y+-GBFv5Aw)-eSMx;$De(N?GzS#fvhq?_J99_uJtx@`kl`8MH^^JSEiP|*{Krs+<#EB&5r`hQ8e_r3)Z)Vt^m~_<2TFQ}EwbQ=Zeg5+9_=8ZHe>M>BN|1hepD8*Y5s%li`wjPTGkx|%o8VdKTzI!dD zP>7?keGV#rh)b%!e}?A)gV*6UDcRl_|5JjYWZ^73BrSRDTImC(UgrS;Ql zSrX`(EzBB4pM>@n%AW`bOv6w5N=hCQ(*t!H#N<~{!dI)-WR7t=&-1^;$c7Fyt)|_xPV?BpTpB zI;PW_$uWMVaAlm*mnN*0r;xs*3(e^|u1j|!q?7AXqL8%a9FyZcX_Mu#pJtl(6_jfw z716J=ou!Krz6!QM0As;lOUgnd6Jjqa4zVWawcsdBLKoe%BB(qAEUXvD4wUfqlEDv9 zUAiy1P_9n2&1X}zd*#GNACWr&Vz^WSOu$KohGOi}g=A;2iyNxX$Z0-+TS%4lss|^t z5Na5pxYG(Z%$&6wSr!23tt%D~*`G8BkA04di{tR?jH!A({01<4(`+EOQ89l3S6}^I zH*qSC=iP=Ci`Uu$7WJu+EcAn~B)=|WLFdZ-#+aaGYZL`FgaO z@W+_LiV$0UR~d*a`-LYK7xu>vG2k(X?w`b=V+}1b4iIp&v_NdkR)^Wlddx@RRDSK# z82$D$42U%0i5@XpxoV(VO@3*eaqHSX=(e8iE8tHG`)HP*MN`0TJa5%neZ911qtgXse>b>Pz3Fgn+S$Fn z$iMWNSSvaoDU#+q^eE5RnujQhoG#EpMVS6rr(%iGoViqB-+TjyK%)r>s_ztuTKy@B zxK2yc-6(&~QPiAdj^Xeez*VcHI`z6NNXl5p) z*KK3sGixh3iymY*HWOm|Inl^Vk?XL(#geGZ9N!*Rss198{ApuMdA4M9>;C-p)IDB` z0dDQgG@hC{(3O7^)8@GUronD)+dUrF;$pNB$Gv-e*rY9fpAMT}#p|R&w7X|qG&!ij#Jdp)=3tl~bO@ z(<#N$K;~A9%5N{^$ix6@y@CFwK(Fm(AaR<8V+fFVXI#Fno48<@!M@t@>KW4_a1fB<0gfq$Pps>Ac zEGsWx{hc541*)Dy+hy4W+X`lbT{r&OdOkPD$UUnqiZ4zZgUP~rY9G~?XAyG{7eRqd zJSq_;pl-sGw7*qhv1Q#~b9qs%ye&Mmw`e5q?cF$Iz01XN7E5W6WQUm+Qm7xaeIiWnO=T8v1FRBQ^m$m7GnyS9vzI z&Gc*>Y8W3Q;%P+LeC_|9-37fT@8{)OJ+S_*UX*$K_^Ud-^(W^!Nv+haJ zi*A!uf3NPRmqQOp#mKn5Bkzn1eimu*`Be}{yRxJ#LP)WpE1%5qRT{43&RS`{HkD*_ zUhER@f7$<1RzdDl({7{u)qYG{?`Yd)Dc|>>uVF#y$`x0Bdy8FlHbI!UvGC06__GUP z2EV@Jv0G^_m*ZlI$A={%m6aKXg$d6HXw7={$(5j&`m>4fz7%H2oO^0lI~K5Yi?E$- zobsQW+1zjj3#=l(S3UV;+q|#HZbe)9xsDU-xuEl43u0;z>W7%4{VJFEaj*}b1>lo) zDd)vzKnb^hchV2gS2KGvGp{4&Hw(pexRXT()2`D!dJ>pLd$o)Lm<4z@0ZzyE#kwLY zMt$QKsEp_}XW#sN=I`f+`J&fTrZsbqSzC^>FLrp9Q!!D_BXHqctfJ7=id z=+fm5qFw09-S6Zq@yZ>td5p}+Xz}j-^ef(MdW@=Xzs%_}eI!h7bs(KNU7@Z7wDGo| z%O@~>d>TRg9>Xp@+wJJ~gZxMe&YpYltKhZWdd{%2t8JRYX@cJm{}DV=mt#pSOUd+p zW@H3Vk3c5~ia_}**t)2`gwJiHp9jDC%L?cJJo zgzUOMBlY8x(F=I)3r6g*q=Iab#$S$FjA!PMV$Y$Fg)Ol+W zqUWm}Q^LJZ!TwV}RJT}WkbiWitNuax{v-tniP=dTpfXT}QdHtIcoEaX7Tom%UW zNoFc`?aw2qw2849KSAP+qyQpnN@THP2u8(|a*>zCha*a<0^GE0pOc<#DrACoYPN=N zg0PQAs+dh^uP))(j>GDv9Y`v+=4$0TqbW?PtcZIvW}CKKuh|cstUHZ!I-{fwZpvjl z=m>3A98%%Krul|oi0beybXh)yhedXGTz3$ z3}}N7UD$w?MiQg9B_QwZpUs6x{AISFg=_ze%CFp zz*C)fHY$k~{~a;n3N?$m2! z`K(9Bftk7gWFsBph3eVmuD{8Zd1OLhkbMF|(Y+!e72_UPn`BcT>fPRVCl+T_W(UPa zqD**~=i*4@S0u1#`flEr!e#D9rj~3)>F#*tp3d(xV0xik7q|wLl}~4kP~l+Zn7;gdsBE^{m#p;g&m5+k5GBK7a%#+sUTg!+>bRn@Bybu)&n8(3 zxwMM|bz3T7)fNtu-bBP&@<3Gf2@*lYrfd>j$s2H98nh&3M!hy&Cnq@7dw8(g()n(S35HYtE+H@(8+kN-Xln3j1#V@;ouH!Z|)#Fwv zR9nzDA*Ohv!AX@qGIWo%=(co#G^#6N)(1jS2Z_0pGUo+NckW8}kZo)AyD(3(qO*zF z^pOKF!>@J8A6{@y)TPoG)~?0ovpX_}c#HPV8% zsZJQrKb<8>KWwX?U&EX8+=|Y`yeBUzRezj&t=Vi-Q|m>cIU{itlXXzr@utyJtyEhP zoQls32Gcv7XGmE($vp(eAX;c=OzP{P5hbx-;|0(kAD_zW+W@OfJIbodU#53>D!-S% zhO&He0V6A(f$ntY(=pvkoqQ!>cxhKLE?)8NdMd@bH4pRpnf1}UsV&_Yx!ZGVsG}(@ z;2G2w4ajeN`umEpe+ECG;xu)S$$<8jP+9ay9jd&YgP2S6TTu2~`5!zXTq8F{tp)A- zgf|`8%VAV`r$TAwDb||#=IMerYKmoIrB~4pcynBFI0DuE_`Wfa@lgFD1E;q*)${sn}aeEigE1l)_;ye{U}Aito=OlRwIV?CA#%)%kFKLKIyVE^W($3 z+dBbmr>r)>_L1CcR7k2^ryXhtlj3o>niAQo>=ts(Zhr|a)YF3FDcz zZhbpM#(XIujm+UqP6-hN3U@vxIg*KBS{m6oo-~O`=F#f;-68+8#c#GC@DKp*l41g0887jL*@qjA`6dc_c|^q0>^aVg;}4YHEYk(dnnXyK6yr1dbr_8auO% z_R#w~^VqvfdzAmZc-o+|=+{5GaKckq*Du#qdYV>)U{+$C3)nRvOqyD6K1Md0AlcJC&jskf$gOJ=bHyyi5z zd}x@D-{5ONzUJm8BRih?uomp10jFf2A8QGX+f>^rX0>QdQaCr*YYH}q9mfOe9KXIu zi-Q+B#-Wgrkt#F!CMC$a=ugg2;ekibpT)zMA&nyZ29EEiNOv4ig69CttE!`$*YQ%h=%HWf=~Sxaf+r%z5UIlM%|-mbiX0}ttJ zJlaUqisNQn)dS9sMwJzj^nLm&s%nj|tbC%+my2-WqW~+%Nj}04#TOQcQO@<+(2J;B z^fv+01<)j~(4M4)1E;1IfGSvB-X+}Y%AT7mmUAj2sN%*~U&v-2Yy-_p zAk`Uml2k`~L2rw4J_Y?vQQ~&pLajo^V^8{z(xLO`w^y)$LJ~@i>I)IiYd@`dS9_%v zk39`a&pj;wYi4%BW3k?ohEGJk-%rZ~Nff76@vFk;P{Y~DIqbD_`1JuXw597s{C=@c z0+gp=z|@w-&7Bj$PSGzs;Pc3AS{O!)avGl% z$9>^yC$~=w`IZ5?R|k&e)k>V4>Z5Agj>B2DcnTxVfv8G*&K;Rsce!Un#NH81pOZEfKVx0>ovbcOITQQaUc+xlO z*Qx6V^A4N0nqe3oR4G$PkK+v+A^6+zd4~Sb<14?3!9j1IK66T!N*->!cjer)vHWI7 z1r94aK0DQt&shzdhm@9bVegJ*0w6~;w}dg_9=fO#$D2@2ml-9G6uiyifzpyuh2!nf z-ke!PzsDU(`=;^Fm!&%G%tu-7@w3;EwySXs573V^=R27gsgh>&+V2QxnAn7`2E~ZP z5nrEq;Q6?X)0CQgkRdE^v#R{>d^{G0ei!}@TU z^|rH7ZvwLo%GWq|Pbwoja$(Zlo-MaJo7Za9S^>J%om+ZiXjZA+K%c7;HK8h+!q;vhj3NTUzP7P_1Ep zC$85;q5_{(Y;E~r?!Fi7dVbMfMXo=?9c;hpaT;r-cqJU=eXSwsk#7?kYVfZCK-KSX zA!$=VY&7SdI~)KIevcZV@8~@-Bk3T* zHvcu_8=sZ!mbY^Vq0?d`d0x)ogUEIDZI+bx`GKY8bZa@{WkKd5qaep7v~Zt(KHvxEIY zx#zwu!Ea&Ibp$EP_j2?&R^HrduQ}HlMmAXzjzN9&m~AFXJ`SV{_C}do8VYwA4~kg4 zi+~&STLo}o97}bNN!4b_MMXq% zcFU9+nM>FaD_{G91_fLza3O-uC_OfVsyhvKtR5MiBe-84qw4tf|%D zu9Si&f)>?Xn^=cU*FWQxr!gP99+i-tpK!V?%rWG&Qmhx{i=TlUVKS>h?sp5w0wRTlAnY5h>_<|W5ZUcWzLmFU2V!j(Sg(%c-}+yk zgIcQ{Pw{wRu@Utejt4EL#b^Kj$JtwlMVYq$!wQI^0t!l(q97t5T>_&hDIqD1(kD! zME0S*`YWJQ)4^`-ZMo64a_twsx=k;SUZWRsD5?WQo5GGyANE{sd?SA*dMt08PuI|L z+Zq1qIIHCK|4LdRT6hkfpFxz@1`^bUlGWW_p6h!iP9N0tJmYvRBJUi|kZxomkDvPO zc@C*{`}29DV>5M9cTAn;M{H`$aFfrq^Dq&QdP8Za)VZJV-f&-=^b&3|+ni(5_NOqO zvp!snwQ1d=6q89K2wxOw$3>4B__7tq)ZMzpNt{x+FiSH z%ZZ8+{GKBVE+bynUNhua*#w-j$O2(vD7knTj319ncp3xpA+0={&n+ArZ0&8z#~zO( zD{anxpEusfDT~90+^WHJ_N{#jJEA=O?N*o#*<(J+oHna%8_A$>kfm-FUad9pf8YP` zTSqKMCua^Z=4fA?xOw7eojCSleuFNd=wiqx%@Avh`!(Ah ze<@u2s8!w`x_^*(+|}N@pLb_}aGGnVT~N5Sy*uaRqGDT?Ow%7OY) z!qy?W(;P#UC#DcxM@sLxk=?FW_;rB(s6UEQoDjexP$|T(O!><2BWnV7^j2(mCTs(_ zC_nB)%H{n_Tkp6Oh|>u_fT6cBM6@`2Gc94@T5f0^=jP*a53LOO<8IOBWS_-T#^yPh z2_B=VbU)XSn(0oG-l=X^x^eX?*TL~s;vP!coGecaQB+^g726%u*mR7y^3p5!*C2!I z)odK&Ws?xI!yYVlRBj0%_kat<1b9CD3I*fr6ET984n!Jk!->G02Ae4BAlzfGl0Qz} ztV4~Ibr~ZTJ>UQn!ig+WAfg$x@fWWB2IP~!$Z$V%3>poZ%U(z5x{nbFr(u@XJ`3Gn z7hbJSwV91JNhspK3Gm8=tJ}sJ!MP2?9PJ)LZn#t7TGkaq=k3XuN8mOvy$|y=%0dV0 zNMq}(9rcb}oO+(yyojiaAlegLB<$gz(Dt}j2I7sB6(ahhQbB)QF3Uk~Cu^-tF{&ib zgY~9%?R(tqq{9|*1#48sCy~QuFpbbBbaSY=oH>Ux(2_nw#OmXM#W-~nhjD0BW_O}s$#g~G!r<8qZ6|Fh}yAx-;9mPze3AonmR=-)$}8KkRTBjI*D zw?wtzM4N#?@MRJbzK-YKOikG4E;A`y@#$n%Jl^s`6rH`q;Jlv=rRwYF6VG3*waG6R z&?t7OD6#65;px2-oD{$;cS#YGx3Y)1 zQ)@+=Tnbp(B8!I7w$*rAR^rmn6_f1QGAj#{aBO;y+BIP!gY`iqbxeS$vA zuYE{@)uH#B6Zy5Gtc(N;6{1FmM_Mf=NDV9w<C~X^v4ETO2{kb5oqSAd+#+IMDDf_a4?@|=5P|PY&1ZQ{HMaoH|1d}iFbUf|9(~;>7Lv>rHKj7KUXFw0j|WEHu;qlQB+iUk`rS#m?e)S+(`Fo6;sD_ETV-zvGb&G; z@jlDF+fVNuXXei~Fl{&|{WKrS|6b^R$oNdghfHXx3NOE)8}90A##gl|F%9-f!>&rP z>X6yfvnT$lWmm}5d%jFm6q*ZsJq<0`wDB^j3c4{Pk`n^!aP4O(!nfln!&?f2yDvZf z(#L)jWc!7!ty3=^vgEt1H`3M4$-{8zhE%R6fz!&1c>AQy_3;dZDm~qfdNs5P>ekT7 zjIFwnW_i1??~*FClw>Q56ZI?}xlPby&1Y#g6qMEZ zGar;LEqPU|Xm6K!Ak>MN+g=VNQ^gZ$f{&S7n6=|{#Sk%cH zOVV*&FURhfY|`nh(WRn5?1mLmcgl`IaYR(#DT%bXpCN)YtM$yd@%aw>^eAzE&4J7( zV9PU{v(mA#E|^}qbB8KV+r)2v7^LSX#KGo^>g{QtFyspDc-D})9MXv5f9=+&+=*w> z7S3XDj2x+P=dW9NRh$eMA}Jb`LjF+Em4fIp%^=!Fim3P^BS*JL;KQJ2_)4_Da3o8K2S_Wc~Eeq27 zA{@Y%uT%qCa5h@obhNyvBLRd)@cCe6koi#uj>u1udn@BLRU+i^tm^(()x^SPUrSfSNaYv&U^ojwH82=?%b<)bmrg-z^IJB=1Z4N8$^Sg%Q)IDDp?)&0 z)9$bZw8&=!)V5q{)L_=ITvL5sz^dLe*4?blC*Hu@lw+8s=WPX3hT(Zk#FIqVC+cIQW5mfvU4 z@)sRQtvapGvCzT6TJ0~ftGUS6iyDkDAJFJ0u{@QL>>H}3!d z7;RhrHmHBG00H5y{IOI$u(XKd2r=h#kJ=JB`ZWGP|0pux@gz}stN7ojy^yiVcFp*j z(AocW#Q(bFf_6Pd7;hDQS8Hw52V$jo`zE%l8cxN)P3fvhc>fr@47YG7eN?-sV+(m6 zGXB|_|GUQX`iL{T2bCX@GVYgfO4VO<)Pi5B=fL5$K(v;8PM8)maie$oClu_jEZXR; zNwM2YV@n^$SzUs^4{=u?yP~4#akJGo9ns_dv_H?GzoWh&3}t6u(xvrtGoVEHjQo$h2SZb_%$g)GNwE?5v|v9vyVU2e$X8jW!+LkH6Nluk}NjUM2}ALlX!M23|H1ogXj`{ zzi(DQ!KHqzUMFy(Sl0$(kK5o6zhYr%0IUp@Ej`#`7uieh`8P%Es>cUvh6vdqZl7*|AdkXxKi^x8=0ZmmSs~%a7n2>&HtD3wuAaQZ`<~ z2jtg6My#oCx}#AMpyh@jn;rZUSB2Y;&XKkAYc!Cj$&K)FeT|#&r>{<25IrrFSY0d! zGmC$ZfSE%b;F>t4oyfZt~PBcAxVSj(~K9^hnx*w;UoOp{u)umtK;Rv~I5y~(l2j#y^EIB_^-j;0^v zI899BaHAi~!61q`w`}z;Si8jxP+x z6nqK&+)7tCk(KbP5K=a2AawFCn8Pp2!uKB;dU2>2tlV^z0T}@vCwqq(RF=YgeDPZl zjs8_H!U(B(--9z%%ggoYbdOhOd-ApTW8W+S)U3UJ{5016uu}`8S?A^XCO8;rf8OA8gXQNe|@g|8!U; z5(1Xl^L*mFi`qr<8Z~Yals(Q>^M#)bngT;TFK&&gOc%4_0EuOeuX5mQ zKpHW<)>6?dGc!OZ@>%7;EPULJf`$WS<&)s`o?C)Xe!q@_(YlEvv}z9UQWj0znO#yE zq%ZrPyyP{2H>j#tz#rVd6gp^EQ~+6N@I4KRu-S#qU36w3>(p|aZK`N|2vu!9unaU< zK>hYQ6Qgq`Op}V&{8mv>k<-y*L~EP&n)7)=b_@Of8iCa@f4zYf;M@`l=B~`WdoMs5 zy}nfTV%XhW`w_2=mL|LXK9(w7n3eyyR~4X0AF?=pT09($agttztvT z^{LY}ce7IH0Wy1Kpr)$BDPK3$Pbc5L!5rUmMaU6|dEmmuuYdtYTx4wZ?@!B(~+uIKF2Fy~q!XOk<=;`SJmcKWPEs#WIPG`S7 zO#ohx(MbcYH80x0bDUip#Lk@NJjlZQU_0ub=WqIl0dbZ_#I6sY3C!i`Cza2?* zZ=Na}aCr+|pKfZo64pSShbQER%C(>3<7xT;OusEehun+{M!^#8j%QF6v*(nnlF!5_ zalUMGppqW__<$2wiI!gCqbysf!>iyO%xw}i12IbJOs=3gltEvsJjv^XfX#27;m5+@ z!%8aPEh>k#W&|aZNT7oh`{iu(l@RJyQUy^Kp|nC}hYwR~`6C}r7^Ssb%fCe{Wmd`Dp782U(g&lnm=li^IOEM)-0`aTP>=@p3Gf}XRvDY zd-tiO+;P}R*Oyj&DPOaq=e#G)b)8BlUZ2VLJxL9!Jt+^)MO*C8gaf{qG|afeaIT$_ ztPr?N^d%x}C8p-7zeOve4q5&{vx0|}>_*a?gtb+04%L>3wzt`f~@ z;McTPZ=nW_q%!_61=2jR-@>?GRLPQYY`E@%*g(cJtRiPN!F?45?eqpHCq`lCmwejK z&~zdXlbj1I60|c3Jqc$ifM_ol0DSah+ncxojH9I!lxShu>%eJ6cyQ0mkxmC)Y&pb5 zZCLy4iVo9<^An={qu`u&P)NJs(uEoW0nR1#;wkeX5dp2Q$SgL)ggfOQSap*`@#AiR zL!-J6U|CCRnin^HCDrgOP$0s@cZqA4KU-JGgT;los0^&=>HD=_7~_`2k&Nm<2QTO znuMb4?i+^3anKpP|8g$6+E%$emyJ%G-o3hIkZ!Whun)if2`M%ca2Y2?RraSG{NHx3 zjo9bL!T9IiGBGh3x0yu&xAaa<>O8Szr#Ttl5@4z{!+LJZZx~Un1WhvOU37dJG+e!5 zmYxVM3&k@JxA*|<^bh;pwe7+nPnA;I0EqVo~G@9vqI6kT5Gu=e- zaaZZ`z;FMCA!Ond4x{0VJ9(&&mZV_b&d_$(GdMrX8SX)`|I|5;(%du zR2~#}3Jko$`k07ZyYkaCe*r@N)=}Tvq*!utgUhrABat+q^%4!PRBv=9PQ+e=pNT`iT-Jw% zthp#~n22^5bH`DK{>JMi`^<-Vf$!c$fMRN;S4v6>`%o2N9RP|2V^ytbcM80q_Iq#; z&ZafME-5KFQv2o8r$O|=X>ei1lO1`7TQ$T+{l%9_ytlH_GBa`i>sWNg<;=`uiTs_9 z>T`Ld_5J$!&=tCxxTyUwsd*Y2)MG*HR;)I<+k!m1O5hCaZm=J83nH_?{0 zl}!Y_2Z%UXARUzsAiP{pKb^@|N`Fhx2j|Cp#wv4(49^gP45{VGc$m|-QP-31@62?tC|qZM zE;iIjE9qzfPAlxx9BWg19l*F7a*AnxY2|5qt60!n3`z(=Ls=lQf7qjH#QmN2M9w9utHzb@+H)aA4Qvkv7EQx_1 zmrj{=jT!nTwWTP~vH>{k&*w8~Sb(Y$*NB1P-o`8+#b}w0-iXBg`)N>A5z#*z zBN?)0YDkn&f^PvT!B5-^O}fSlx4(vM-{?&aWgS#h*a_f3Gu>i5gYk7){_yV$%Au_|mI z0-5WU{M>8%-J3}V^6`jq|iE79U z&)Ep|j=~07%Mhp4@in8~#Ri}w#te87&uIBYkFrL+Fe@bF`lwIKl=n0-f&6a4K5b zmAuyX-~>es1XO_PmC@X%G3($*K)C6aAlbYB^Qp+rYCoyxYr-w{;WFn9bDIB}tfm07 zia&vhumjqE_o(&-Uyqa?jzlg1Rq6P&&?I3#oj$Kkb8mAEbYLz|eKZkgE}{ zc>n&)XK5AK`YqnDf#|RS#FO|F*deI1+2_ZaI)GR&w$K5G=d_Fr8F2CuF$5=Txq&sS zjWOqG!x6aEP(NXiFW6CUsO5b~OJ}O`>ayExAq!@?!l5AYq-qy~`fP8nzVL7KRfs65 zi|2r#yF}ME3oEiSp~b|cX#v~E-$-u&*8BbY5-oclp2EBD30XqPFjHjlj#}+m7k29e zBOg)UkXjlyiqBN@hjbF()g+`l+(*=LAz=zYKa#Dx`*S+r?7okSyDD^x>n9A{zce`5 zn9lk^i15wH@h^|VOrY7M)w*B(?4)0%rCkGl!zrL@B#lo*a}C**+48N?-)MJj^@0C` zj9*9MPm|&MAsEtdp}7d8KdUJlh7~Q4M{Y5Km~Dg}@+hcB{O9=O-}>l*1R%T+($bXpXH@XZF!4BhA#1zkqs;&HHL)ygz^#pE zWBb3qs3>6J?i)V2{%3&kYjgcCaS-ANc+{}Y$jJX|qMSIHh;vaCQA~pE)5*7ZKppQ2 zaJG*sFV`fY){;L<&VGxWUHe&ScH90YFf^?k_zAuB&%2+J1ff(z#XuYj&Kbin2mo)T z0fCMkQ&hu{rO+M!-$kgP<$Sa`6s6Ae&Fu%=KMjcK90U%l;~j=Qd~LEi8KCI$&s+WR zUI;Eu`=eOgc^dEl8=23Idq~nc5)qNG|A7sE=@pQB@W6Rxsf=gd$Sebh!ivvNfm(w} z`7};@efEEJ0OU1jQ1O>3RG{fENF@O!L?1pF;lEFWAGf@XLpf9;(?C<|!GL|f+h_U; zXvqsBHZjC)r!v31I_I?a!ZrQ(5B40=00yPjZK$xxyAwE1$X>r=LzaEEpEh|dnKaPX zrs$5)=mf^xd>0emz296cJ4 z1O4q4>@uIPHs3=nv)25+HUGTZM$&T=zWjs}KErohC>Q=qPT>0^&sd$D%jy_G1dlU5 zhtOTVp;W5$Z1(1P1bK~Q& zIJF2C#D)RzPRM)}3w4-uY z2>nTUkWsPohjgpSrJ1%_%m9_otMr~R!a@%?e%GdAIAB4I04&LyAhM(51y%@bi5>@` zO+tD$SfZE7!?7Wl$=>j?z0L#Dq?*0RD=8=C+4emb2RTz`UlR1|YR*^6QIQ@A!jEeTrf0^WSM2*)OwV<38w20zbspc+eCp3MN74-y;ZM{+yx;)7U^-XB{>V_ z8VSOR6?ii6chwd2+z%(@nefdK))AiA z0hUvYxdYC8`Bb2YBTDc+BGX_{{Dfz|Eg8^}bT~_aYOBke`rTgF4EtRUeaV9-X*k`2 zzhZwecjZDeKvi)23`P{Jpw0>1S&QMdFkDfv(9SKh9=Zu6Ys0g$Zb-|^JLTH|>KlO{ z8Q)MPH;DN83bq@_?g>g5^ddmkdYB;}o+-}X70a*SwzIr&whtv%s7FL6Fn?BmmHXsy zTAE?DO7?rgz5&1txq6k+5H(s+aBK8)09hMQ!^S0=rO7*Xb*;iTF_EKVL7g0__7GL? zaR#-zlqPJg4syX~#>nEj(VnJOTT7OspD0l=YwT|}3!ghzl1}zyAb2AL?TyU6k@tS;*0?Z1i_-SP~v#P%(?c}?0WD%R|`GhlE(q` z0O;;&(khjE`V(!elrg5KP#y_zUk^8!uZB^%IC885(lAzwwZ8nrg6#V|t=RQLsB-52 zx2*cIR*3GoPMXpqnAx@)@+~CaO9}{3T8ViBvaVS+h<9UiqLyO^c-t053}t(RVr|4WwS#{DR=*QLHkXmI%%f;($hi z99Z+WM#_fAnJ+rkM>4wzi=Xb$w@tQjbD^MNOz3ob2Jke?C!U$CtH%ja68RP&0ldNy)r3F(ANvZ35oTUL@2rYRNI(hg zME9DcER>Yk(Tef|}R-Mh#{wvbgdWhnv-R((xMPEBe4NF_yHtEesO!q!MN^xYCkDGsllo>a@>3Mv_Kg>|r z+iANQz~?pUl6Y4pQ{LLG9|D)ULOr>I;GkVP$cVKrR(SSducG7HFwAIg(?Q7eNV?epJx#^EN(u9n4<^_ z%xvh%rQ!o5fxDzzC0nR5$uD5v@_&eLQ%EvTQ3+)#lj& zZJAc>Mnq_*6O-jkqV=iu=RV*iNYt0g7!Os7Q03WeAtC$3Mxb0QoD2> zGrM?)h2j2AVXabgRkQAtSJJoRCe3q<+SGag{jZ8WMe1d=J3MbJ(vT}K>^+GQ*bC>h zg@*!1Td*m+S!sU`1DFDD{{g6dhN{jHe+C?M%XqN(#pd;3 z+8=-0Gz4YjxfXx2xy&{X7^yrrY@j@1fci zGJKYUlR|`Y9f)s<(^KXnCpy7mvBC-RI+pP#ajm(;&!okM@4C2G0~3gmE2+7vx#nfS zX2M|O5IxaG#~oDV+|8iqwtp&C2&xbY4*1$!G(Kq2gUi$fJ)nR782qBY(`RLD#o95uc-_9_wRa(|$bf8$k$ zf;HQNb}^=_?Y`VX{CL+fryM>+@nHCc*)YVN7ymZfd~j|lrWi_Z>gWmzTc&%tD%@ol z#o3R~_wx3b`eZ9;zwb~Un<)Zt5BkF;**##-!E&HtA9i15(ha%EZQTCslv%00#Y087 zA7#d4(zdus)cel?9y?V)Gh1oGu)w?mIgVM*-An|U6wRHq$%N#iHIl^Llk=k7Wd+Uz z|5+4z{H8N?Nf*?>jDtj)jHl#pQ`UM~m*1sx+kHY^HUx7odl=32xyH>$v-8-#&+lmU zwIyMnxu!daYnKbZpc2agTCjr($PY%)-rNHgCa5Z%fns>3g0KURg1PCMy7Jui!a4Mw zI&We2P>p=I_lJlZ7Y%y9I_h+%JW}d8Xv_y{&^s&_Y3Uy0mQ_vw?Gnq%Dt3S(9LA4D zcIh#wM-!A_c4`{h$K2F-vU0;@h-n1sJFn!P)V4}}5HL4j5=ZH$p}ga$y@lm}w-kbW zs~K`#r`DrFC6}+>Ne;IuMt3zgPXi_a;8vd+Dtjq%K+x>caZaD9zvU~#Rl(h3++;F)iJ^}i3q zx!Sntcx-V>k#Zq?ZuQ$08@E#4ewMn(J>!Re78Is<2nE!4xF?)i4~`{pXCHNQ+Kt~4 z2#@=uJ+Zf=Y5(-+^AwQ#GLOFh_N=bB-CPb)PqYW4Vvd6uH?xtEpn2`mc#VZgtssZ| zwc~Tk<2ACn?%S8^m~+JU<)aU3T9nvsadL9jebQ$4D$9z7%XhQfJx<2MQG@jS?2@9CC`_XH!f99D|TwG)qZY)U}0+IXRL)6C5ML_2J>xoXxSX0-#d=8 zVp))kwRF}7x3lNm#Z1l^uDYF?6|wKrt?n73%3`xRVov)kJUKjm$115ovjbR!+Rc0( zujudhtU+&PQB1`GA=MEFC&CnPT1k69;x3Hj}P| z2q0HKT%Q}pmdCO({pB6(u6oBO&$Wir5BJ^esk8ERYhnmfz_+;zw;Xyp^7RrLuvp#@ z5$8wOYVzF9Y2*{JJb z8*R{;ugT)@0#V9d7;-zsez5X%b-drbBD+PhE%h2W)$47d0f3#Z!7V>Ec8eq7cn?={ zX7nY!oZrf4@2nZW%^PGoA9of;qhF4GjmH`B-!ztr2%ou6o!4*iKHMdvUh~=1&mH<4 z;si1aT8L{h;ax%Ew&(G*arX5g->$wgLhh^-INo9ip~qv_mf{D*aLVb<<}?k@S|P%W zAJxU3M)eTBKF@f!mX;`dw|J{l>#Df$J?P5>xm;vIJ}3eVQpJJeN>*LR6CG$B9`GgM zYb4=_0;rauhwAb4Wlk#slz{dWEO^bA)&)^8R&Y~ZzXa4^_yW}UmwB_d&`=o%Qbwa_|`T7TgaGvoG-<+ouH zdV_XE=r9Xy!JzHxR?0|dJlE{$;5puAw_dqJou!-V1%^?M)sC6-Yn_@79dDz{qNqe>e6iGy3PP~s7a_8^7 zkhfLZa%`5#6j+KwYl?Ak8B`JF=P5)A_-N-(_W{oj2d5U5$-yD%t_QvadLHYqqV=mv zMqQEdOhC+q)*6DmyQW^kLG{&2i`Om=Wv{#dihcrTN@09@~7E;{T!KMbHkLspJUWz+Wg&ZD=OT>#?y?)t5&k+94BtWCyuS|1c%u1$ z;r>Zc-z)bXVN-w2nK)pPQWcM9gexSD8(Smf3iLs}As&)nWuGn+krojx>onYFhRWq| z*MQk|#mj=SrqBowtdVmp9|uW|RuBbh+ZUK8l>qW9I8###IxUxLyRVdr1`p+HsdIBI zX;V+G03|6Jeji!pkZfVo3vhsN$09~Rn&AuIuJCr0eK&x{1FkW$v_JWS;|nX=7aC2n z&U2aDu8J@&P#q$40#xrY{HHZdJcvnKup*~}QzYLR?Vc6-xFbKN9p_uC+dx94=&*ME zix-#0fMvI<%l0VmnM2?!wNINN_#pyq>ymh763=2C2>-`~qT+oDYS^FRls?enFsz8}ve^~;08O9{oCU%OE}_9K*_|k+ zN=i1FZdXopb}XJhcgJ)8JSC5562YVspU=)L2Wb%6c# z|4@S6(@FvbrnF;eS=jt2R$jaE9c?hWCYWy-}G z`^J4ky%o()i_QR!cRL@L2Mz^*OUwJn$hq29_A(nF;$b#&SJ!>T5u@8B=`ZWV(dZ{) zQ0yPo3_R1ZVwDNL7>^Q^qd29|U`;J7uc`l=U;GIeY}~c~TO>H}Sr@Xa zGjMmcioDM7cv#z#italKyGkK5U zJm)kC^IH%mMjmAt?Zjd`)N=G!rxY@fo>x3^il>0$BIR|Y!CNqlD73%4I6_AmRn5aK zS@Dh(04>VgnTOSW>eHJZLv>Q_`!>R)qoym}vhhs=>KR#*>8u{9ca>?+3M#H&PTMYk zuDF1`dI@iY&eU3c6+SwVYmk(3Hwo;8_&IhDMnLu5*Z8=Sp5YQJdjA$dz1=!TioSH zetg-1u~W?Z%=`g>F*$ZEIG_VkeZ*1@WY+xa` z7G$=DkIJE&x<|Xy3f1bDo6+FXQWWw+dS~+<7b$^E`gKtIX^TQON&oKP32qA6#XIW{ zWzqaz6!^ev0q@9rfCUr%TMh2}duOhNuyUE>I)+$b|5}&yYx^)D=v#7G#L8-Gv%Pu8 z#w^q=@Vk`j_bWUD6*3``@7dZXm%a*G0AR6+7Y@JXos9dFXDzW%{NLQ&$Abm(R=u`5 zFYXc;8Gr3^|MF_a7@%<~_7=bL|L$Uc-laJT)Pgo=jb_t+ch^xCMVK)yfT25}mTCT| zo-j~jC3G42{J*!`nOkey{EV|-LtPMEwYdI<1924_UEVb}9zA;G<6Ik<5A3!|n)WAR zZFIhjFaMfhhq#;qOVbVXI40{5+@#%zpAM8Oj9SCPQXX)O%SuX;m#u(^c)NI{V>zgH z|51UqD-a|sE3qIy^4b;BHO4&r1N~X74C-}G=JvO+kL(kICwe$z0OE`?qfdxNtPvkp zj_X>Y_nxX0Mv36h$N!_BeX4INRym0XdLLD$89;PvW>Q9g84jXyHaufpwl)R;asf96LY|#hrmT$XCtC!XWo#iO$B?q z$j@@8kP9#EayH+AU38{50`crrnB4S+l=lCbtewNye|O#MT^)WD@`68 zF`~xZxve!Kz-r=Bjlj*Pba#V9!fVgrfDRa;WL%Al%W??5~v-C+n(N1a4 zAW*^ttC9)?8H#1#fvow&9o6d315ow4+J_$mT1E|dL%%iFkxR>dDhYr}&J1_(1XI?ajH`VSHuB8vJY1)5NipW-rDH z(2c^*)}eiUD(aquod7wk2{>0z1~Na?ThnrzSkfbQnwwL4QYFPU>m6_f9p;~dQ*xv6 z?#_~PK#ktOTY0gYDp?NFS~^ubaI3u~f5B7kM5s;V;%GIk@J0u*o#fbx<$6ZY}mt7~ifU zs{cc$SC9cBVMUZ=FZF%i*5lB7ZoNtS5c_$myW7qxY{_stM|Hy==@*@8)VmzyHoXTb zg>4_YQ`<@5!poJoOd*(!T&Q&JK)&IAiCNF|{?hD#mQ5Iz<^ZyXFY`BtbD_;83t}1koA1sCZ!1+;M0GEU@TCTz>`kLDUFL@hv{TRek8R=vufwAAgtVV!8FeMZ!*lTUct;%CBH!(J0$BqL6}47FAP?`TVLsC^+82N9NpL>8 zk*d4~RY}HVP#V|rk=BOGjCfcG^h%hhC;p&564-Sw3mqz?%c#y&txC9*q%UpVH9J0h z?X&_t7gID+prbA=CBPEK^v=%c$O+|9)8fTu0hiPuB`hw`DwFZrH+z*EL?`*KgwVSw zSGOk86pp&d&0K(j8a4VQ&VbB!m|FgD+ow0F%R)y#9uOjb20%Ut9D}~={$Egp_?DPu zo7wRl=2bkB4Z-Rx91`ET(RIA1kiws-#b*<#uInWYph`~@*76xkr_5!WI^(Tkftq*; z6i9m)L+Pv02}_Sb{kEq<`82}aBpL8f_`=|7`2q_QQ0T$ICX)&2KM)Uw74^qu&J*jZ zI-q_R<#vkTrHxgma@J|$C$<9N7(wD(jPGf7;%$TjMS7}k9I zm|L#5M_W%~pr?t-h32+?;np&xP3x6R{$UC(u7Yyh+~I}(+^C0w-$LQn3L`aw-mRE5 zDXFTO$#N`lMnn{F$XkRUU<>7O&!N`N`#pJM)zvgz;ubnVZx*a!hFx)jD5Cns25IR; zHDSrNOG~n1=jMB^e+jn=D!v}l&vrE>j9_j~Rd`&ZJ5SGw-+HEERT9C=P;hAKEwn=N z19agNc>(aMNfxz9u@gN>-Y2SV`@K86CR^qfcNh!CS?}171}qxr32%jujg7O+#~a>8 zpIal01wS77-ehdt4ptM<9r>Evxa_VOvlRQuDLwMIJzlu0M$-2a&)?UOlXx-8`fHPt z%d>81)DjUB)3q)5NXdb%0lqn}G6H5smd}Tr=pC!9z=;hOt!&-AT{W7mj5HrHUu{EE zqT^TsBjowG0cQzwTW)XG!=^k6({DF0^VAX1u zw<}_76>MC~c3lY~W3!=S!Zo)%4p)!VyiDexp4+7eqoYy5IeN2GxR^BD1=*<#5QrEyXUf3twI6H|LOgWt2G<1J%>61Xau0 z#|gB=h2OyXwPSgB)k(*yGw$`0Qe!(2Hw-g^ZB*ysQH?G#DoHBH|*8ug*HP~-98>T2!1sKkTEU?ski zo}O-;5cjA*E{FyQNVloy<-v7ui^TTV6>_ZH(eZW7m8BLBy~Rk_ybl7rkAuxI8oxr0 zlCtp}f>f=jo_nm;96QyGd!mEw=GqB_kInDBu!x~&Eqx6K+ncxcdGO$ zf9zPsmrbjon!HPe6%^Pmg1D3I9-+PUeWClrjRd4jt@E4)?fm*SZNt2|D^~P}2U%k~ zE2{@JGDlUE8e@~=xY;tIq z@~Sud#hOdZdS{D_+GZ<|&MjKr2OK8ktG|qkGdypeNAeAvn4WDb*fSI10Djhjly_Xp z=Q)K;^5GT;E^rX_Dt1|ysgm=B8yQ_s$dp!7%jl@5y{-S6?V`s*PmQO#aD&0@r#Fl} znF`*~V&2*F8!IEP0Qcw0TtEkL%MotXHL(daS3_-}xNinfrRP?rco!1QP5wHFSEw=| zkb+abK(C84k+>Ws2hBz2kWmQ?oNxv{n<5hIx~p1aJiB*XH_pd~=Gr3{U8&9tcnV2i zL0VvNvt5TI!P93d*uOVqK91h;mjI{4CHkBw!|5-C8;Qq9=LEeD%Eyji$7p3r0sZF( ztH+xPPFOp&jWGH{*unCI*Ef{1EV&4#oqL1+cu&?9Re_u}0!j`xbjL@|b*0heC|nV; zEjN&7FPnu~jmQnG1kbJ|`=Tt|XukY|;_&WjQhE^Y4c8UTN&?Ywtrz^l!o9{mJB$4Y z$w#9^d&l z&s0?-qL~)*XaovJ#>CG37#}4spC__VKRGIs!~)8PgCVA-St{XCZ;#TeO3T(>OYI@# z_?K_ji7{7y_M;xE$h}0SZBw)~vHB{ti6N0AFeZw9xXCtM zJWON}F*33UGmH3e{_OV&@#lY8S8jVvrBP`OcjiPg73AdPZB8`0@h2xg(M1|>&&qF8 z?F$AN_luftI?{xO##@r*;rtahO(r4i#-dFQ&*^$c6m9;5t>3Gt zv{`qbp4>4sMZ%?%&5>Rk3x_i`KY2K%q_6l|MdIbKte|~MY{i)zy~;Va?HY7m=p%Px zf*+u};kWf2)cp7LwoBi>J*zCVpycUa^ea`+hmTQFL*rZT8$L%tdb10W*2UmKKK zxTY50xb1jnydX28 z@=o6=9-RS1F0^LBa_Yax4niRS4oI|BSfL6UmCgrC1Ox@*mCtv4VIB641;3tZfBrgF zcfr9_%S9&eA{bnO^>KnQIi{5leB8SD|K)AO##m2N$~N7p3bb=*&zdr^-5qw?)vv%B z`1~eC5Ccil;5G;L93x3u<-ix*HwdYZZP;`?fC|kVwUvG6v-DqCoRN#B1CadUJD6p4 zsx+8AQeIkScqqwUfC4*?tbM=%kq>>ng6_w9^rM6SzU`hVdE#Tt=9x!X3@ix52&ZC1 zJu3-Nq9aN6i$VfSOcIsOtJZpe+e&ijk_zIR99#iPd+}no>EUTSyg_#`aH=vDYJ$dL ziHQ>;m};vtL`3kWC1J3$dXUaf)Fs-Sw)@Y#hdy2muVU^Lnluj(NP~GwEbXim&~KR4 zT7ZtOiJl&2cynWH^{A#}1GqvLtb{WS6&O%(8$V3l&Noso?E*ONvEEGM{RL4y-yR^1 zG(9~vg<1$8Ji{=l!@!i0i>Cdr)XYh|>N7m<3kI~l_!gyUMaFGHE1-;Tx3@7SXeNSQ z;H(^fY(D^WFeT}gwySDRPEOpF^&l{4c5h9tPApHjue(~- z(qz?P4i0hKSL#zQNuG(29@X_d9M#7Eb0NVF1)(H}nOXMBmoFXag^`h30nd+s zci{IA3LpV^<~6n!Ap`d8nuMcnohG>&rSJM%+gPuOiA^{;Z_dee+cn5WiJG?^>Q*_) z>AEe%0!jQUfG{3)5|=I#q311r_Uu{1uSs{g+_p>?hG71N#=2oMGltkiiN-3+cO|f) z;s*d=V1n`7XkktVPAnU9u{OiofB>Wc>d6EbY~aYgYVwY!@qnGsLW5#_@cA=PZ+HTV zpRWOLp()4!SQTt6WG1$LdPBP6q6aDlF*>`|wH|w1)FD`y+9>kQW_$1Z*jSU*hM}zM zVcVip)6>@&8I?hu!3ZVXJJcZznvEeOG@6YPVK*unM7`4L*2Ocj)#Yqq7IE2#gyPaw zqx1*)MpA)|XXd%PO~ij;4VhB;#PVB95pNFB5&A@ud`-OjeanS3T{bOc(SJwzA%AsU z=(-Q<&6~@~ni4Jmk3~X3aihw4_2QwL^6}9jkQ{2dA3PLV(o2`=g8-FTX(uN*3oDIj z(1K0bQrX(puJzc{Wm$gng}Jr0XVMA^h<IlFH84FJpy1Loz!(>%%? zTwM16--}s8L&I)zvcVkbUVx3gY)&px#Hs7+KSy36p`tSOtx2HX9tK|R39%0|)-5Y+ zrz<%J*&cO2;-knnNWb#@xeboLl6-Te+{krq)+Rg)*z8&;>Bb`cgni<{`W!84Hd6Nn zD{JWFgP^;*i8wqNJXDzZ@5QGA=e(MoPb`$w*FDr^hS#82!`O%5BN&@A<;p zM(Zw0#uhR9n2mv<9{&mNiQ!a#<6`;9k00-~w6)pm-SdS44bfzG9hi>2y}c2zve@CU zX$q$0-Ygfj>GE8yLC;Qo=2_@%ir5~ha<-}PtZJ@4n-0u__>@aQC5nlaS6oI0by)A& zm-Q&)Jgm+G)Vb$yT|450tZ`tWTu-L(1cA$_`*|Q4f`!kbE6ZL{a%Tk8Ql+M6WW?MW z@3K^P^X8~tdvTtUYtWdQU*dSn2jWgnA!b}IKw07jU7*xRX&7phl$X&Cw$5MNS^eNm z5q@bRvT#jaNmJ?CEZ%9Ytv$R`{xVXg<>8kuzZIqaBO?2A1%&jTnK!W|?@SB>#C+b4 zQ}dU7gz&aZy0%@P(Vi|k=c9J@!lg^MfPw)!P@?WxNK}-2*G>$zkaJLRZ-LpZj4N`} z0!0~Dv*9$PW!V<{t>xt|7?akhb(f%qD2sW{;kqxOGBR&P6r4GhRAMhO!NZJhmVp4P zs!aHtmzNh)1;@a(qf^mo)fP$`Lq(a%0YMAw{F}wJ2}GE2bDYv`k&|7;&D*qE6G#4Z ziyRY}ak29M*VmQDL%F_hTS7^t6e`XsN;M&7gltKYHA;*ug|Un=g|V+Wrw)p2V;v@Y z82dI&wr{7bGt?Mk22o*Tjj?3^Jv!(6{hf0@b^JHuk9ptceeU~x?(4qp>k=Xbt<|hA zmd@Thqg|N$1eX`$3o`RhVy7^{{NoaM{iJseV617W3|J}mN#WlnL1**6N4{ zFW^`Fx{l3i_14v8fSJB?03F1fbLpbSb&B2aPL*|h6mwMdoQgT0nFvMl&#dQue@$<0VeTL5{c2)v@ZZOp`m;rbGrQNyAU&*b{fR zJ~{-;*Yw;|8N-mb&|Wso_I8i8vxO>OZF^P5ggAY^VQ~Mg`N$A_u9NXGrOY9zg*a#S zPpX1pc_Q7J#K#LorZ;{+aKjK~xb@^DUOxI{kPqu@lT2&0vindkv;tKL#uw7LpL%EI{|H4))&FkMtv(8q&3?!eA7^q3#vU&cU9 zHhzz{-ByET1S|Gd`7i3m1uqt^B}doDdCwmS=xAH3@g5IFrSbK^5HNx|2I2^e`b5N& zX&gBXu9SnHi6zaZLCU$YIE}L^bOKhl*LJ_y5t{Eq?4=o6$H8SWEA^>jd1x0j233L)-0dooziC4a{fV%$qp`I6!JLbWe zzaJ}(>T7Z%Sf*Xft}hGRJ||CgmmjF>2T!ESXHj7|HB&)p5%XCh?9G9%i>1K~w-h|6 zeG?K!92m7-i9AYD^4E`9)vRYUm2FaN%I-aD%Y!VZw!!HebRR)-7ETG>P;5nd^SdvF z;aXrEwBlm*6HKNJT0MAH_?L4~+70kl10C=N#5ub9665v@FGj

&B~%RIm6+p z8&_^vSk#eU(9nq^BO|^UGd8{KtSps|rD@dx2?`QMz}6Rtp2cJ?aO_%5;)GC(pRcYG z1OIuq?VhTzZjc#C)hjO{%>yj?=e)dCNy}Dg@tcXIVo3T`%I|KXOOPQxN+?0 z-A{sIbVdyZSv~YztSns_S+iS0eZc$#%{51+?NL3`*>4!QleDsQW9pXkGYk`f!Ij?C ztG^kxdU`)Ts!9oLelz4S87wV)(#QiwUz_QGK1?akP)%|TuVOwkH#NL=?Yy2pn@l=m zl9myBE=4qD#+Pza7!Q$=ftsP0%EFky!PkN-oXfFg&l65!#l7WJf#TFM){XlFpR(yG z4nc~$^;WbmuUkI@vKpvLkTxkg4n{<4gO2%nN_<^mW%f_?fh%GTj{<%-YH12IGzPWb z7Q=BJHF!x|_vHD5OprU?X6r^|*jlM#CKA*T&sN^F0FBZq*%Z(+Zv`#F%dAG!RGw4< zW*sPvKCP723Hkcv4lVe(GF@B&QB@xU7(A)A!4WmPU0n;$+?zb|3Y<53&ON;kv8oy< zcWSd&gV)9!h4x_8OE%n={&67w-$#_TCU;J@?h_clOMgy5-Br++|M`r0Ny3)=eTkD7 zlz%s%7U;Qet5~>~m!Ag}EfDgt{JD>4h5NKP9JWCz43fBT4{umVEqrc7jr&i8v^#r- zG<(&@Y_sksGI&jF&m1he5v65}`b`xb`jqr>3&A*}lR z2p5CYixJ25pCaOBRGqM)xj9=<$i>K|OeSKOpKJILWS%g;y z!PP_FX1(?pAJ+1L-FI*}`I%W=)S0YI<;fIEmUJ%z5!RN`=*P};W%=YB94o-6P478W zuss1ixuLwZ(zQjNln*dC{h|S|#xJun2@J*I)ym9`mrMjJ-Bp}?jf`}TxD)hQRvO|{ z>==XdrWr_ESK2ydvNJL>Z71d7>Tp{l>L%c$A@z?*i$yEL z4WP#PJ9v4o8qg2>;LYt%0ThMePV`u*Aec_fN|>NXYoW3tib(I#_7=yj%^;XEg`wd! zE(aO||*OYWi!vgLB;6m5f(ld~f5wZL0n^2{J|cGCDDPjQCDxau8=Taz2)@bu8pv;u!{M)7DLUdCai%7 z(aJ;lKMn=1WnN#N{XiUrK^Q9J7=iQ4M_&kthw@QPkJP%Y| z?W5uJcyzfY!N#VMQ|lYDmaRGbYhx>}Ro!%7THi5rOu&zzo??J>{R$M|uZf(!?cA}K z#X8itzZFc}#VQT?zQXwxI!2x}NIxOd*0!Gtxsqp;CJj#iHU~G>*GJyw#^{{{69M3M zBEdv}xrN0kI?y?i2;Ne4iVu>Izngv*+X|!f7?UVo*FlZf-#m<_4e%eIj{ zKAkwo-&a$q+d2LH%+_>>3%q;c0Ozn{=;AUoUPesP(Qy=1*_m}fN2hO}aKbdI{QzKs zze+In-r=)6J@|O*Zr{ z^cSHCm?w{!aF@O?5N#LhLU|n*a~ai}mL=#%D^9cWTJYGyFE&EKoc=!o;ouRWluvM5 zld8J9I?F5l)yP|_Ep9=d<}h+XVmY+Q1gyFRo=z{XN&MtK=2)Bf492*?-vbkc9NnJR z_StcoWSppqXkc=HBr)dnpeDGsG&R?mL<#vJ>L+H5@9PvI*{?0VnS7eD*O?12e+)yf zC4oiML~$9dd{QkpyDUI{$rn)D<9(|CZ$!qwCdV1G;WvwuS+ZhW1k0vIs8DqIHf?I! za@dF`H>RJ>9)17AOW0eW4}Qy9WokRf0}m7w7S7LI-SZEa``ecS z2?+_lgOoQUE2;I~kL#rTU8R2k zCkGDV7v`*Y0VJ3sY)#~+lzJdvh~THct&m)&H1{7Pj-Cq{$lo zLHf38t?xcSMvIS&>+I+-iZT4KFZLMn?04hxkDJxh-6#3FDEp$z%(t%f4>0L(iwl1O z?#`Tj>M-BGJf3e$>U99@-lL;>orJJ0T;T~#7dc^8Qv#pRHNCr{_nkToKaj9r|YYXgy1VW z-`3kX7+eJzO*yz7EVY_99dpwMNX;e2@b&Zn)jxYi|JVVFxuI;!gkV^1=JmJV?m5*K zgakXyQwLmj6U5}Y$M&6uX0S|>y1cjCtp5^qt$Fb*lH~OoC-&Ag9d%A2$*L(I@ZSc=)>cM91 z9qpY?E;o<92@~HYIL_!cb#)o9b90Rv-NUO{(;F=c-s39kS9{^~buRAkWT}_t$Gk!Q zvO2&gD3};I{|>fzs1pw?1O)bo;KUtPIy90(nn;P=GpqWL` z1DgivF9x}YUE}YGJ}iF;Fvw5fRDDWds}CM@}J zBFMK}u4D6EuC9c59W74aA1LmhDNgJ(o{Dm@Te{NgsBqIFk)L87iFo^-s9jEe2=}-M z7U4G7^-sP`Vcxe#!liYDU{bmr9UaJx%=j5uh3eJ%>fvEYPxoKxp3w0uI;}yx2ztUq zeElkFZ@=#06UBK#YWfm(Vo#`ib2~Rc_=Nq};t0`S7Z_H`a|=rxzI+=@wHyNa_G% zl_$>s{4S>=;>7gTIH1=_Dg}_8hGm&u7*4gK0I;ep8n0JWln^P>F6dr3E+FejRQ#9tX zTwG+Prx)QYa-M+MRh6WPLbd;nLdM?#K*c}O6j&vJd2cta(n{NNJCdYYcrHW3 zZ`z_a<^TW$NmQM_WFRQ%GKqN$m(3JGwQKJSFdn4fy9o?5v?y%ADKp4? z;RxFCDG-*1tiqS){AHlc?SS?e|6J7;@G0WKF&W1E(v_PLA9d&)3?3p@mX>mU7{X&g$;8wwM%395Jzit)cTa=rCf&!cMB`xAT0*HZuE23 zItmwR-QM3VEn>t0# z&!*&Ut*-~BDELHA4U*^?rBYJotY4e}BwN}w$>r((7DR#c$&>nZ{0kWxEGutUU*F^d zhYrz^)!Q1SUTS{tpusF2!MZ&X>bC()e!?xTzZRY5Cm-$rS}0kco-_9E|A<4?{?1%YYV=DO^B3Y3#Uvf z8fb+rObm87Y#l34t6IPSd^G6Fgq+m<$ojk`%*2RH8ivphFfq3b*4_ZLpP%3PJOAPF z^KE*S#UQSFW_Ov*>StE7&n_H>^cUOmbx*qPwF!9$M)#zML}G8d=%HD|GkB>g=p<>Z zOPgww2(XXuq~1Ti!>b86k6LbpY7&K~+QVp={&XK!9Wers03}kK#7Q0RY;74#?eX++3 z#x~_9fbCe*tU725YEMpS$(~AGq0dg&P9RCCGXm;wyq?Hw4PEv7@av%yCloK6l8=;u z=&NiQ4_SE0sARQXF?*=2u1=}1FBbvuB6g9c?1F>|-kmH$Q0<|8g)CPSW@T=!bzH8# z?$y`72w2U0ebHt_lO#~zJQlSNPZw8mtKy`kNC(v6hx0~8t&>2D@3Z}bcd9kBWt?}& z>KRTI_o0%-S~if;BO)U1rO%tqa6%So=a3@o?J03Tu`=4@AprRH1&Q6>7K{uUqvjb^ zYt5QTD=;fvo>q5ul2rS7SkQ3uaH0|3I=uPLqgMu3P(su$_W-7*a9ydQhBnYRgf$Pz zS(e=k6Lg-mzzn2X5=48L3k`~z(~5##+uimI{RoPI#$0JSs%%-4z*54v;J0}_3u=i590 za-S9+p`Lod8>*W+)dNNLwyK8s>At{3B|eu<9Bbt-ZY<1j9J4HzN-L6z zgI+D1)sYUrrN0MBor04+2q_x{&1lH0;;x&OIG?ohRLXkuM(3jX*1Bi^t!Mmo5~{(S zlWHzoVz=oW1jNe{cy&AP;-aX_Q;QZe8=DV%-X8;gtV=TtFp@P*UwHDBb+KV?458Rm#3=#GprZ17eO!&U- zbp3M!P?WC$!k(!dsH_u4hKi0+3P6}j2Z;AfeaLmp^>~-?s^0f4)M>(7A!)kSW)n*; z?lEmy^Nq1^(&Jz>|(;{17f z<$YMebKaKf^>S>e(KY7hDUU{7(UTC%X~k*`JX5{iFtoPzMzUlPtls8+?6OC7bpI>Zm9tqBSUU^zl=Vcp2~lW+}($I{7DBX`F1c_!A0 z{1=d#Dc?PL{{KNVRG=zK6UEF`RQ4Y!NLR80dDm4-YqB zeBgP@QA`zqz#Uj|Gz>1JMnC^;ZAQH?PUoTQwp462Ha^|AZxGOS(e9s|y3D|<(CKnx@T!{QM z(KZQsxP&dJYFKH9E4C6W%!H2SsIeHBXm;T2yWA*T0A0SjiHOzoc04d7USMcoP^F>U zUyG_;CfYS~Eko7TXrqOyH*3&NB(n-jIy(7Xw^dEx-Ih`|=gHLJuUJS4@hR?;-@oq3 ez2kLUTM``6S|dJ&UK1SPPfy3_a>*sT2mc2b`|#8N diff --git a/docs/images/organizations/onboarding-flow.svg b/docs/images/organizations/onboarding-flow.svg index f6e11fc0a3..b5ba7858a0 100644 --- a/docs/images/organizations/onboarding-flow.svg +++ b/docs/images/organizations/onboarding-flow.svg @@ -3,41 +3,37 @@ + + + Onboarding Flow - + 1 - Create Management - Account Role - - Quick Create or Manual - Allows Prowler to - discover your org - structure + Start the Wizard + + In Prowler Cloud + Enter your Org ID + and OU/root target - - - - - 2 - Deploy StackSet - - In AWS Console - Creates ProwlerScan - role in every - member account + Deploy the Roles + + Single CF Stack + Management role + + StackSet to members + in one CF stack @@ -46,11 +42,11 @@ 3 - Run the Wizard - - In Prowler Cloud - Discovers accounts, - tests connections + Discover & Connect + + In Prowler Cloud + Discovers accounts, + tests connections @@ -59,13 +55,13 @@ 4 - Launch Scans - - Automatic - Scans run on all - connected accounts - on your schedule + Launch Scans + + Automatic + Scans run on all + connected accounts + on your schedule - Steps 1 and 2 are done once in AWS | Steps 3 and 4 are done in Prowler Cloud + Step 2 runs once in AWS | Steps 1, 3 and 4 are in Prowler Cloud diff --git a/docs/images/organizations/two-roles-architecture.svg b/docs/images/organizations/two-roles-architecture.svg index c67588b049..f8c40d5b21 100644 --- a/docs/images/organizations/two-roles-architecture.svg +++ b/docs/images/organizations/two-roles-architecture.svg @@ -47,7 +47,7 @@ - Deploy: Quick Create link or Manual + Deploy: single stack or standalone @@ -86,7 +86,7 @@ - Deploy: via CloudFormation StackSet + Deploy: StackSet (single stack) Prowler discovers diff --git a/docs/user-guide/providers/aws/organizations.mdx b/docs/user-guide/providers/aws/organizations.mdx index c0e9ae0e6b..b48df1c442 100644 --- a/docs/user-guide/providers/aws/organizations.mdx +++ b/docs/user-guide/providers/aws/organizations.mdx @@ -2,6 +2,8 @@ title: 'AWS Organizations in Prowler' --- +import { VersionBadge } from "/snippets/version-badge.mdx" + **Using Prowler Cloud?** You can onboard your entire AWS Organization through the UI with automatic account discovery, OU-aware tree selection, and bulk connection testing — no scripts or YAML files required. @@ -71,11 +73,43 @@ The additional fields in CSV header output are as follows: ## Deploying Prowler IAM Roles Across AWS Organizations + + When onboarding multiple AWS accounts into Prowler Cloud, it is important to deploy the Prowler Scan IAM Role in each account. The most efficient way to do this across an AWS Organization is by leveraging AWS CloudFormation StackSets, which rolls out infrastructure—like IAM roles—to all accounts centrally from the Management or Delegated Admin account. -When using Infrastructure as Code (IaC), Terraform is recommended to manage this deployment systematically. +### Native CloudFormation StackSet Deployment (Recommended) -### Recommended Approach +The [Prowler Scan IAM Role CloudFormation template](https://github.com/prowler-cloud/prowler/blob/master/permissions/templates/cloudformation/prowler-scan-role.yml) can deploy the role across your entire AWS Organization on its own—no third-party modules required. When launched in the **Management Account** (or a **Delegated Administrator** account) with `DeployStackSet=true` and `EnableOrganizations=true`, it creates a service-managed CloudFormation StackSet that rolls the ProwlerScan role out to every account under the target Organizational Unit (or the organization root), and keeps new accounts covered automatically through auto-deployment. + +To deploy from the CloudFormation console: open **CloudFormation → Create stack → With new resources**, choose **Upload a template file** and select `prowler-scan-role.yml` (or paste its S3 URL), then set the parameters below on the **Specify stack details** step. Leave the **Configure stack options** step at its defaults. + +Deploy a single CloudFormation Stack in the Management Account with the following parameters: + +| Parameter | Description | Default | +| --- | --- | --- | +| `ExternalId` | External ID provided by Prowler Cloud to secure role assumption. | — | +| `DeployLocalRole` | Create the ProwlerScan role in this (Management) account. | `true` | +| `DeployStackSet` | Create a service-managed StackSet that deploys the role to member accounts. | `false` | +| `AWSOrganizationalUnitId` | Target OU (`ou-xxxx-yyyyyyyy`) or organization root (`r-xxxx`) for the StackSet. Required when `DeployStackSet=true`. | `""` | +| `DeployFromDelegatedAdmin` | Set to `true` when deploying from a Delegated Administrator account instead of the Management Account (uses `CallAs: DELEGATED_ADMIN`). | `false` | +| `EnableOrganizations` | Add AWS Organizations permissions to the Management Account role: read-only account discovery plus the StackSet-management permissions the deployment needs. Set to `true` when deploying in the Management Account. | `false` | +| `FailureTolerancePercentage` | Percentage of accounts in which the StackSet operation can fail before CloudFormation stops the operation. | `10` | +| `RetainStacksOnAccountRemoval` | Keep the role in an account after it leaves the Organization or OU. | `false` | + + +On the review step, select **"I acknowledge that AWS CloudFormation might create IAM resources with custom names"** — the template provisions the named `ProwlerScan` IAM role, so the stack requires the `CAPABILITY_NAMED_IAM` capability and fails without this acknowledgment. (The quick-create link handles this for you.) + + + +The service-managed StackSet does **not** deploy to the Management Account itself. Keeping `DeployLocalRole=true` ensures the role also exists there, so a single stack covers both the Management and member accounts. + +Trusted access for CloudFormation StackSets must be enabled in the Organization (see the note at the top of this page) before `DeployStackSet` will work. + +Deploying for the CLI or a self-hosted Prowler (not Prowler Cloud)? Also set `AccountId` to the account you assume the role from and `IAMPrincipal` to your identity — the defaults target Prowler Cloud. See [Aligning the trust policy with your identity](/user-guide/providers/aws/authentication#trust-policy-align-iamprincipal-with-your-identity). + + + +### Alternative: Deploy with Terraform - **Use StackSets** from the **Management Account** (or a Delegated Admin/Security Account). - **Use Terraform** to orchestrate the deployment. diff --git a/docs/user-guide/providers/aws/role-assumption.mdx b/docs/user-guide/providers/aws/role-assumption.mdx index b714beafbd..54dd0e214a 100644 --- a/docs/user-guide/providers/aws/role-assumption.mdx +++ b/docs/user-guide/providers/aws/role-assumption.mdx @@ -77,6 +77,15 @@ The template requires the following parameters: - **AccountId:** *(Optional)* AWS Account ID that will assume the role (default: Prowler Cloud account) - **IAMPrincipal:** *(Optional)* The IAM principal allowed to assume the role (default: `role/prowler*`) + +From the CLI you assume the role with **your own** identity, not from Prowler Cloud. The `AccountId` and `IAMPrincipal` defaults target Prowler Cloud, so set **`AccountId`** to the account you run Prowler from and **`IAMPrincipal`** to your identity (for example `role/` or `user/`). Otherwise `sts:AssumeRole` fails with `AccessDenied`. See [Aligning the trust policy with your identity](/user-guide/providers/aws/authentication#trust-policy-align-iamprincipal-with-your-identity). + + + +To deploy the role across an entire AWS Organization from a single stack (Management Account role plus a service-managed StackSet for the member accounts), the template also accepts `DeployLocalRole`, `DeployStackSet`, `AWSOrganizationalUnitId`, `DeployFromDelegatedAdmin`, `EnableOrganizations`, `FailureTolerancePercentage`, and `RetainStacksOnAccountRemoval`. See [AWS Organizations in Prowler](/user-guide/providers/aws/organizations#native-cloudformation-stackset-deployment-recommended) for the full parameter reference. + + + When running Prowler CLI, include the External ID using the `-I/--external-id` flag: ```sh diff --git a/docs/user-guide/tutorials/aws-organizations-bulk-provisioning.mdx b/docs/user-guide/tutorials/aws-organizations-bulk-provisioning.mdx index 2e8b5eb62e..188ac3540d 100644 --- a/docs/user-guide/tutorials/aws-organizations-bulk-provisioning.mdx +++ b/docs/user-guide/tutorials/aws-organizations-bulk-provisioning.mdx @@ -272,6 +272,8 @@ python aws_org_generator.py \ 4. Deploy to all organizational units 5. Use a unique external ID (e.g., `prowler-org-2024-abc123`) + Alternatively, deploy the same template as a **single stack** with `DeployStackSet=true` and `AWSOrganizationalUnitId` set to your root/OU ID — it creates the StackSet for you. See [Native CloudFormation StackSet Deployment](../providers/aws/organizations#native-cloudformation-stackset-deployment-recommended). + {/* TODO: Add screenshot of CloudFormation StackSets deployment */} diff --git a/docs/user-guide/tutorials/prowler-cloud-aws-organizations.mdx b/docs/user-guide/tutorials/prowler-cloud-aws-organizations.mdx index 8bb6e320ae..717bbdfc0e 100644 --- a/docs/user-guide/tutorials/prowler-cloud-aws-organizations.mdx +++ b/docs/user-guide/tutorials/prowler-cloud-aws-organizations.mdx @@ -25,10 +25,10 @@ For CLI-based multi-account scanning, see [AWS Organizations in Prowler CLI](/us ### How It Works -Before using the AWS Organizations wizard, you need to deploy **two Identity and Access Management (IAM) roles** in your AWS environment. The onboarding follows this sequence: +Onboarding deploys the **ProwlerScan Identity and Access Management (IAM) role** in your management account and in every member account. The wizard can deploy both from a **single CloudFormation stack** ([Step 4](#step-4-authenticate-with-your-management-account)), or you can deploy them yourself beforehand using Steps 1–2. The onboarding follows this sequence: - Onboarding flow: 1. Create Management Account Role (Quick Create or Manual), 2. Deploy StackSet, 3. Run the Wizard, 4. Launch Scans + Onboarding flow: 1. Start the Wizard, 2. Deploy the Roles (single CloudFormation stack), 3. Discover and Connect, 4. Launch Scans ## Key Concepts @@ -47,8 +47,8 @@ Prowler requires **two separate IAM roles** deployed in different places, each w | Role | Where it lives | What it does | How to deploy it | |------|---------------|--------------|------------------| -| **ProwlerScan** (management account) | Your management (root) account only | Discovers the Organization structure **and** scans the management account. Has additional Organizations discovery permissions. | Via **Quick Create** link or **manually** in the IAM Console ([Step 1](#step-1-create-the-management-account-role)). Cannot be deployed via StackSet. | -| **ProwlerScan** (member accounts) | Every member account | Scans the account for security findings. | Via **CloudFormation StackSet** ([Step 2](#step-2-deploy-the-cloudformation-stackset)). Automated across all accounts. | +| **ProwlerScan** (management account) | Your management (root) account only | Discovers the Organization structure **and** scans the management account. Has additional Organizations discovery permissions. | By the wizard's **single stack** ([Step 4](#step-4-authenticate-with-your-management-account)), or on its own via **Quick Create** link or **manually** in the IAM Console ([Step 1](#step-1-create-the-management-account-role)). Cannot be deployed via StackSet. | +| **ProwlerScan** (member accounts) | Every member account | Scans the account for security findings. | By the wizard's **single stack** ([Step 4](#step-4-authenticate-with-your-management-account)), or on its own via a **CloudFormation StackSet** ([Step 2](#step-2-deploy-the-cloudformation-stackset)). Automated across all accounts. | Two Roles Architecture: ProwlerScan in management account (Quick Create or Manual, discovery + scanning) and ProwlerScan in member accounts (via StackSet, scanning only) @@ -77,7 +77,7 @@ Your AWS environment must have [AWS Organizations](https://docs.aws.amazon.com/o The first role you need to create is the **management account role**. This role allows Prowler to discover your Organization structure — listing accounts, OUs, and hierarchy. -**StackSets do not deploy to the management account.** Organizational CloudFormation StackSets with service-managed permissions only target member accounts — this is an AWS limitation, not a Prowler one. You must create the management account role separately, either via the Quick Create link ([Option A](#option-a-quick-create-link-fastest)) or manually ([Option B](#option-b-create-the-role-manually)). +**StackSets do not deploy to the management account.** Organizational CloudFormation StackSets with service-managed permissions only target member accounts — this is an AWS limitation, not a Prowler one. The Prowler wizard works around this by having the **same** stack create the management account role (`DeployLocalRole=true`) alongside the StackSet, so a single deployment covers both. You can also create the management account role on its own via the Quick Create link ([Option A](#option-a-quick-create-link-fastest)) or manually ([Option B](#option-b-create-the-role-manually)). @@ -191,7 +191,7 @@ If you just created the role, it may take up to **60 seconds** for AWS to propag ## Step 2: Deploy the CloudFormation StackSet -After creating the management account role, the next step is to deploy the **ProwlerScan** role to your member accounts using a CloudFormation StackSet. This is the recommended method for consistent, scalable deployment across your entire organization. +This step deploys the **ProwlerScan** role to your member accounts using a CloudFormation StackSet. It is the **manual alternative** to letting the wizard's single stack create the StackSet for you ([Step 4](#step-4-authenticate-with-your-management-account)) — use it if you prefer to create and manage the StackSet yourself. The StackSet uses **service-managed permissions**, which means AWS Organizations handles the cross-account deployment automatically — you don't need to create execution roles manually in each account. The StackSet deploys the ProwlerScan IAM role in every target member account, enabling Prowler to assume that role for cross-account scanning. @@ -199,9 +199,9 @@ The StackSet uses **service-managed permissions**, which means AWS Organizations **Trusted access required:** CloudFormation StackSets must have trusted access enabled in your management account. Verify this in the AWS Console under **AWS Organizations > Settings > Trusted access for AWS CloudFormation StackSets**. - -**The Quick Create link creates a Stack, not a StackSet.** The link in the Prowler wizard creates a CloudFormation **Stack** that deploys the ProwlerScan role in your management account only ([Step 1](#step-1-create-the-management-account-role)). To deploy the role across **member accounts**, you must create a StackSet manually as described below. AWS does not support Quick Create links for StackSets. - + +**The Prowler wizard now deploys this StackSet for you.** The **Create Stack in Management Account** button ([Step 4](#step-4-authenticate-with-your-management-account)) launches a single CloudFormation Stack that creates the management account role **and** a service-managed StackSet for your member accounts (`DeployStackSet=true`). Use the manual console steps below only if you prefer to create the StackSet yourself. + **[Open StackSets Console →](https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacksets/create)** @@ -243,7 +243,7 @@ Deployment typically takes **2–5 minutes** for medium-sized organizations. Lar ## Step 3: Start the Organization Wizard -Now that both roles are deployed — the management account role (Step 1) and the ProwlerScan role in member accounts (Step 2) — you can start the Prowler wizard. +Start the Prowler wizard. It walks you through deploying both roles — the management account role and the ProwlerScan role in member accounts — from a single CloudFormation stack ([Step 4](#step-4-authenticate-with-your-management-account)). If you already deployed them beforehand via Steps 1–2, the wizard simply picks up where you left off. ### Open the Wizard @@ -282,27 +282,46 @@ Click **Next** to proceed to the authentication phase. ## Step 4: Authenticate with Your Management Account -The wizard's **Authentication Details** page guides you through three actions: deploying the roles in AWS, entering the management account Role ARN, and confirming the deployment. +The wizard's **Authentication Details** page guides you through three actions: deploying the roles in AWS, entering the deployment account Role ARN, and confirming the deployment. The deployment account is either the management account or, when delegated administrator mode is selected, the delegated administrator account. ### External ID -The wizard displays a **Prowler External ID** at the top — auto-generated and unique to your tenant. Click the copy icon to copy it. You will need this External ID for both the management account Stack and the member accounts StackSet. +The wizard displays a **Prowler External ID** at the top — auto-generated and unique to your tenant. Click the copy icon to copy it. The External ID is pre-filled into the deployment link, and the single stack applies it to both the management account role and the member-account StackSet. ### Deploy the Roles -The wizard provides two deployment actions: + -1. **Create Stack in Management Account** — opens a Quick Create link that deploys the ProwlerScan role with `EnableOrganizations=true` in your management account ([Step 1](#step-1-create-the-management-account-role)). The External ID is pre-filled. +The wizard deploys the deployment account role and the member-account StackSet in a **single** CloudFormation Stack: -2. **Open StackSets Console** — links to the CloudFormation StackSets console where you create a StackSet for member accounts ([Step 2](#step-2-deploy-the-cloudformation-stackset)). Copy the template URL shown in the wizard and paste the External ID manually. +1. **Organizational Unit or Root ID** — enter the AWS OU (`ou-xxxx-yyyyyyyy`) or organization root (`r-xxxx`) you want to onboard. Prowler rolls the ProwlerScan role out to every member account under this target. Find it in the [AWS Organizations Console](https://console.aws.amazon.com/organizations/); use the **root ID** (`r-`) to cover the entire organization or an **OU ID** (`ou-`) to target a specific unit. + +2. *(Optional)* Check **"I'm deploying from a delegated administrator account"** if you launch the stack from a delegated administrator account instead of the management account. + +3. **Create Stack in Management Account** — or **Create Stack in Delegated Administrator Account** when delegated administrator mode is selected — opens a Quick Create link that deploys, in a single stack: the ProwlerScan role in the account where you launch the stack (`DeployLocalRole`, with `EnableOrganizations=true`) **and** a service-managed StackSet (`DeployStackSet`) that rolls the role out to your member accounts. The External ID, OU/Root ID, and deployment options are pre-filled. + + +**Finding your Organizational Unit or Root ID.** In the [AWS Organizations Console](https://console.aws.amazon.com/organizations/) the root (`r-…`) and OU (`ou-…`) IDs appear in the account tree, or run these from your management account: + +```bash +# Root ID — deploys the role to the entire organization +aws organizations list-roots --query 'Roots[0].Id' --output text + +# OU IDs under the root — to target a specific unit instead +aws organizations list-organizational-units-for-parent --parent-id r-xxxx \ + --query 'OrganizationalUnits[].{Name:Name,Id:Id}' --output table +``` + +If you deploy the CloudFormation template manually (instead of via the wizard link), set **`DeployStackSet=true`**, **`DeployLocalRole=true`**, and **`EnableOrganizations=true`**, then put the root/OU ID above into **`AWSOrganizationalUnitId`** (required whenever `DeployStackSet=true`). Leave **`DeployFromDelegatedAdmin=false`** unless you launch the stack from a delegated administrator account. + - Authentication Details form showing External ID, two deployment buttons (Create Stack in Management Account and Open StackSets Console), Management Account Role ARN field, and deployment confirmation checkbox + Authentication Details form showing External ID, Organizational Unit or Root ID field, delegated administrator checkbox, deployment account stack button, deployment account Role ARN field, and deployment confirmation checkbox -### Enter the Management Account Role ARN +### Enter the Deployment Account Role ARN -Paste the **Role ARN** of the management account role you created in [Step 1](#step-1-create-the-management-account-role) into the **Management Account Role ARN** field. +Paste the **Role ARN** created by the single stack above into the **Management Account Role ARN** field or, when delegated administrator mode is selected, the **Delegated Administrator Account Role ARN** field. If you deployed the management account role beforehand, use the role created in [Step 1](#step-1-create-the-management-account-role). The ARN follows this format: ``` @@ -312,12 +331,12 @@ arn:aws:iam:::role/ProwlerScan For example: `arn:aws:iam::123456789012:role/ProwlerScan` - Management Account Role ARN field in the Authentication Details form + Deployment account Role ARN field in the Authentication Details form ### Confirm and Discover -1. Check the box: **"The Stack and StackSet have been successfully deployed in AWS"**. +1. Check the box: **"The Stack has been successfully deployed in AWS"**. 2. Click **Authenticate**. Here's what happens behind the scenes: diff --git a/ui/actions/organizations/organizations.adapter.test.ts b/ui/actions/organizations/organizations.adapter.test.ts index 07cff60c0c..41e0b8d89f 100644 --- a/ui/actions/organizations/organizations.adapter.test.ts +++ b/ui/actions/organizations/organizations.adapter.test.ts @@ -11,6 +11,7 @@ import { buildOrgTreeData, getOuIdsForSelectedAccounts, getSelectableAccountIds, + getSelectableAccountIdsForTarget, } from "./organizations.adapter"; const discoveryFixture: DiscoveryResult = { @@ -164,6 +165,68 @@ describe("buildAccountLookup", () => { }); }); +describe("getSelectableAccountIdsForTarget", () => { + it("scopes selection to accounts under a target OU, including nested OUs", () => { + // ou-parent contains ou-child (holds 111...) and the blocked 222... + const scoped = getSelectableAccountIdsForTarget( + discoveryFixture, + "ou-parent", + ); + + // Only the selectable descendant is returned; blocked 222... is excluded, + // and 333... (under the root, outside the OU) is not included. + expect(scoped).toEqual(["111111111111"]); + }); + + it("scopes selection to a leaf OU", () => { + const scoped = getSelectableAccountIdsForTarget( + discoveryFixture, + "ou-child", + ); + + expect(scoped).toEqual(["111111111111"]); + }); + + it("includes the deployment account even when it lives outside the target OU", () => { + // Deployment (management) account 333... sits under the root, but gets the + // role via DeployLocalRole, so it must be pre-selected alongside the OU. + const scoped = getSelectableAccountIdsForTarget( + discoveryFixture, + "ou-child", + "333333333333", + ); + + expect(scoped).toEqual(["111111111111", "333333333333"]); + }); + + it("does not include a deployment account that is not selectable", () => { + // 222... is blocked, so even as the deployment account it stays unselected. + const scoped = getSelectableAccountIdsForTarget( + discoveryFixture, + "ou-child", + "222222222222", + ); + + expect(scoped).toEqual(["111111111111"]); + }); + + it("returns every selectable account for a root target (whole organization)", () => { + const scoped = getSelectableAccountIdsForTarget(discoveryFixture, "r-root"); + + expect(scoped).toEqual(["111111111111", "333333333333"]); + }); + + it("falls back to all selectable accounts for an empty or unknown target", () => { + expect(getSelectableAccountIdsForTarget(discoveryFixture, "")).toEqual([ + "111111111111", + "333333333333", + ]); + expect( + getSelectableAccountIdsForTarget(discoveryFixture, "ou-does-not-exist"), + ).toEqual(["111111111111", "333333333333"]); + }); +}); + describe("getOuIdsForSelectedAccounts", () => { it("collects all ancestor OUs for selected accounts without duplicates", () => { const ouIds = getOuIdsForSelectedAccounts(discoveryFixture, [ diff --git a/ui/actions/organizations/organizations.adapter.ts b/ui/actions/organizations/organizations.adapter.ts index e120a1a3dc..2b0c7b5a0b 100644 --- a/ui/actions/organizations/organizations.adapter.ts +++ b/ui/actions/organizations/organizations.adapter.ts @@ -109,6 +109,71 @@ export function buildAccountLookup( return map; } +/** + * Returns the selectable account IDs that fall under a deployment target + * (an OU or root ID), optionally including the deployment account itself. + * + * The StackSet only rolls the role out to member accounts beneath the chosen + * target, and the deployment (management or delegated administrator) account + * gets the role via DeployLocalRole even though it usually lives outside that + * target. Pre-selecting exactly those accounts keeps the confirmation step in + * sync with what was actually deployed. + * + * Falls back to every selectable account when the target is empty or is not + * part of this discovery (e.g. a root ID), preserving the whole-organization + * default. + */ +export function getSelectableAccountIdsForTarget( + result: DiscoveryResult, + targetId: string, + deploymentAccountId?: string, +): string[] { + const selectableAccountIds = getSelectableAccountIds(result); + const normalizedTarget = targetId.trim(); + + if (!normalizedTarget) { + return selectableAccountIds; + } + + const isKnownOu = result.organizational_units.some( + (ou) => ou.id === normalizedTarget, + ); + + // Only a specific OU narrows the selection. A root ID (whole org) or an + // unknown target keeps the whole-organization default. + if (!isKnownOu) { + return selectableAccountIds; + } + + // Collect the target OU plus all of its nested descendant OUs. + const scopeIds = new Set([normalizedTarget]); + let addedNewOu = true; + while (addedNewOu) { + addedNewOu = false; + for (const ou of result.organizational_units) { + if (!scopeIds.has(ou.id) && scopeIds.has(ou.parent_id)) { + scopeIds.add(ou.id); + addedNewOu = true; + } + } + } + + const selectableSet = new Set(selectableAccountIds); + const scopedIds = new Set(); + + for (const account of result.accounts) { + if (scopeIds.has(account.parent_id) && selectableSet.has(account.id)) { + scopedIds.add(account.id); + } + } + + if (deploymentAccountId && selectableSet.has(deploymentAccountId)) { + scopedIds.add(deploymentAccountId); + } + + return selectableAccountIds.filter((id) => scopedIds.has(id)); +} + /** * Given selected account IDs, returns OU IDs that are ancestors of selected accounts. */ diff --git a/ui/changelog.d/aws-org-one-step-stackset-deploy.changed.md b/ui/changelog.d/aws-org-one-step-stackset-deploy.changed.md new file mode 100644 index 0000000000..caffe6c120 --- /dev/null +++ b/ui/changelog.d/aws-org-one-step-stackset-deploy.changed.md @@ -0,0 +1 @@ +AWS Organizations onboarding now deploys the management account role and the member-account StackSet from a single CloudFormation stack, replacing the manual StackSet console step diff --git a/ui/changelog.d/s3-integration-bucket-account-id.fixed.md b/ui/changelog.d/s3-integration-bucket-account-id.fixed.md new file mode 100644 index 0000000000..5b2d6310be --- /dev/null +++ b/ui/changelog.d/s3-integration-bucket-account-id.fixed.md @@ -0,0 +1 @@ +The AWS S3 integration CloudFormation quick-create link now sets the bucket owner account ID, preventing a stack validation error when S3 integration is enabled diff --git a/ui/components/integrations/s3/s3-integration-form.test.tsx b/ui/components/integrations/s3/s3-integration-form.test.tsx new file mode 100644 index 0000000000..7186cc42ed --- /dev/null +++ b/ui/components/integrations/s3/s3-integration-form.test.tsx @@ -0,0 +1,244 @@ +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import type { ComponentProps } from "react"; +import { beforeEach, describe, expect, it, vi } from "vitest"; + +import type { IntegrationProps } from "@/types/integrations"; +import type { ProviderProps } from "@/types/providers"; + +import { S3IntegrationForm } from "./s3-integration-form"; + +const { createIntegrationMock, toastMock, updateIntegrationMock } = vi.hoisted( + () => ({ + createIntegrationMock: vi.fn(), + toastMock: vi.fn(), + updateIntegrationMock: vi.fn(), + }), +); + +vi.mock("@/actions/integrations", () => ({ + createIntegration: createIntegrationMock, + updateIntegration: updateIntegrationMock, +})); + +vi.mock("next-auth/react", () => ({ + useSession: () => ({ + data: { + tenantId: "tenant-id", + }, + }), +})); + +vi.mock("@/components/shadcn", async (importOriginal) => ({ + ...(await importOriginal>()), + useToast: () => ({ + toast: toastMock, + }), +})); + +interface MockEnhancedMultiSelectProps { + onValueChange: (values: string[]) => void; + options: Array<{ value: string }>; +} + +vi.mock("@/components/shadcn/select/enhanced-multi-select", () => ({ + EnhancedMultiSelect: ({ + onValueChange, + options, + }: MockEnhancedMultiSelectProps) => ( + + ), +})); + +vi.mock( + "@/components/providers/workflow/forms/select-credentials-type/aws/credentials-type/aws-role-credentials-form", + () => ({ + AWSRoleCredentialsForm: ({ + templateLinks, + }: { + templateLinks: { cloudformationQuickLink: string }; + }) => ( + + {templateLinks.cloudformationQuickLink} + + ), + }), +); + +vi.mock("@/lib", () => ({ + getAWSCredentialsTemplateLinks: ( + _externalId: string, + _bucketName: string, + _integrationType: string, + bucketAccountId?: string, + ) => ({ + cloudformation: "https://example.com/cloudformation", + terraform: "https://example.com/terraform", + cloudformationQuickLink: `https://example.com/quick-create?bucketAccountId=${bucketAccountId ?? ""}`, + }), +})); + +function createProvider( + provider: ProviderProps["attributes"]["provider"], + uid: string, +): ProviderProps { + return { + id: `${provider}-provider`, + type: "providers", + attributes: { + provider, + is_dynamic: false, + uid, + alias: `${provider} provider`, + status: "completed", + resources: 0, + connection: { + connected: true, + last_checked_at: "2026-07-16T00:00:00Z", + }, + scanner_args: { + only_logs: false, + excluded_checks: [], + aws_retries_max_attempts: 3, + }, + inserted_at: "2026-07-16T00:00:00Z", + updated_at: "2026-07-16T00:00:00Z", + created_by: { + object: "users", + id: "user-1", + }, + }, + relationships: { + secret: { + data: null, + }, + provider_groups: { + meta: { + count: 0, + }, + data: [], + }, + }, + }; +} + +function renderS3IntegrationForm( + props?: Partial>, +) { + return render( + , + ); +} + +const integration: IntegrationProps = { + type: "integrations", + id: "integration-1", + attributes: { + inserted_at: "2026-07-16T00:00:00Z", + updated_at: "2026-07-16T00:00:00Z", + enabled: true, + connected: true, + connection_last_checked_at: "2026-07-16T00:00:00Z", + integration_type: "amazon_s3", + configuration: { + bucket_name: "prowler-reports", + output_directory: "output", + }, + }, + relationships: { + providers: { + data: [{ type: "providers", id: "aws-provider" }], + }, + }, + links: { + self: "/integrations/integration-1", + }, +}; + +describe("S3IntegrationForm", () => { + beforeEach(() => { + createIntegrationMock.mockReset(); + toastMock.mockReset(); + updateIntegrationMock.mockReset(); + }); + + it("should require the bucket owner account ID when it cannot derive one", async () => { + // Given + const user = userEvent.setup(); + renderS3IntegrationForm({ + providers: [createProvider("azure", "subscription-id")], + }); + + // When + await user.type(screen.getByLabelText(/Bucket name/i), "prowler-reports"); + await user.click(screen.getByRole("button", { name: "Next" })); + + // Then + expect( + await screen.findByText( + "Bucket owner account ID is required when no AWS account is selected", + ), + ).toBeVisible(); + expect( + screen.queryByLabelText("CloudFormation quick link"), + ).not.toBeInTheDocument(); + }); + + it("should derive the bucket owner account ID from the selected AWS provider", async () => { + // Given + const user = userEvent.setup(); + renderS3IntegrationForm({ + providers: [createProvider("aws", "123456789012")], + }); + + // When + await user.click( + screen.getByRole("button", { name: "Select first provider" }), + ); + await user.type(screen.getByLabelText(/Bucket name/i), "prowler-reports"); + await user.click(screen.getByRole("button", { name: "Next" })); + + // Then + expect( + await screen.findByLabelText("CloudFormation quick link"), + ).toHaveTextContent("bucketAccountId=123456789012"); + }); + + it("should not show a bucket account field that configuration updates cannot persist", () => { + // When + renderS3IntegrationForm({ + integration, + providers: [createProvider("aws", "123456789012")], + editMode: "configuration", + }); + + // Then + expect( + screen.queryByLabelText(/Bucket owner account ID/i), + ).not.toBeInTheDocument(); + }); + + it("should allow changing the bucket owner account for credential updates", () => { + // When + renderS3IntegrationForm({ + integration, + providers: [createProvider("aws", "123456789012")], + editMode: "credentials", + }); + + // Then + expect( + screen.getByLabelText(/Bucket owner account ID/i), + ).toBeInTheDocument(); + }); +}); diff --git a/ui/components/integrations/s3/s3-integration-form.tsx b/ui/components/integrations/s3/s3-integration-form.tsx index 670e3c9aae..555e7d0d1f 100644 --- a/ui/components/integrations/s3/s3-integration-form.tsx +++ b/ui/components/integrations/s3/s3-integration-form.tsx @@ -4,7 +4,8 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { ArrowLeftIcon, ArrowRightIcon } from "lucide-react"; import { useSession } from "next-auth/react"; import { useState } from "react"; -import { Control, useForm } from "react-hook-form"; +import type { Control } from "react-hook-form"; +import { useForm } from "react-hook-form"; import { createIntegration, updateIntegration } from "@/actions/integrations"; import { @@ -25,13 +26,13 @@ import { import { FormButtons } from "@/components/shadcn/form/form-buttons"; import { EnhancedMultiSelect } from "@/components/shadcn/select/enhanced-multi-select"; import { getAWSCredentialsTemplateLinks } from "@/lib"; -import { AWSCredentialsRole } from "@/types"; +import type { AWSCredentialsRole } from "@/types"; +import type { IntegrationProps } from "@/types/integrations"; import { editS3IntegrationFormSchema, - IntegrationProps, s3IntegrationFormSchema, } from "@/types/integrations"; -import { ProviderProps } from "@/types/providers"; +import type { ProviderProps } from "@/types/providers"; interface S3IntegrationFormProps { integration?: IntegrationProps | null; @@ -41,6 +42,25 @@ interface S3IntegrationFormProps { editMode?: "configuration" | "credentials" | null; // null means creating new } +const getSelectedAWSAccountId = ( + selectedProviderIds: string[], + providers: ProviderProps[], +): string => { + for (const providerId of selectedProviderIds) { + const provider = providers.find(({ id }) => id === providerId); + const uid = provider?.attributes.uid; + if ( + provider?.attributes.provider === "aws" && + uid && + /^\d{12}$/.test(uid) + ) { + return uid; + } + } + + return ""; +}; + export const S3IntegrationForm = ({ integration, providers, @@ -75,6 +95,7 @@ export const S3IntegrationForm = ({ defaultValues: { integration_type: "amazon_s3" as const, bucket_name: integration?.attributes.configuration.bucket_name || "", + bucket_account_id: "", output_directory: integration?.attributes.configuration.output_directory || "output", providers: @@ -94,6 +115,14 @@ export const S3IntegrationForm = ({ }); const isLoading = form.formState.isSubmitting; + const selectedProviderIds = form.watch("providers") || []; + const bucketAccountIdOverride = form.watch("bucket_account_id")?.trim() || ""; + const derivedBucketAccountId = getSelectedAWSAccountId( + selectedProviderIds, + providers, + ); + const resolvedBucketAccountId = + bucketAccountIdOverride || derivedBucketAccountId; const handleNext = async (e: React.FormEvent) => { e.preventDefault(); @@ -103,18 +132,36 @@ export const S3IntegrationForm = ({ return; } - // Validate current step fields for creation flow + // Validate current step fields for creation flow. bucket_account_id is + // validated here, while its input is visible, so a malformed value surfaces + // its error instead of silently blocking the step 1 submit. const stepFields = currentStep === 0 - ? (["bucket_name", "output_directory", "providers"] as const) + ? ([ + "bucket_name", + "output_directory", + "providers", + "bucket_account_id", + ] as const) : // Step 1: No required fields since role_arn and external_id are optional []; const isValid = stepFields.length === 0 || (await form.trigger(stepFields)); - if (isValid) { - setCurrentStep(1); + if (!isValid) { + return; } + + if (!resolvedBucketAccountId) { + form.setError("bucket_account_id", { + message: + "Bucket owner account ID is required when no AWS account is selected", + }); + return; + } + + form.clearErrors("bucket_account_id"); + setCurrentStep(1); }; const handleBack = () => { @@ -255,6 +302,30 @@ export const S3IntegrationForm = ({ } }; + const renderBucketAccountIdField = () => ( +

+ +

+ {derivedBucketAccountId + ? `Leave empty to use selected AWS account ${derivedBucketAccountId}, or enter another bucket owner account ID.` + : "Required because the selected provider does not identify the AWS account that owns the bucket."} +

+
+ ); + const renderStepContent = () => { // If editing credentials, show only credentials form if (isEditingCredentials || currentStep === 1) { @@ -265,17 +336,21 @@ export const S3IntegrationForm = ({ externalId, bucketName, "amazon_s3", + resolvedBucketAccountId, ); return ( - } - setValue={form.setValue as any} - externalId={externalId} - templateLinks={templateLinks} - type="integrations" - integrationType="amazon_s3" - /> +
+ {isEditingCredentials && renderBucketAccountIdField()} + } + setValue={form.setValue as any} + externalId={externalId} + templateLinks={templateLinks} + type="integrations" + integrationType="amazon_s3" + /> +
); } @@ -346,6 +421,8 @@ export const S3IntegrationForm = ({ variant="bordered" isRequired /> + + {!isEditingConfig && renderBucketAccountIdField()} ); diff --git a/ui/components/providers/organizations/hooks/use-org-setup-submission.ts b/ui/components/providers/organizations/hooks/use-org-setup-submission.ts index b11903b48f..3d77ceff7a 100644 --- a/ui/components/providers/organizations/hooks/use-org-setup-submission.ts +++ b/ui/components/providers/organizations/hooks/use-org-setup-submission.ts @@ -11,7 +11,7 @@ import { triggerDiscovery, updateOrganizationSecret, } from "@/actions/organizations/organizations"; -import { getSelectableAccountIds } from "@/actions/organizations/organizations.adapter"; +import { getSelectableAccountIdsForTarget } from "@/actions/organizations/organizations.adapter"; import { useOrgSetupStore } from "@/store/organizations/store"; import { DISCOVERY_STATUS, DiscoveryResult } from "@/types/organizations"; @@ -43,6 +43,9 @@ interface OrgSetupSubmissionData { organizationName?: string; awsOrgId: string; roleArn: string; + // OU or root ID the StackSet was deployed to. Used to scope the default + // account selection to what was actually rolled out. + organizationalUnitId?: string; } interface UseOrgSetupSubmissionProps { @@ -295,8 +298,15 @@ export function useOrgSetupSubmission({ return; } - const selectableAccountIds = getSelectableAccountIds( + // The deployment (management/delegated admin) account is where the local + // role is created; its ID is the one embedded in the Role ARN. + const deploymentAccountId = data.roleArn.match( + /^arn:aws:iam::(\d{12}):role\//, + )?.[1]; + const selectableAccountIds = getSelectableAccountIdsForTarget( resolvedDiscoveryResult, + data.organizationalUnitId ?? "", + deploymentAccountId, ); setDiscovery(discoveryId, resolvedDiscoveryResult); setSelectedAccountIds(selectableAccountIds); diff --git a/ui/components/providers/organizations/org-setup-form.test.tsx b/ui/components/providers/organizations/org-setup-form.test.tsx new file mode 100644 index 0000000000..329d6fe05c --- /dev/null +++ b/ui/components/providers/organizations/org-setup-form.test.tsx @@ -0,0 +1,121 @@ +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { beforeEach, describe, expect, it, vi } from "vitest"; + +import { useOrgSetupStore } from "@/store/organizations/store"; +import { ORG_SETUP_PHASE } from "@/types/organizations"; + +import { OrgSetupForm } from "./org-setup-form"; + +const { + setApiErrorMock, + submitOrganizationSetupMock, + updateOrganizationNameMock, +} = vi.hoisted(() => ({ + setApiErrorMock: vi.fn(), + submitOrganizationSetupMock: vi.fn(), + updateOrganizationNameMock: vi.fn(), +})); + +vi.mock("@/actions/organizations/organizations", () => ({ + updateOrganizationName: updateOrganizationNameMock, +})); + +vi.mock("@/lib", () => ({ + getAWSOrgDeploymentQuickLink: ({ + deployFromDelegatedAdmin, + }: { + deployFromDelegatedAdmin?: boolean; + }) => { + const params = new URLSearchParams(); + if (deployFromDelegatedAdmin) { + params.set("param_DeployFromDelegatedAdmin", "true"); + } + return `https://console.aws.amazon.com/#/quick-create?${params.toString()}`; + }, +})); + +vi.mock("next-auth/react", () => ({ + useSession: () => ({ + data: { + tenantId: "tenant&id", + }, + }), +})); + +vi.mock("./hooks/use-org-setup-submission", () => ({ + useOrgSetupSubmission: () => ({ + apiError: null, + setApiError: setApiErrorMock, + submitOrganizationSetup: submitOrganizationSetupMock, + }), +})); + +function renderOrgSetupForm() { + return render( + , + ); +} + +describe("OrgSetupForm", () => { + beforeEach(() => { + setApiErrorMock.mockReset(); + submitOrganizationSetupMock.mockReset(); + updateOrganizationNameMock.mockReset(); + useOrgSetupStore.getState().reset(); + }); + + it("should render a real disabled button until the deployment link is valid", () => { + // Given + renderOrgSetupForm(); + + // When + const deploymentLink = screen.queryByRole("link", { + name: /create stack in management account/i, + }); + const deploymentButton = screen.getByRole("button", { + name: /create stack in management account/i, + }); + + // Then + expect(deploymentLink).not.toBeInTheDocument(); + expect(deploymentButton).toBeDisabled(); + }); + + it("should target the delegated administrator account when selected", async () => { + // Given + const user = userEvent.setup(); + renderOrgSetupForm(); + + // When + await user.type( + screen.getByLabelText("Organizational Unit or Root ID"), + "r-abcd", + ); + await user.click( + screen.getByRole("checkbox", { + name: /deploying from a delegated administrator account/i, + }), + ); + + // Then + const deploymentLink = await screen.findByRole("link", { + name: /create stack in delegated administrator account/i, + }); + const hashQuery = new URL( + deploymentLink.getAttribute("href") ?? "", + ).hash.split("?")[1]; + const params = new URLSearchParams(hashQuery); + + expect(params.get("param_DeployFromDelegatedAdmin")).toBe("true"); + expect( + screen.getByLabelText("Delegated Administrator Account Role ARN"), + ).toBeInTheDocument(); + }); +}); diff --git a/ui/components/providers/organizations/org-setup-form.tsx b/ui/components/providers/organizations/org-setup-form.tsx index a9852fa202..35fb13c938 100644 --- a/ui/components/providers/organizations/org-setup-form.tsx +++ b/ui/components/providers/organizations/org-setup-form.tsx @@ -3,20 +3,17 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { Check, Copy, ExternalLink } from "lucide-react"; import { useSession } from "next-auth/react"; -import { FormEvent, useEffect, useRef, useState } from "react"; +import type { FormEvent } from "react"; +import { useEffect, useRef, useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { z } from "zod"; import { updateOrganizationName } from "@/actions/organizations/organizations"; import { AWSProviderBadge } from "@/components/icons/providers-badge"; -import { - WIZARD_FOOTER_ACTION_TYPE, - WizardFooterConfig, -} from "@/components/providers/wizard/steps/footer-controls"; -import { - ORG_WIZARD_INTENT, - OrgWizardIntent, -} from "@/components/providers/wizard/types"; +import type { WizardFooterConfig } from "@/components/providers/wizard/steps/footer-controls"; +import { WIZARD_FOOTER_ACTION_TYPE } from "@/components/providers/wizard/steps/footer-controls"; +import type { OrgWizardIntent } from "@/components/providers/wizard/types"; +import { ORG_WIZARD_INTENT } from "@/components/providers/wizard/types"; import { WizardInputField } from "@/components/providers/workflow/forms/fields"; import { useToast } from "@/components/shadcn"; import { Alert, AlertDescription } from "@/components/shadcn/alert"; @@ -24,13 +21,10 @@ import { Button } from "@/components/shadcn/button/button"; import { Checkbox } from "@/components/shadcn/checkbox/checkbox"; import { Form } from "@/components/shadcn/form"; import { Spinner } from "@/components/shadcn/spinner/spinner"; -import { - getAWSCredentialsTemplateLinks, - PROWLER_CF_TEMPLATE_URL, - STACKSET_CONSOLE_URL, -} from "@/lib"; +import { getAWSOrgDeploymentQuickLink } from "@/lib"; import { useOrgSetupStore } from "@/store/organizations/store"; -import { ORG_SETUP_PHASE, OrgSetupPhase } from "@/types/organizations"; +import type { OrgSetupPhase } from "@/types/organizations"; +import { ORG_SETUP_PHASE } from "@/types/organizations"; import { useOrgSetupSubmission } from "./hooks/use-org-setup-submission"; @@ -52,8 +46,14 @@ const orgSetupSchema = z.object({ /^arn:aws:iam::\d{12}:role\//, "Must be a valid IAM Role ARN (e.g., arn:aws:iam::123456789012:role/ProwlerScan)", ), + // OU or root id the StackSet deploys to. UI-only: used to build the + // CloudFormation quick-create link, not sent to the backend. Its format is + // validated inline (isOrgUnitIdValid) to gate the deployment button, so a + // malformed value never blocks the Authenticate submit. + organizationalUnitId: z.string().trim().optional(), + deployFromDelegatedAdmin: z.boolean().optional(), stackSetDeployed: z.boolean().refine((value) => value, { - message: "You must confirm the StackSet deployment before continuing.", + error: "You must confirm the deployment before continuing.", }), }); @@ -91,9 +91,7 @@ export function OrgSetupForm({ const { toast } = useToast(); const COPY_RESET_TIMEOUT = 1500; const [isExternalIdCopied, setIsExternalIdCopied] = useState(false); - const [isTemplateUrlCopied, setIsTemplateUrlCopied] = useState(false); const externalIdCopyTimer = useRef>(undefined); - const templateUrlCopyTimer = useRef>(undefined); // Copies text and flips the copied flag back after the timeout, without effects const copyWithFeedback = ( @@ -110,8 +108,6 @@ export function OrgSetupForm({ const copyExternalId = (text: string) => copyWithFeedback(text, setIsExternalIdCopied, externalIdCopyTimer); - const copyTemplateUrl = (text: string) => - copyWithFeedback(text, setIsTemplateUrlCopied, templateUrlCopyTimer); const [setupPhase, setSetupPhase] = useState(initialPhase); const [isSaving, setIsSaving] = useState(false); const formId = "org-wizard-setup-form"; @@ -126,6 +122,8 @@ export function OrgSetupForm({ organizationName: initialValues?.organizationName ?? "", awsOrgId: initialValues?.awsOrgId ?? "", roleArn: "", + organizationalUnitId: "", + deployFromDelegatedAdmin: false, stackSetDeployed: false, }, }); @@ -139,10 +137,27 @@ export function OrgSetupForm({ const awsOrgId = watch("awsOrgId") || ""; const isOrgIdValid = /^o-[a-z0-9]{10,32}$/.test(awsOrgId.trim()); - const templateLinks = stackSetExternalId - ? getAWSCredentialsTemplateLinks(stackSetExternalId) - : null; - const orgQuickLink = templateLinks?.cloudformationOrgQuickLink; + + const organizationalUnitId = watch("organizationalUnitId") || ""; + const deployFromDelegatedAdmin = watch("deployFromDelegatedAdmin") || false; + const deploymentAccountName = deployFromDelegatedAdmin + ? "delegated administrator account" + : "management account"; + const deploymentAccountLabel = deployFromDelegatedAdmin + ? "Delegated Administrator Account" + : "Management Account"; + const isOrgUnitIdValid = + /^(ou-[a-z0-9]{4,32}-[a-z0-9]{8,32}|r-[a-z0-9]{4,32})$/.test( + organizationalUnitId.trim(), + ); + const orgQuickLink = + stackSetExternalId && isOrgUnitIdValid + ? getAWSOrgDeploymentQuickLink({ + externalId: stackSetExternalId, + organizationalUnitId: organizationalUnitId.trim(), + deployFromDelegatedAdmin, + }) + : null; const { apiError, setApiError, submitOrganizationSetup } = useOrgSetupSubmission({ @@ -381,91 +396,115 @@ export function OrgSetupForm({ - {/* Step 1: Management account - CloudFormation Stack */} + {/* Step 1: Choose the deployment target */}
- {/* Step 2: Member accounts - CloudFormation StackSet */} + {/* Step 2: Single CloudFormation Stack (role + StackSet) */}

- 2) Deploy the ProwlerScan role to{" "} - member accounts using a CloudFormation - StackSet. + 2) Create the CloudFormation Stack in your{" "} + {deploymentAccountName}. It deploys the + ProwlerScan role and a service-managed StackSet that rolls the + role out to your member accounts in one step.

-

- Open the StackSets console, select{" "} - Service-managed permissions, and paste the - template URL below. Set the ExternalId{" "} - parameter to the value shown above. -

-
- - {PROWLER_CF_TEMPLATE_URL} - - -
- + ) : ( + + {`Create Stack in ${deploymentAccountLabel}`} + + )} + {!isOrgUnitIdValid && ( +

+ Enter a valid Organizational Unit or Root ID above to enable + deployment. +

+ )}
{/* Step 3: Role ARN + confirm */}

- 3) Paste the management account Role ARN and confirm both - deployments are complete. + 3) Paste the {deploymentAccountName} Role ARN and confirm the + deployment is complete.

- The Stack and StackSet have been successfully deployed in - AWS + The Stack has been successfully deployed in AWS * diff --git a/ui/lib/external-urls.test.ts b/ui/lib/external-urls.test.ts new file mode 100644 index 0000000000..0f82a4e0cd --- /dev/null +++ b/ui/lib/external-urls.test.ts @@ -0,0 +1,130 @@ +import { readFileSync } from "node:fs"; +import { join } from "node:path"; + +import { describe, expect, it } from "vitest"; + +import { + getAWSCredentialsTemplateLinks, + getAWSOrgDeploymentQuickLink, + PROWLER_CF_TEMPLATE_URL, +} from "./external-urls"; + +function getQuickCreateParams(link: string): URLSearchParams { + const hashQuery = new URL(link).hash.split("?")[1]; + return new URLSearchParams(hashQuery); +} + +describe("getAWSCredentialsTemplateLinks", () => { + it("should preserve dynamic values as single CloudFormation parameters", () => { + // Given + const externalId = "tenant&id"; + const bucketName = "bucket¶m_DeployStackSet=false"; + + // When + const links = getAWSCredentialsTemplateLinks( + externalId, + bucketName, + "amazon_s3", + "123456789012", + ); + const params = getQuickCreateParams(links.cloudformationQuickLink); + + // Then + expect(params.get("param_ExternalId")).toBe(externalId); + expect(params.get("param_S3IntegrationBucketName")).toBe(bucketName); + expect(params.get("param_S3IntegrationBucketAccountId")).toBe( + "123456789012", + ); + expect(params.get("param_DeployStackSet")).toBeNull(); + }); + + it("should omit S3 integration parameters when the bucket account id is missing", () => { + // Given - the template requires S3IntegrationBucketAccountId whenever + // EnableS3Integration is true, so an incomplete link would fail CFN + // validation. This is reachable from the edit-credentials flow, where the + // account id can resolve to an empty string. + const externalId = "tenant-id"; + const bucketName = "my-findings-bucket"; + + // When + const links = getAWSCredentialsTemplateLinks( + externalId, + bucketName, + "amazon_s3", + ); + const params = getQuickCreateParams(links.cloudformationQuickLink); + + // Then + expect(params.get("param_ExternalId")).toBe(externalId); + expect(params.get("param_EnableS3Integration")).toBeNull(); + expect(params.get("param_S3IntegrationBucketName")).toBeNull(); + expect(params.get("param_S3IntegrationBucketAccountId")).toBeNull(); + }); +}); + +describe("getAWSOrgDeploymentQuickLink", () => { + it("should include the one-step organization deployment parameters", () => { + // Given + const externalId = "tenant&id"; + const organizationalUnitId = "ou-abcd-12345678"; + + // When + const link = getAWSOrgDeploymentQuickLink({ + externalId, + organizationalUnitId, + deployFromDelegatedAdmin: true, + }); + const params = getQuickCreateParams(link); + + // Then + expect(params.get("templateURL")).toBe(PROWLER_CF_TEMPLATE_URL); + expect(params.get("param_ExternalId")).toBe(externalId); + expect(params.get("param_AWSOrganizationalUnitId")).toBe( + organizationalUnitId, + ); + expect(params.get("param_EnableOrganizations")).toBe("true"); + expect(params.get("param_DeployLocalRole")).toBe("true"); + expect(params.get("param_DeployStackSet")).toBe("true"); + expect(params.get("param_DeployFromDelegatedAdmin")).toBe("true"); + }); + + it("should omit delegated administrator mode for management accounts", () => { + // Given + const organizationalUnitId = "r-abcd"; + + // When + const link = getAWSOrgDeploymentQuickLink({ + externalId: "tenant-id", + organizationalUnitId, + }); + const params = getQuickCreateParams(link); + + // Then + expect(params.get("param_AWSOrganizationalUnitId")).toBe( + organizationalUnitId, + ); + expect(params.get("param_DeployFromDelegatedAdmin")).toBeNull(); + }); +}); + +describe("Prowler CloudFormation template", () => { + it("should define every parameter used by the UI quick-create links", () => { + // Given + const template = readFileSync( + join( + process.cwd(), + "..", + "permissions/templates/cloudformation/prowler-scan-role.yml", + ), + "utf8", + ); + + // Then + expect(template).toContain(" EnableOrganizations:"); + expect(template).toContain(" S3IntegrationBucketAccountId:"); + expect(template).toContain(" DeployStackSet:"); + expect(template).toContain(" DeployLocalRole:"); + expect(template).toContain(" AWSOrganizationalUnitId:"); + expect(template).toContain(" DeployFromDelegatedAdmin:"); + }); +}); diff --git a/ui/lib/external-urls.ts b/ui/lib/external-urls.ts index 28cd9591e6..0ae17384a9 100644 --- a/ui/lib/external-urls.ts +++ b/ui/lib/external-urls.ts @@ -1,4 +1,4 @@ -import { IntegrationType } from "../types/integrations"; +import type { IntegrationType } from "../types/integrations"; // Documentation URLs export const DOCS_URLS = { @@ -18,19 +18,36 @@ export const DOCS_URLS = { } as const; // CloudFormation template URL for the ProwlerScan role. -// Also used (URL-encoded) as the templateURL param in cloudformationQuickLink -// and cloudformationOrgQuickLink below — keep both in sync. +// Also used (URL-encoded) as the templateURL param in the quick-create links +// built by getAWSCredentialsTemplateLinks and getAWSOrgDeploymentQuickLink below. export const PROWLER_CF_TEMPLATE_URL = "https://prowler-cloud-public.s3.eu-west-1.amazonaws.com/permissions/templates/aws/cloudformation/prowler-scan-role.yml"; // Prowler Cloud billing/subscription management page. export const BILLING_URL = "https://cloud.prowler.com/billing"; -// AWS Console URL for creating a new StackSet. -// Hardcoded to us-east-1 — StackSets are typically managed from this region. -// Users in AWS GovCloud or China partitions would need different URLs. -export const STACKSET_CONSOLE_URL = - "https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacksets/create"; +// Base URL for the CloudFormation "quick create stack" console flow. +// Hardcoded to us-east-1 because the public template is hosted for that flow. +const CF_QUICKCREATE_BASE_URL = + "https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/quickcreate"; + +export interface AWSOrgDeploymentQuickLinkParams { + externalId: string; + organizationalUnitId: string; + deployFromDelegatedAdmin?: boolean; +} + +const buildCloudFormationQuickCreateLink = ( + parameters: Record, +): string => { + const searchParams = new URLSearchParams({ + templateURL: PROWLER_CF_TEMPLATE_URL, + stackName: "Prowler", + ...parameters, + }); + + return `${CF_QUICKCREATE_BASE_URL}?${searchParams.toString()}`; +}; export const getProviderHelpText = (provider: string) => { switch (provider) { @@ -126,11 +143,11 @@ export const getAWSCredentialsTemplateLinks = ( externalId: string, bucketName?: string, integrationType?: IntegrationType, + bucketAccountId?: string, ): { cloudformation: string; terraform: string; cloudformationQuickLink: string; - cloudformationOrgQuickLink: string; } => { let links = {}; @@ -152,24 +169,53 @@ export const getAWSCredentialsTemplateLinks = ( }; } - const encodedTemplateUrl = encodeURIComponent(PROWLER_CF_TEMPLATE_URL); - const cfBaseUrl = - "https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/quickcreate"; - const s3Params = bucketName - ? `¶m_EnableS3Integration=true¶m_S3IntegrationBucketName=${bucketName}` - : ""; + // The template requires S3IntegrationBucketAccountId (owner account of the + // bucket) whenever EnableS3Integration is true. Only enable S3 when both the + // bucket name and its account id are known, otherwise an incomplete link + // would fail stack validation on the quick-create flow (reachable from the + // edit-credentials flow, where the account id can resolve to an empty value). + const parameters: Record = { + param_ExternalId: externalId, + }; + + if (bucketName && bucketAccountId) { + parameters.param_EnableS3Integration = "true"; + parameters.param_S3IntegrationBucketName = bucketName; + parameters.param_S3IntegrationBucketAccountId = bucketAccountId; + } return { ...(links as { cloudformation: string; terraform: string; }), - cloudformationQuickLink: - `${cfBaseUrl}?templateURL=${encodedTemplateUrl}` + - `&stackName=Prowler¶m_ExternalId=${externalId}${s3Params}`, - cloudformationOrgQuickLink: - `${cfBaseUrl}?templateURL=${encodedTemplateUrl}` + - `&stackName=Prowler¶m_ExternalId=${externalId}` + - `¶m_EnableOrganizations=true${s3Params}`, + cloudformationQuickLink: buildCloudFormationQuickCreateLink(parameters), }; }; + +// Builds the CloudFormation quick-create link that onboards an entire AWS +// Organization in a single stack: it creates the ProwlerScan role in the +// account launching the stack (DeployLocalRole) and a service-managed StackSet +// that rolls the role out to the member accounts under the given OU/root +// (DeployStackSet). By default the stack is launched from the management +// account; set deployFromDelegatedAdmin when launching from a delegated +// administrator account instead, where the local role lands in that account. +export const getAWSOrgDeploymentQuickLink = ({ + externalId, + organizationalUnitId, + deployFromDelegatedAdmin = false, +}: AWSOrgDeploymentQuickLinkParams): string => { + const parameters: Record = { + param_ExternalId: externalId, + param_EnableOrganizations: "true", + param_DeployLocalRole: "true", + param_DeployStackSet: "true", + param_AWSOrganizationalUnitId: organizationalUnitId, + }; + + if (deployFromDelegatedAdmin) { + parameters.param_DeployFromDelegatedAdmin = "true"; + } + + return buildCloudFormationQuickCreateLink(parameters); +}; diff --git a/ui/types/integrations.ts b/ui/types/integrations.ts index 3ff525964e..b84869af1c 100644 --- a/ui/types/integrations.ts +++ b/ui/types/integrations.ts @@ -202,6 +202,14 @@ const baseS3IntegrationSchema = z.object({ integration_type: z.literal("amazon_s3"), bucket_name: z.string().min(1, "Bucket name is required"), output_directory: z.string().min(1, "Output directory is required"), + // UI-only field used to prefill the S3IntegrationBucketAccountId parameter of + // the CloudFormation quick-create link. Not sent to the backend. + bucket_account_id: z + .string() + .optional() + .refine((value) => !value || /^\d{12}$/.test(value), { + error: "Must be a valid 12-digit AWS Account ID", + }), providers: z.array(z.string()).optional(), enabled: z.boolean().optional(), ...awsCredentialFields, From cf840588c7a941108839ea733173f7b00fcf1370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20De=20la=20Torre=20Vico?= Date: Thu, 16 Jul 2026 15:15:55 +0200 Subject: [PATCH 03/30] chore(mcp): rebrand prowler_app_* tools to prowler_* and restructure MCP docs (#12017) Co-authored-by: Alan Buscaglia --- .../prowler/.claude-plugin/plugin.json | 2 +- .../framework-compliance-triage/SKILL.md | 20 +-- .../lighthouse-architecture.mdx | 18 ++- docs/developer-guide/mcp-server.mdx | 16 +- docs/docs.json | 4 +- .../basic-usage/prowler-mcp-tools.mdx | 74 ++++----- .../basic-usage/prowler-mcp.mdx | 36 +++-- .../installation/prowler-mcp.mdx | 20 +-- docs/getting-started/products/prowler-mcp.mdx | 146 ++++++++++++------ docs/images/lighthouse-architecture.mmd | 4 +- docs/images/prowler_mcp_schema.mmd | 39 +++-- docs/images/prowler_mcp_schema.png | Bin 380040 -> 0 bytes .../tutorials/prowler-app-attack-paths.mdx | 10 +- mcp_server/.env.template | 2 +- mcp_server/AGENTS.md | 4 +- mcp_server/README.md | 20 +-- .../prowler-tools-namespace.changed.md | 1 + mcp_server/prowler_mcp_server/__init__.py | 2 +- .../prowler_app/models/__init__.py | 2 +- .../prowler_app/models/finding_groups.py | 2 +- .../prowler_app/tools/__init__.py | 2 +- .../prowler_app/tools/attack_paths.py | 30 ++-- .../prowler_app/tools/compliance.py | 28 ++-- .../prowler_app/tools/finding_groups.py | 8 +- .../prowler_app/tools/findings.py | 12 +- .../prowler_app/tools/muting.py | 48 +++--- .../prowler_app/tools/providers.py | 14 +- .../prowler_app/tools/resources.py | 30 ++-- .../prowler_app/tools/scans.py | 62 ++++---- .../prowler_app/utils/api_client.py | 2 +- .../prowler_app/utils/auth.py | 14 +- .../prowler_app/utils/tool_loader.py | 26 +++- mcp_server/prowler_mcp_server/server.py | 10 +- mcp_server/pyproject.toml | 4 +- mcp_server/uv.lock | 2 +- skills/prowler-mcp/SKILL.md | 8 +- .../_components/chat/message-bubble.test.tsx | 2 +- .../lighthouse/_lib/event-reducer.test.ts | 4 +- .../lighthouse/_lib/tool-calls.test.ts | 12 +- .../(prowler)/lighthouse/_lib/tool-calls.ts | 7 +- .../prowler-tools-namespace.changed.md | 1 + ui/lib/lighthouse-v1/allowed-tools.test.ts | 38 +++++ ui/lib/lighthouse-v1/allowed-tools.ts | 67 ++++++++ ui/lib/lighthouse-v1/mcp-client.ts | 14 +- .../definitions/attack-path-custom-query.ts | 4 +- ui/lib/lighthouse-v1/system-prompt.ts | 2 +- ui/lib/lighthouse-v1/tools/meta-tool.ts | 6 +- ui/lib/lighthouse-v1/workflow.ts | 62 +------- 48 files changed, 543 insertions(+), 398 deletions(-) delete mode 100644 docs/images/prowler_mcp_schema.png create mode 100644 mcp_server/changelog.d/prowler-tools-namespace.changed.md create mode 100644 ui/changelog.d/prowler-tools-namespace.changed.md create mode 100644 ui/lib/lighthouse-v1/allowed-tools.test.ts create mode 100644 ui/lib/lighthouse-v1/allowed-tools.ts diff --git a/claude_plugins/prowler/.claude-plugin/plugin.json b/claude_plugins/prowler/.claude-plugin/plugin.json index 7bf822e2e7..c77187c3b0 100644 --- a/claude_plugins/prowler/.claude-plugin/plugin.json +++ b/claude_plugins/prowler/.claude-plugin/plugin.json @@ -22,7 +22,7 @@ "api_key": { "type": "string", "title": "Prowler API key", - "description": "API key token used to authenticate with Prowler Cloud / Prowler App via the Prowler MCP server. Create one at https://cloud.prowler.com.", + "description": "API key token used to authenticate with Prowler (Prowler Cloud, Prowler Private Cloud, or Prowler Local Server) via the Prowler MCP server. Create one at https://cloud.prowler.com.", "sensitive": true, "required": true } diff --git a/claude_plugins/prowler/skills/framework-compliance-triage/SKILL.md b/claude_plugins/prowler/skills/framework-compliance-triage/SKILL.md index 1af29f82b9..f8a9ded0c6 100644 --- a/claude_plugins/prowler/skills/framework-compliance-triage/SKILL.md +++ b/claude_plugins/prowler/skills/framework-compliance-triage/SKILL.md @@ -38,12 +38,12 @@ If the framework is not supported, tell the user, suggest they request it or con ### 1.1 Connect to Prowler Cloud -Verify the Prowler MCP connection by calling `prowler_app_search_providers` — a successful response returns the list of providers. If the call fails, walk the user through troubleshooting: internet connectivity, Prowler Cloud credentials, and permissions on the Prowler Cloud account. +Verify the Prowler MCP connection by calling `prowler_search_providers` — a successful response returns the list of providers. If the call fails, walk the user through troubleshooting: internet connectivity, Prowler Cloud credentials, and permissions on the Prowler Cloud account. For getting accurate information about configurations use `prowler_docs_search` to pull relevant instructions from the Prowler documentation. ### 1.2 Verify the provider is configured (or configure it) -Call `prowler_app_search_providers` to check whether the target provider (AWS account, Azure Subscription, GitHub Account...) exists in the user's Prowler Cloud account. Handle the result based on what's found: +Call `prowler_search_providers` to check whether the target provider (AWS account, Azure Subscription, GitHub Account...) exists in the user's Prowler Cloud account. Handle the result based on what's found: - **Provider not present.** Guide the user through adding and configuring it. Retrieve the relevant connection, credential, and permission instructions with `prowler_docs_search`. - **Provider present but misconfigured** (missing credentials, insufficient permissions, etc.). Walk the user through fixing the configuration, pulling the relevant guidance with `prowler_docs_search`. @@ -57,15 +57,15 @@ Call `prowler_app_search_providers` to check whether the target provider (AWS ac The flow needs at least one completed scan with a compliance report available. -Look for a completed scan first: call `prowler_app_list_scans` with the selected `provider_id` and `state: ["completed"]`, then call `prowler_app_get_compliance_overview` with each `scan_id` to find one whose compliance report is available. If one is found, continue to the next section. +Look for a completed scan first: call `prowler_list_scans` with the selected `provider_id` and `state: ["completed"]`, then call `prowler_get_compliance_overview` with each `scan_id` to find one whose compliance report is available. If one is found, continue to the next section. -If no completed scan has a report, call `prowler_app_list_scans` again with `state: ["available", "executing"]` to detect a scan in progress. +If no completed scan has a report, call `prowler_list_scans` again with `state: ["available", "executing"]` to detect a scan in progress. > **Checkpoint — Scan-in-progress decision** *(conditional: an in-progress scan was detected)* > > Tell the user a scan is already running and ask whether to wait for it to complete or start a fresh one. Wait for the answer. -If no scan is running (or the user chose to start a fresh one), trigger a new scan with `prowler_app_trigger_scan` and the `provider_id`. The link `https://cloud.prowler.com/scans?filter%5Bprovider_uid__in%5D={provider_id}` lets the user monitor progress. +If no scan is running (or the user chose to start a fresh one), trigger a new scan with `prowler_trigger_scan` and the `provider_id`. The link `https://cloud.prowler.com/scans?filter%5Bprovider_uid__in%5D={provider_id}` lets the user monitor progress. When a scan is in progress (either pre-existing and elected to wait, or just triggered), stop the flow and ask the user to return when it's completed — restart this section to re-check the results. @@ -85,7 +85,7 @@ Status taxonomy for failed requirements and their findings: ### Report template -A fresh report is rendered like this (substituting values from the `prowler_app_get_compliance_framework_state_details` Prowler MCP tool response): +A fresh report is rendered like this (substituting values from the `prowler_get_compliance_framework_state_details` Prowler MCP tool response): ````markdown # Compliance report: @@ -120,7 +120,7 @@ A fresh report is rendered like this (substituting values from the `prowler_app_ Resolve the report path for the current `compliance_id` and provider account. -If the file does not exist, call `prowler_app_get_compliance_framework_state_details` for the target scan, render the template above, and write the file with one initialization entry in the activity log. +If the file does not exist, call `prowler_get_compliance_framework_state_details` for the target scan, render the template above, and write the file with one initialization entry in the activity log. If the file exists, read it and compare its `Scan ID` to the target scan from section 1.3. When the scan matches, reuse the file and summarize remaining `[FAIL]` and `[IN PROGRESS]` items in chat. @@ -128,7 +128,7 @@ If the file exists, read it and compare its `Scan ID` to the target scan from se > > Tell the user the report on disk was generated from a different scan and ask whether to refresh it from the new scan. Wait for the answer. -On confirmation, regenerate the failed-requirements section from the new `prowler_app_get_compliance_framework_state_details` response, carry forward the **Global remediation approach** block and the full activity log, and append an activity-log entry noting the scan change. +On confirmation, regenerate the failed-requirements section from the new `prowler_get_compliance_framework_state_details` response, carry forward the **Global remediation approach** block and the full activity log, and append an activity-log entry noting the scan change. Once the file is current, surface the top failing requirements in chat: sort by finding count descending, show the top 5 with their codes and counts, and point to the file path for the full list. @@ -174,7 +174,7 @@ Once approved, the loop proceeds through the batch without further prompts unles Pick the first `[FAIL]` requirement at the top of the failed-requirements section. Move its status and every finding under it to `[IN PROGRESS]`, and add a `**Fix plan**:` sub-bullet describing what will be done. -Call `prowler_app_get_finding_details` for each `finding_id` to retrieve the failing resource and the Prowler Hub's remediation guidance for that check using the tool `prowler_hub_get_check_details` with the `check_id` from the finding details. Summarize the guidance in chat, and append it to the `**Fix plan**` note for each finding. +Call `prowler_get_finding_details` for each `finding_id` to retrieve the failing resource and the Prowler Hub's remediation guidance for that check using the tool `prowler_hub_get_check_details` with the `check_id` from the finding details. Summarize the guidance in chat, and append it to the `**Fix plan**` note for each finding. If a finding does not apply to the target resource (Organization-only check on a User account, paid-tier feature, missing resource type, etc.), set the requirement status to `[SKIPPED]` with the reason, log it in the activity log, and move on without attempting the fix — even if it was missed during §3.2. @@ -194,6 +194,6 @@ Move to the next `[FAIL]` requirement and repeat from section 3.3. > **Checkpoint — Rescan trigger** *(conditional: no `[FAIL]` requirements remain; all are `[FIXED-UNVERIFIED]` or `[SKIPPED]`)* > -> Summarize what was applied, list any `[SKIPPED]` items with reasons, and ask whether to trigger a fresh scan with `prowler_app_trigger_scan` to verify the fixes end-to-end. Wait for the answer. +> Summarize what was applied, list any `[SKIPPED]` items with reasons, and ask whether to trigger a fresh scan with `prowler_trigger_scan` to verify the fixes end-to-end. Wait for the answer. On confirmation, trigger the rescan. When it completes, restart section 2.1 with the carry-forward path — requirements no longer in the new FAIL list move to `[PASS]`, anything still failing reverts to `[FAIL]` with the previous fix attempt visible in the activity log. diff --git a/docs/developer-guide/lighthouse-architecture.mdx b/docs/developer-guide/lighthouse-architecture.mdx index 631e0e7ae4..e12eff9549 100644 --- a/docs/developer-guide/lighthouse-architecture.mdx +++ b/docs/developer-guide/lighthouse-architecture.mdx @@ -132,7 +132,7 @@ The MCP client manages connections to the Prowler MCP Server using a singleton p - **Connection Management**: Retry logic with configurable attempts and delays - **Tool Discovery**: Fetches available tools from MCP server on initialization -- **Authentication Injection**: Automatically adds JWT tokens to `prowler_app_*` tool calls +- **Authentication Injection**: Automatically adds JWT tokens to `prowler_*` tool calls - **Reconnection**: Supports forced reconnection after server restarts Key constants: @@ -141,10 +141,14 @@ Key constants: - `RECONNECT_INTERVAL_MS`: 5 minutes before retry after failure ```typescript -// Authentication injection for prowler_app tools +// Authentication injection for core prowler_ tools (Hub/Docs excluded) private handleBeforeToolCall = ({ name, args }) => { - // Only inject auth for prowler_app_* tools (user-specific data) - if (!name.startsWith("prowler_app_")) { + // Only inject auth for prowler_* tools (user-specific data). + // The legacy prowler_app_ prefix is also accepted for a resilient rollout. + if ( + !name.startsWith("prowler_") && + !name.startsWith("prowler_app_") + ) { return { args }; } @@ -307,7 +311,7 @@ MCP tools are organized into three namespaces based on authentication requiremen | Namespace | Auth Required | Description | |-----------|---------------|-------------| -| `prowler_app_*` | Yes (JWT) | Prowler Cloud and Prowler Local Server tools for findings, providers, scans, resources | +| `prowler_*` | Yes (JWT) | Prowler Cloud, Prowler Private Cloud, and Prowler Local Server tools for findings, providers, scans, resources | | `prowler_hub_*` | No | Security checks catalog, compliance frameworks | | `prowler_docs_*` | No | Documentation search and retrieval | @@ -315,7 +319,7 @@ MCP tools are organized into three namespaces based on authentication requiremen 1. User authenticates with Prowler Local Server, receiving a JWT token 2. Token is stored in session and propagated via `authContextStorage` -3. MCP client injects `Authorization: Bearer ` header for `prowler_app_*` calls +3. MCP client injects `Authorization: Bearer ` header for `prowler_*` calls 4. MCP Server validates token and applies RLS filtering ### Tool Execution Pattern @@ -323,7 +327,7 @@ MCP tools are organized into three namespaces based on authentication requiremen The agent uses meta-tools rather than direct tool registration: ``` -Agent needs data → describe_tool("prowler_app_search_findings") +Agent needs data → describe_tool("prowler_search_findings") → Returns parameter schema → execute_tool with parameters → MCP client adds auth header → MCP Server executes → Results returned to agent → Agent continues reasoning diff --git a/docs/developer-guide/mcp-server.mdx b/docs/developer-guide/mcp-server.mdx index 1b9c49a18b..6d409ccc02 100644 --- a/docs/developer-guide/mcp-server.mdx +++ b/docs/developer-guide/mcp-server.mdx @@ -18,11 +18,15 @@ The Prowler MCP Server brings the entire Prowler ecosystem to AI assistants thro The server follows a modular architecture with three independent sub-servers: -| Sub-Server | Auth Required | Description | -|------------|---------------|-------------| -| `prowler_app` | Yes | Full access to Prowler Cloud and Prowler Local Server features | -| Prowler Hub | No | Security checks catalog with **over 2,000 checks**, fixers, and **70+ compliance frameworks** | -| Prowler Documentation | No | Full-text search and retrieval of official documentation | +| Sub-Server | Tool Prefix | Auth Required | Description | +|------------|-------------|---------------|-------------| +| Prowler | `prowler_` | Yes | Full access to Prowler Cloud, Prowler Private Cloud, and Prowler Local Server features | +| Prowler Hub | `prowler_hub_` | No | Security checks catalog with **over 2,000 checks**, fixers, and **70+ compliance frameworks** | +| Prowler Documentation | `prowler_docs_` | No | Full-text search and retrieval of official documentation | + + +The core Prowler sub-server is served under the `prowler_` tool prefix, while its source lives in the `prowler_app/` module for historical reasons. Tool names use the prefix; import paths use the module. + For a complete list of tools and their descriptions, see the [Tools Reference](/getting-started/basic-usage/prowler-mcp-tools). @@ -413,7 +417,7 @@ uv run prowler-mcp uv run prowler-mcp --transport http --host 0.0.0.0 --port 8000 # Run with environment variables -PROWLER_APP_API_KEY="pk_xxx" uv run prowler-mcp +PROWLER_API_KEY="pk_xxx" uv run prowler-mcp ``` For complete installation and deployment options, see: diff --git a/docs/docs.json b/docs/docs.json index d9ac4c2bd8..b9bc195182 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -72,9 +72,9 @@ "group": "Prowler MCP", "pages": [ "getting-started/products/prowler-mcp", - "getting-started/installation/prowler-mcp", "getting-started/basic-usage/prowler-mcp", - "getting-started/basic-usage/prowler-mcp-tools" + "getting-started/basic-usage/prowler-mcp-tools", + "getting-started/installation/prowler-mcp" ] }, { diff --git a/docs/getting-started/basic-usage/prowler-mcp-tools.mdx b/docs/getting-started/basic-usage/prowler-mcp-tools.mdx index d225617f0e..acb50c9e81 100644 --- a/docs/getting-started/basic-usage/prowler-mcp-tools.mdx +++ b/docs/getting-started/basic-usage/prowler-mcp-tools.mdx @@ -10,7 +10,7 @@ Complete reference guide for all tools available in the Prowler MCP Server. Tool |----------|------------|------------------------| | Prowler Hub | 10 tools | No | | Prowler Documentation | 2 tools | No | -| Prowler Cloud & Prowler Local Server | 32 tools | Yes | +| Prowler Cloud, Private Cloud & Local Server | 32 tools | Yes | ## Tool Naming Convention @@ -18,11 +18,11 @@ All tools follow a consistent naming pattern with prefixes: - `prowler_hub_*` - Prowler Hub catalog and compliance tools - `prowler_docs_*` - Prowler documentation search and retrieval -- `prowler_app_*` - Prowler Cloud and App (Self-Managed) management tools +- `prowler_*` - Prowler Cloud, Prowler Private Cloud & Prowler Local Server management tools -## Prowler Cloud and Prowler Local Server Tools +## Prowler Tools -Manage Prowler Cloud or Prowler Local Server features. **Requires authentication.** +Manage your Prowler deployment — Prowler Cloud, Prowler Private Cloud, or Prowler Local Server. **Requires authentication.** These tools require a valid API key. See the [Configuration Guide](/getting-started/basic-usage/prowler-mcp) for authentication setup. @@ -32,44 +32,44 @@ These tools require a valid API key. See the [Configuration Guide](/getting-star Tools for searching, viewing, and analyzing security findings across all cloud providers. -- **`prowler_app_search_security_findings`** - Search and filter security findings with advanced filtering options (severity, status, provider, region, service, check ID, date range, muted status) -- **`prowler_app_get_finding_details`** - Get comprehensive details about a specific finding including remediation guidance, check metadata, and resource relationships -- **`prowler_app_get_findings_overview`** - Get aggregate statistics and trends about security findings as a markdown report +- **`prowler_search_security_findings`** - Search and filter security findings with advanced filtering options (severity, status, provider, region, service, check ID, date range, muted status) +- **`prowler_get_finding_details`** - Get comprehensive details about a specific finding including remediation guidance, check metadata, and resource relationships +- **`prowler_get_findings_overview`** - Get aggregate statistics and trends about security findings as a markdown report ### Finding Groups Management Tools for listing finding groups aggregated by check ID, viewing complete group counters, and drilling down into affected resources. -- **`prowler_app_list_finding_groups`** - List latest or historical finding groups with filters for provider, region, service, resource, category, check, severity, status, muted state, delta, date range, and sorting -- **`prowler_app_get_finding_group_details`** - Get complete details for a specific finding group including counters, description, timestamps, and impacted providers -- **`prowler_app_list_finding_group_resources`** - List actionable unmuted resources affected by a finding group by default, including nested resource and provider data plus the `finding_id` for remediation details. Set `include_muted` to include suppressed resources +- **`prowler_list_finding_groups`** - List latest or historical finding groups with filters for provider, region, service, resource, category, check, severity, status, muted state, delta, date range, and sorting +- **`prowler_get_finding_group_details`** - Get complete details for a specific finding group including counters, description, timestamps, and impacted providers +- **`prowler_list_finding_group_resources`** - List actionable unmuted resources affected by a finding group by default, including nested resource and provider data plus the `finding_id` for remediation details. Set `include_muted` to include suppressed resources ### Provider Management Tools for managing cloud provider connections in Prowler. -- **`prowler_app_search_providers`** - Search and view configured providers with their connection status -- **`prowler_app_connect_provider`** - Register and connect a provider with credentials for security scanning -- **`prowler_app_delete_provider`** - Permanently remove a provider from Prowler +- **`prowler_search_providers`** - Search and view configured providers with their connection status +- **`prowler_connect_provider`** - Register and connect a provider with credentials for security scanning +- **`prowler_delete_provider`** - Permanently remove a provider from Prowler ### Scan Management Tools for managing and monitoring security scans. -- **`prowler_app_list_scans`** - List and filter security scans across all providers -- **`prowler_app_get_scan`** - Get comprehensive details about a specific scan (progress, duration, resource counts) -- **`prowler_app_trigger_scan`** - Trigger a manual security scan for a provider -- **`prowler_app_schedule_daily_scan`** - Schedule automated daily scans for continuous monitoring -- **`prowler_app_update_scan`** - Update scan name for better organization +- **`prowler_list_scans`** - List and filter security scans across all providers +- **`prowler_get_scan`** - Get comprehensive details about a specific scan (progress, duration, resource counts) +- **`prowler_trigger_scan`** - Trigger a manual security scan for a provider +- **`prowler_schedule_daily_scan`** - Schedule automated daily scans for continuous monitoring +- **`prowler_update_scan`** - Update scan name for better organization ### Resources Management Tools for searching, viewing, and analyzing cloud resources discovered by Prowler. -- **`prowler_app_list_resources`** - List and filter cloud resources with advanced filtering options (provider, region, service, resource type, tags) -- **`prowler_app_get_resource`** - Get comprehensive details about a specific resource including configuration, metadata, and finding relationships -- **`prowler_app_get_resource_events`** - Get the timeline of cloud API actions performed on a resource (AWS CloudTrail). Shows who did what and when, with full request/response payloads -- **`prowler_app_get_resources_overview`** - Get aggregate statistics about cloud resources as a markdown report +- **`prowler_list_resources`** - List and filter cloud resources with advanced filtering options (provider, region, service, resource type, tags) +- **`prowler_get_resource`** - Get comprehensive details about a specific resource including configuration, metadata, and finding relationships +- **`prowler_get_resource_events`** - Get the timeline of cloud API actions performed on a resource (AWS CloudTrail). Shows who did what and when, with full request/response payloads +- **`prowler_get_resources_overview`** - Get aggregate statistics about cloud resources as a markdown report ### Muting Management @@ -77,33 +77,33 @@ Tools for managing finding muting, including pattern-based bulk muting (mutelist #### Mutelist (Pattern-Based Muting) -- **`prowler_app_get_mutelist`** - Retrieve the current mutelist configuration for the tenant -- **`prowler_app_set_mutelist`** - Create or update the mutelist configuration for pattern-based bulk muting -- **`prowler_app_delete_mutelist`** - Remove the mutelist configuration from the tenant +- **`prowler_get_mutelist`** - Retrieve the current mutelist configuration for the tenant +- **`prowler_set_mutelist`** - Create or update the mutelist configuration for pattern-based bulk muting +- **`prowler_delete_mutelist`** - Remove the mutelist configuration from the tenant #### Mute Rules (Finding-Specific Muting) -- **`prowler_app_list_mute_rules`** - Search and filter mute rules with pagination support -- **`prowler_app_get_mute_rule`** - Retrieve comprehensive details about a specific mute rule -- **`prowler_app_create_mute_rule`** - Create a new mute rule to mute specific findings with documentation and audit trail -- **`prowler_app_update_mute_rule`** - Update a mute rule's name, reason, or enabled status -- **`prowler_app_delete_mute_rule`** - Delete a mute rule from the system +- **`prowler_list_mute_rules`** - Search and filter mute rules with pagination support +- **`prowler_get_mute_rule`** - Retrieve comprehensive details about a specific mute rule +- **`prowler_create_mute_rule`** - Create a new mute rule to mute specific findings with documentation and audit trail +- **`prowler_update_mute_rule`** - Update a mute rule's name, reason, or enabled status +- **`prowler_delete_mute_rule`** - Delete a mute rule from the system ### Attack Paths Analysis Tools for analyzing privilege escalation chains and security misconfigurations using graph-based analysis. Attack Paths maps relationships between cloud resources, permissions, and security findings to detect how privileges can be escalated and how misconfigurations can be exploited. -- **`prowler_app_list_attack_paths_scans`** - List Attack Paths scans with filtering by provider, provider type, and scan state (available, scheduled, executing, completed, failed, cancelled) -- **`prowler_app_list_attack_paths_queries`** - Discover available Attack Paths queries for a completed scan, including query names, descriptions, and required parameters -- **`prowler_app_run_attack_paths_query`** - Execute an Attack Paths query against a completed scan and retrieve graph results with nodes (cloud resources, findings, virtual nodes) and relationships (access paths, role assumptions, security group memberships) -- **`prowler_app_get_attack_paths_cartography_schema`** - Retrieve the Cartography graph schema (node labels, relationships, properties) for writing accurate custom openCypher queries +- **`prowler_list_attack_paths_scans`** - List Attack Paths scans with filtering by provider, provider type, and scan state (available, scheduled, executing, completed, failed, cancelled) +- **`prowler_list_attack_paths_queries`** - Discover available Attack Paths queries for a completed scan, including query names, descriptions, and required parameters +- **`prowler_run_attack_paths_query`** - Execute an Attack Paths query against a completed scan and retrieve graph results with nodes (cloud resources, findings, virtual nodes) and relationships (access paths, role assumptions, security group memberships) +- **`prowler_get_attack_paths_cartography_schema`** - Retrieve the Cartography graph schema (node labels, relationships, properties) for writing accurate custom openCypher queries ### Compliance Management Tools for viewing compliance status and framework details across all cloud providers. -- **`prowler_app_get_compliance_overview`** - Get high-level compliance status across all frameworks for a specific scan or provider, including pass/fail statistics per framework -- **`prowler_app_get_compliance_framework_state_details`** - Get detailed requirement-level breakdown for a specific compliance framework, including failed requirements and associated finding IDs +- **`prowler_get_compliance_overview`** - Get high-level compliance status across all frameworks for a specific scan or provider, including pass/fail statistics per framework +- **`prowler_get_compliance_framework_state_details`** - Get detailed requirement-level breakdown for a specific compliance framework, including failed requirements and associated finding IDs ## Prowler Hub Tools @@ -145,7 +145,7 @@ Search and access official Prowler documentation. **No authentication required.* - Use natural language to interact with the tools through your AI assistant - Tools can be combined for complex workflows - Filter options are available on most list tools -- Authentication is only required for Prowler Cloud and Prowler Local Server tools +- Authentication is only required for Prowler tools (Prowler Cloud, Prowler Private Cloud, or Prowler Local Server) ## Additional Resources diff --git a/docs/getting-started/basic-usage/prowler-mcp.mdx b/docs/getting-started/basic-usage/prowler-mcp.mdx index a06f54375e..120e5c038b 100644 --- a/docs/getting-started/basic-usage/prowler-mcp.mdx +++ b/docs/getting-started/basic-usage/prowler-mcp.mdx @@ -7,10 +7,10 @@ Configure your MCP client to connect to Prowler MCP Server. ## Step 1: Get Your API Key -**Authentication is optional**: Prowler Hub and Prowler Documentation features work without authentication. An API key is only required for Prowler Cloud and Prowler Local Server features. +**Authentication is optional**: Prowler Hub and Prowler Documentation features work without authentication. An API key is only required for Prowler tools (Prowler Cloud, Prowler Private Cloud, or Prowler Local Server). -To use Prowler Cloud or Prowler Local Server features. To get the API key, please refer to the [API Keys](/user-guide/tutorials/prowler-app-api-keys) guide. +An API key authenticates the Prowler tools (Prowler Cloud, Prowler Private Cloud, or Prowler Local Server). To get the API key, please refer to the [API Keys](/user-guide/tutorials/prowler-app-api-keys) guide. Keep the API key secure. Never share it publicly or commit it to version control. @@ -18,12 +18,14 @@ Keep the API key secure. Never share it publicly or commit it to version control ## Step 2: Configure Your MCP Host/Client -Choose the configuration based on your deployment: +Most users should use the **Cloud MCP Server** — it needs no installation and is maintained by Prowler. The [Local MCP Server](#local-mcp-server-configuration) configuration is provided afterwards for users who run the server themselves. -- **HTTP Mode**: Prowler Cloud MCP Server or self-hosted Prowler MCP Server. -- **STDIO Mode**: Local installation only (runs as subprocess of your MCP client). +- **Cloud MCP Server (HTTP)**: the managed server at `https://mcp.prowler.com/mcp` (or your own self-hosted HTTP server). +- **Local MCP Server (STDIO)**: local installation only (runs as a subprocess of your MCP client). -### HTTP Mode +## Cloud MCP Server Configuration (Recommended) + +Connect to the **Cloud MCP Server** at `https://mcp.prowler.com/mcp` over HTTP. This is the recommended path — no installation, always up to date. The same configuration works for a self-hosted HTTP server: just swap the URL. @@ -61,10 +63,10 @@ Choose the configuration based on your deployment: "args": [ "https://mcp.prowler.com/mcp", // or your self-hosted Prowler MCP Server URL "--header", - "Authorization: Bearer ${PROWLER_APP_API_KEY}" + "Authorization: Bearer ${PROWLER_API_KEY}" ], "env": { - "PROWLER_APP_API_KEY": "" + "PROWLER_API_KEY": "" } } } @@ -96,10 +98,10 @@ Choose the configuration based on your deployment: "args": [ "https://mcp.prowler.com/mcp", "--header", - "Authorization: Bearer ${PROWLER_APP_API_KEY}" + "Authorization: Bearer ${PROWLER_API_KEY}" ], "env": { - "PROWLER_APP_API_KEY": "" + "PROWLER_API_KEY": "" } } } @@ -110,8 +112,8 @@ Choose the configuration based on your deployment: Run the following command: ```bash - export PROWLER_APP_API_KEY="" - claude mcp add --transport http prowler https://mcp.prowler.com/mcp --header "Authorization: Bearer $PROWLER_APP_API_KEY" --scope user + export PROWLER_API_KEY="" + claude mcp add --transport http prowler https://mcp.prowler.com/mcp --header "Authorization: Bearer $PROWLER_API_KEY" --scope user ``` @@ -137,9 +139,9 @@ Choose the configuration based on your deployment: -### STDIO Mode +## Local MCP Server Configuration -STDIO mode is only available when running the MCP server locally. +STDIO mode is only available when running the **Local MCP Server** on your own machine. See the [Installation guide](/getting-started/installation/prowler-mcp) to set it up first. @@ -152,7 +154,7 @@ STDIO mode is only available when running the MCP server locally. "command": "uvx", "args": ["/absolute/path/to/prowler/mcp_server/"], "env": { - "PROWLER_APP_API_KEY": "", + "PROWLER_API_KEY": "", "API_BASE_URL": "https://api.prowler.com/api/v1" } } @@ -179,7 +181,7 @@ STDIO mode is only available when running the MCP server locally. "--rm", "-i", "--env", - "PROWLER_APP_API_KEY=", + "PROWLER_API_KEY=", "--env", "API_BASE_URL=https://api.prowler.com/api/v1", "prowlercloud/prowler-mcp" @@ -205,7 +207,7 @@ Restart your MCP client and start asking questions: ## Authentication Methods -Prowler MCP Server supports two authentication methods to connect to Prowler Cloud or Prowler Local Server: +Prowler MCP Server supports two authentication methods to connect to Prowler (Prowler Cloud, Prowler Private Cloud, or Prowler Local Server): ### API Key (Recommended) diff --git a/docs/getting-started/installation/prowler-mcp.mdx b/docs/getting-started/installation/prowler-mcp.mdx index 06f204da6a..5be469b5b2 100644 --- a/docs/getting-started/installation/prowler-mcp.mdx +++ b/docs/getting-started/installation/prowler-mcp.mdx @@ -5,12 +5,12 @@ title: "Installation" There are **two ways** to use Prowler MCP Server: - + **No installation required** - Just configuration Use `https://mcp.prowler.com/mcp` - + **Local installation** - Full control Install via Docker, PyPI, or source code @@ -18,8 +18,8 @@ There are **two ways** to use Prowler MCP Server: -For "Option 1: Managed by Prowler", go directly to the [Configuration Guide](/getting-started/basic-usage/prowler-mcp#hosted-server-configuration-recommended) to set up your Claude Desktop, Cursor, or other MCP client. -**This guide is focused on local installation, "Option 2: Run Locally"**. +For the Cloud MCP Server, go directly to the [Configuration Guide](/getting-started/basic-usage/prowler-mcp#cloud-mcp-server-configuration-recommended) to set up your Claude Desktop, Cursor, or other MCP client. +**This guide is focused on local installation, the Local MCP Server**. ## Installation Methods @@ -51,7 +51,7 @@ Choose one of the following installation methods: ```bash docker run --rm -i \ - -e PROWLER_APP_API_KEY="pk_your_api_key" \ + -e PROWLER_API_KEY="pk_your_api_key" \ -e API_BASE_URL="https://api.prowler.com/api/v1" \ prowlercloud/prowler-mcp ``` @@ -143,7 +143,7 @@ Choose one of the following installation methods: ## Updating Prowler MCP Server -When running Prowler MCP Server locally ("Option 2: Run Locally"), upgrade to the latest version using the same method chosen for installation. The hosted server (`https://mcp.prowler.com/mcp`) is always kept up to date by Prowler and requires no action. +When running the Local MCP Server, upgrade to the latest version using the same method chosen for installation. The Cloud MCP Server (`https://mcp.prowler.com/mcp`) is always kept up to date by Prowler and requires no action. @@ -219,19 +219,19 @@ Configure the server using environment variables: | Variable | Description | Required | Default | |----------|-------------|----------|---------| -| `PROWLER_APP_API_KEY` | Prowler API key | Only for STDIO mode | - | +| `PROWLER_API_KEY` | Prowler API key | Only for STDIO mode | - | | `API_BASE_URL` | Custom Prowler API endpoint | No | `https://api.prowler.com/api/v1` | | `PROWLER_MCP_TRANSPORT_MODE` | Default transport mode (overwritten by `--transport` argument) | No | `stdio` | ```bash macOS/Linux -export PROWLER_APP_API_KEY="pk_your_api_key_here" +export PROWLER_API_KEY="pk_your_api_key_here" export API_BASE_URL="https://api.prowler.com/api/v1" export PROWLER_MCP_TRANSPORT_MODE="http" ``` ```bash Windows PowerShell -$env:PROWLER_APP_API_KEY="pk_your_api_key_here" +$env:PROWLER_API_KEY="pk_your_api_key_here" $env:API_BASE_URL="https://api.prowler.com/api/v1" $env:PROWLER_MCP_TRANSPORT_MODE="http" ``` @@ -246,7 +246,7 @@ Never commit your API key to version control. Use environment variables or secur For convenience, create a `.env` file in the `mcp_server` directory: ```bash .env -PROWLER_APP_API_KEY=pk_your_api_key_here +PROWLER_API_KEY=pk_your_api_key_here API_BASE_URL=https://api.prowler.com/api/v1 PROWLER_MCP_TRANSPORT_MODE=stdio ``` diff --git a/docs/getting-started/products/prowler-mcp.mdx b/docs/getting-started/products/prowler-mcp.mdx index b35ac3d611..93159b2e7d 100644 --- a/docs/getting-started/products/prowler-mcp.mdx +++ b/docs/getting-started/products/prowler-mcp.mdx @@ -8,8 +8,29 @@ title: "Overview" **Preview Feature**: This MCP server is currently under active development. Features and functionality may change. We welcome your feedback—please report any issues on [GitHub](https://github.com/prowler-cloud/prowler/issues) or join our [Slack community](https://goto.prowler.com/slack) to discuss and share your thoughts. +## Quickest Way to Connect: Cloud MCP Server + +The fastest way to get started is the **Cloud MCP Server** at `https://mcp.prowler.com/mcp` — no installation, always up to date, and maintained by Prowler. Just point your MCP client at the URL and authenticate with a [Prowler API key](/user-guide/tutorials/prowler-app-api-keys) as a Bearer token: + +```json +{ + "mcpServers": { + "prowler": { + "url": "https://mcp.prowler.com/mcp", + "headers": { + "Authorization": "Bearer " + } + } + } +} +``` + + + Step-by-step setup for Claude Desktop, Claude Code, Cursor, and other clients. + + -Prowler MCP Server can run as a local instance, or as the hosted **Prowler MCP** at `https://mcp.prowler.com/mcp`. The hosted server also provides tools for Prowler Cloud-specific features such as [Alerts](/user-guide/tutorials/prowler-alerts), [Scan Scheduling](/user-guide/tutorials/prowler-scan-scheduling), and [Findings Triage](/user-guide/tutorials/prowler-app-findings-triage). See [Deployment Options](#deployment-options). +Prefer to run it yourself? The **Local MCP Server** runs on your own machine or infrastructure. The Cloud MCP Server additionally provides tools for Prowler Cloud-specific features such as [Alerts](/user-guide/tutorials/prowler-alerts), [Scan Scheduling](/user-guide/tutorials/prowler-scan-scheduling), and [Findings Triage](/user-guide/tutorials/prowler-app-findings-triage). See [Cloud vs Local MCP Server](#cloud-vs-local-mcp-server). ## What is the Model Context Protocol? @@ -20,9 +41,9 @@ The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) is an open s The Prowler MCP Server provides three main integration points: -### 1. Prowler Cloud and Prowler Local Server +### 1. Prowler Cloud, Private Cloud & Local Server -Full access to Prowler Cloud and Prowler Local Server for: +Full access to your Prowler deployment — Prowler Cloud, Prowler Private Cloud, or Prowler Local Server — for: - **Findings Analysis**: Query, filter, and analyze security findings across all your cloud environments - **Provider Management**: Create, configure, and manage your configured Prowler providers (AWS, Azure, GCP, etc.) - **Scan Orchestration**: Trigger on-demand scans and schedule recurring security assessments @@ -48,12 +69,53 @@ Search and retrieve official Prowler documentation: ## MCP Server Architecture -The following diagram illustrates the Prowler MCP Server architecture and its integration points: +The following diagram illustrates the Prowler MCP Server architecture and its integration points. MCP clients connect to either the **Cloud MCP Server** (recommended) or a **Local MCP Server**; both expose the same tools and reach the same Prowler backends: -![Prowler MCP Server Schema](/images/prowler_mcp_schema.png) +```mermaid +flowchart LR + subgraph HOSTS["MCP Clients"] + chat["Chat Interfaces
(Claude Desktop, LobeChat)"] + ide["IDEs and Code Editors
(Claude Code, Cursor)"] + apps["Other AI Applications
(5ire, custom agents)"] + end + + subgraph SERVERS["Prowler MCP Server"] + direction TB + cloud["☁️ Cloud MCP Server (Recommended)
mcp.prowler.com/mcp · HTTP
Managed by Prowler · always up to date
Adds Cloud-only tools (Alerts,
Scan Scheduling, Findings Triage)"] + local["💻 Local MCP Server
Self-run · STDIO or HTTP
Python 3.12+ or Docker
You manage updates"] + end + + subgraph TOOLS["Prowler MCP Tools"] + prowler_tools["prowler_* tools
(API key or JWT auth)
Findings · Providers · Scans
Resources · Muting · Compliance
Attack Paths"] + hub_tools["prowler_hub_* tools
(no auth)
Checks Catalog · Check Code
Fixers · Compliance Frameworks"] + docs_tools["prowler_docs_* tools
(no auth)
Search · Document Retrieval"] + end + + api["Prowler API (REST)
Cloud · Private Cloud · Local Server"] + hub["hub.prowler.com
(REST)"] + docs["docs.prowler.com
(Mintlify)"] + + chat -->|HTTP| cloud + ide -->|HTTP| cloud + apps -->|HTTP| cloud + chat -->|STDIO or HTTP| local + ide -->|STDIO or HTTP| local + apps -->|STDIO or HTTP| local + + cloud --> prowler_tools + cloud --> hub_tools + cloud --> docs_tools + local --> prowler_tools + local --> hub_tools + local --> docs_tools + + prowler_tools -->|REST| api + hub_tools -->|REST| hub + docs_tools -->|REST| docs +``` The architecture shows how AI assistants connect through the MCP protocol to access Prowler's three main components: -- Prowler Cloud and Prowler Local Server for security operations +- Prowler Cloud, Prowler Private Cloud, or Prowler Local Server for security operations - Prowler Hub for security knowledge - Prowler Documentation for guidance and reference. @@ -92,8 +154,8 @@ REQUIREMENTS: DATA TO FETCH: Use these MCP tools in this order: -1. Prowler app list providers - To get all available configured provider in the account -2. Prowler app get latest findings - To get findings information, if there are so many you can use the filter_fields to get less information, or pagination to get in different batches +1. Prowler list providers - To get all available configured provider in the account +2. Prowler get latest findings - To get findings information, if there are so many you can use the filter_fields to get less information, or pagination to get in different batches 3. For most critical findings you can get more context and remediation with Prowler Hub to get remediations for example DESIGN REQUIREMENTS: @@ -130,66 +192,48 @@ Generate the complete HTML file and display it > -## Deployment Options +## Cloud vs Local MCP Server -Prowler MCP Server can be used in three ways: +There are two ways to run the Prowler MCP Server. For almost everyone, the **Cloud MCP Server** is the right choice — it needs no installation and is maintained by Prowler. The **Local MCP Server** exists for users who need to run it on their own machine or infrastructure. -### 1. Prowler Cloud MCP Server +| | ☁️ **Cloud MCP Server** (Recommended) | 💻 **Local MCP Server** | +|---|---|---| +| **Endpoint** | `https://mcp.prowler.com/mcp` | Runs on your machine or infrastructure | +| **Setup** | Just configure your MCP client | Install via Docker, or source | +| **Transport** | HTTP | STDIO (subprocess) or self-hosted HTTP | +| **Maintenance** | Managed by Prowler, always up to date | You manage updates | +| **Requirements** | None (just an MCP client) | Python 3.12+ or Docker | +| **Cloud-only tools** | ✅ Alerts, Scan Scheduling, Findings Triage | ❌ Not available | +| **Authentication** | API key or JWT token | API key/JWT (HTTP) or env vars (STDIO) | -**Use Prowler's managed MCP server at `https://mcp.prowler.com/mcp`** +### ☁️ Cloud MCP Server (Recommended) -- No installation required. -- Managed and maintained by Prowler team. -- Authentication to Prowler Cloud or Prowler Local Server via API key or JWT token. -- Includes tools for Prowler Cloud-specific features such as Alerts, Scan Scheduling, and Findings Triage. +Prowler's managed MCP server at `https://mcp.prowler.com/mcp`. No installation, always up to date, and it includes tools for Prowler Cloud-specific features such as Alerts, Scan Scheduling, and Findings Triage. This is the path we recommend for nearly all users — go straight to the [Configuration guide](/getting-started/basic-usage/prowler-mcp#cloud-mcp-server-configuration-recommended). -### 2. Local STDIO Mode +### 💻 Local MCP Server -**Run the server locally on your machine** +Run the server yourself when you need full control over the deployment. It connects to Prowler Cloud, Prowler Private Cloud, or Prowler Local Server and can run in two modes: -- Runs as a subprocess of the MCP client. -- Possibility to connect to Prowler Local Server. -- Authentication to Prowler Cloud or Prowler Local Server via environment variables. -- Requires Python 3.12+ or Docker. +- **STDIO mode** — the server runs as a subprocess of your MCP client. Authentication via environment variables. +- **Self-hosted HTTP mode** — deploy your own remote HTTP server. Authentication via API key or JWT token. -### 3. Self-Hosted HTTP Mode - -**Deploy your own remote MCP server** - -- Full control over deployment. -- Possibility to connect to Prowler Local Server. -- Authentication to Prowler Local Server via API key or JWT token. -- Requires Python 3.12+ or Docker. - -## Requirements - -Requirements vary based on deployment option: - -**For Prowler Cloud MCP Server:** -- Prowler Cloud account and API key (only for Prowler Cloud and Prowler Local Server features) - -**For self-hosted STDIO/HTTP Mode:** -- Python 3.12+ or Docker -- Network access to: - - `https://hub.prowler.com` (for Prowler Hub) - - `https://docs.prowler.com` (for Prowler Documentation) - - Prowler Cloud API or Prowler Local Server API (for Prowler Cloud and Prowler Local Server features) +Both require Python 3.12+ or Docker, plus network access to `https://hub.prowler.com` (Prowler Hub), `https://docs.prowler.com` (Prowler Documentation), and the Prowler API or Prowler Local Server API (Prowler features). See the [Installation guide](/getting-started/installation/prowler-mcp) to get started. -**No Authentication Required**: Prowler Hub and Prowler Documentation features work without authentication in both deployment options. A Prowler API key is only required to access Prowler Cloud or Prowler Local Server features. +**No Authentication Required**: Prowler Hub and Prowler Documentation features work without authentication on both the Cloud and Local MCP Server. A Prowler API key is only required to access Prowler features (Prowler Cloud, Prowler Private Cloud, or Prowler Local Server). ## Next Steps - - Install the Prowler MCP Server using uv or Docker - - Configure your MCP client to connect to the server + Connect your MCP client to the Cloud MCP Server + + + Explore all available tools and capabilities - - Explore all available tools and capabilities + + Run the Local MCP Server yourself using Docker, source, or uvx diff --git a/docs/images/lighthouse-architecture.mmd b/docs/images/lighthouse-architecture.mmd index 47407544e9..6798801fb8 100644 --- a/docs/images/lighthouse-architecture.mmd +++ b/docs/images/lighthouse-architecture.mmd @@ -15,7 +15,7 @@ flowchart TB llm["LLM Provider
(OpenAI / Bedrock / OpenAI-compatible)"] subgraph MCP["Prowler MCP Server"] - app_tools["prowler_app_* tools
(auth required)"] + app_tools["prowler_* tools
(auth required)"] hub_tools["prowler_hub_* tools
(no auth)"] docs_tools["prowler_docs_* tools
(no auth)"] end @@ -29,7 +29,7 @@ flowchart TB agent <-->|LLM API| llm agent --> metatools metatools --> mcpclient - mcpclient -->|MCP HTTP · Bearer token
for prowler_app_* only| app_tools + mcpclient -->|MCP HTTP · Bearer token
for prowler_* only| app_tools mcpclient -->|MCP HTTP| hub_tools mcpclient -->|MCP HTTP| docs_tools app_tools -->|REST| api diff --git a/docs/images/prowler_mcp_schema.mmd b/docs/images/prowler_mcp_schema.mmd index 96973546f6..2b8508cd18 100644 --- a/docs/images/prowler_mcp_schema.mmd +++ b/docs/images/prowler_mcp_schema.mmd @@ -1,29 +1,40 @@ flowchart LR - subgraph HOSTS["MCP Hosts"] + subgraph HOSTS["MCP Clients"] chat["Chat Interfaces
(Claude Desktop, LobeChat)"] ide["IDEs and Code Editors
(Claude Code, Cursor)"] apps["Other AI Applications
(5ire, custom agents)"] end - subgraph MCP["Prowler MCP Server"] - app_tools["prowler_app_* tools
(JWT or API key auth)
Findings · Providers · Scans
Resources · Muting · Compliance
Attack Paths"] + subgraph SERVERS["Prowler MCP Server"] + direction TB + cloud["☁️ Cloud MCP Server (Recommended)
mcp.prowler.com/mcp · HTTP
Managed by Prowler · always up to date
Adds Cloud-only tools (Alerts,
Scan Scheduling, Findings Triage)"] + local["💻 Local MCP Server
Self-run · STDIO or HTTP
Python 3.12+ or Docker
You manage updates"] + end + + subgraph TOOLS["Prowler MCP Tools"] + prowler_tools["prowler_* tools
(API key or JWT auth)
Findings · Providers · Scans
Resources · Muting · Compliance
Attack Paths"] hub_tools["prowler_hub_* tools
(no auth)
Checks Catalog · Check Code
Fixers · Compliance Frameworks"] docs_tools["prowler_docs_* tools
(no auth)
Search · Document Retrieval"] end - api["Prowler API
(REST)"] + api["Prowler API (REST)
Cloud · Private Cloud · Local Server"] hub["hub.prowler.com
(REST)"] docs["docs.prowler.com
(Mintlify)"] - chat -->|STDIO or HTTP| app_tools - chat -->|STDIO or HTTP| hub_tools - chat -->|STDIO or HTTP| docs_tools - ide -->|STDIO or HTTP| app_tools - ide -->|STDIO or HTTP| hub_tools - ide -->|STDIO or HTTP| docs_tools - apps -->|STDIO or HTTP| app_tools - apps -->|STDIO or HTTP| hub_tools - apps -->|STDIO or HTTP| docs_tools - app_tools -->|REST| api + chat -->|HTTP| cloud + ide -->|HTTP| cloud + apps -->|HTTP| cloud + chat -->|STDIO or HTTP| local + ide -->|STDIO or HTTP| local + apps -->|STDIO or HTTP| local + + cloud --> prowler_tools + cloud --> hub_tools + cloud --> docs_tools + local --> prowler_tools + local --> hub_tools + local --> docs_tools + + prowler_tools -->|REST| api hub_tools -->|REST| hub docs_tools -->|REST| docs diff --git a/docs/images/prowler_mcp_schema.png b/docs/images/prowler_mcp_schema.png deleted file mode 100644 index 8a8884fa5e0e0a4c181ac3be373df8e7c6cfe6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380040 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 m5SF$+@ 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

I_8>G3EM2W|*|{NE$!XH7{NGoOds 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�sLL@lW_}@yIt!um$LsMjiePvO>2j%UFG+Z1+!t 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 diff --git a/docs/user-guide/tutorials/prowler-app-attack-paths.mdx b/docs/user-guide/tutorials/prowler-app-attack-paths.mdx index 32df3c50ba..22e56e5634 100644 --- a/docs/user-guide/tutorials/prowler-app-attack-paths.mdx +++ b/docs/user-guide/tutorials/prowler-app-attack-paths.mdx @@ -283,7 +283,7 @@ In addition to the upstream schema, Prowler enriches the graph with: AI assistants connected through Prowler MCP Server can fetch the exact Cartography schema for the active scan via the - `prowler_app_get_attack_paths_cartography_schema` tool. This guarantees that + `prowler_get_attack_paths_cartography_schema` tool. This guarantees that generated queries match the schema version pinned by the running Prowler release. @@ -427,10 +427,10 @@ Attack Paths capabilities are also available through the [Prowler MCP Server](/g The following MCP tools are available for Attack Paths: -- **`prowler_app_list_attack_paths_scans`** - List and filter Attack Paths scans. -- **`prowler_app_list_attack_paths_queries`** - Discover available queries for a completed scan. -- **`prowler_app_run_attack_paths_query`** - Execute a query and retrieve graph results with nodes and relationships. -- **`prowler_app_get_attack_paths_cartography_schema`** - Retrieve the Cartography graph schema for custom openCypher queries. +- **`prowler_list_attack_paths_scans`** - List and filter Attack Paths scans. +- **`prowler_list_attack_paths_queries`** - Discover available queries for a completed scan. +- **`prowler_run_attack_paths_query`** - Execute a query and retrieve graph results with nodes and relationships. +- **`prowler_get_attack_paths_cartography_schema`** - Retrieve the Cartography graph schema for custom openCypher queries. ### Example Questions diff --git a/mcp_server/.env.template b/mcp_server/.env.template index 11b8caa724..10aabd84cf 100644 --- a/mcp_server/.env.template +++ b/mcp_server/.env.template @@ -1,3 +1,3 @@ -PROWLER_APP_API_KEY="pk_your_api_key_here" +PROWLER_API_KEY="pk_your_api_key_here" API_BASE_URL="https://api.prowler.com/api/v1" PROWLER_MCP_TRANSPORT_MODE="stdio" diff --git a/mcp_server/AGENTS.md b/mcp_server/AGENTS.md index a82cc42e33..1d3d808e6a 100644 --- a/mcp_server/AGENTS.md +++ b/mcp_server/AGENTS.md @@ -25,7 +25,7 @@ The Prowler MCP Server provides AI agents access to the Prowler ecosystem throug ## CRITICAL RULES ### Tool Implementation -- ALWAYS: Extend `BaseTool` ABC for Prowler App tools (auto-registration) +- ALWAYS: Extend `BaseTool` ABC for Prowler tools (auto-registration) - ALWAYS: Use `@mcp.tool()` decorator for Hub/Docs tools - NEVER: Manually register BaseTool subclasses - NEVER: Import tools directly in server.py @@ -56,7 +56,7 @@ await prowler_mcp_server.import_server(docs_mcp_server, prefix="prowler_docs") ### Tool Naming - `prowler_hub_*` - Catalog and compliance (no auth) - `prowler_docs_*` - Documentation search (no auth) -- `prowler_app_*` - Cloud/App management (auth required) +- `prowler_*` - Prowler Cloud, Private Cloud & Local Server management (auth required) --- diff --git a/mcp_server/README.md b/mcp_server/README.md index e990f0f363..c0e4fdb0fe 100644 --- a/mcp_server/README.md +++ b/mcp_server/README.md @@ -6,9 +6,9 @@ ## Key Capabilities -### Prowler Cloud and Prowler App (Self-Managed) +### Prowler Cloud, Prowler Private Cloud & Prowler Local Server -Full access to Prowler Cloud platform and self-managed Prowler App for: +Full access to your Prowler data (Prowler Cloud, Prowler Private Cloud, or Prowler Local Server) for: - **Findings Analysis**: Query, filter, and analyze security findings across all your cloud environments - **Finding Groups Analysis**: Triage findings grouped by check ID and drill down into affected resources - **Provider Management**: Create, configure, and manage your configured Prowler providers (AWS, Azure, GCP, etc.) @@ -49,7 +49,7 @@ For comprehensive guides and tutorials, see the official documentation: Prowler MCP Server can be used in three ways: -### 1. Prowler Cloud MCP Server (Recommended) +### 1. Hosted Prowler MCP (Recommended) **Use Prowler's managed MCP server at `https://mcp.prowler.com/mcp`** @@ -126,7 +126,7 @@ For complete tool descriptions and parameters, see the [Tools Reference](https:/ ### Tool Naming Convention All tools follow a consistent naming pattern with prefixes: -- `prowler_app_*` - Prowler Cloud and App (Self-Managed) management tools +- `prowler_*` - Prowler Cloud, Prowler Private Cloud & Prowler Local Server management tools - `prowler_hub_*` - Prowler Hub catalog and compliance tools - `prowler_docs_*` - Prowler documentation search and retrieval @@ -146,7 +146,7 @@ prowler_mcp_server/ **Key Features:** - **Modular Design**: Three independent sub-servers with prefixed namespacing -- **Auto-Discovery**: Prowler App tools are automatically discovered and registered +- **Auto-Discovery**: Prowler tools are automatically discovered and registered - **LLM Optimization**: Response models minimize token usage by excluding empty values - **Dual Transport**: Supports both STDIO (local) and HTTP (remote) modes @@ -174,17 +174,17 @@ The Prowler MCP Server enables powerful workflows through AI assistants: ## Requirements -**For Prowler Cloud MCP Server:** -- Prowler Cloud account and API key (only for Prowler Cloud/App features) +**For the hosted Prowler MCP:** +- Prowler Cloud account and API key (only for Prowler features) **For self-hosted STDIO/HTTP Mode:** - Python 3.12+ or Docker - Network access to: - `https://hub.prowler.com` (for Prowler Hub) - `https://docs.prowler.com` (for Prowler Documentation) - - Prowler Cloud API or self-hosted Prowler App API (for Prowler Cloud/App features) + - Prowler Cloud API or Prowler Local Server API (for Prowler features) -> **No Authentication Required**: Prowler Hub and Prowler Documentation features work without authentication. A Prowler API key is only required to access Prowler Cloud or Prowler App (Self-Managed) features. +> **No Authentication Required**: Prowler Hub and Prowler Documentation features work without authentication. A Prowler API key is only required to access Prowler features (Prowler Cloud, Prowler Private Cloud, or Prowler Local Server). ## Configuring MCP Hosts @@ -200,7 +200,7 @@ For developers looking to extend the MCP server with new tools or features: ## Related Products - **[Prowler Hub](https://hub.prowler.com)**: Browse security checks and compliance frameworks -- **[Prowler Cloud](https://cloud.prowler.com)**: Managed Prowler platform +- **[Prowler Cloud](https://cloud.prowler.com)**: Fully managed Prowler in the cloud - **[Lighthouse AI](https://docs.prowler.com/getting-started/products/prowler-lighthouse-ai)**: AI security analyst ## License diff --git a/mcp_server/changelog.d/prowler-tools-namespace.changed.md b/mcp_server/changelog.d/prowler-tools-namespace.changed.md new file mode 100644 index 0000000000..0ca03d15ca --- /dev/null +++ b/mcp_server/changelog.d/prowler-tools-namespace.changed.md @@ -0,0 +1 @@ +Core Prowler tool namespace from the `prowler_app_*` prefix to `prowler_*` diff --git a/mcp_server/prowler_mcp_server/__init__.py b/mcp_server/prowler_mcp_server/__init__.py index fe7af2dcea..1956a6ec41 100644 --- a/mcp_server/prowler_mcp_server/__init__.py +++ b/mcp_server/prowler_mcp_server/__init__.py @@ -5,7 +5,7 @@ This package provides MCP tools for accessing: - Prowler Hub: All security artifacts (detections, remediations and frameworks) supported by Prowler """ -__version__ = "0.5.0" +__version__ = "0.8.0" __author__ = "Prowler Team" __email__ = "engineering@prowler.com" diff --git a/mcp_server/prowler_mcp_server/prowler_app/models/__init__.py b/mcp_server/prowler_mcp_server/prowler_app/models/__init__.py index 899ab4e866..1b15e35ac9 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/models/__init__.py +++ b/mcp_server/prowler_mcp_server/prowler_app/models/__init__.py @@ -1,4 +1,4 @@ -"""Pydantic models for Prowler App MCP Server.""" +"""Pydantic models for Prowler MCP Server.""" from prowler_mcp_server.prowler_app.models.base import MinimalSerializerMixin from prowler_mcp_server.prowler_app.models.findings import ( diff --git a/mcp_server/prowler_mcp_server/prowler_app/models/finding_groups.py b/mcp_server/prowler_mcp_server/prowler_app/models/finding_groups.py index ae8431ba63..c2429012c3 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/models/finding_groups.py +++ b/mcp_server/prowler_mcp_server/prowler_app/models/finding_groups.py @@ -228,7 +228,7 @@ class FindingGroupResource(MinimalSerializerMixin): resource: FindingGroupResourceInfo = Field(description="Affected resource") provider: FindingGroupProviderInfo = Field(description="Affected provider") finding_id: str = Field( - description="Finding UUID to use with prowler_app_get_finding_details" + description="Finding UUID to use with prowler_get_finding_details" ) status: FindingStatus = Field(description="Finding status for this resource") severity: FindingSeverity = Field(description="Finding severity") diff --git a/mcp_server/prowler_mcp_server/prowler_app/tools/__init__.py b/mcp_server/prowler_mcp_server/prowler_app/tools/__init__.py index 4d740b6efe..8b5be76076 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/tools/__init__.py +++ b/mcp_server/prowler_mcp_server/prowler_app/tools/__init__.py @@ -1,4 +1,4 @@ -"""Domain-specific tools for Prowler App MCP Server. +"""Domain-specific tools for Prowler MCP Server. Each module in this package contains a BaseTool subclass that registers and implements tools for a specific domain (findings, providers, scans, etc.). diff --git a/mcp_server/prowler_mcp_server/prowler_app/tools/attack_paths.py b/mcp_server/prowler_mcp_server/prowler_app/tools/attack_paths.py index b08bbfe01f..5bd66760fa 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/tools/attack_paths.py +++ b/mcp_server/prowler_mcp_server/prowler_app/tools/attack_paths.py @@ -1,4 +1,4 @@ -"""Attack Paths tools for Prowler App MCP Server. +"""Attack Paths tools for Prowler MCP Server. This module provides tools for analyzing Attack Paths data from Neo4j graph database. Attack Paths help identify security risks by tracing potential attack vectors @@ -22,16 +22,16 @@ class AttackPathsTools(BaseTool): """Tools for Attack Paths analysis. Provides tools for: - - prowler_app_list_attack_paths_scans: Find completed scans ready for analysis - - prowler_app_list_attack_paths_queries: Discover available queries for a scan - - prowler_app_run_attack_paths_query: Execute query and analyze attack paths + - prowler_list_attack_paths_scans: Find completed scans ready for analysis + - prowler_list_attack_paths_queries: Discover available queries for a scan + - prowler_run_attack_paths_query: Execute query and analyze attack paths """ async def list_attack_paths_scans( self, provider_id: list[str] = Field( default=[], - description="Filter by Prowler's internal UUID(s) (v4) for specific provider(s). Use `prowler_app_search_providers` tool to find provider IDs", + description="Filter by Prowler's internal UUID(s) (v4) for specific provider(s). Use `prowler_search_providers` tool to find provider IDs", ), provider_type: list[str] = Field( default=[], @@ -73,8 +73,8 @@ class AttackPathsTools(BaseTool): Workflow: 1. Use this tool to find completed attack paths scans - 2. Use prowler_app_list_attack_paths_queries to see available queries for a scan - 3. Use prowler_app_run_attack_paths_query to execute analysis + 2. Use prowler_list_attack_paths_queries to see available queries for a scan + 3. Use prowler_run_attack_paths_query to execute analysis """ try: # Validate pagination @@ -113,7 +113,7 @@ class AttackPathsTools(BaseTool): async def list_attack_paths_queries( self, scan_id: str = Field( - description="UUID of a COMPLETED attack paths scan. Use `prowler_app_list_attack_paths_scans` with state=['completed'] to find scan IDs" + description="UUID of a COMPLETED attack paths scan. Use `prowler_list_attack_paths_scans` with state=['completed'] to find scan IDs" ), ) -> list[dict[str, Any]]: """Discover available Attack Paths queries for a completed scan. @@ -133,9 +133,9 @@ class AttackPathsTools(BaseTool): - aws-ec2-instances-internet-exposed: Find internet-exposed EC2 instances Workflow: - 1. Use prowler_app_list_attack_paths_scans to find a completed scan + 1. Use prowler_list_attack_paths_scans to find a completed scan 2. Use this tool to discover available queries - 3. Use prowler_app_run_attack_paths_query with query_id and any required parameters + 3. Use prowler_run_attack_paths_query with query_id and any required parameters """ try: api_response = await self.api_client.get( @@ -158,7 +158,7 @@ class AttackPathsTools(BaseTool): description="UUID of a COMPLETED attack paths scan. The scan must be in 'completed' state" ), query_id: str = Field( - description="Query ID to execute (e.g., 'aws-internet-exposed-ec2-sensitive-s3-access'). Use `prowler_app_list_attack_paths_queries` to discover available queries" + description="Query ID to execute (e.g., 'aws-internet-exposed-ec2-sensitive-s3-access'). Use `prowler_list_attack_paths_queries` to discover available queries" ), parameters: dict[str, str] = Field( default_factory=dict, @@ -194,7 +194,7 @@ class AttackPathsTools(BaseTool): Workflow: 1. Ensure scan is completed - 2. List available queries (use prowler_app_list_attack_paths_queries) + 2. List available queries (use prowler_list_attack_paths_queries) 3. Execute this tool with appropriate parameters 4. Analyze the returned graph for security insights """ @@ -231,7 +231,7 @@ class AttackPathsTools(BaseTool): async def get_attack_paths_cartography_schema( self, scan_id: str = Field( - description="UUID of a COMPLETED attack paths scan. Use `prowler_app_list_attack_paths_scans` with state=['completed'] to find scan IDs" + description="UUID of a COMPLETED attack paths scan. Use `prowler_list_attack_paths_scans` with state=['completed'] to find scan IDs" ), ) -> dict[str, Any]: """Retrieve the Cartography graph schema for a completed attack paths scan. @@ -253,10 +253,10 @@ class AttackPathsTools(BaseTool): - schema_content: Full Cartography schema markdown with node/relationship definitions Workflow: - 1. Use prowler_app_list_attack_paths_scans to find a completed scan + 1. Use prowler_list_attack_paths_scans to find a completed scan 2. Use this tool to get the schema for the scan's provider 3. Use the schema to craft custom openCypher queries - 4. Execute queries with prowler_app_run_attack_paths_query + 4. Execute queries with prowler_run_attack_paths_query """ try: api_response = await self.api_client.get( diff --git a/mcp_server/prowler_mcp_server/prowler_app/tools/compliance.py b/mcp_server/prowler_mcp_server/prowler_app/tools/compliance.py index 360dd5510d..33cdd22a69 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/tools/compliance.py +++ b/mcp_server/prowler_mcp_server/prowler_app/tools/compliance.py @@ -1,4 +1,4 @@ -"""Compliance framework tools for Prowler App MCP Server. +"""Compliance framework tools for Prowler MCP Server. This module provides tools for viewing compliance status and requirement details across all cloud providers. @@ -50,7 +50,7 @@ class ComplianceTools(BaseTool): if not scans_data: raise ValueError( f"No completed scans found for provider {provider_id}. " - "Run a scan first using prowler_app_trigger_scan." + "Run a scan first using prowler_trigger_scan." ) scan_id = scans_data[0]["id"] @@ -60,11 +60,11 @@ class ComplianceTools(BaseTool): self, scan_id: str | None = Field( default=None, - description="UUID of a specific scan to get compliance data for. Required if provider_id is not specified. Use `prowler_app_list_scans` to find scan IDs.", + description="UUID of a specific scan to get compliance data for. Required if provider_id is not specified. Use `prowler_list_scans` to find scan IDs.", ), provider_id: str | None = Field( default=None, - description="Prowler's internal UUID (v4) for a specific provider. If provided without scan_id, the tool will automatically find the latest completed scan for this provider. Use `prowler_app_search_providers` tool to find provider IDs.", + description="Prowler's internal UUID (v4) for a specific provider. If provided without scan_id, the tool will automatically find the latest completed scan for this provider. Use `prowler_search_providers` tool to find provider IDs.", ), ) -> dict[str, Any]: """Get high-level compliance overview across all frameworks for a specific scan. @@ -90,11 +90,11 @@ class ComplianceTools(BaseTool): Workflow: 1. Use this tool to get an overview of all compliance frameworks - 2. Use prowler_app_get_compliance_framework_state_details with a specific compliance_id to see which requirements failed + 2. Use prowler_get_compliance_framework_state_details with a specific compliance_id to see which requirements failed """ if not scan_id and not provider_id: return { - "error": "Either scan_id or provider_id must be provided. Use prowler_app_search_providers to find provider IDs or prowler_app_list_scans to find scan IDs." + "error": "Either scan_id or provider_id must be provided. Use prowler_search_providers to find provider IDs or prowler_list_scans to find scan IDs." } elif scan_id and provider_id: return { @@ -254,7 +254,7 @@ class ComplianceTools(BaseTool): async def get_compliance_framework_state_details( self, compliance_id: str = Field( - description="Compliance framework ID to get details for (e.g., 'cis_1.5_aws', 'pci_dss_v4.0_aws'). You can get compliance IDs from prowler_app_get_compliance_overview or consulting Prowler Hub/Prowler Documentation that you can also find in form of tools in this MCP Server", + description="Compliance framework ID to get details for (e.g., 'cis_1.5_aws', 'pci_dss_v4.0_aws'). You can get compliance IDs from prowler_get_compliance_overview or consulting Prowler Hub/Prowler Documentation that you can also find in form of tools in this MCP Server", ), scan_id: str | None = Field( default=None, @@ -262,14 +262,14 @@ class ComplianceTools(BaseTool): ), provider_id: str | None = Field( default=None, - description="Prowler's internal UUID (v4) for a specific provider. If provided without scan_id, the tool will automatically find the latest completed scan for this provider. Use `prowler_app_search_providers` tool to find provider IDs.", + description="Prowler's internal UUID (v4) for a specific provider. If provided without scan_id, the tool will automatically find the latest completed scan for this provider. Use `prowler_search_providers` tool to find provider IDs.", ), ) -> dict[str, Any]: """Get detailed requirement-level breakdown for a specific compliance framework. IMPORTANT: This tool returns DETAILED requirement information for a single compliance framework, focusing on FAILED requirements and their associated FAILED finding IDs. - Use this after prowler_app_get_compliance_overview to drill down into specific frameworks. + Use this after prowler_get_compliance_overview to drill down into specific frameworks. The markdown report includes: @@ -280,7 +280,7 @@ class ComplianceTools(BaseTool): 2. Failed Requirements Breakdown: - Each failed requirement's ID and description - Associated failed finding IDs for each failed requirement - - Use prowler_app_get_finding_details with these finding IDs for more details and remediation guidance + - Use prowler_get_finding_details with these finding IDs for more details and remediation guidance Default behavior: - Requires either scan_id OR provider_id @@ -289,14 +289,14 @@ class ComplianceTools(BaseTool): - Only shows failed requirements with their associated failed finding IDs Workflow: - 1. Use prowler_app_get_compliance_overview to identify frameworks with failures + 1. Use prowler_get_compliance_overview to identify frameworks with failures 2. Use this tool with the compliance_id to see failed requirements and their finding IDs - 3. Use prowler_app_get_finding_details with the finding IDs to get remediation guidance + 3. Use prowler_get_finding_details with the finding IDs to get remediation guidance """ # Validate that either scan_id or provider_id is provided if not scan_id and not provider_id: return { - "error": "Either scan_id or provider_id must be provided. Use prowler_app_search_providers to find provider IDs or prowler_app_list_scans to find scan IDs." + "error": "Either scan_id or provider_id must be provided. Use prowler_search_providers to find provider IDs or prowler_list_scans to find scan IDs." } # Resolve provider_id to latest scan_id if needed @@ -395,7 +395,7 @@ class ComplianceTools(BaseTool): report_lines.append("**Failed Finding IDs**: None found") report_lines.append("") report_lines.append( - "*Use `prowler_app_get_finding_details` with these finding IDs to get remediation guidance.*" + "*Use `prowler_get_finding_details` with these finding IDs to get remediation guidance.*" ) report_lines.append("") diff --git a/mcp_server/prowler_mcp_server/prowler_app/tools/finding_groups.py b/mcp_server/prowler_mcp_server/prowler_app/tools/finding_groups.py index 905a352740..05adf8db2b 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/tools/finding_groups.py +++ b/mcp_server/prowler_mcp_server/prowler_app/tools/finding_groups.py @@ -1,4 +1,4 @@ -"""Finding Groups tools for Prowler App MCP Server. +"""Finding Groups tools for Prowler MCP Server. This module provides read-only tools for finding group triage and drill-downs. """ @@ -233,8 +233,8 @@ class FindingGroupsTools(BaseTool): `date_to`, this uses `/finding-groups` with a maximum 2-day date window. Use this tool to find noisy or high-impact checks, then call - prowler_app_get_finding_group_details for complete counters or - prowler_app_list_finding_group_resources to drill into affected resources. + prowler_get_finding_group_details for complete counters or + prowler_list_finding_group_resources to drill into affected resources. """ try: self.api_client.validate_page_size(page_size) @@ -423,7 +423,7 @@ class FindingGroupsTools(BaseTool): Default behavior returns FAIL, unmuted resources so the result is actionable. Set `include_muted=True` to include accepted/suppressed resources too. Each row includes nested resource and provider data plus - `finding_id`. Use `prowler_app_get_finding_details(finding_id)` to + `finding_id`. Use `prowler_get_finding_details(finding_id)` to retrieve complete remediation guidance for a specific resource finding. """ try: diff --git a/mcp_server/prowler_mcp_server/prowler_app/tools/findings.py b/mcp_server/prowler_mcp_server/prowler_app/tools/findings.py index ec492c6a43..b556101cab 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/tools/findings.py +++ b/mcp_server/prowler_mcp_server/prowler_app/tools/findings.py @@ -1,4 +1,4 @@ -"""Security Findings tools for Prowler App MCP Server. +"""Security Findings tools for Prowler MCP Server. This module provides tools for searching, viewing, and analyzing security findings across all cloud providers. @@ -92,7 +92,7 @@ class FindingsTools(BaseTool): """Search and filter security findings across all cloud providers with rich filtering capabilities. IMPORTANT: This tool returns LIGHTWEIGHT findings. Use this for fast searching and filtering across many findings. - For complete details use prowler_app_get_finding_details on specific findings. + For complete details use prowler_get_finding_details on specific findings. Default behavior: - Returns latest findings from most recent scans (no date parameters needed) @@ -111,7 +111,7 @@ class FindingsTools(BaseTool): Workflow: 1. Use this tool to search and filter findings by severity, status, provider, service, region, etc. - 2. Use prowler_app_get_finding_details with the finding 'id' to get complete information about the finding + 2. Use prowler_get_finding_details with the finding 'id' to get complete information about the finding """ # Validate page_size parameter self.api_client.validate_page_size(page_size) @@ -187,9 +187,9 @@ class FindingsTools(BaseTool): """Retrieve comprehensive details about a specific security finding by its ID. IMPORTANT: This tool returns COMPLETE finding details. - Use this after finding a specific finding via prowler_app_search_security_findings + Use this after finding a specific finding via prowler_search_security_findings - This tool provides ALL information that prowler_app_search_security_findings returns PLUS: + This tool provides ALL information that prowler_search_security_findings returns PLUS: 1. Check Metadata (information about the check script that generated the finding): - title: Human-readable phrase used to summarize the check @@ -217,7 +217,7 @@ class FindingsTools(BaseTool): - resource_ids: List of UUIDs for cloud resources associated with this finding Workflow: - 1. Use prowler_app_search_security_findings to browse and filter findings + 1. Use prowler_search_security_findings to browse and filter findings 2. Use this tool with the finding 'id' to get remediation guidance and complete context """ params = { diff --git a/mcp_server/prowler_mcp_server/prowler_app/tools/muting.py b/mcp_server/prowler_mcp_server/prowler_app/tools/muting.py index 639f1ec3b7..37e1504165 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/tools/muting.py +++ b/mcp_server/prowler_mcp_server/prowler_app/tools/muting.py @@ -1,4 +1,4 @@ -"""Muting tools for Prowler App MCP Server. +"""Muting tools for Prowler MCP Server. This module provides tools for managing finding muting in Prowler, including: - Mutelist management (pattern-based bulk muting) @@ -43,7 +43,7 @@ class MutingTools(BaseTool): Workflow: 1. Use this tool to check if a mutelist is configured 2. Examine current muting patterns before making updates - 3. Use prowler_app_set_mutelist to create or update the configuration + 3. Use prowler_set_mutelist to create or update the configuration """ self.logger.info("Retrieving mutelist configuration...") @@ -61,7 +61,7 @@ class MutingTools(BaseTool): if len(data) == 0: return { "error": "No mutelist found", - "message": "No mutelist configuration exists for this tenant. Use prowler_app_set_mutelist to create one.", + "message": "No mutelist configuration exists for this tenant. Use prowler_set_mutelist to create one.", } # Return the first (and only) mutelist @@ -116,10 +116,10 @@ Structure: - Exceptions: Accounts, Regions, Resources to exclude from muting Workflow: - 1. Use prowler_app_get_mutelist to check existing configuration + 1. Use prowler_get_mutelist to check existing configuration 2. Build configuration object following Prowler mutelist format 3. Use this tool to create or update the mutelist - 4. Verify with prowler_app_get_mutelist + 4. Verify with prowler_get_mutelist """ self.logger.info("Setting mutelist configuration...") @@ -171,12 +171,12 @@ Structure: """Remove the mutelist configuration from the tenant. WARNING: This is a destructive operation that cannot be undone. - - The mutelist will need to be re-created with prowler_app_set_mutelist + - The mutelist will need to be re-created with prowler_set_mutelist - New findings from future scans will NOT be muted by the deleted mutelist - Previously muted findings remain muted (deletion doesn't un-mute them) Workflow: - 1. Use prowler_app_get_mutelist to confirm what will be deleted + 1. Use prowler_get_mutelist to confirm what will be deleted 2. Use this tool to permanently remove the mutelist 3. New scans will no longer apply mutelist-based muting """ @@ -229,7 +229,7 @@ Structure: """Search and filter mute rules with pagination support. IMPORTANT: This tool returns LIGHTWEIGHT mute rules without the full list of finding UIDs. - Use prowler_app_get_mute_rule to get complete details including all finding UIDs and creator information. + Use prowler_get_mute_rule to get complete details including all finding UIDs and creator information. Default behavior: - Returns all mute rules (both enabled and disabled) @@ -237,15 +237,15 @@ Structure: - Includes basic rule information without full finding UID lists Each mute rule includes: - - Core identification: id (UUID for prowler_app_get_mute_rule), name + - Core identification: id (UUID for prowler_get_mute_rule), name - Contextual information: reason, enabled status - State tracking: finding_count (number of findings currently muted) - Temporal data: inserted_at, updated_at timestamps Workflow: 1. Use this tool to search and filter mute rules by name, enabled status, or keywords - 2. Use prowler_app_get_mute_rule with the mute rule 'id' to get complete details including all finding UIDs - 3. Use prowler_app_update_mute_rule or prowler_app_delete_mute_rule to modify rules + 2. Use prowler_get_mute_rule with the mute rule 'id' to get complete details including all finding UIDs + 3. Use prowler_update_mute_rule or prowler_delete_mute_rule to modify rules """ self.logger.info("Listing mute rules...") self.api_client.validate_page_size(page_size) @@ -289,17 +289,17 @@ Structure: """Retrieve comprehensive details about a specific mute rule by its ID. IMPORTANT: This tool returns COMPLETE mute rule details including the full list of finding UIDs. - Use this after finding a rule via prowler_app_list_mute_rules. + Use this after finding a rule via prowler_list_mute_rules. - This tool provides ALL information that prowler_app_list_mute_rules returns PLUS: + This tool provides ALL information that prowler_list_mute_rules returns PLUS: - finding_uids: Complete list of finding UIDs that are muted by this rule - user_creator_id: UUID of the user who created the rule (audit trail) Workflow: - 1. Use prowler_app_list_mute_rules to find rules by name or filter criteria + 1. Use prowler_list_mute_rules to find rules by name or filter criteria 2. Use this tool with the rule 'id' to get complete details 3. Examine finding_uids list to understand which findings are muted - 4. Use prowler_app_update_mute_rule or prowler_app_delete_mute_rule to modify if needed + 4. Use prowler_update_mute_rule or prowler_delete_mute_rule to modify if needed """ self.logger.info(f"Retrieving mute rule {rule_id}...") @@ -323,7 +323,7 @@ Structure: description="Reason for muting these findings. Document why this security issue is acceptable or intentional (e.g., 'Development environment with controlled access', 'Legacy application requires IMDSv1')." ), finding_ids: list[str] = Field( - description="List of finding IDs (UUIDs) to mute. Get these from the prowler_app_search_security_findings tool. Must provide at least 1 finding ID." + description="List of finding IDs (UUIDs) to mute. Get these from the prowler_search_security_findings tool. Must provide at least 1 finding ID." ), ) -> dict[str, Any]: """Create a new mute rule to mute specific findings with documentation and audit trail. @@ -337,15 +337,15 @@ Structure: - Records creator for audit trail The mute rule includes: - - Core identification: id (UUID for prowler_app_get_mute_rule), name, reason + - Core identification: id (UUID for prowler_get_mute_rule), name, reason - Configuration: enabled status, finding_uids list - Audit trail: user_creator_id (UUID of the Prowler user from the tenant that created the rule), timestamps when the rule was created and last modified Workflow: - 1. Use prowler_app_search_security_findings to identify findings to mute + 1. Use prowler_search_security_findings to identify findings to mute 2. Use this tool with finding IDs, descriptive name, and documented reason - 3. Verify with prowler_app_get_mute_rule to confirm rule creation - 4. Check findings are muted with prowler_app_search_security_findings (filter by muted=true) + 3. Verify with prowler_get_mute_rule to confirm rule creation + 4. Check findings are muted with prowler_search_security_findings (filter by muted=true) """ self.logger.info(f"Creating mute rule '{name}'...") @@ -399,9 +399,9 @@ Structure: - enabled: Toggle rule active status (doesn't affect already-muted findings) Workflow: - 1. Use prowler_app_get_mute_rule to see current rule state + 1. Use prowler_get_mute_rule to see current rule state 2. Use this tool to update name, reason, or enabled status - 3. Verify changes with prowler_app_get_mute_rule + 3. Verify changes with prowler_get_mute_rule """ self.logger.info(f"Updating mute rule {rule_id}...") @@ -451,9 +451,9 @@ Structure: - Cannot be undone - rule must be recreated to restore Workflow: - 1. Use prowler_app_get_mute_rule to review what will be deleted + 1. Use prowler_get_mute_rule to review what will be deleted 2. Use this tool to permanently remove the rule - 3. Verify deletion with prowler_app_list_mute_rules (rule should no longer appear) + 3. Verify deletion with prowler_list_mute_rules (rule should no longer appear) """ self.logger.info(f"Deleting mute rule {rule_id}...") diff --git a/mcp_server/prowler_mcp_server/prowler_app/tools/providers.py b/mcp_server/prowler_mcp_server/prowler_app/tools/providers.py index b22d57d7b9..3ba417d677 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/tools/providers.py +++ b/mcp_server/prowler_mcp_server/prowler_app/tools/providers.py @@ -1,4 +1,4 @@ -"""Provider Management tools for Prowler App MCP Server. +"""Provider Management tools for Prowler MCP Server. This module provides tools for managing provider connections, including searching, connecting, and deleting providers. @@ -19,9 +19,9 @@ class ProvidersTools(BaseTool): """Tools for provider management operations Provides tools for: - - prowler_app_search_providers: Search and view configured providers with their connection status - - prowler_app_connect_provider: Connect or register a provider for security scanning in Prowler - - prowler_app_delete_provider: Permanently remove a provider from Prowler + - prowler_search_providers: Search and view configured providers with their connection status + - prowler_connect_provider: Connect or register a provider for security scanning in Prowler + - prowler_delete_provider: Permanently remove a provider from Prowler """ async def search_providers( @@ -145,7 +145,7 @@ class ProvidersTools(BaseTool): ) -> dict[str, Any]: """Register a provider to be scanned with Prowler. - This tool will register a provider in Prowler App, even if the UID is wrong. + This tool will register a provider in Prowler, even if the UID is wrong. If the provider is already registered, it will be updated with the new provided alias or credentials if provided. If credentials are provided, they will be added to the indicated provider, if the provider does not exist, it will be created and the credentials will be added to it. If the connection test is successful, the provider will be connected. @@ -292,13 +292,13 @@ class ProvidersTools(BaseTool): async def delete_provider( self, provider_id: str = Field( - description="Prowler's internal UUID (v4) for the provider to permanently remove, generated when the provider was registered in the system. Use `prowler_app_search_providers` tool to find the provider_id if you only know the alias or the provider's own identifier (provider_uid)" + description="Prowler's internal UUID (v4) for the provider to permanently remove, generated when the provider was registered in the system. Use `prowler_search_providers` tool to find the provider_id if you only know the alias or the provider's own identifier (provider_uid)" ), ) -> dict[str, Any]: """Permanently remove a registered provider from Prowler. WARNING: This is a destructive operation that cannot be undone. The provider will need to be - re-added with prowler_app_connect_provider if you want to scan it again. + re-added with prowler_connect_provider if you want to scan it again. The tool always returns the deletion status and message. """ diff --git a/mcp_server/prowler_mcp_server/prowler_app/tools/resources.py b/mcp_server/prowler_mcp_server/prowler_app/tools/resources.py index 011e013b91..88fcca25ae 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/tools/resources.py +++ b/mcp_server/prowler_mcp_server/prowler_app/tools/resources.py @@ -1,4 +1,4 @@ -"""Cloud Resources tools for Prowler App MCP Server. +"""Cloud Resources tools for Prowler MCP Server. This module provides tools for searching, viewing, and analyzing cloud resources across all providers. @@ -86,7 +86,7 @@ class ResourcesTools(BaseTool): IMPORTANT: This tool returns LIGHTWEIGHT resource information. Use this for fast searching and filtering across many resources. For complete configuration details, metadata, and finding - relationships, use prowler_app_get_resource on specific resources of interest. + relationships, use prowler_get_resource on specific resources of interest. This is the primary tool for browsing resources with rich filtering capabilities. Returns current state by default (latest scan per provider). Specify dates to query @@ -102,16 +102,16 @@ class ResourcesTools(BaseTool): - With dates: queries historical resource state (2-day maximum range between date_from and date_to) Each resource includes: - - Core identification: id (UUID for prowler_app_get_resource), uid, name + - Core identification: id (UUID for prowler_get_resource), uid, name - Location context: region, service, type - Security context: failed_findings_count (number of active security issues) - Tags: tags associated with the resource Useful Workflow: 1. Use this tool to search and filter resources by provider, region, service, tags, etc. - 2. Use prowler_app_get_resource with the resource 'id' to get complete configuration and metadata - 3. Use prowler_app_search_security_findings to find security issues for specific resources - 4. Use prowler_app_get_finding_details to get details about the security issues for specific resources + 2. Use prowler_get_resource with the resource 'id' to get complete configuration and metadata + 3. Use prowler_search_security_findings to find security issues for specific resources + 4. Use prowler_get_finding_details to get details about the security issues for specific resources """ # Validate page_size parameter self.api_client.validate_page_size(page_size) @@ -177,15 +177,15 @@ class ResourcesTools(BaseTool): async def get_resource( self, resource_id: str = Field( - description="Prowler's internal UUID (v4) for the resource to retrieve, generated when the resource was discovered in the system. Use `prowler_app_list_resources` tool to find the right ID" + description="Prowler's internal UUID (v4) for the resource to retrieve, generated when the resource was discovered in the system. Use `prowler_list_resources` tool to find the right ID" ), ) -> dict[str, Any]: """Retrieve comprehensive details about a specific resource by its ID. IMPORTANT: This tool provides COMPLETE resource details with all available information. - Use this after finding a specific resource via prowler_app_list_resources. + Use this after finding a specific resource via prowler_list_resources. - This tool provides ALL information that prowler_app_list_resources returns PLUS: + This tool provides ALL information that prowler_list_resources returns PLUS: 1. Configuration Details: - metadata: Provider-specific configuration (tags, policies, encryption settings, network rules) @@ -197,12 +197,12 @@ class ResourcesTools(BaseTool): 3. Security Relationships: - finding_ids: Prowler's internal UUIDs (v4) of all security findings associated with this resource - - Use prowler_app_get_finding_details on these IDs to get remediation guidance + - Use prowler_get_finding_details on these IDs to get remediation guidance Useful Workflow: - 1. Use prowler_app_list_resources to browse and filter across many resources + 1. Use prowler_list_resources to browse and filter across many resources 2. Use this tool to drill down into specific resources of interest - 3. Use prowler_app_get_finding_details to get details about the security issues for specific resources + 3. Use prowler_get_finding_details to get details about the security issues for specific resources """ params = {} @@ -348,7 +348,7 @@ class ResourcesTools(BaseTool): async def get_resource_events( self, resource_id: str = Field( - description="Prowler's internal UUID (v4) for the resource. Use `prowler_app_list_resources` to find the right ID, or get it from a finding's resource relationship via `prowler_app_get_finding_details`." + description="Prowler's internal UUID (v4) for the resource. Use `prowler_list_resources` to find the right ID, or get it from a finding's resource relationship via `prowler_get_finding_details`." ), lookback_days: int = Field( default=90, @@ -386,8 +386,8 @@ class ResourcesTools(BaseTool): - Identifying unauthorized or unexpected modifications Workflows: - 1. Resource browsing: prowler_app_list_resources → find resource → this tool for event history - 2. Incident investigation: prowler_app_get_finding_details → get resource ID from finding → this tool to identify who caused the issue, what they changed, and when + 1. Resource browsing: prowler_list_resources → find resource → this tool for event history + 2. Incident investigation: prowler_get_finding_details → get resource ID from finding → this tool to identify who caused the issue, what they changed, and when """ params = { "lookback_days": lookback_days, diff --git a/mcp_server/prowler_mcp_server/prowler_app/tools/scans.py b/mcp_server/prowler_mcp_server/prowler_app/tools/scans.py index 1df636ffc0..21d1431b71 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/tools/scans.py +++ b/mcp_server/prowler_mcp_server/prowler_app/tools/scans.py @@ -1,4 +1,4 @@ -"""Security Scans tools for Prowler App MCP Server. +"""Security Scans tools for Prowler MCP Server. This module provides tools for managing and monitoring Prowler security scans. """ @@ -20,18 +20,18 @@ class ScansTools(BaseTool): """Tools for security scan operations. Provides tools for: - - prowler_app_list_scans: Search and filter scans with rich filtering capabilities - - prowler_app_get_scan: Get comprehensive details about a specific scan - - prowler_app_trigger_scan: Trigger manual security scans for providers - - prowler_app_schedule_daily_scan: Schedule automated daily scans for continuous monitoring - - prowler_app_update_scan: Update scan names for better organization + - prowler_list_scans: Search and filter scans with rich filtering capabilities + - prowler_get_scan: Get comprehensive details about a specific scan + - prowler_trigger_scan: Trigger manual security scans for providers + - prowler_schedule_daily_scan: Schedule automated daily scans for continuous monitoring + - prowler_update_scan: Update scan names for better organization """ async def list_scans( self, provider_id: list[str] = Field( default=[], - description="Filter by Prowler's internal UUID(s) (v4) for specific provider(s), generated when the provider was registered. Use `prowler_app_search_providers` tool to find provider IDs", + description="Filter by Prowler's internal UUID(s) (v4) for specific provider(s), generated when the provider was registered. Use `prowler_search_providers` tool to find provider IDs", ), provider_type: list[str] = Field( default=[], @@ -56,7 +56,7 @@ class ScansTools(BaseTool): ), trigger: Literal["manual", "scheduled"] | None = Field( default=None, - description="Filter by how the scan was initiated. Options: 'manual' (user-initiated via prowler_app_trigger_scan), 'scheduled' (automated via prowler_app_schedule_daily_scan)", + description="Filter by how the scan was initiated. Options: 'manual' (user-initiated via prowler_trigger_scan), 'scheduled' (automated via prowler_schedule_daily_scan)", ), name: str | None = Field( default=None, @@ -75,7 +75,7 @@ class ScansTools(BaseTool): IMPORTANT: This tool returns LIGHTWEIGHT scan information. Use this for fast searching and filtering across many scans. For complete scan details including progress, duration, and resource counts, - use prowler_app_get_scan on specific scans of interest. + use prowler_get_scan on specific scans of interest. Default behavior: - Returns all scans @@ -83,15 +83,15 @@ class ScansTools(BaseTool): - Includes all scan states (available, scheduled, executing, completed, failed, cancelled) Each scan includes: - - Core identification: id (UUID for prowler_app_get_scan), name + - Core identification: id (UUID for prowler_get_scan), name - Execution context: state, trigger (manual/scheduled) - Temporal data: started_at, completed_at - Provider relationship: provider_id Workflow: 1. Use this tool to search and filter scans by provider, state, or date range - 2. Use prowler_app_get_scan with the scan 'id' to get progress, duration, and resource counts - 3. Use prowler_app_search_security_findings filtered by scan dates to analyze scan results + 2. Use prowler_get_scan with the scan 'id' to get progress, duration, and resource counts + 3. Use prowler_search_security_findings filtered by scan dates to analyze scan results """ # Validate pagination self.api_client.validate_page_size(page_size) @@ -128,15 +128,15 @@ class ScansTools(BaseTool): async def get_scan( self, scan_id: str = Field( - description="Prowler's internal UUID (v4) for the scan to retrieve, generated when the scan was created (e.g., '123e4567-e89b-12d3-a456-426614174000'). Use `prowler_app_list_scans` tool to find scan IDs" + description="Prowler's internal UUID (v4) for the scan to retrieve, generated when the scan was created (e.g., '123e4567-e89b-12d3-a456-426614174000'). Use `prowler_list_scans` tool to find scan IDs" ), ) -> dict[str, Any]: """Retrieve comprehensive details about a specific scan by its ID. IMPORTANT: This tool returns COMPLETE scan details. - Use this after finding a specific scan via prowler_app_list_scans. + Use this after finding a specific scan via prowler_list_scans. - This tool provides ALL information that prowler_app_list_scans returns PLUS: + This tool provides ALL information that prowler_list_scans returns PLUS: 1. Execution Details: - progress: Scan completion progress as percentage (0-100%) @@ -155,9 +155,9 @@ class ScansTools(BaseTool): - Understanding scan scheduling patterns Workflow: - 1. Use prowler_app_list_scans to browse and filter scans + 1. Use prowler_list_scans to browse and filter scans 2. Use this tool with the scan 'id' to monitor progress or view detailed results - 3. For completed scans, use prowler_app_search_security_findings filtered by date to analyze findings + 3. For completed scans, use prowler_search_security_findings filtered by date to analyze findings """ # Fetch scan with all fields params = { @@ -172,7 +172,7 @@ class ScansTools(BaseTool): async def trigger_scan( self, provider_id: str = Field( - description="Prowler's internal UUID (v4) for the provider to scan, generated when the provider was registered in the system (e.g., '4d0e2614-6385-4fa7-bf0b-c2e2f75c6877'). Use `prowler_app_search_providers` tool to find the provider ID" + description="Prowler's internal UUID (v4) for the provider to scan, generated when the provider was registered in the system (e.g., '4d0e2614-6385-4fa7-bf0b-c2e2f75c6877'). Use `prowler_search_providers` tool to find the provider ID" ), name: str | None = Field( default=None, @@ -182,14 +182,14 @@ class ScansTools(BaseTool): """Trigger a manual security scan for a provider. IMPORTANT: This tool returns immediately once the scan is created. - The scan will continue running in the background. Use `prowler_app_get_scan` + The scan will continue running in the background. Use `prowler_get_scan` with the returned scan ID to monitor progress and check when it completes. Example Useful Workflow: - 1. Use `prowler_app_search_providers` to find the provider_id you want to scan + 1. Use `prowler_search_providers` to find the provider_id you want to scan 2. Use this tool to trigger the scan - 3. Use `prowler_app_get_scan` with the returned scan 'id' to monitor progress - 4. Once completed, use `prowler_app_search_security_findings` to analyze results + 3. Use `prowler_get_scan` with the returned scan 'id' to monitor progress + 4. Once completed, use `prowler_search_security_findings` to analyze results """ try: # Build request data @@ -231,7 +231,7 @@ class ScansTools(BaseTool): return ScanCreationResult( scan=scan_info, status="success", - message=f"Scan {scan_id} created successfully. The scan may take some time to complete. Use prowler_app_get_scan tool with this ID to monitor progress.", + message=f"Scan {scan_id} created successfully. The scan may take some time to complete. Use prowler_get_scan tool with this ID to monitor progress.", ).model_dump() except Exception as e: @@ -245,7 +245,7 @@ class ScansTools(BaseTool): async def schedule_daily_scan( self, provider_id: str = Field( - description="Prowler's internal UUID (v4) for the provider to scan, generated when the provider was registered in the system (e.g., '4d0e2614-6385-4fa7-bf0b-c2e2f75c6877'). Use `prowler_app_search_providers` tool to find the provider ID" + description="Prowler's internal UUID (v4) for the provider to scan, generated when the provider was registered in the system (e.g., '4d0e2614-6385-4fa7-bf0b-c2e2f75c6877'). Use `prowler_search_providers` tool to find the provider ID" ), ) -> dict[str, Any]: """Schedule automated daily scans for a provider for continuous security monitoring. @@ -256,17 +256,17 @@ class ScansTools(BaseTool): you're not actively using the system. IMPORTANT: This tool returns immediately once the daily schedule is created. - The schedule will be set up in the background. Use `prowler_app_list_scans` + The schedule will be set up in the background. Use `prowler_list_scans` filtered by provider_id and trigger='scheduled' to view scheduled scans. IMPORTANT: This creates a PERSISTENT schedule. The provider will be scanned automatically every 24 hours until the provider is deleted. Example Useful Workflow: - 1. Use `prowler_app_search_providers` to find the provider_id you want to monitor + 1. Use `prowler_search_providers` to find the provider_id you want to monitor 2. Use this tool to create the daily schedule - 3. Use `prowler_app_list_scans` filtered by provider_id to view scheduled and completed scans - 4. Monitor findings over time with `prowler_app_search_security_findings` + 3. Use `prowler_list_scans` filtered by provider_id to view scheduled and completed scans + 4. Monitor findings over time with `prowler_search_security_findings` """ self.logger.info(f"Creating daily schedule for provider {provider_id}") task_response = await self.api_client.post( @@ -285,7 +285,7 @@ class ScansTools(BaseTool): ) if task_state == "available": - return_message = "Daily schedule created successfully. The schedule is being set up in the background. Use prowler_app_list_scans with provider_id filter to view scheduled scans." + return_message = "Daily schedule created successfully. The schedule is being set up in the background. Use prowler_list_scans with provider_id filter to view scheduled scans." else: return_message = "Daily schedule creation failed. Please try again later." @@ -297,7 +297,7 @@ class ScansTools(BaseTool): async def update_scan( self, scan_id: str = Field( - description="Prowler's internal UUID (v4) for the scan to update, generated when the scan was created (e.g., '123e4567-e89b-12d3-a456-426614174000'). Use `prowler_app_list_scans` tool to find the scan ID if you only know the provider or scan name. Returns an error if the scan ID is invalid or not found." + description="Prowler's internal UUID (v4) for the scan to update, generated when the scan was created (e.g., '123e4567-e89b-12d3-a456-426614174000'). Use `prowler_list_scans` tool to find the scan ID if you only know the provider or scan name. Returns an error if the scan ID is invalid or not found." ), name: str = Field( description="New human-friendly name for the scan (3-100 characters). Use descriptive names to improve organization and tracking, e.g., 'Production Security Audit - Q4 2025', 'Post-Deployment Compliance Check'. IMPORTANT: Only the scan name can be updated - other attributes (state, progress, duration) are read-only and managed by the system." @@ -309,7 +309,7 @@ class ScansTools(BaseTool): (state, progress, duration, etc.) are read-only and managed by the system. Example Useful Workflow: - 1. Use `prowler_app_list_scans` to find the scan you want to rename + 1. Use `prowler_list_scans` to find the scan you want to rename 2. Use this tool with the scan 'id' and new name """ api_response = await self.api_client.patch( diff --git a/mcp_server/prowler_mcp_server/prowler_app/utils/api_client.py b/mcp_server/prowler_mcp_server/prowler_app/utils/api_client.py index a6aacc3ce1..187364bee1 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/utils/api_client.py +++ b/mcp_server/prowler_mcp_server/prowler_app/utils/api_client.py @@ -1,4 +1,4 @@ -"""Shared API client utilities for Prowler App tools.""" +"""Shared API client utilities for Prowler tools.""" import asyncio from datetime import datetime, timedelta diff --git a/mcp_server/prowler_mcp_server/prowler_app/utils/auth.py b/mcp_server/prowler_mcp_server/prowler_app/utils/auth.py index 72c06000df..eff5d3a117 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/utils/auth.py +++ b/mcp_server/prowler_mcp_server/prowler_app/utils/auth.py @@ -10,7 +10,7 @@ from prowler_mcp_server.lib.logger import logger class ProwlerAppAuth: - """Handles authentication for Prowler App API using API keys or JWT tokens.""" + """Handles authentication for Prowler API using API keys or JWT tokens.""" def __init__( self, @@ -18,19 +18,23 @@ class ProwlerAppAuth: base_url: str = os.getenv("API_BASE_URL", "https://api.prowler.com/api/v1"), ): self.base_url = base_url.rstrip("/") - logger.info(f"Using Prowler App API base URL: {self.base_url}") + logger.info(f"Using Prowler API base URL: {self.base_url}") self.mode = mode self.access_token: str | None = None self.api_key: str | None = None if mode == "stdio": # STDIO mode - self.api_key = os.getenv("PROWLER_APP_API_KEY") + # PROWLER_API_KEY is the current variable; PROWLER_APP_API_KEY is kept + # as a backward-compatible fallback so existing setups keep working. + self.api_key = os.getenv("PROWLER_API_KEY") or os.getenv( + "PROWLER_APP_API_KEY" + ) if not self.api_key: - raise ValueError("PROWLER_APP_API_KEY environment variable is required") + raise ValueError("PROWLER_API_KEY environment variable is required") if not self.api_key.startswith("pk_"): - raise ValueError("Prowler App API key format is incorrect") + raise ValueError("Prowler API key format is incorrect") def _parse_jwt(self, token: str) -> dict | None: """Parse JWT token and return payload diff --git a/mcp_server/prowler_mcp_server/prowler_app/utils/tool_loader.py b/mcp_server/prowler_mcp_server/prowler_app/utils/tool_loader.py index b85c13af35..3a00474b5f 100644 --- a/mcp_server/prowler_mcp_server/prowler_app/utils/tool_loader.py +++ b/mcp_server/prowler_mcp_server/prowler_app/utils/tool_loader.py @@ -13,18 +13,27 @@ from prowler_mcp_server.lib.logger import logger from prowler_mcp_server.prowler_app.tools.base import BaseTool -def load_all_tools(mcp: FastMCP) -> None: - """Auto-discover and load all BaseTool subclasses from the tools package. +def load_all_tools( + mcp: FastMCP, + tools_package: str = "prowler_mcp_server.prowler_app.tools", +) -> None: + """Auto-discover and load all BaseTool subclasses from a tools package. This function: - 1. Dynamically imports all Python modules in the tools package - 2. Discovers all concrete BaseTool subclasses + 1. Dynamically imports all Python modules in the given tools package + 2. Discovers all concrete BaseTool subclasses defined in that package 3. Instantiates each tool class 4. Registers all tools with the provided FastMCP instance + ``BaseTool.__subclasses__()`` returns every subclass in the process, so the + discovered classes are filtered by ``__module__`` prefix. This keeps sibling + sub-servers (e.g. ``prowler_app`` and ``prowler_cloud``) from cross-registering + each other's tools, regardless of import order. + Args: mcp: The FastMCP instance to register tools with - TOOLS_PACKAGE: The package path containing tool modules (default: prowler_mcp_server.prowler_app.tools) + tools_package: The package path containing tool modules + (default: prowler_mcp_server.prowler_app.tools) Example: from fastmcp import FastMCP @@ -33,7 +42,7 @@ def load_all_tools(mcp: FastMCP) -> None: app = FastMCP("prowler-app") load_all_tools(app) """ - TOOLS_PACKAGE = "prowler_mcp_server.prowler_app.tools" + TOOLS_PACKAGE = tools_package logger.info(f"Auto-discovering tools from package: {TOOLS_PACKAGE}") # Import the tools package @@ -59,11 +68,14 @@ def load_all_tools(mcp: FastMCP) -> None: except Exception as e: logger.error(f"Failed to import module {module_name}: {e}") - # Discover all concrete BaseTool subclasses + # Discover all concrete BaseTool subclasses defined in this package only. + # __subclasses__() is process-wide, so filter by module to avoid sibling + # sub-servers cross-registering each other's tools. concrete_tools = [ tool_class for tool_class in BaseTool.__subclasses__() if not getattr(tool_class, "__abstractmethods__", None) + and tool_class.__module__.startswith(TOOLS_PACKAGE) ] logger.info(f"Discovered {len(concrete_tools)} tool classes") diff --git a/mcp_server/prowler_mcp_server/server.py b/mcp_server/prowler_mcp_server/server.py index 7c85641dee..a46ca12672 100644 --- a/mcp_server/prowler_mcp_server/server.py +++ b/mcp_server/prowler_mcp_server/server.py @@ -19,15 +19,15 @@ def setup_main_server(): except Exception as e: logger.error(f"Failed to mount Prowler Hub server: {e}") - # Mount Prowler App tools with prowler_app_ namespace + # Mount core Prowler tools with prowler_ namespace try: - logger.info("Mounting Prowler App server...") + logger.info("Mounting Prowler tools server...") from prowler_mcp_server.prowler_app.server import app_mcp_server - prowler_mcp_server.mount(app_mcp_server, namespace="prowler_app") - logger.info("Successfully mounted Prowler App server") + prowler_mcp_server.mount(app_mcp_server, namespace="prowler") + logger.info("Successfully mounted Prowler tools server") except Exception as e: - logger.error(f"Failed to mount Prowler App server: {e}") + logger.error(f"Failed to mount Prowler tools server: {e}") # Mount Prowler Documentation tools with prowler_docs_ namespace try: diff --git a/mcp_server/pyproject.toml b/mcp_server/pyproject.toml index 63aefdf931..f27e08b743 100644 --- a/mcp_server/pyproject.toml +++ b/mcp_server/pyproject.toml @@ -19,11 +19,13 @@ description = "MCP server for Prowler ecosystem" name = "prowler-mcp" readme = "README.md" requires-python = ">=3.12" -version = "0.5.0" +version = "0.8.0" [project.scripts] prowler-mcp = "prowler_mcp_server.main:main" +[tool.pytest] + [tool.pytest.ini_options] testpaths = ["tests"] diff --git a/mcp_server/uv.lock b/mcp_server/uv.lock index 3258767442..a9afbeafd7 100644 --- a/mcp_server/uv.lock +++ b/mcp_server/uv.lock @@ -676,7 +676,7 @@ wheels = [ [[package]] name = "prowler-mcp" -version = "0.5.0" +version = "0.8.0" source = { editable = "." } dependencies = [ { name = "fastmcp" }, diff --git a/skills/prowler-mcp/SKILL.md b/skills/prowler-mcp/SKILL.md index af3c597771..704acf8553 100644 --- a/skills/prowler-mcp/SKILL.md +++ b/skills/prowler-mcp/SKILL.md @@ -19,7 +19,7 @@ The Prowler MCP Server uses three sub-servers with prefixed namespacing: | Sub-Server | Prefix | Auth | Purpose | |------------|--------|------|---------| -| Prowler App | `prowler_app_*` | Required | Cloud management tools | +| Prowler | `prowler_*` | Required | Prowler Cloud, Private Cloud & Local Server management tools | | Prowler Hub | `prowler_hub_*` | No | Security checks catalog | | Prowler Docs | `prowler_docs_*` | No | Documentation search | @@ -27,7 +27,7 @@ For complete architecture, patterns, and examples, see [docs/developer-guide/mcp --- -## Critical Rules (Prowler App Only) +## Critical Rules (Prowler Tools Only) ### Tool Implementation @@ -56,7 +56,7 @@ Use `@mcp.tool()` decorator directly—no BaseTool or models required. --- -## Quick Reference: New Prowler App Tool +## Quick Reference: New Prowler Tool 1. Create tool class in `prowler_app/tools/` extending `BaseTool` 2. Create models in `prowler_app/models/` using `MinimalSerializerMixin` @@ -64,7 +64,7 @@ Use `@mcp.tool()` decorator directly—no BaseTool or models required. --- -## QA Checklist (Prowler App) +## QA Checklist (Prowler Tools) - [ ] Tool docstrings describe LLM-relevant behavior - [ ] Models use `MinimalSerializerMixin` diff --git a/ui/app/(prowler)/lighthouse/_components/chat/message-bubble.test.tsx b/ui/app/(prowler)/lighthouse/_components/chat/message-bubble.test.tsx index 8b6855392f..ab11429774 100644 --- a/ui/app/(prowler)/lighthouse/_components/chat/message-bubble.test.tsx +++ b/ui/app/(prowler)/lighthouse/_components/chat/message-bubble.test.tsx @@ -51,7 +51,7 @@ describe("MessageBubble", () => { // Given const orderedMessage = buildAssistantMessage([ textPart("part-1", "Voy a buscar los findings por severidad"), - toolCallPart("part-2", "prowler_app_search_security_findings"), + toolCallPart("part-2", "prowler_search_security_findings"), textPart("part-3", "Ahora voy a buscar en los criticos"), ]); diff --git a/ui/app/(prowler)/lighthouse/_lib/event-reducer.test.ts b/ui/app/(prowler)/lighthouse/_lib/event-reducer.test.ts index 4f284a5656..89c62ef8bc 100644 --- a/ui/app/(prowler)/lighthouse/_lib/event-reducer.test.ts +++ b/ui/app/(prowler)/lighthouse/_lib/event-reducer.test.ts @@ -62,7 +62,7 @@ describe("event-reducer", () => { state = reduceLighthouseV2Event(state, { type: "tool_call.start", toolCallId: "tool-1", - toolName: "prowler_app_search_security_findings", + toolName: "prowler_search_security_findings", }); state = reduceLighthouseV2Event(state, { type: "tool_call.end", @@ -84,7 +84,7 @@ describe("event-reducer", () => { { id: "tool-1", type: "tool_call", - name: "prowler_app_search_security_findings", + name: "prowler_search_security_findings", status: "completed", outcome: "success", }, diff --git a/ui/app/(prowler)/lighthouse/_lib/tool-calls.test.ts b/ui/app/(prowler)/lighthouse/_lib/tool-calls.test.ts index 570e7cc597..5ccc2b4129 100644 --- a/ui/app/(prowler)/lighthouse/_lib/tool-calls.test.ts +++ b/ui/app/(prowler)/lighthouse/_lib/tool-calls.test.ts @@ -11,7 +11,7 @@ describe("getToolCallContent", () => { // Given const content = { tool_call_id: "call_1", - tool_name: "prowler_app_search_security_findings", + tool_name: "prowler_search_security_findings", arguments: { severity: "high" }, result: { count: 3 }, outcome: "success", @@ -23,7 +23,7 @@ describe("getToolCallContent", () => { // Then expect(parsed).toEqual({ toolCallId: "call_1", - toolName: "prowler_app_search_security_findings", + toolName: "prowler_search_security_findings", arguments: { severity: "high" }, result: { count: 3 }, outcome: "success", @@ -53,12 +53,18 @@ describe("getToolCallContent", () => { describe("formatToolName", () => { it("should strip the prowler prefix and title-case", () => { - expect(formatToolName("prowler_app_search_security_findings")).toBe( + expect(formatToolName("prowler_search_security_findings")).toBe( "Search security findings", ); expect(formatToolName("prowler_hub_list_checks")).toBe("List checks"); }); + it("should still strip the legacy prowler_app_ prefix", () => { + expect(formatToolName("prowler_app_search_security_findings")).toBe( + "Search security findings", + ); + }); + it("should humanize prefix-less tools", () => { expect(formatToolName("search_tools")).toBe("Search tools"); }); diff --git a/ui/app/(prowler)/lighthouse/_lib/tool-calls.ts b/ui/app/(prowler)/lighthouse/_lib/tool-calls.ts index 46034102d5..88e478089b 100644 --- a/ui/app/(prowler)/lighthouse/_lib/tool-calls.ts +++ b/ui/app/(prowler)/lighthouse/_lib/tool-calls.ts @@ -1,11 +1,14 @@ import type { LighthouseV2ToolCallContent } from "@/app/(prowler)/lighthouse/_types"; // Prefixes shared by the MCP-sourced tools; stripped for display so a name like -// `prowler_app_search_security_findings` reads as "Search security findings". +// `prowler_search_security_findings` reads as "Search security findings". The +// specific prefixes are listed before the bare `prowler_` catch-all so Hub, Docs, +// and legacy `prowler_app_` records match first and render cleanly. const TOOL_NAME_PREFIXES = [ - "prowler_app_", "prowler_hub_", "prowler_docs_", + "prowler_app_", + "prowler_", ] as const; // Reads the snake_case TOOL_CALL blob the backend persists and normalizes it to diff --git a/ui/changelog.d/prowler-tools-namespace.changed.md b/ui/changelog.d/prowler-tools-namespace.changed.md new file mode 100644 index 0000000000..f1affd1715 --- /dev/null +++ b/ui/changelog.d/prowler-tools-namespace.changed.md @@ -0,0 +1 @@ +Core Prowler tools in Lighthouse use the `prowler_*` namespace while preserving legacy `prowler_app_*` compatibility diff --git a/ui/lib/lighthouse-v1/allowed-tools.test.ts b/ui/lib/lighthouse-v1/allowed-tools.test.ts new file mode 100644 index 0000000000..7812a72282 --- /dev/null +++ b/ui/lib/lighthouse-v1/allowed-tools.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, it } from "vitest"; + +import { isAllowedTool } from "./allowed-tools"; + +describe("isAllowedTool", () => { + it("should accept a whitelisted tool using the current namespace", () => { + // Given + const toolName = "prowler_search_security_findings"; + + // When + const result = isAllowedTool(toolName); + + // Then + expect(result).toBe(true); + }); + + it("should accept a whitelisted tool using the legacy namespace", () => { + // Given + const toolName = "prowler_app_search_security_findings"; + + // When + const result = isAllowedTool(toolName); + + // Then + expect(result).toBe(true); + }); + + it("should reject a non-whitelisted tool after normalizing the legacy namespace", () => { + // Given + const toolName = "prowler_app_delete_provider"; + + // When + const result = isAllowedTool(toolName); + + // Then + expect(result).toBe(false); + }); +}); diff --git a/ui/lib/lighthouse-v1/allowed-tools.ts b/ui/lib/lighthouse-v1/allowed-tools.ts new file mode 100644 index 0000000000..ebce1e40a4 --- /dev/null +++ b/ui/lib/lighthouse-v1/allowed-tools.ts @@ -0,0 +1,67 @@ +/** + * Tools explicitly allowed for the LLM to list and execute. + * Follows the principle of least privilege - only these tools are accessible. + * All other tools are blocked by default. + */ +const ALLOWED_TOOLS = new Set([ + // === Prowler Hub Tools - read-only === + "prowler_hub_list_checks", + "prowler_hub_semantic_search_checks", + "prowler_hub_get_check_details", + "prowler_hub_get_check_code", + "prowler_hub_get_check_fixer", + "prowler_hub_list_compliances", + "prowler_hub_semantic_search_compliances", + "prowler_hub_get_compliance_details", + "prowler_hub_list_providers", + "prowler_hub_get_provider_services", + // === Prowler Docs Tools - read-only === + "prowler_docs_search", + "prowler_docs_get_document", + // === Prowler platform Tools - read-only === + // Findings + "prowler_search_security_findings", + "prowler_get_finding_details", + "prowler_get_findings_overview", + // Finding Groups + "prowler_list_finding_groups", + "prowler_get_finding_group_details", + "prowler_list_finding_group_resources", + // Providers + "prowler_search_providers", + // Scans + "prowler_list_scans", + "prowler_get_scan", + // Muting + "prowler_get_mutelist", + "prowler_list_mute_rules", + "prowler_get_mute_rule", + // Compliance + "prowler_get_compliance_overview", + "prowler_get_compliance_framework_state_details", + // Resources + "prowler_list_resources", + "prowler_get_resource", + "prowler_get_resource_events", + "prowler_get_resources_overview", + // Attack Paths + "prowler_list_attack_paths_queries", + "prowler_list_attack_paths_scans", + "prowler_run_attack_paths_query", + "prowler_get_attack_paths_cartography_schema", +]); + +/** + * Check if a tool is allowed for LLM access. + * Returns true only if the tool is explicitly in the whitelist. + * + * The Prowler platform tools were renamed from the `prowler_app_` prefix to + * `prowler_`. The legacy prefix is normalized here so tools served by + * an older MCP server (or a mismatched rollout) still resolve. + */ +export function isAllowedTool(toolName: string): boolean { + const normalized = toolName.startsWith("prowler_app_") + ? toolName.replace(/^prowler_app_/, "prowler_") + : toolName; + return ALLOWED_TOOLS.has(normalized); +} diff --git a/ui/lib/lighthouse-v1/mcp-client.ts b/ui/lib/lighthouse-v1/mcp-client.ts index cbce9351a4..588ff24ac8 100644 --- a/ui/lib/lighthouse-v1/mcp-client.ts +++ b/ui/lib/lighthouse-v1/mcp-client.ts @@ -77,7 +77,7 @@ class MCPClientManager { } /** - * Injects auth headers for Prowler App tools + * Injects auth headers for the core Prowler tools */ private handleBeforeToolCall = ({ name, @@ -87,9 +87,15 @@ class MCPClientManager { name: string; args?: unknown; }) => { - // Only inject auth for Prowler App tools (user-specific data) - // Prowler Hub and Prowler Docs tools don't require authentication - if (!name.startsWith("prowler_app_")) { + // Only inject auth for the core Prowler tools (user-specific data), served + // under the bare `prowler_` prefix. Prowler Hub (`prowler_hub_`) and Prowler + // Docs (`prowler_docs_`) tools are public and need no authentication. The + // legacy `prowler_app_` prefix also starts with `prowler_`, so it is covered. + const needsAuth = + name.startsWith("prowler_") && + !name.startsWith("prowler_hub_") && + !name.startsWith("prowler_docs_"); + if (!needsAuth) { return { args }; } diff --git a/ui/lib/lighthouse-v1/skills/definitions/attack-path-custom-query.ts b/ui/lib/lighthouse-v1/skills/definitions/attack-path-custom-query.ts index 7bb2ed08a1..15a298fd2c 100644 --- a/ui/lib/lighthouse-v1/skills/definitions/attack-path-custom-query.ts +++ b/ui/lib/lighthouse-v1/skills/definitions/attack-path-custom-query.ts @@ -15,9 +15,9 @@ This skill provides openCypher syntax guidance and Cartography schema knowledge Follow these steps when the user asks you to write a custom openCypher query: -1. **Find a completed scan**: Use \`prowler_app_list_attack_paths_scans\` (filter by \`state=['completed']\`) to find a scan for the user's provider. You need the \`scan_id\` for the next step. +1. **Find a completed scan**: Use \`prowler_list_attack_paths_scans\` (filter by \`state=['completed']\`) to find a scan for the user's provider. You need the \`scan_id\` for the next step. -2. **Fetch the Cartography schema**: Use \`prowler_app_get_attack_paths_cartography_schema\` with the \`scan_id\`. This returns the full schema markdown with all node labels, relationships, and properties for the scan's provider and Cartography version. If this tool fails, use the Cartography Schema Reference section below as a fallback (AWS only). +2. **Fetch the Cartography schema**: Use \`prowler_get_attack_paths_cartography_schema\` with the \`scan_id\`. This returns the full schema markdown with all node labels, relationships, and properties for the scan's provider and Cartography version. If this tool fails, use the Cartography Schema Reference section below as a fallback (AWS only). 3. **Analyze the schema**: From \`schema_content\`, identify the node labels, properties, and relationships relevant to the user's request. Cross-reference with the Common openCypher Patterns section below. diff --git a/ui/lib/lighthouse-v1/system-prompt.ts b/ui/lib/lighthouse-v1/system-prompt.ts index c508e42ddd..317aabf7ef 100644 --- a/ui/lib/lighthouse-v1/system-prompt.ts +++ b/ui/lib/lighthouse-v1/system-prompt.ts @@ -59,7 +59,7 @@ You have access to THREE meta-tools to interact with the available tools and ski - Use empty object {} for tools with no parameters - You must always provide the toolName and toolInput keys in the JSON object - Example: execute_tool({ "toolName": "prowler_hub_list_providers", "toolInput": {} }) - - Example: execute_tool({ "toolName": "prowler_app_search_security_findings", "toolInput": { "severity": ["critical", "high"], "status": ["FAIL"] } }) + - Example: execute_tool({ "toolName": "prowler_search_security_findings", "toolInput": { "severity": ["critical", "high"], "status": ["FAIL"] } }) 3. **load_skill** - Load specialized instructions for a complex task - Use when you identify a matching skill from the skill catalog below diff --git a/ui/lib/lighthouse-v1/tools/meta-tool.ts b/ui/lib/lighthouse-v1/tools/meta-tool.ts index 4ea4e39e74..f5c2cf7f75 100644 --- a/ui/lib/lighthouse-v1/tools/meta-tool.ts +++ b/ui/lib/lighthouse-v1/tools/meta-tool.ts @@ -5,8 +5,8 @@ import { tool } from "@langchain/core/tools"; import { addBreadcrumb, captureException } from "@sentry/nextjs"; import { z } from "zod"; +import { isAllowedTool } from "@/lib/lighthouse-v1/allowed-tools"; import { getMCPTools, isMCPAvailable } from "@/lib/lighthouse-v1/mcp-client"; -import { isAllowedTool } from "@/lib/lighthouse-v1/workflow"; /** Input type for describe_tool */ interface DescribeToolInput { @@ -95,7 +95,7 @@ Use this to understand what parameters a tool requires before executing it. Tool names are listed in your system prompt - use the exact name. You must always provide the toolName key in the JSON object. -Example: describe_tool({ "toolName": "prowler_app_search_security_findings" }) +Example: describe_tool({ "toolName": "prowler_search_security_findings" }) Returns: - Full parameter schema with types and descriptions @@ -203,7 +203,7 @@ export const executeTool = tool( Provide the exact tool name and its input parameters as specified in the tool's schema. You must always provide the toolName and toolInput keys in the JSON object. -Example: execute_tool({ "toolName": "prowler_app_search_security_findings", "toolInput": {} }) +Example: execute_tool({ "toolName": "prowler_search_security_findings", "toolInput": {} }) All input to the tool must be provided in the toolInput key as a JSON object. Example: execute_tool({ "toolName": "prowler_hub_list_compliances", "toolInput": { "provider": ["aws"] } }) diff --git a/ui/lib/lighthouse-v1/workflow.ts b/ui/lib/lighthouse-v1/workflow.ts index 1c31b7f58d..77a6f4ad76 100644 --- a/ui/lib/lighthouse-v1/workflow.ts +++ b/ui/lib/lighthouse-v1/workflow.ts @@ -4,6 +4,7 @@ import { getProviderCredentials, getTenantConfig, } from "@/actions/lighthouse-v1/lighthouse"; +import { isAllowedTool } from "@/lib/lighthouse-v1/allowed-tools"; import { TOOLS_UNAVAILABLE_MESSAGE } from "@/lib/lighthouse-v1/constants"; import type { ProviderType } from "@/lib/lighthouse-v1/llm-factory"; import { createLLM } from "@/lib/lighthouse-v1/llm-factory"; @@ -42,67 +43,6 @@ function truncateDescription(desc: string | undefined, maxLen: number): string { return cleaned.substring(0, maxLen) + "..."; } -/** - * Tools explicitly allowed for the LLM to list and execute. - * Follows the principle of least privilege - only these tools are accessible. - * All other tools are blocked by default. - */ -const ALLOWED_TOOLS = new Set([ - // === Prowler Hub Tools - read-only === - "prowler_hub_list_checks", - "prowler_hub_semantic_search_checks", - "prowler_hub_get_check_details", - "prowler_hub_get_check_code", - "prowler_hub_get_check_fixer", - "prowler_hub_list_compliances", - "prowler_hub_semantic_search_compliances", - "prowler_hub_get_compliance_details", - "prowler_hub_list_providers", - "prowler_hub_get_provider_services", - // === Prowler Docs Tools - read-only === - "prowler_docs_search", - "prowler_docs_get_document", - // === Prowler App Tools - read-only === - // Findings - "prowler_app_search_security_findings", - "prowler_app_get_finding_details", - "prowler_app_get_findings_overview", - // Finding Groups - "prowler_app_list_finding_groups", - "prowler_app_get_finding_group_details", - "prowler_app_list_finding_group_resources", - // Providers - "prowler_app_search_providers", - // Scans - "prowler_app_list_scans", - "prowler_app_get_scan", - // Muting - "prowler_app_get_mutelist", - "prowler_app_list_mute_rules", - "prowler_app_get_mute_rule", - // Compliance - "prowler_app_get_compliance_overview", - "prowler_app_get_compliance_framework_state_details", - // Resources - "prowler_app_list_resources", - "prowler_app_get_resource", - "prowler_app_get_resource_events", - "prowler_app_get_resources_overview", - // Attack Paths - "prowler_app_list_attack_paths_queries", - "prowler_app_list_attack_paths_scans", - "prowler_app_run_attack_paths_query", - "prowler_app_get_attack_paths_cartography_schema", -]); - -/** - * Check if a tool is allowed for LLM access. - * Returns true only if the tool is explicitly in the whitelist. - */ -export function isAllowedTool(toolName: string): boolean { - return ALLOWED_TOOLS.has(toolName); -} - /** * Generate dynamic tool listing from MCP tools. * Only includes tools that are explicitly whitelisted. From e0ddc0de2734809071c2712e431c47a1a70e1e19 Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Thu, 16 Jul 2026 16:02:22 +0200 Subject: [PATCH 04/30] feat(ui): add Lighthouse side panel (#11872) --- .../lighthouse-overview-banner.test.tsx | 43 +- .../lighthouse-overview-banner.tsx | 6 +- .../_overview/_lib/lighthouse-banner.test.ts | 2 +- .../_overview/_lib/lighthouse-banner.ts | 3 +- ui/app/(prowler)/layout.tsx | 4 + .../lighthouse/_components/chat/composer.tsx | 4 +- .../_components/chat/empty-state.tsx | 60 +- .../chat/lighthouse-chat-store-provider.tsx | 41 ++ .../chat/lighthouse-v2-chat-page.test.tsx | 151 ++-- .../chat/lighthouse-v2-chat-page.tsx | 665 ++---------------- .../chat/lighthouse-v2-chat-view.tsx | 339 +++++++++ .../_components/config/configuration-form.tsx | 3 + .../panel/lighthouse-panel-chat-skeleton.tsx | 71 ++ .../panel/lighthouse-panel-chat.test.tsx | 464 ++++++++++++ .../panel/lighthouse-panel-chat.tsx | 340 +++++++++ .../panel/lighthouse-panel-header-actions.tsx | 74 ++ .../lighthouse/_lib/chat-store.test.ts | 503 +++++++++++++ .../(prowler)/lighthouse/_lib/chat-store.ts | 485 +++++++++++++ .../lighthouse/_lib/load-chat-config.ts | 86 +++ .../_lib/panel-chat-message-state.ts | 44 ++ .../lighthouse/_lib/panel-chat-store.ts | 57 ++ .../lighthouse/_lib/session-events.ts | 40 ++ .../_lib/testing/event-source-mock.ts | 49 ++ ui/app/(prowler)/lighthouse/page.tsx | 51 +- ui/components/ThemeSwitch.test.tsx | 52 ++ ui/components/ThemeSwitch.tsx | 17 +- .../compliance-charts/heatmap-chart.test.tsx | 36 + .../compliance-charts/heatmap-chart.tsx | 76 +- ui/components/feeds/feeds-client.tsx | 9 +- .../findings/floating-mute-button.tsx | 39 +- .../table/column-finding-groups.test.tsx | 4 +- .../findings/table/column-finding-groups.tsx | 35 +- .../table/column-standalone-findings.tsx | 19 +- .../resource-detail-drawer-content.tsx | 18 +- .../resource-detail-drawer.tsx | 64 +- .../resource-detail-skeleton.tsx | 5 +- ui/components/icons/Icons.tsx | 8 +- ui/components/icons/lighthouse-icon.test.tsx | 51 ++ .../app-sidebar-mode-sync.test.tsx | 25 + .../app-sidebar/app-sidebar-mode-sync.tsx | 12 +- .../app-sidebar/mobile-app-sidebar.test.tsx | 11 + .../layout/app-sidebar/mobile-app-sidebar.tsx | 4 +- .../layout/main-layout/main-layout.test.tsx | 31 + .../layout/main-layout/main-layout.tsx | 48 +- .../layout/nav-bar/navbar-client.test.tsx | 87 ++- .../layout/nav-bar/navbar-client.tsx | 14 +- .../resources/resource-details-sheet.tsx | 34 +- .../shadcn/combobox/combobox.test.tsx | 20 + ui/components/shadcn/combobox/combobox.tsx | 9 +- .../discovery-callout.test.tsx | 67 ++ .../discovery-callout/discovery-callout.tsx | 82 +++ ui/components/shadcn/drawer.tsx | 133 ---- ui/components/shadcn/index.ts | 1 - ui/components/shadcn/popover.tsx | 12 +- .../shadcn/side-panel/side-panel.tsx | 142 ++++ .../shadcn/table/data-table.test.tsx | 6 +- ui/components/shadcn/table/data-table.tsx | 2 +- ui/components/shadcn/tooltip.test.tsx | 22 + ui/components/shadcn/tooltip.tsx | 37 +- .../side-panel/detail-side-panel.test.tsx | 177 +++++ .../side-panel/detail-side-panel.tsx | 66 ++ .../side-panel/global-side-panel.test.tsx | 427 +++++++++++ .../side-panel/global-side-panel.tsx | 260 +++++++ ui/components/side-panel/index.ts | 4 + .../retryable-lazy-content.test.tsx | 37 + .../side-panel/retryable-lazy-content.tsx | 35 + .../side-panel/side-panel-error-boundary.tsx | 55 ++ ui/components/side-panel/side-panel-tabs.tsx | 51 ++ .../side-panel/side-panel-trigger.test.tsx | 138 ++++ .../side-panel/side-panel-trigger.tsx | 93 +++ ui/dependency-log.json | 8 - ui/hooks/use-media-query.ts | 20 + ui/lib/lighthouse-routes.ts | 6 + ui/lib/lighthouse/prompts.test.ts | 35 + ui/lib/lighthouse/prompts.ts | 42 ++ ui/lib/ui-layout.ts | 34 + ui/package.json | 1 - ui/pnpm-lock.yaml | 20 +- ui/store/__tests__/side-panel.test.ts | 346 +++++++++ ui/store/side-panel.ts | 162 +++++ ui/styles/globals.css | 65 ++ ui/vitest.config.ts | 1 - 82 files changed, 5833 insertions(+), 1067 deletions(-) create mode 100644 ui/app/(prowler)/lighthouse/_components/chat/lighthouse-chat-store-provider.tsx create mode 100644 ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-view.tsx create mode 100644 ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat-skeleton.tsx create mode 100644 ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat.test.tsx create mode 100644 ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat.tsx create mode 100644 ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-header-actions.tsx create mode 100644 ui/app/(prowler)/lighthouse/_lib/chat-store.test.ts create mode 100644 ui/app/(prowler)/lighthouse/_lib/chat-store.ts create mode 100644 ui/app/(prowler)/lighthouse/_lib/load-chat-config.ts create mode 100644 ui/app/(prowler)/lighthouse/_lib/panel-chat-message-state.ts create mode 100644 ui/app/(prowler)/lighthouse/_lib/panel-chat-store.ts create mode 100644 ui/app/(prowler)/lighthouse/_lib/testing/event-source-mock.ts create mode 100644 ui/components/ThemeSwitch.test.tsx create mode 100644 ui/components/compliance/compliance-charts/heatmap-chart.test.tsx create mode 100644 ui/components/icons/lighthouse-icon.test.tsx create mode 100644 ui/components/shadcn/combobox/combobox.test.tsx create mode 100644 ui/components/shadcn/discovery-callout/discovery-callout.test.tsx create mode 100644 ui/components/shadcn/discovery-callout/discovery-callout.tsx delete mode 100644 ui/components/shadcn/drawer.tsx create mode 100644 ui/components/shadcn/side-panel/side-panel.tsx create mode 100644 ui/components/shadcn/tooltip.test.tsx create mode 100644 ui/components/side-panel/detail-side-panel.test.tsx create mode 100644 ui/components/side-panel/detail-side-panel.tsx create mode 100644 ui/components/side-panel/global-side-panel.test.tsx create mode 100644 ui/components/side-panel/global-side-panel.tsx create mode 100644 ui/components/side-panel/index.ts create mode 100644 ui/components/side-panel/retryable-lazy-content.test.tsx create mode 100644 ui/components/side-panel/retryable-lazy-content.tsx create mode 100644 ui/components/side-panel/side-panel-error-boundary.tsx create mode 100644 ui/components/side-panel/side-panel-tabs.tsx create mode 100644 ui/components/side-panel/side-panel-trigger.test.tsx create mode 100644 ui/components/side-panel/side-panel-trigger.tsx create mode 100644 ui/hooks/use-media-query.ts create mode 100644 ui/lib/lighthouse/prompts.test.ts create mode 100644 ui/lib/lighthouse/prompts.ts create mode 100644 ui/lib/ui-layout.ts create mode 100644 ui/store/__tests__/side-panel.test.ts create mode 100644 ui/store/side-panel.ts diff --git a/ui/app/(prowler)/_overview/_components/lighthouse-overview-banner.test.tsx b/ui/app/(prowler)/_overview/_components/lighthouse-overview-banner.test.tsx index 62bb053f3a..255ac50c63 100644 --- a/ui/app/(prowler)/_overview/_components/lighthouse-overview-banner.test.tsx +++ b/ui/app/(prowler)/_overview/_components/lighthouse-overview-banner.test.tsx @@ -1,39 +1,52 @@ import { render, screen } from "@testing-library/react"; import { describe, expect, it } from "vitest"; +import { LIGHTHOUSE_OVERVIEW_BANNER_HREF } from "../_lib/lighthouse-banner"; import { LighthouseOverviewBanner } from "./lighthouse-overview-banner"; -const REMEDIATION_PROMPT = - "Find and guide me to remediate which actually matters. What do I have to do today to be secure?"; -const REMEDIATION_HREF = `/lighthouse?prompt=${encodeURIComponent( - REMEDIATION_PROMPT, -)}` as const; - describe("LighthouseOverviewBanner", () => { - it("renders Toni copy and links to Lighthouse when connected", () => { + it("renders Toni copy and opens a prompted chat when connected", () => { // Given / When - render(); + render( + , + ); // Then const link = screen.getByRole("link", { - name: /Find and remediate which actually matters\./, + name: /Find and remediate what actually matters\./, }); - expect(link).toHaveAttribute("href", REMEDIATION_HREF); + expect(link).toHaveAttribute("href", LIGHTHOUSE_OVERVIEW_BANNER_HREF.CHAT); expect(link).toHaveTextContent("Lighthouse AI"); - expect(link).toHaveTextContent( - "Find and remediate which actually matters.", - ); + expect(link).toHaveTextContent("Find and remediate what actually matters."); }); it("links to Lighthouse settings when no connected configuration exists", () => { // Given / When - render(); + render( + , + ); // Then expect( screen.getByRole("link", { - name: /Find and remediate which actually matters\./, + name: /Find and remediate what actually matters\./, }), ).toHaveAttribute("href", "/lighthouse/settings"); }); + + it("isolates its stacking so content never paints over the sticky navbar", () => { + // Given / When: the banner's inner z-10 must stay scoped to the card — + // without isolation it ties the sticky header's z-10 and wins by DOM order + render( + , + ); + + // Then + const card = screen + .getByRole("link", { name: /Find and remediate what actually matters\./ }) + .querySelector("[data-slot='card']"); + expect(card).toHaveClass("isolate"); + }); }); diff --git a/ui/app/(prowler)/_overview/_components/lighthouse-overview-banner.tsx b/ui/app/(prowler)/_overview/_components/lighthouse-overview-banner.tsx index eb2e0539fb..8bd8dea414 100644 --- a/ui/app/(prowler)/_overview/_components/lighthouse-overview-banner.tsx +++ b/ui/app/(prowler)/_overview/_components/lighthouse-overview-banner.tsx @@ -66,7 +66,9 @@ export function LighthouseOverviewBanner({ @@ -116,7 +118,7 @@ export function LighthouseOverviewBanner({ Lighthouse AI

- Find and remediate which actually matters. + Find and remediate what actually matters.

diff --git a/ui/app/(prowler)/_overview/_lib/lighthouse-banner.test.ts b/ui/app/(prowler)/_overview/_lib/lighthouse-banner.test.ts index 7668cfafac..baf5e8206f 100644 --- a/ui/app/(prowler)/_overview/_lib/lighthouse-banner.test.ts +++ b/ui/app/(prowler)/_overview/_lib/lighthouse-banner.test.ts @@ -16,7 +16,7 @@ const LIGHTHOUSE_OVERVIEW_CHAT_HREF = `/lighthouse?prompt=${encodeURIComponent( )}`; describe("resolveLighthouseOverviewBannerHref", () => { - it("routes to Lighthouse chat when any v2 configuration is connected", () => { + it("opens Lighthouse with the remediation prompt when any v2 configuration is connected", () => { // Given / When const href = resolveLighthouseOverviewBannerHref([ configuration("openai", false), diff --git a/ui/app/(prowler)/_overview/_lib/lighthouse-banner.ts b/ui/app/(prowler)/_overview/_lib/lighthouse-banner.ts index a80522bf6c..b0b0d1a08c 100644 --- a/ui/app/(prowler)/_overview/_lib/lighthouse-banner.ts +++ b/ui/app/(prowler)/_overview/_lib/lighthouse-banner.ts @@ -2,8 +2,9 @@ import type { LighthouseV2Configuration } from "@/app/(prowler)/lighthouse/_type import { LIGHTHOUSE_ROUTE } from "@/lib/lighthouse-routes"; import type { ServerActionResult } from "@/types/server-actions"; +// Prefilled in the composer when the overview banner opens Lighthouse. export const LIGHTHOUSE_OVERVIEW_PROMPT = - "Find and guide me to remediate which actually matters. What do I have to do today to be secure?"; + "Find and guide me to remediate what actually matters. What do I have to do today to be secure?"; export const LIGHTHOUSE_OVERVIEW_BANNER_HREF = { CHAT: `${LIGHTHOUSE_ROUTE.CHAT}?prompt=${encodeURIComponent(LIGHTHOUSE_OVERVIEW_PROMPT)}`, diff --git a/ui/app/(prowler)/layout.tsx b/ui/app/(prowler)/layout.tsx index 801b1ea28f..f657f32199 100644 --- a/ui/app/(prowler)/layout.tsx +++ b/ui/app/(prowler)/layout.tsx @@ -16,6 +16,7 @@ import { RuntimePublicConfig } from "@/components/runtime-config/runtime-public- import { NavigationProgress } from "@/components/shadcn/navigation-progress"; import { Toaster } from "@/components/shadcn/toast"; import { TaskPollingWatcher } from "@/components/shared/task-polling-watcher"; +import { GlobalSidePanel } from "@/components/side-panel"; import { fontMono, fontSans } from "@/config/fonts"; import { siteConfig } from "@/config/site"; import { isCloud } from "@/lib/shared/env"; @@ -107,6 +108,9 @@ export default async function RootLayout({ )} {children} + {/* Always mounted: it hosts the detail (finding/resource) views in + every deployment; the AI tab inside is cloud-gated on its own. */} + {/* Resumes persisted background-task polling (e.g. cross-provider PDF generation) so completion toasts survive hard reloads. */} diff --git a/ui/app/(prowler)/lighthouse/_components/chat/composer.tsx b/ui/app/(prowler)/lighthouse/_components/chat/composer.tsx index 62d39cfb05..b9f854dbdb 100644 --- a/ui/app/(prowler)/lighthouse/_components/chat/composer.tsx +++ b/ui/app/(prowler)/lighthouse/_components/chat/composer.tsx @@ -118,7 +118,9 @@ function ChatComposer({ aria-label="Message" value={input} onChange={(event) => onInputChange(event.target.value)} - disabled={!canSend} + // Typing stays available while a response streams (sending is what is + // gated, via canSend); only a disconnected provider blocks the input. + disabled={!selectedConfigurationConnected} placeholder={ selectedConfigurationConnected ? "Ask a question" diff --git a/ui/app/(prowler)/lighthouse/_components/chat/empty-state.tsx b/ui/app/(prowler)/lighthouse/_components/chat/empty-state.tsx index 021be182e2..b84c71b3b7 100644 --- a/ui/app/(prowler)/lighthouse/_components/chat/empty-state.tsx +++ b/ui/app/(prowler)/lighthouse/_components/chat/empty-state.tsx @@ -5,6 +5,7 @@ import { type ReactNode, type SubmitEvent } from "react"; import { LighthouseIconWithAura } from "@/components/icons"; import { Button } from "@/components/shadcn/button/button"; +import { cn } from "@/lib/utils"; import { ChatComposerPanel } from "./composer"; import { DecryptedText } from "./decrypted-text"; @@ -45,34 +46,58 @@ interface ChatEmptyStateProps { onInputChange: (value: string) => void; onSubmit: (event: SubmitEvent) => void; onSubmitText: (text: string) => Promise; + footer?: ReactNode; + // Side-panel variant: smaller logo and static (non-animated) copy — the + // decrypt animation reflows multi-line text in narrow widths. + compact?: boolean; } export function ChatEmptyState({ onInputChange, + footer, + compact = false, ...composerPanelProps }: ChatEmptyStateProps) { return (
- +
-

- +

+ {compact ? ( + "Find and remediate what actually matters." + ) : ( + + )}

-

- +

+ {compact ? ( + "What do you want to know today?" + ) : ( + + )}

@@ -101,6 +126,7 @@ export function ChatEmptyState({ ); })}
+ {footer ?
{footer}
: null}
); diff --git a/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-chat-store-provider.tsx b/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-chat-store-provider.tsx new file mode 100644 index 0000000000..55866304bb --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-chat-store-provider.tsx @@ -0,0 +1,41 @@ +"use client"; + +import { createContext, type ReactNode, useContext } from "react"; +import { useStore } from "zustand"; + +import type { + LighthouseChatState, + LighthouseChatStore, +} from "@/app/(prowler)/lighthouse/_lib/chat-store"; + +const LighthouseChatStoreContext = createContext( + null, +); + +interface LighthouseChatStoreProviderProps { + store: LighthouseChatStore; + children: ReactNode; +} + +export function LighthouseChatStoreProvider({ + store, + children, +}: LighthouseChatStoreProviderProps) { + return ( + + {children} + + ); +} + +export function useLighthouseChatStore( + selector: (state: LighthouseChatState) => T, +): T { + const store = useContext(LighthouseChatStoreContext); + if (!store) { + throw new Error( + "useLighthouseChatStore must be used within LighthouseChatStoreProvider", + ); + } + return useStore(store, selector); +} diff --git a/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-page.test.tsx b/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-page.test.tsx index 5642762901..b6c5890db4 100644 --- a/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-page.test.tsx +++ b/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-page.test.tsx @@ -3,10 +3,18 @@ import userEvent from "@testing-library/user-event"; import { type ReactNode } from "react"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { + getOrCreatePanelChatStore, + resetPanelChatStoreForTests, +} from "@/app/(prowler)/lighthouse/_lib/panel-chat-store"; import { LIGHTHOUSE_V2_SESSIONS_CHANGED_EVENT, notifyLighthouseV2SessionArchived, } from "@/app/(prowler)/lighthouse/_lib/session-events"; +import { + type MockEventSource, + stubEventSource, +} from "@/app/(prowler)/lighthouse/_lib/testing/event-source-mock"; import type { LighthouseV2Configuration, LighthouseV2Message, @@ -16,51 +24,8 @@ import type { import { LighthouseV2ChatPage } from "./lighthouse-v2-chat-page"; -// Controllable EventSource mock: records each instance so tests can drive -// named SSE events and connection failures, while still being a vi.fn so -// `expect(EventSource).toHaveBeenCalledWith(...)` keeps working. -interface MockEventSource { - url: string; - readyState: number; - onerror: ((event: Event) => void) | null; - listeners: Map>; - addEventListener: (type: string, cb: EventListener) => void; - close: ReturnType; - emit: (type: string, data: unknown) => void; - fail: (readyState: number) => void; -} - let eventSources: MockEventSource[] = []; -function stubEventSource() { - eventSources = []; - const EventSourceMock = vi.fn(function (this: MockEventSource, url: string) { - this.url = url; - this.readyState = 0; - this.onerror = null; - this.listeners = new Map(); - this.addEventListener = (type: string, cb: EventListener) => { - const set = this.listeners.get(type) ?? new Set(); - set.add(cb); - this.listeners.set(type, set); - }; - this.close = vi.fn(() => { - this.readyState = 2; - }); - this.emit = (type: string, data: unknown) => { - const event = new MessageEvent(type, { data: JSON.stringify(data) }); - this.listeners.get(type)?.forEach((cb) => cb(event)); - }; - this.fail = (readyState: number) => { - this.readyState = readyState; - this.onerror?.(new Event("error")); - }; - eventSources.push(this); - }); - Object.assign(EventSourceMock, { CONNECTING: 0, OPEN: 1, CLOSED: 2 }); - vi.stubGlobal("EventSource", EventSourceMock); -} - const { createSessionMock, getMessagesMock, @@ -142,11 +107,8 @@ describe("LighthouseV2ChatPage", () => { getMessagesMock.mockReset(); sendMessageMock.mockReset(); updateConfigurationMock.mockReset(); - // The mock never fires "open": the client must POST the message without - // waiting for it (the backend sends no bytes until the worker emits, which - // only happens after the POST). This is the regression guard for the - // open-gate deadlock. - stubEventSource(); + resetPanelChatStoreForTests(); + eventSources = stubEventSource(); createSessionMock.mockResolvedValue({ data: { @@ -185,6 +147,62 @@ describe("LighthouseV2ChatPage", () => { ).toHaveAttribute("href", "/lighthouse/settings"); }); + it("renders the empty-state headline with correct wording", () => { + // Given / When + renderPage(); + + // Then + expect( + screen.getByText("Find and remediate what actually matters."), + ).toBeInTheDocument(); + }); + + it("continues using the panel chat store on the full-page surface", () => { + // Given: the panel owns an in-progress new chat with a draft + const panelStore = getOrCreatePanelChatStore({ + configurations, + modelsByProvider, + supportedProviders, + }); + panelStore.getState().setInput("Draft from the side panel"); + + // When + renderPage(); + + // Then: the page owns the same live store, not a stale server snapshot + const input = screen.getByRole("textbox", { name: "Message" }); + expect(input).toHaveValue("Draft from the side panel"); + act(() => panelStore.getState().setInput("Updated after navigation")); + expect(input).toHaveValue("Updated after navigation"); + }); + + it("enables session URL sync after claiming a new panel chat", async () => { + // Given: the panel owns a new chat before full-page navigation + const user = userEvent.setup(); + getOrCreatePanelChatStore({ + configurations, + modelsByProvider, + supportedProviders, + }); + const replaceStateSpy = vi.spyOn(window.history, "replaceState"); + renderPage(); + + // When: the first page message creates its session + await user.type( + screen.getByRole("textbox", { name: "Message" }), + ["Summarize findings", "{Enter}"].join(""), + ); + + // Then: the claimed panel store now follows the full-page URL contract + await waitFor(() => + expect(replaceStateSpy).toHaveBeenCalledWith( + window.history.state, + "", + "/lighthouse?session=session-1", + ), + ); + }); + it("shows the current OpenAI model without a selector when OpenAI is the only connected provider", () => { // Given / When renderPage({ @@ -208,7 +226,7 @@ describe("LighthouseV2ChatPage", () => { expect(within(currentModel).getByText("GPT-5.1")).toBeInTheDocument(); }); - it("defaults to gpt-5.5 when OpenAI has no remembered model", () => { + it("defaults to gpt-5.6-terra when OpenAI has no remembered model", () => { // Given / When renderPage({ configurations: [ @@ -216,15 +234,20 @@ describe("LighthouseV2ChatPage", () => { { ...configurations[1], connected: false }, ], modelsByProvider: { - openai: [model("gpt-4.1", "GPT-4.1"), model("gpt-5.5", "GPT-5.5")], + openai: [ + model("gpt-4.1", "GPT-4.1"), + model("gpt-5.6-terra", "GPT-5.6 Terra"), + ], bedrock: [model("anthropic.claude-4")], "openai-compatible": [model("llama-3.3")], }, }); // Then - const currentModel = screen.getByLabelText("Current model: OpenAI GPT-5.5"); - expect(within(currentModel).getByText("GPT-5.5")).toBeInTheDocument(); + const currentModel = screen.getByLabelText( + "Current model: OpenAI GPT-5.6 Terra", + ); + expect(within(currentModel).getByText("GPT-5.6 Terra")).toBeInTheDocument(); }); it("uses the AWS onboarding quick prompt instead of the docs prompt", async () => { @@ -251,7 +274,7 @@ describe("LighthouseV2ChatPage", () => { it("prefills the overview remediation prompt without starting a conversation", () => { // Given const initialPrompt = - "Find and guide me to remediate which actually matters. What do I have to do today to be secure?"; + "Find and guide me to remediate what actually matters. What do I have to do today to be secure?"; // When renderPage({ initialPrompt }); @@ -688,6 +711,28 @@ describe("LighthouseV2ChatPage", () => { expect(screen.getByText("Existing answer")).toBeInTheDocument(); }); + it("lets the user draft the next message while a response is streaming, without sending it", async () => { + // Given: a message is in flight (spinner replaces the send button) + const user = userEvent.setup(); + renderPage(); + await user.type( + screen.getByRole("textbox", { name: "Message" }), + ["Summarize findings", "{Enter}"].join(""), + ); + await waitFor(() => expect(sendMessageMock).toHaveBeenCalledTimes(1)); + expect( + screen.getByRole("status", { name: "Generating response" }), + ).toBeInTheDocument(); + + // When: the user types a follow-up and presses Enter mid-stream + const input = screen.getByRole("textbox", { name: "Message" }); + await user.type(input, ["Next question", "{Enter}"].join("")); + + // Then: the draft is kept in the input and no second message is sent + expect(input).toHaveValue("Next question"); + expect(sendMessageMock).toHaveBeenCalledTimes(1); + }); + it("surfaces a connection error when the stream closes without retrying", async () => { // Given const user = userEvent.setup(); diff --git a/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-page.tsx b/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-page.tsx index 3062874649..14b1e18b9d 100644 --- a/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-page.tsx +++ b/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-page.tsx @@ -1,61 +1,33 @@ "use client"; -import { type SubmitEvent, useRef, useState } from "react"; +import { useState } from "react"; import { - createLighthouseV2Session, - getLighthouseV2Messages, - sendLighthouseV2Message, - updateLighthouseV2Configuration, -} from "@/app/(prowler)/lighthouse/_actions"; + createLighthouseChatStore, + type LighthouseChatStore, +} from "@/app/(prowler)/lighthouse/_lib/chat-store"; import { - Conversation, - ConversationContent, - ConversationScrollButton, -} from "@/app/(prowler)/lighthouse/_components/ai-elements/conversation"; + getPanelChatStoreForSession, + isPanelChatStore, +} from "@/app/(prowler)/lighthouse/_lib/panel-chat-store"; import { - createInitialLighthouseV2StreamState, - type LighthouseV2StreamState, - reduceLighthouseV2Event, -} from "@/app/(prowler)/lighthouse/_lib/event-reducer"; -import { - buildOptimisticMessage, - buildSessionTitle, -} from "@/app/(prowler)/lighthouse/_lib/messages"; -import { - buildLighthouseV2ModelSelectionValue, - type LighthouseV2ModelSelection, - parseLighthouseV2ModelSelectionValue, -} from "@/app/(prowler)/lighthouse/_lib/model-selection"; -import { - LIGHTHOUSE_V2_NEW_CHAT_EVENT, - LIGHTHOUSE_V2_SESSION_ARCHIVED_EVENT, - notifyLighthouseV2SessionsChanged, + onLighthouseV2NewChat, + onLighthouseV2SessionArchived, } from "@/app/(prowler)/lighthouse/_lib/session-events"; -import { parseStreamEvent } from "@/app/(prowler)/lighthouse/_lib/stream-event-parser"; -import { buildLighthouseV2StreamUrl } from "@/app/(prowler)/lighthouse/_lib/stream-url"; -import { - LIGHTHOUSE_V2_PROVIDER_TYPE, - LIGHTHOUSE_V2_SSE_EVENT, - type LighthouseV2Configuration, - type LighthouseV2Message, - type LighthouseV2ProviderType, - type LighthouseV2SSEEvent, - type LighthouseV2SupportedModel, - type LighthouseV2SupportedProvider, +import type { + LighthouseV2Configuration, + LighthouseV2Message, + LighthouseV2ProviderType, + LighthouseV2SupportedModel, + LighthouseV2SupportedProvider, } from "@/app/(prowler)/lighthouse/_types"; -import { Card } from "@/components/shadcn"; -import { - Combobox, - type ComboboxGroup, -} from "@/components/shadcn/combobox/combobox"; import { useMountEffect } from "@/hooks/use-mount-effect"; -import { ProviderIcon } from "../config/provider-icon"; -import { ChatComposerPanel } from "./composer"; -import { ChatEmptyState } from "./empty-state"; -import { MessageBubble } from "./message-bubble"; -import { StreamingAssistantMessage } from "./streaming-message"; +import { LighthouseChatStoreProvider } from "./lighthouse-chat-store-provider"; +import { + LIGHTHOUSE_CHAT_SURFACE, + LighthouseV2ChatView, +} from "./lighthouse-v2-chat-view"; interface LighthouseV2ChatPageProps { configurations: LighthouseV2Configuration[]; @@ -79,572 +51,61 @@ export function LighthouseV2ChatPage({ initialPrompt, initialError, }: LighthouseV2ChatPageProps) { - const eventSourceRef = useRef(null); - const connectedConfigurations = configurations.filter( - (configuration) => configuration.connected === true, - ); - const initialModelSelection = resolveInitialModelSelection( - connectedConfigurations, - modelsByProvider, - ); - const [selectedModelSelection, setSelectedModelSelection] = - useState(initialModelSelection); - const [modelPreferenceSaving, setModelPreferenceSaving] = useState(false); - const [activeSessionId, setActiveSessionId] = useState( - initialSessionId ?? null, - ); - // Mirror for window listeners registered on mount, whose closures would - // otherwise keep the first render's activeSessionId. - const activeSessionIdRef = useRef(initialSessionId ?? null); - const [messages, setMessages] = useState(initialMessages); - const [input, setInput] = useState(initialPrompt ?? ""); - const [feedback, setFeedback] = useState(initialError ?? null); - const [blockedByConflict, setBlockedByConflict] = useState(false); - const [isSubmitting, setIsSubmitting] = useState(false); - const [lastSubmittedText, setLastSubmittedText] = useState( - null, - ); - const [streamState, setStreamState] = useState(() => - createInitialLighthouseV2StreamState(), - ); - const selectedConfiguration = selectedModelSelection - ? connectedConfigurations.find( - (configuration) => - configuration.providerType === selectedModelSelection.providerType, - ) - : undefined; - const modelSelectorGroups = buildModelSelectorGroups( - connectedConfigurations, - modelsByProvider, - supportedProviders, - ); - const showStaticOpenAIModel = - isOnlyConnectedProvider( - connectedConfigurations, - LIGHTHOUSE_V2_PROVIDER_TYPE.OPENAI, - ) && - selectedModelSelection?.providerType === LIGHTHOUSE_V2_PROVIDER_TYPE.OPENAI; - const selectedModelLabel = selectedModelSelection - ? getModelSelectionLabel(selectedModelSelection, modelsByProvider) - : "No model selected"; - const selectedProviderName = selectedModelSelection - ? getProviderDisplayName( - selectedModelSelection.providerType, - supportedProviders, - ) - : "OpenAI"; - const selectedModelValue = selectedModelSelection - ? buildLighthouseV2ModelSelectionValue( - selectedModelSelection.providerType, - selectedModelSelection.modelId, - ) - : ""; - - const canSend = - selectedConfiguration?.connected === true && - Boolean(selectedModelSelection?.modelId) && - !streamState.activeTaskId && - !blockedByConflict && - !isSubmitting; - - const refreshMessages = async (sessionId: string): Promise => { - const result = await getLighthouseV2Messages(sessionId); - // The fetch is async, so a reset (new chat, or archiving this session) can - // land while it is in flight. Drop the stale result instead of repopulating - // a chat that no longer points at this session. - if (sessionId !== activeSessionIdRef.current) return false; - if ("data" in result) { - setMessages(result.data); - return true; - } - return false; - }; - - const closeStream = () => { - eventSourceRef.current?.close(); - eventSourceRef.current = null; - }; - - const handleTerminalEvent = async ( - sessionId: string, - event: LighthouseV2SSEEvent, - ) => { - if ( - event.type === LIGHTHOUSE_V2_SSE_EVENT.MESSAGE_END || - event.type === LIGHTHOUSE_V2_SSE_EVENT.ERROR - ) { - closeStream(); - setBlockedByConflict(false); - if (event.type === LIGHTHOUSE_V2_SSE_EVENT.ERROR) { - setFeedback(event.detail || "Agent run failed."); - } - const refreshed = await refreshMessages(sessionId); - if (refreshed) { - setStreamState(createInitialLighthouseV2StreamState()); - } - notifyLighthouseV2SessionsChanged(); - } - }; - - const startStream = (streamUrl: string, sessionId: string) => { - closeStream(); - const source = new EventSource(streamUrl); - eventSourceRef.current = source; - - const applyEvent = (event: LighthouseV2SSEEvent) => { - setStreamState((current) => reduceLighthouseV2Event(current, event)); - void handleTerminalEvent(sessionId, event); - }; - - source.addEventListener("message.delta", (event) => - applyEvent( - parseStreamEvent(event, LIGHTHOUSE_V2_SSE_EVENT.MESSAGE_DELTA), - ), + // Navigation from the side panel transfers its live store so drafts, + // streamed output and the open EventSource continue without a snapshot gap. + // Direct/session-mismatched navigation builds the normal page-owned store. + const [store] = useState(() => { + const panelStore = + initialPrompt === undefined + ? getPanelChatStoreForSession(initialSessionId) + : null; + return ( + panelStore ?? + createLighthouseChatStore({ + config: { configurations, modelsByProvider, supportedProviders }, + syncUrlToSession: true, + initialSessionId, + initialMessages, + initialInput: initialPrompt, + initialError, + }) ); - source.addEventListener("tool_call.start", (event) => - applyEvent( - parseStreamEvent(event, LIGHTHOUSE_V2_SSE_EVENT.TOOL_CALL_START), - ), - ); - source.addEventListener("tool_call.end", (event) => - applyEvent( - parseStreamEvent(event, LIGHTHOUSE_V2_SSE_EVENT.TOOL_CALL_END), - ), - ); - source.addEventListener("message.end", (event) => - applyEvent(parseStreamEvent(event, LIGHTHOUSE_V2_SSE_EVENT.MESSAGE_END)), - ); - source.addEventListener("error", (event) => { - if (event instanceof MessageEvent) { - applyEvent(parseStreamEvent(event, LIGHTHOUSE_V2_SSE_EVENT.ERROR)); - } - }); - // The browser fires `onerror` both on a transient drop (it auto-reconnects) - // and on a non-retryable failure such as a 401/404 on the SSE GET. Only the - // latter leaves the source CLOSED, so surface a connection error there and - // treat everything else as a reconnect. - source.onerror = () => { - if (eventSourceRef.current !== source) return; - if (source.readyState === EventSource.CLOSED) { - closeStream(); - setFeedback("Unable to connect to the response stream."); - } - setStreamState((current) => - reduceLighthouseV2Event(current, { type: "disconnect" }), - ); - }; - }; + }); + const reusesPanelStore = isPanelChatStore(store); - const ensureSession = async (text: string) => { - if (activeSessionId) { - return activeSessionId; + // A reused panel store returns to panel URL semantics when the page leaves; + // a page-owned store closes its EventSource as before. + useMountEffect(() => { + if (reusesPanelStore) { + store.getState().setSessionUrlSyncEnabled(true); } - - const title = buildSessionTitle(text); - const result = await createLighthouseV2Session(title); - if ("error" in result) { - setFeedback(result.error); - return null; - } - - // Update the URL in place (not router.push) so the force-dynamic server - // component is NOT re-run mid-submit. A re-run would change `key` in - // page.tsx and remount this component, tearing down the open EventSource. - replaceLighthouseV2SessionUrl(result.data.id); - setActiveSessionId(result.data.id); - activeSessionIdRef.current = result.data.id; - notifyLighthouseV2SessionsChanged(); - return result.data.id; - }; - - const submitMessage = async (text: string) => { - const trimmedText = text.trim(); - if (!trimmedText) return; - if (!selectedModelSelection) { - setFeedback("Select a model before sending a message."); - return; - } - if (!canSend) return; - - setIsSubmitting(true); - try { - const sessionId = await ensureSession(trimmedText); - if (!sessionId) return; - - const provisionalTaskId = `pending-${Date.now()}`; - setFeedback(null); - setBlockedByConflict(false); - setLastSubmittedText(trimmedText); - setInput(""); - setMessages((current) => [ - ...current, - buildOptimisticMessage("user", trimmedText), - ]); - setStreamState(createInitialLighthouseV2StreamState(provisionalTaskId)); - - // Subscribe to the same-origin SSE proxy BEFORE sending the message: the - // backend has no replay buffer, so the listener must be attached before - // the worker starts emitting. - startStream(buildLighthouseV2StreamUrl(sessionId), sessionId); - - const result = await sendLighthouseV2Message({ - sessionId, - text: trimmedText, - provider: selectedModelSelection.providerType, - model: selectedModelSelection.modelId, - }); - - if ("error" in result) { - closeStream(); - setStreamState(createInitialLighthouseV2StreamState()); - setFeedback(result.error); - if (result.status === 409) { - setBlockedByConflict(true); - await refreshMessages(sessionId); - } + return () => { + if (reusesPanelStore) { + store.getState().setSessionUrlSyncEnabled(false); return; } - - setStreamState((current) => - current.activeTaskId === provisionalTaskId - ? { ...current, activeTaskId: result.data.task.id } - : current, - ); - notifyLighthouseV2SessionsChanged(); - } finally { - setIsSubmitting(false); - } - }; - - const handleModelValueChange = (value: string) => { - const selection = parseLighthouseV2ModelSelectionValue(value); - if (!selection) return; - void handleModelSelectionChange(selection); - }; - - const handleModelSelectionChange = async ( - selection: LighthouseV2ModelSelection, - ) => { - // The selection drives the model used for the next message, so it stays - // applied even if persisting it as the provider's default model fails — - // reverting it would make a connected provider unusable when the save 4xxs. - setSelectedModelSelection(selection); - setFeedback(null); - - const configId = connectedConfigurations.find( - (configuration) => configuration.providerType === selection.providerType, - )?.id; - if (!configId) return; - - setModelPreferenceSaving(true); - - const result = await updateLighthouseV2Configuration(configId, { - defaultModel: selection.modelId, - }); - - setModelPreferenceSaving(false); - - if ("error" in result) { - setFeedback(result.error); - } - }; - - const handleSubmit = (event: SubmitEvent) => { - event.preventDefault(); - void submitMessage(input); - }; - - // Close any open EventSource when the chat unmounts (e.g. route/session change). - useMountEffect(() => { - return () => closeStream(); + store.getState().destroy(); + }; }); - const resetToNewChat = () => { - closeStream(); - setActiveSessionId(null); - activeSessionIdRef.current = null; - setMessages([]); - setInput(""); - setFeedback(null); - setBlockedByConflict(false); - setIsSubmitting(false); - setLastSubmittedText(null); - setStreamState(createInitialLighthouseV2StreamState()); - replaceLighthouseV2SessionUrl(null); - }; - // The sidebar "+" can't rely on routing to reset the latest conversation (its // URL was set via replaceState, invisible to Next's router), so reset in place. useMountEffect(() => { - window.addEventListener(LIGHTHOUSE_V2_NEW_CHAT_EVENT, resetToNewChat); - return () => - window.removeEventListener(LIGHTHOUSE_V2_NEW_CHAT_EVENT, resetToNewChat); + const unsubscribeNewChat = onLighthouseV2NewChat(() => + store.getState().resetToNewChat(), + ); + const unsubscribeSessionArchived = onLighthouseV2SessionArchived( + (sessionId) => store.getState().handleSessionArchived(sessionId), + ); + return () => { + unsubscribeNewChat(); + unsubscribeSessionArchived(); + }; }); - // Archiving deletes the session; when it's the open one, fall back to a new - // chat instead of leaving a dead conversation and its URL on screen. - useMountEffect(() => { - const handleSessionArchived = (event: Event) => { - const archivedId = (event as CustomEvent<{ sessionId: string }>).detail - ?.sessionId; - if (archivedId && archivedId === activeSessionIdRef.current) { - resetToNewChat(); - } - }; - - window.addEventListener( - LIGHTHOUSE_V2_SESSION_ARCHIVED_EVENT, - handleSessionArchived, - ); - return () => - window.removeEventListener( - LIGHTHOUSE_V2_SESSION_ARCHIVED_EVENT, - handleSessionArchived, - ); - }); - - const hasLiveAssistantActivity = - Boolean(streamState.activeTaskId) || - Boolean(streamState.assistantText) || - streamState.toolCalls.length > 0; - const hasConversation = messages.length > 0 || hasLiveAssistantActivity; - - const composerPanelProps = { - feedback, - canRetry: - streamState.status === "disconnected" && lastSubmittedText !== null, - onRetry: () => - lastSubmittedText ? void submitMessage(lastSubmittedText) : undefined, - onDismissFeedback: () => setFeedback(null), - canSend, - input, - isStreaming: Boolean(streamState.activeTaskId), - modelSelector: showStaticOpenAIModel ? ( - - ) : ( -
- -
- ), - selectedConfigurationConnected: selectedConfiguration?.connected === true, - onInputChange: setInput, - onSubmit: handleSubmit, - onSubmitText: submitMessage, - }; - return ( - - {hasConversation ? ( -
-
- - - {messages.map((message) => ( - - ))} - {hasLiveAssistantActivity && ( - - )} - - - -
-
-
-
- -
-
-
- ) : ( - - )} - - ); -} - -function replaceLighthouseV2SessionUrl(sessionId: string | null) { - const url = sessionId - ? `/lighthouse?session=${encodeURIComponent(sessionId)}` - : "/lighthouse"; - - window.history.replaceState(window.history.state, "", url); -} - -function CurrentModelDisplay({ - provider, - providerName, - modelName, -}: { - provider: LighthouseV2ProviderType; - providerName: string; - modelName: string; -}) { - return ( -
- - - {providerName} - - - {modelName} - -
- ); -} - -// Fixed precedence used to pick which connected provider opens the chat. Any -// provider outside this list keeps its relative order behind these. -const LIGHTHOUSE_V2_PROVIDER_PRIORITY = [ - LIGHTHOUSE_V2_PROVIDER_TYPE.OPENAI, - LIGHTHOUSE_V2_PROVIDER_TYPE.BEDROCK, - LIGHTHOUSE_V2_PROVIDER_TYPE.OPENAI_COMPATIBLE, -] as const; - -// Fallback model per provider when the configuration has no remembered model. -const LIGHTHOUSE_V2_PREFERRED_DEFAULT_MODEL: Partial< - Record -> = { - [LIGHTHOUSE_V2_PROVIDER_TYPE.OPENAI]: "gpt-5.5", -}; - -function resolveInitialModelSelection( - connectedConfigurations: LighthouseV2Configuration[], - modelsByProvider: Record< - LighthouseV2ProviderType, - LighthouseV2SupportedModel[] - >, -): LighthouseV2ModelSelection | null { - const priorityIndex = (providerType: LighthouseV2ProviderType) => { - const index = LIGHTHOUSE_V2_PROVIDER_PRIORITY.indexOf(providerType); - return index === -1 ? LIGHTHOUSE_V2_PROVIDER_PRIORITY.length : index; - }; - // Stable sort keeps providers outside the priority list in their original order. - const orderedConfigurations = [...connectedConfigurations].sort( - (a, b) => priorityIndex(a.providerType) - priorityIndex(b.providerType), - ); - - for (const configuration of orderedConfigurations) { - const providerModels = modelsByProvider[configuration.providerType] ?? []; - if (providerModels.length === 0) continue; - // Prefer the provider's remembered model when it is still supported, then - // the provider's preferred default, then the first supported model. - const rememberedModel = providerModels.find( - (model) => model.id === configuration.defaultModel, - ); - const preferredModel = providerModels.find( - (model) => - model.id === - LIGHTHOUSE_V2_PREFERRED_DEFAULT_MODEL[configuration.providerType], - ); - return { - providerType: configuration.providerType, - modelId: (rememberedModel ?? preferredModel ?? providerModels[0]).id, - }; - } - - return null; -} - -function buildModelSelectorGroups( - connectedConfigurations: LighthouseV2Configuration[], - modelsByProvider: Record< - LighthouseV2ProviderType, - LighthouseV2SupportedModel[] - >, - supportedProviders: LighthouseV2SupportedProvider[], -): ComboboxGroup[] { - const groups: ComboboxGroup[] = []; - - for (const provider of supportedProviders) { - const configuration = connectedConfigurations.find( - (item) => item.providerType === provider.id, - ); - if (!configuration) continue; - - const options = (modelsByProvider[configuration.providerType] ?? []).map( - (model) => ({ - value: buildLighthouseV2ModelSelectionValue( - configuration.providerType, - model.id, - ), - label: model.name, - }), - ); - - if (options.length === 0) continue; - - groups.push({ - heading: provider.name, - options, - }); - } - - return groups; -} - -function isOnlyConnectedProvider( - connectedConfigurations: LighthouseV2Configuration[], - providerType: LighthouseV2ProviderType, -) { - return ( - connectedConfigurations.length === 1 && - connectedConfigurations[0]?.providerType === providerType - ); -} - -function getModelSelectionLabel( - selection: LighthouseV2ModelSelection, - modelsByProvider: Record< - LighthouseV2ProviderType, - LighthouseV2SupportedModel[] - >, -) { - return ( - modelsByProvider[selection.providerType]?.find( - (model) => model.id === selection.modelId, - )?.name ?? selection.modelId - ); -} - -function getProviderDisplayName( - providerType: LighthouseV2ProviderType, - supportedProviders: LighthouseV2SupportedProvider[], -) { - return ( - supportedProviders.find((provider) => provider.id === providerType)?.name ?? - providerType + + + ); } diff --git a/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-view.tsx b/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-view.tsx new file mode 100644 index 0000000000..0060dbe44e --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_components/chat/lighthouse-v2-chat-view.tsx @@ -0,0 +1,339 @@ +"use client"; + +import { type ReactNode, type SubmitEvent } from "react"; + +import { + Conversation, + ConversationContent, + ConversationScrollButton, +} from "@/app/(prowler)/lighthouse/_components/ai-elements/conversation"; +import { selectLighthouseChatCanSend } from "@/app/(prowler)/lighthouse/_lib/chat-store"; +import { LIGHTHOUSE_V2_STREAM_STATUS } from "@/app/(prowler)/lighthouse/_lib/event-reducer"; +import { + buildLighthouseV2ModelSelectionValue, + type LighthouseV2ModelSelection, + parseLighthouseV2ModelSelectionValue, +} from "@/app/(prowler)/lighthouse/_lib/model-selection"; +import { + LIGHTHOUSE_V2_PROVIDER_TYPE, + type LighthouseV2Configuration, + type LighthouseV2ProviderType, + type LighthouseV2SupportedModel, + type LighthouseV2SupportedProvider, +} from "@/app/(prowler)/lighthouse/_types"; +import { Card } from "@/components/shadcn"; +import { + Combobox, + type ComboboxGroup, +} from "@/components/shadcn/combobox/combobox"; +import { Skeleton } from "@/components/shadcn/skeleton/skeleton"; + +import { ProviderIcon } from "../config/provider-icon"; +import { ChatComposerPanel } from "./composer"; +import { ChatEmptyState } from "./empty-state"; +import { useLighthouseChatStore } from "./lighthouse-chat-store-provider"; +import { MessageBubble } from "./message-bubble"; +import { StreamingAssistantMessage } from "./streaming-message"; + +export const LIGHTHOUSE_CHAT_SURFACE = { + PAGE: "page", + PANEL: "panel", +} as const; + +export type LighthouseChatSurface = + (typeof LIGHTHOUSE_CHAT_SURFACE)[keyof typeof LIGHTHOUSE_CHAT_SURFACE]; + +interface LighthouseV2ChatViewProps { + surface: LighthouseChatSurface; + emptyStateFooter?: ReactNode; +} + +export function LighthouseV2ChatView({ + surface, + emptyStateFooter, +}: LighthouseV2ChatViewProps) { + // Whole-store subscription is intentional: the view renders most of the state and selectLighthouseChatCanSend takes full state. + const state = useLighthouseChatStore((current) => current); + const { + config, + messages, + streamState, + input, + feedback, + isLoadingSession, + lastSubmittedText, + selectedModelSelection, + modelPreferenceSaving, + setInput, + dismissFeedback, + selectModel, + submitMessage, + } = state; + const { modelsByProvider, supportedProviders } = config; + const connectedConfigurations = config.configurations.filter( + (configuration) => configuration.connected === true, + ); + + const selectedConfiguration = selectedModelSelection + ? connectedConfigurations.find( + (configuration) => + configuration.providerType === selectedModelSelection.providerType, + ) + : undefined; + const modelSelectorGroups = buildModelSelectorGroups( + connectedConfigurations, + modelsByProvider, + supportedProviders, + ); + const showStaticOpenAIModel = + isOnlyConnectedProvider( + connectedConfigurations, + LIGHTHOUSE_V2_PROVIDER_TYPE.OPENAI, + ) && + selectedModelSelection?.providerType === LIGHTHOUSE_V2_PROVIDER_TYPE.OPENAI; + const selectedModelLabel = selectedModelSelection + ? getModelSelectionLabel(selectedModelSelection, modelsByProvider) + : "No model selected"; + const selectedProviderName = selectedModelSelection + ? getProviderDisplayName( + selectedModelSelection.providerType, + supportedProviders, + ) + : "OpenAI"; + const selectedModelValue = selectedModelSelection + ? buildLighthouseV2ModelSelectionValue( + selectedModelSelection.providerType, + selectedModelSelection.modelId, + ) + : ""; + + const canSend = selectLighthouseChatCanSend(state); + + const handleModelValueChange = (value: string) => { + const selection = parseLighthouseV2ModelSelectionValue(value); + if (!selection) return; + void selectModel(selection); + }; + + const handleSubmit = (event: SubmitEvent) => { + event.preventDefault(); + void submitMessage(input); + }; + + const hasLiveAssistantActivity = + Boolean(streamState.activeTaskId) || + Boolean(streamState.assistantText) || + streamState.toolCalls.length > 0; + const hasConversation = messages.length > 0 || hasLiveAssistantActivity; + + const composerPanelProps = { + feedback, + canRetry: + streamState.status === LIGHTHOUSE_V2_STREAM_STATUS.DISCONNECTED && + lastSubmittedText !== null, + onRetry: () => + lastSubmittedText ? void submitMessage(lastSubmittedText) : undefined, + onDismissFeedback: dismissFeedback, + canSend, + input, + isStreaming: Boolean(streamState.activeTaskId), + modelSelector: showStaticOpenAIModel ? ( + + ) : ( +
+ +
+ ), + selectedConfigurationConnected: selectedConfiguration?.connected === true, + onInputChange: setInput, + onSubmit: handleSubmit, + onSubmitText: submitMessage, + }; + + const chatBody = isLoadingSession ? ( + + ) : hasConversation ? ( +
+
+ + + {messages.map((message) => ( + + ))} + {hasLiveAssistantActivity && ( + + )} + + + +
+
+
+
+ +
+
+
+ ) : ( + + ); + + if (surface === LIGHTHOUSE_CHAT_SURFACE.PAGE) { + return ( + + {chatBody} + + ); + } + + return ( +
+ {chatBody} +
+ ); +} + +function SessionLoadingState() { + return ( +
+ + + + +
+ ); +} + +interface CurrentModelDisplayProps { + provider: LighthouseV2ProviderType; + providerName: string; + modelName: string; +} + +function CurrentModelDisplay({ + provider, + providerName, + modelName, +}: CurrentModelDisplayProps) { + return ( +
+ + + {providerName} + + + {modelName} + +
+ ); +} + +function buildModelSelectorGroups( + connectedConfigurations: LighthouseV2Configuration[], + modelsByProvider: Record< + LighthouseV2ProviderType, + LighthouseV2SupportedModel[] + >, + supportedProviders: LighthouseV2SupportedProvider[], +): ComboboxGroup[] { + const groups: ComboboxGroup[] = []; + + for (const provider of supportedProviders) { + const configuration = connectedConfigurations.find( + (item) => item.providerType === provider.id, + ); + if (!configuration) continue; + + const options = (modelsByProvider[configuration.providerType] ?? []).map( + (model) => ({ + value: buildLighthouseV2ModelSelectionValue( + configuration.providerType, + model.id, + ), + label: model.name, + }), + ); + + if (options.length === 0) continue; + + groups.push({ + heading: provider.name, + options, + }); + } + + return groups; +} + +function isOnlyConnectedProvider( + connectedConfigurations: LighthouseV2Configuration[], + providerType: LighthouseV2ProviderType, +) { + return ( + connectedConfigurations.length === 1 && + connectedConfigurations[0]?.providerType === providerType + ); +} + +function getModelSelectionLabel( + selection: LighthouseV2ModelSelection, + modelsByProvider: Record< + LighthouseV2ProviderType, + LighthouseV2SupportedModel[] + >, +) { + return ( + modelsByProvider[selection.providerType]?.find( + (model) => model.id === selection.modelId, + )?.name ?? selection.modelId + ); +} + +function getProviderDisplayName( + providerType: LighthouseV2ProviderType, + supportedProviders: LighthouseV2SupportedProvider[], +) { + return ( + supportedProviders.find((provider) => provider.id === providerType)?.name ?? + providerType + ); +} diff --git a/ui/app/(prowler)/lighthouse/_components/config/configuration-form.tsx b/ui/app/(prowler)/lighthouse/_components/config/configuration-form.tsx index 5bb6780f33..6ce5bab8b2 100644 --- a/ui/app/(prowler)/lighthouse/_components/config/configuration-form.tsx +++ b/ui/app/(prowler)/lighthouse/_components/config/configuration-form.tsx @@ -24,6 +24,7 @@ import { trimToNullable, } from "@/app/(prowler)/lighthouse/_lib/config"; import { formatLastChecked } from "@/app/(prowler)/lighthouse/_lib/format"; +import { notifyLighthouseV2ConfigurationsChanged } from "@/app/(prowler)/lighthouse/_lib/session-events"; import { type LighthouseV2Configuration, type LighthouseV2ConfigurationUpdateInput, @@ -138,6 +139,7 @@ export function LighthouseV2ConfigurationForm({ form.reset(getFormDefaults(result.data)); onConfigurationSaved(result.data); + notifyLighthouseV2ConfigurationsChanged(); if (shouldTestAfterSave) { await runConnectionTest(result.data.id); } @@ -178,6 +180,7 @@ export function LighthouseV2ConfigurationForm({ setDeleteOpen(false); form.reset(EMPTY_FORM_VALUES); onConfigurationDeleted(configuration.id); + notifyLighthouseV2ConfigurationsChanged(); } catch { onFeedback({ title: "Configuration not removed", diff --git a/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat-skeleton.tsx b/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat-skeleton.tsx new file mode 100644 index 0000000000..4a75f6c1e9 --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat-skeleton.tsx @@ -0,0 +1,71 @@ +import { Skeleton } from "@/components/shadcn/skeleton/skeleton"; +import { cn } from "@/lib/utils"; + +// 1:1 skeleton of the panel chat empty state (logo, headline, composer, +// suggestion chips, recent chats). Kept in its own file with light imports: +// the side-panel shell uses it as the Suspense fallback while the real +// (lazy) chat bundle downloads, so it must not pull that bundle in. +export function LighthousePanelChatSkeleton() { + return ( +
+ {/* Lighthouse logo */} + + + {/* Headline + subline */} +
+ + +
+ + {/* Composer: textarea, then model selector + send button row */} +
+ +
+ + +
+
+ + {/* "Try Lighthouse AI for..." suggestion chips */} +
+ +
+ + + + +
+
+ + {/* Recent chats: label, search + new-chat row, session rows */} +
+ +
+ + +
+
+ + + +
+
+
+ ); +} + +interface SessionRowSkeletonProps { + titleWidth: string; +} + +function SessionRowSkeleton({ titleWidth }: SessionRowSkeletonProps) { + return ( +
+ + +
+ ); +} diff --git a/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat.test.tsx b/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat.test.tsx new file mode 100644 index 0000000000..f903bd87e2 --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat.test.tsx @@ -0,0 +1,464 @@ +import { act, render, screen, waitFor, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { type ReactNode } from "react"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; + +import { resetPanelChatStoreForTests } from "@/app/(prowler)/lighthouse/_lib/panel-chat-store"; +import { notifyLighthouseV2ConfigurationsChanged } from "@/app/(prowler)/lighthouse/_lib/session-events"; +import { stubEventSource } from "@/app/(prowler)/lighthouse/_lib/testing/event-source-mock"; +import type { + LighthouseV2Configuration, + LighthouseV2Session, + LighthouseV2SupportedModel, +} from "@/app/(prowler)/lighthouse/_types"; + +import { + LighthousePanelChat, + resetPanelChatConfigCacheForTests, +} from "./lighthouse-panel-chat"; +import { LighthousePanelHeaderActions } from "./lighthouse-panel-header-actions"; + +const { + getConfigurationsMock, + getSupportedProvidersMock, + getSupportedModelsMock, + getSessionsMock, + archiveSessionMock, + createSessionMock, + getMessagesMock, + sendMessageMock, + updateConfigurationMock, +} = vi.hoisted(() => ({ + getConfigurationsMock: vi.fn(), + getSupportedProvidersMock: vi.fn(), + getSupportedModelsMock: vi.fn(), + getSessionsMock: vi.fn(), + archiveSessionMock: vi.fn(), + createSessionMock: vi.fn(), + getMessagesMock: vi.fn(), + sendMessageMock: vi.fn(), + updateConfigurationMock: vi.fn(), +})); + +vi.mock("@/app/(prowler)/lighthouse/_actions", () => ({ + getLighthouseV2Configurations: getConfigurationsMock, + getLighthouseV2SupportedProviders: getSupportedProvidersMock, + getLighthouseV2SupportedModels: getSupportedModelsMock, + getLighthouseV2Sessions: getSessionsMock, + archiveLighthouseV2Session: archiveSessionMock, + createLighthouseV2Session: createSessionMock, + getLighthouseV2Messages: getMessagesMock, + sendLighthouseV2Message: sendMessageMock, + updateLighthouseV2Configuration: updateConfigurationMock, +})); + +// Streamdown pulls in shiki/wasm syntax highlighting that doesn't run under +// jsdom; render its text passthrough so message bodies are still assertable. +vi.mock("streamdown", () => ({ + Streamdown: ({ children }: { children: ReactNode }) => <>{children}, + defaultRehypePlugins: { katex: undefined, harden: undefined }, +})); + +const configurations: LighthouseV2Configuration[] = [ + { + id: "config-openai", + providerType: "openai", + baseUrl: null, + defaultModel: "gpt-5.1", + businessContext: "Production account", + connected: true, + connectionLastCheckedAt: "2026-06-24T10:00:00Z", + insertedAt: "2026-06-24T09:00:00Z", + updatedAt: "2026-06-24T10:00:00Z", + }, +]; + +describe("LighthousePanelChat", () => { + beforeEach(() => { + vi.stubGlobal( + "ResizeObserver", + class ResizeObserver { + observe = vi.fn(); + unobserve = vi.fn(); + disconnect = vi.fn(); + }, + ); + Object.defineProperty(Element.prototype, "scrollIntoView", { + configurable: true, + value: vi.fn(), + }); + getConfigurationsMock.mockReset(); + getSupportedProvidersMock.mockReset(); + getSupportedModelsMock.mockReset(); + getSessionsMock.mockReset(); + archiveSessionMock.mockReset(); + getMessagesMock.mockReset(); + stubEventSource(); + resetPanelChatStoreForTests(); + resetPanelChatConfigCacheForTests(); + + getConfigurationsMock.mockResolvedValue({ data: configurations }); + getSupportedProvidersMock.mockResolvedValue({ + data: [ + { id: "openai", name: "OpenAI" }, + { id: "bedrock", name: "AWS Bedrock" }, + { id: "openai-compatible", name: "OpenAI Compatible" }, + ], + }); + getSupportedModelsMock.mockResolvedValue({ data: [model("gpt-5.1")] }); + getSessionsMock.mockResolvedValue({ data: [] }); + getMessagesMock.mockResolvedValue({ data: [] }); + }); + + afterEach(() => { + vi.unstubAllGlobals(); + }); + + it("shows a loading skeleton while the config loads", () => { + // Given: a config fetch that never resolves within the assertion window + getConfigurationsMock.mockReturnValue(new Promise(() => {})); + + // When + render(); + + // Then + expect(screen.getByLabelText("Loading Lighthouse AI")).toBeInTheDocument(); + }); + + it("shows the error state with a Retry that reloads the config", async () => { + // Given + getConfigurationsMock.mockResolvedValueOnce({ + error: "Something went wrong.", + status: 500, + }); + const user = userEvent.setup(); + render(); + expect(await screen.findByRole("alert")).toHaveTextContent( + "Something went wrong.", + ); + + // When: retrying after the backend recovers + await user.click(screen.getByRole("button", { name: "Retry" })); + + // Then + expect( + await screen.findByRole("textbox", { name: "Message" }), + ).toBeInTheDocument(); + }); + + it("shows an in-panel connect CTA instead of redirecting when no LLM is connected", async () => { + // Given + getConfigurationsMock.mockResolvedValue({ + data: [{ ...configurations[0], connected: false }], + }); + + // When + render(); + + // Then + expect( + await screen.findByRole("link", { name: "Connect an LLM provider" }), + ).toHaveAttribute("href", "/lighthouse/settings"); + }); + + it("renders the chat composer and recent chats once ready", async () => { + // Given + getSessionsMock.mockResolvedValue({ + data: [session("session-1", "Counting critical findings")], + }); + + // When + render(); + + // Then: composer is live and the empty state lists recent chats + expect( + await screen.findByRole("textbox", { name: "Message" }), + ).toBeInTheDocument(); + expect(screen.getByText("Recent chats")).toBeInTheDocument(); + expect( + await screen.findByText("Counting critical findings"), + ).toBeInTheDocument(); + }); + + it("opens a recent chat in place without navigating", async () => { + // Given + const user = userEvent.setup(); + const replaceStateSpy = vi.spyOn(window.history, "replaceState"); + getSessionsMock.mockResolvedValue({ + data: [session("session-1", "Counting critical findings")], + }); + getMessagesMock.mockResolvedValue({ + data: [ + { + id: "message-1", + role: "assistant", + model: null, + tokenUsage: null, + insertedAt: "2026-06-25T10:00:00Z", + parts: [ + { + id: "message-1-part", + type: "text", + content: "There are 3 critical findings.", + toolCallOutcome: null, + insertedAt: "2026-06-25T10:00:00Z", + updatedAt: "2026-06-25T10:00:00Z", + }, + ], + }, + ], + }); + render(); + + // When + await user.click( + await screen.findByRole("button", { + name: /^Counting critical findings/, + }), + ); + + // Then: the conversation loads in the panel and the URL never changes + expect( + await screen.findByText("There are 3 critical findings."), + ).toBeInTheDocument(); + expect(replaceStateSpy).not.toHaveBeenCalled(); + replaceStateSpy.mockRestore(); + }); + + it("explains why a new chat is unavailable before the first message", async () => { + // Given + const user = userEvent.setup(); + render(); + const newChatButton = screen.getByRole("button", { name: "New chat" }); + + // When + const disabledTrigger = newChatButton.parentElement; + + // Then + expect(newChatButton).toBeDisabled(); + expect(disabledTrigger).toHaveClass("cursor-not-allowed"); + await user.hover(disabledTrigger!); + expect(await screen.findByRole("tooltip")).toHaveTextContent( + "Send a message before starting a new chat", + ); + }); + + it("opens the active panel conversation on the full-page chat route", async () => { + // Given: the panel starts on a new chat and exposes the full-page action + const user = userEvent.setup(); + getSessionsMock.mockResolvedValue({ + data: [session("session-1", "Counting critical findings")], + }); + render( + <> + + + , + ); + const fullPageLink = await screen.findByRole("link", { + name: "Open Lighthouse AI full page", + }); + expect(fullPageLink).toHaveAttribute("href", "/lighthouse"); + + // When: an existing conversation becomes active in the panel + await user.click( + await screen.findByRole("button", { + name: /^Counting critical findings/, + }), + ); + + // Then: full-page navigation carries the active session in the URL + expect(fullPageLink).toHaveAttribute( + "href", + "/lighthouse?session=session-1", + ); + }); + + it("starts a new chat from the panel header", async () => { + // Given: an existing conversation is open in the panel + const user = userEvent.setup(); + getSessionsMock.mockResolvedValue({ + data: [session("session-1", "Counting critical findings")], + }); + getMessagesMock.mockResolvedValue({ + data: [ + { + id: "message-1", + role: "assistant", + model: null, + tokenUsage: null, + insertedAt: "2026-06-25T10:00:00Z", + parts: [ + { + id: "message-1-part", + type: "text", + content: "There are 3 critical findings.", + toolCallOutcome: null, + insertedAt: "2026-06-25T10:00:00Z", + updatedAt: "2026-06-25T10:00:00Z", + }, + ], + }, + ], + }); + render( + <> +
+ +
+ + , + ); + await screen.findByRole("textbox", { name: "Message" }); + const panelHeader = screen.getByLabelText("Panel header actions"); + const newChatButton = within(panelHeader).getByRole("button", { + name: "New chat", + }); + expect(newChatButton).toBeDisabled(); + + await user.click( + await screen.findByRole("button", { + name: /^Counting critical findings/, + }), + ); + expect( + await screen.findByText("There are 3 critical findings."), + ).toBeInTheDocument(); + expect(newChatButton).toBeEnabled(); + + // When + await user.click(newChatButton); + + // Then + expect( + screen.queryByText("There are 3 critical findings."), + ).not.toBeInTheDocument(); + expect(screen.getByRole("textbox", { name: "Message" })).toHaveValue(""); + expect(newChatButton).toBeDisabled(); + }); + + it("caches the loaded config so a remount skips the skeleton", async () => { + // Given: a first mount that loads successfully + const { unmount } = render(); + await screen.findByRole("textbox", { name: "Message" }); + unmount(); + getConfigurationsMock.mockClear(); + + // When + render(); + + // Then: ready immediately, no refetch + await waitFor(() => + expect( + screen.getByRole("textbox", { name: "Message" }), + ).toBeInTheDocument(), + ); + expect(getConfigurationsMock).not.toHaveBeenCalled(); + }); + + it("reloads models after a transient model-loading failure", async () => { + // Given: configuration loads, but the first model request fails + getSupportedModelsMock.mockResolvedValueOnce({ + error: "Models are temporarily unavailable.", + status: 500, + }); + const { unmount } = render(); + await screen.findByRole("textbox", { name: "Message" }); + unmount(); + getSupportedModelsMock.mockClear(); + + // When: the panel reopens after the model endpoint recovers + render(); + + // Then: the partial ready state is not reused as a successful cache entry + await waitFor(() => expect(getSupportedModelsMock).toHaveBeenCalled()); + }); + + it("removes an archived chat from the recent chats list", async () => { + // Given: one recent chat + const user = userEvent.setup(); + getSessionsMock.mockResolvedValue({ + data: [session("session-1", "Counting critical findings")], + }); + archiveSessionMock.mockResolvedValue({ data: { id: "session-1" } }); + render(); + await screen.findByText("Counting critical findings"); + + // When: archiving it from the panel (hover action + confirm dialog) + getSessionsMock.mockResolvedValue({ data: [] }); + await user.click( + screen.getByRole("button", { + name: "Archive Counting critical findings", + }), + ); + await user.click( + within(await screen.findByRole("dialog")).getByRole("button", { + name: "Archive", + }), + ); + + // Then: the archived chat leaves the list + await waitFor(() => + expect( + screen.queryByText("Counting critical findings"), + ).not.toBeInTheDocument(), + ); + }); + + it("swaps the connect CTA for the chat once a provider is connected", async () => { + // Given: no connected provider yet + getConfigurationsMock.mockResolvedValueOnce({ + data: [{ ...configurations[0], connected: false }], + }); + render(); + await screen.findByRole("link", { name: "Connect an LLM provider" }); + + // When: a provider gets connected on the settings page + act(() => notifyLighthouseV2ConfigurationsChanged()); + + // Then: the panel reloads into the live chat + expect( + await screen.findByRole("textbox", { name: "Message" }), + ).toBeInTheDocument(); + }); + + it("drops the cached config when configurations change while unmounted", async () => { + // Given: a cached config from a previous mount + const { unmount } = render(); + await screen.findByRole("textbox", { name: "Message" }); + unmount(); + getConfigurationsMock.mockClear(); + + // When: config CRUD happens with the panel closed, then it reopens + notifyLighthouseV2ConfigurationsChanged(); + render(); + + // Then: the stale cache is gone and the config reloads + expect( + await screen.findByRole("textbox", { name: "Message" }), + ).toBeInTheDocument(); + expect(getConfigurationsMock).toHaveBeenCalled(); + }); +}); + +function model(id: string, name = id): LighthouseV2SupportedModel { + return { + id, + name, + maxInputTokens: null, + maxOutputTokens: null, + supportsFunctionCalling: null, + supportsVision: null, + supportsReasoning: null, + }; +} + +function session(id: string, title: string): LighthouseV2Session { + return { + id, + title, + isArchived: false, + insertedAt: "2026-06-24T10:00:00Z", + updatedAt: "2026-06-24T10:00:00Z", + }; +} diff --git a/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat.tsx b/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat.tsx new file mode 100644 index 0000000000..acecf64b32 --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat.tsx @@ -0,0 +1,340 @@ +"use client"; + +import Link from "next/link"; +import { useState } from "react"; + +import { + archiveLighthouseV2Session, + getLighthouseV2Sessions, +} from "@/app/(prowler)/lighthouse/_actions"; +import { LighthouseV2SessionHistory } from "@/app/(prowler)/lighthouse/_components/history"; +import type { LighthouseChatConfig } from "@/app/(prowler)/lighthouse/_lib/chat-store"; +import { + LIGHTHOUSE_CHAT_CONFIG_STATUS, + loadLighthouseChatConfig, +} from "@/app/(prowler)/lighthouse/_lib/load-chat-config"; +import { + resetPanelChatMessageState, + setPanelChatMessageState, +} from "@/app/(prowler)/lighthouse/_lib/panel-chat-message-state"; +import { + getOrCreatePanelChatStore, + resetPanelChatStore, +} from "@/app/(prowler)/lighthouse/_lib/panel-chat-store"; +import { + notifyLighthouseV2SessionArchived, + onLighthouseV2ConfigurationsChanged, + onLighthouseV2NewChat, + onLighthouseV2SessionArchived, + onLighthouseV2SessionsChanged, +} from "@/app/(prowler)/lighthouse/_lib/session-events"; +import type { LighthouseV2Session } from "@/app/(prowler)/lighthouse/_types"; +import { LighthouseIconWithAura } from "@/components/icons"; +import { Button } from "@/components/shadcn/button/button"; +import { useMountEffect } from "@/hooks/use-mount-effect"; +import { LIGHTHOUSE_ROUTE } from "@/lib/lighthouse-routes"; + +import { + LighthouseChatStoreProvider, + useLighthouseChatStore, +} from "../chat/lighthouse-chat-store-provider"; +import { + LIGHTHOUSE_CHAT_SURFACE, + LighthouseV2ChatView, +} from "../chat/lighthouse-v2-chat-view"; +import { LighthousePanelChatSkeleton } from "./lighthouse-panel-chat-skeleton"; + +const PANEL_CHAT_STATUS = { + LOADING: "loading", + ERROR: "error", + NOT_CONFIGURED: "not-configured", + READY: "ready", +} as const; + +interface PanelChatLoadingState { + status: typeof PANEL_CHAT_STATUS.LOADING; +} + +interface PanelChatErrorState { + status: typeof PANEL_CHAT_STATUS.ERROR; + message: string; +} + +interface PanelChatNotConfiguredState { + status: typeof PANEL_CHAT_STATUS.NOT_CONFIGURED; +} + +interface PanelChatReadyState { + status: typeof PANEL_CHAT_STATUS.READY; + config: LighthouseChatConfig; + modelsError?: string; +} + +type PanelChatState = + | PanelChatLoadingState + | PanelChatErrorState + | PanelChatNotConfiguredState + | PanelChatReadyState; + +// Config cache: the panel loads its configs/models lazily on first open (never +// in the layout, so pages don't pay for a panel most sessions never open); the +// cache makes every later mount — reopen, drawer AI tab — instant. +let cachedReadyState: PanelChatReadyState | null = null; + +export function resetPanelChatConfigCacheForTests(): void { + cachedReadyState = null; + resetPanelChatMessageState(); +} + +// Config CRUD happens on the settings route while the global panel can remain +// mounted. Invalidate at module scope so the open panel reloads in place and a +// later open rebuilds cache and store against the new configuration. +if (typeof window !== "undefined") { + onLighthouseV2ConfigurationsChanged(() => { + cachedReadyState = null; + resetPanelChatMessageState(); + resetPanelChatStore(); + }); +} + +export function LighthousePanelChat() { + const [state, setState] = useState( + () => cachedReadyState ?? { status: PANEL_CHAT_STATUS.LOADING }, + ); + + const load = async () => { + setState({ status: PANEL_CHAT_STATUS.LOADING }); + const next = await loadPanelChatState(); + if ( + next.status === PANEL_CHAT_STATUS.READY && + next.modelsError === undefined + ) { + cachedReadyState = next; + } else { + cachedReadyState = null; + } + setState(next); + }; + + useMountEffect(() => { + if (state.status !== PANEL_CHAT_STATUS.READY) { + void load(); + } + // The module-scope listener above already invalidated cache and store + // (registration order); reload so an open panel refreshes in place. + return onLighthouseV2ConfigurationsChanged(() => void load()); + }); + + if (state.status === PANEL_CHAT_STATUS.LOADING) { + return ; + } + if (state.status === PANEL_CHAT_STATUS.ERROR) { + return ( + void load()} /> + ); + } + if (state.status === PANEL_CHAT_STATUS.NOT_CONFIGURED) { + return ; + } + return ( + + ); +} + +interface PanelChatReadyProps { + config: LighthouseChatConfig; + modelsError?: string; +} + +function PanelChatReady({ config, modelsError }: PanelChatReadyProps) { + const [store] = useState(() => + getOrCreatePanelChatStore(config, { initialError: modelsError }), + ); + const [sessions, setSessions] = useState([]); + + const refreshSessions = async () => { + try { + const result = await getLighthouseV2Sessions(); + if ("data" in result) { + setSessions(result.data); + } + } catch { + // Best-effort refresh: swallow transport-level failures so a rejected + // server action never escapes the mount effect as an unhandled error. + } + }; + + useMountEffect(() => { + void refreshSessions(); + const syncPanelChatState = () => { + const chatState = store.getState(); + setPanelChatMessageState({ + hasMessages: chatState.messages.length > 0, + activeSessionId: chatState.activeSessionId, + }); + }; + syncPanelChatState(); + const unsubscribeChatStore = store.subscribe(syncPanelChatState); + const unsubscribeSessionsChanged = onLighthouseV2SessionsChanged(() => { + void refreshSessions(); + }); + const unsubscribeNewChat = onLighthouseV2NewChat(() => + store.getState().resetToNewChat(), + ); + // Archiving from any surface (sidebar, popover) must reset the panel chat + // when its open session is the archived one, and drop the archived chat + // from the "Recent chats" list. + const unsubscribeSessionArchived = onLighthouseV2SessionArchived( + (sessionId) => { + store.getState().handleSessionArchived(sessionId); + void refreshSessions(); + }, + ); + return () => { + unsubscribeChatStore(); + unsubscribeSessionsChanged(); + unsubscribeNewChat(); + unsubscribeSessionArchived(); + // A partial config cannot be reused after the model endpoint recovers: + // this store captured the incomplete model list at creation time. + if (modelsError) resetPanelChatStore(); + }; + }); + + return ( + +
+
+ 0 ? ( +
+ + Recent chats + + +
+ ) : undefined + } + /> +
+
+
+ ); +} + +interface PanelChatSessionsProps { + sessions: LighthouseV2Session[]; + onAfterSelect?: () => void; +} + +function PanelChatSessions({ + sessions, + onAfterSelect, +}: PanelChatSessionsProps) { + const [search, setSearch] = useState(""); + const activeSessionId = useLighthouseChatStore( + (state) => state.activeSessionId, + ); + const isOnNewChat = useLighthouseChatStore( + (state) => state.activeSessionId === null && state.messages.length === 0, + ); + const openSession = useLighthouseChatStore((state) => state.openSession); + const resetToNewChat = useLighthouseChatStore( + (state) => state.resetToNewChat, + ); + + const handleArchiveSession = async (sessionId: string) => { + try { + const result = await archiveLighthouseV2Session(sessionId); + if ("data" in result) { + // Resets this chat when its open session is archived, and prompts + // every session list (sidebar included) to refresh. + notifyLighthouseV2SessionArchived(sessionId); + } + } catch { + // Archiving is recoverable from the list; ignore transient failures. + } + }; + + return ( + { + resetToNewChat(); + onAfterSelect?.(); + }} + onOpenSession={(sessionId) => { + void openSession(sessionId); + onAfterSelect?.(); + }} + onArchiveSession={(sessionId) => void handleArchiveSession(sessionId)} + /> + ); +} + +interface PanelChatErrorProps { + message: string; + onRetry: () => void; +} + +function PanelChatError({ message, onRetry }: PanelChatErrorProps) { + return ( +
+

+ {message} +

+ +
+ ); +} + +function PanelChatConnectCta() { + return ( +
+ +
+

+ Lighthouse AI is not set up yet +

+

+ Connect an LLM provider to start asking questions about your cloud + security posture. +

+
+ +
+ ); +} + +async function loadPanelChatState(): Promise { + try { + const result = await loadLighthouseChatConfig(); + if (result.status === LIGHTHOUSE_CHAT_CONFIG_STATUS.ERROR) { + return { status: PANEL_CHAT_STATUS.ERROR, message: result.message }; + } + if (result.status === LIGHTHOUSE_CHAT_CONFIG_STATUS.NOT_CONFIGURED) { + return { status: PANEL_CHAT_STATUS.NOT_CONFIGURED }; + } + return { + status: PANEL_CHAT_STATUS.READY, + config: result.config, + modelsError: result.modelsError, + }; + } catch { + return { + status: PANEL_CHAT_STATUS.ERROR, + message: "Could not load Lighthouse AI. Try again shortly.", + }; + } +} diff --git a/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-header-actions.tsx b/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-header-actions.tsx new file mode 100644 index 0000000000..9f71449626 --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-header-actions.tsx @@ -0,0 +1,74 @@ +"use client"; + +import { Maximize2, Plus } from "lucide-react"; +import Link from "next/link"; +import { useSyncExternalStore } from "react"; + +import { + getPanelChatActiveSessionId, + getPanelChatHasMessages, + subscribePanelChatHasMessages, +} from "@/app/(prowler)/lighthouse/_lib/panel-chat-message-state"; +import { notifyLighthouseV2NewChat } from "@/app/(prowler)/lighthouse/_lib/session-events"; +import { Button } from "@/components/shadcn/button/button"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/shadcn/tooltip"; +import { LIGHTHOUSE_ROUTE } from "@/lib/lighthouse-routes"; +import { cn } from "@/lib/utils"; + +export function LighthousePanelHeaderActions() { + const hasMessages = useSyncExternalStore( + subscribePanelChatHasMessages, + getPanelChatHasMessages, + () => false, + ); + const activeSessionId = useSyncExternalStore( + subscribePanelChatHasMessages, + getPanelChatActiveSessionId, + () => null, + ); + const fullPageHref = activeSessionId + ? `${LIGHTHOUSE_ROUTE.CHAT}?session=${encodeURIComponent(activeSessionId)}` + : LIGHTHOUSE_ROUTE.CHAT; + + return ( + <> + + + + + + + + {hasMessages + ? "New chat" + : "Send a message before starting a new chat"} + + + + + + + Open full page + + + ); +} diff --git a/ui/app/(prowler)/lighthouse/_lib/chat-store.test.ts b/ui/app/(prowler)/lighthouse/_lib/chat-store.test.ts new file mode 100644 index 0000000000..16fc3c3e8e --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_lib/chat-store.test.ts @@ -0,0 +1,503 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; + +import { + createLighthouseChatStore, + selectLighthouseChatCanSend, +} from "@/app/(prowler)/lighthouse/_lib/chat-store"; +import { + type MockEventSource, + stubEventSource, +} from "@/app/(prowler)/lighthouse/_lib/testing/event-source-mock"; +import type { + LighthouseV2Configuration, + LighthouseV2Message, + LighthouseV2SupportedModel, + LighthouseV2SupportedProvider, +} from "@/app/(prowler)/lighthouse/_types"; + +const { + createSessionMock, + getMessagesMock, + sendMessageMock, + updateConfigurationMock, +} = vi.hoisted(() => ({ + createSessionMock: vi.fn(), + getMessagesMock: vi.fn(), + sendMessageMock: vi.fn(), + updateConfigurationMock: vi.fn(), +})); + +vi.mock("@/app/(prowler)/lighthouse/_actions", () => ({ + createLighthouseV2Session: createSessionMock, + getLighthouseV2Messages: getMessagesMock, + sendLighthouseV2Message: sendMessageMock, + updateLighthouseV2Configuration: updateConfigurationMock, +})); + +const configurations: LighthouseV2Configuration[] = [ + { + id: "config-openai", + providerType: "openai", + baseUrl: null, + defaultModel: "gpt-5.1", + businessContext: "Production account", + connected: true, + connectionLastCheckedAt: "2026-06-24T10:00:00Z", + insertedAt: "2026-06-24T09:00:00Z", + updatedAt: "2026-06-24T10:00:00Z", + }, +]; + +const modelsByProvider = { + openai: [model("gpt-5.1")], + bedrock: [], + "openai-compatible": [], +}; + +const supportedProviders: LighthouseV2SupportedProvider[] = [ + { id: "openai", name: "OpenAI" }, + { id: "bedrock", name: "AWS Bedrock" }, + { id: "openai-compatible", name: "OpenAI Compatible" }, +]; + +const config = { configurations, modelsByProvider, supportedProviders }; + +let eventSources: MockEventSource[] = []; + +describe("createLighthouseChatStore", () => { + beforeEach(() => { + createSessionMock.mockReset(); + getMessagesMock.mockReset(); + sendMessageMock.mockReset(); + updateConfigurationMock.mockReset(); + eventSources = stubEventSource(); + + createSessionMock.mockResolvedValue({ + data: { + id: "session-1", + title: "Summarize findings", + isArchived: false, + insertedAt: "2026-06-24T10:00:00Z", + updatedAt: "2026-06-24T10:00:00Z", + }, + }); + getMessagesMock.mockResolvedValue({ data: [] }); + sendMessageMock.mockResolvedValue({ + data: { + task: { id: "task-1", name: "lighthouse-run", state: "executing" }, + }, + }); + window.history.replaceState(null, "", "/"); + }); + + afterEach(() => { + vi.unstubAllGlobals(); + }); + + it("resolves the connected provider's remembered model on creation", () => { + // Given / When + const store = makeStore(); + + // Then + expect(store.getState().selectedModelSelection).toEqual({ + providerType: "openai", + modelId: "gpt-5.1", + }); + expect(selectLighthouseChatCanSend(store.getState())).toBe(true); + }); + + it("creates a session and subscribes to the stream before sending (no replay buffer)", async () => { + // Given + const store = makeStore(); + + // When + await store.getState().submitMessage("Summarize findings"); + + // Then + expect(createSessionMock).toHaveBeenCalledWith("Summarize findings"); + expect(EventSource).toHaveBeenCalledWith( + "/api/lighthouse/v2/sessions/session-1/event-stream", + ); + const eventSourceOrder = vi.mocked(EventSource).mock.invocationCallOrder[0]; + const sendOrder = sendMessageMock.mock.invocationCallOrder[0]; + expect(eventSourceOrder).toBeLessThan(sendOrder); + // The optimistic user message renders immediately and the task id is live. + expect(store.getState().messages.at(-1)?.parts[0]?.content).toEqual({ + text: "Summarize findings", + }); + expect(store.getState().streamState.activeTaskId).toBe("task-1"); + }); + + it("does not touch the URL when syncUrlToSession is off (panel surface)", async () => { + // Given + const store = makeStore({ syncUrlToSession: false }); + const replaceStateSpy = vi.spyOn(window.history, "replaceState"); + + // When + await store.getState().submitMessage("Summarize findings"); + + // Then + expect(store.getState().activeSessionId).toBe("session-1"); + expect(replaceStateSpy).not.toHaveBeenCalled(); + }); + + it("writes the session URL in place when syncUrlToSession is on (page surface)", async () => { + // Given + const store = makeStore({ syncUrlToSession: true }); + const replaceStateSpy = vi.spyOn(window.history, "replaceState"); + + // When + await store.getState().submitMessage("Summarize findings"); + + // Then + expect(replaceStateSpy).toHaveBeenCalledWith( + null, + "", + "/lighthouse?session=session-1", + ); + }); + + it("reloads persisted messages and closes the stream on message.end", async () => { + // Given + const store = makeStore(); + await store.getState().submitMessage("Summarize findings"); + getMessagesMock.mockResolvedValue({ + data: [message("message-1", "assistant", "Persisted answer")], + }); + + // When + eventSources[0].emit("message.end", { message_id: "message-1" }); + await vi.waitFor(() => + expect(getMessagesMock).toHaveBeenCalledWith("session-1"), + ); + + // Then + await vi.waitFor(() => + expect(store.getState().messages[0]?.parts[0]?.content).toBe( + "Persisted answer", + ), + ); + expect(eventSources[0].close).toHaveBeenCalled(); + expect(store.getState().streamState.activeTaskId).toBeNull(); + }); + + it("blocks sending and refreshes messages on a 409 conflict", async () => { + // Given + const store = makeStore(); + sendMessageMock.mockResolvedValue({ + error: "Another run is in progress.", + status: 409, + }); + + // When + await store.getState().submitMessage("Summarize findings"); + + // Then + expect(store.getState().blockedByConflict).toBe(true); + expect(store.getState().feedback).toBe("Another run is in progress."); + expect(getMessagesMock).toHaveBeenCalledWith("session-1"); + expect(eventSources[0].close).toHaveBeenCalled(); + expect(selectLighthouseChatCanSend(store.getState())).toBe(false); + }); + + it("reconciles the optimistic message when the send fails without a conflict", async () => { + // Given: the backend rejects the message with a plain failure + const store = makeStore(); + sendMessageMock.mockResolvedValue({ error: "Send failed.", status: 500 }); + + // When + await store.getState().submitMessage("Summarize findings"); + + // Then: feedback surfaces without blocking, and the optimistic user + // message is reconciled against the server (it was never persisted) + expect(store.getState().feedback).toBe("Send failed."); + expect(store.getState().blockedByConflict).toBe(false); + expect(getMessagesMock).toHaveBeenCalledWith("session-1"); + expect(store.getState().messages).toHaveLength(0); + }); + + it("drops a failed send once the chat points at another session", async () => { + // Given: a send still in flight + const store = makeStore(); + let resolveSend: (value: unknown) => void = () => {}; + sendMessageMock.mockReturnValueOnce( + new Promise((resolve) => { + resolveSend = resolve; + }), + ); + const submitting = store.getState().submitMessage("Summarize findings"); + await vi.waitFor(() => expect(sendMessageMock).toHaveBeenCalled()); + + // When: the user opens another session before the send fails + await store.getState().openSession("session-9"); + resolveSend({ error: "Send failed.", status: 500 }); + await submitting; + + // Then: the dead submission's failure never surfaces in the new session + expect(store.getState().activeSessionId).toBe("session-9"); + expect(store.getState().feedback).toBeNull(); + }); + + it("keeps a fast follow-up intact when the terminal refresh resolves late", async () => { + // Given: a completed run whose terminal message refresh is still in flight + const store = makeStore(); + await store.getState().submitMessage("First question"); + let resolveRefresh: (value: unknown) => void = () => {}; + getMessagesMock.mockReturnValueOnce( + new Promise((resolve) => { + resolveRefresh = resolve; + }), + ); + eventSources[0].emit("message.end", { message_id: "message-1" }); + await vi.waitFor(() => + expect(getMessagesMock).toHaveBeenCalledWith("session-1"), + ); + + // When: the user sends a follow-up before that refresh resolves + sendMessageMock.mockResolvedValue({ + data: { + task: { id: "task-2", name: "lighthouse-run", state: "executing" }, + }, + }); + await store.getState().submitMessage("Follow-up question"); + resolveRefresh({ data: [message("message-1", "assistant", "Answer")] }); + await new Promise((resolve) => setTimeout(resolve, 0)); + + // Then: the stale snapshot erases neither the new optimistic message nor + // the follow-up's task id + expect(store.getState().streamState.activeTaskId).toBe("task-2"); + expect(store.getState().messages.at(-1)?.parts[0]?.content).toEqual({ + text: "Follow-up question", + }); + }); + + it("abandons an in-flight submit after destroy", async () => { + // Given: destroy fires while the session create is still in flight + const store = makeStore({ syncUrlToSession: true }); + const replaceStateSpy = vi.spyOn(window.history, "replaceState"); + let resolveCreate: (value: unknown) => void = () => {}; + createSessionMock.mockReturnValueOnce( + new Promise((resolve) => { + resolveCreate = resolve; + }), + ); + const submitting = store.getState().submitMessage("Summarize findings"); + store.getState().destroy(); + + // When + resolveCreate({ + data: { + id: "session-1", + title: "Summarize findings", + isArchived: false, + insertedAt: "2026-06-24T10:00:00Z", + updatedAt: "2026-06-24T10:00:00Z", + }, + }); + await submitting; + + // Then: no URL rewrite on whatever page is now open, no orphan stream + expect(replaceStateSpy).not.toHaveBeenCalled(); + expect(eventSources).toHaveLength(0); + }); + + it("does not replace a session opened while a new session is being created", async () => { + // Given: creating the first session is still in flight + const store = makeStore(); + let resolveCreate: (value: unknown) => void = () => {}; + createSessionMock.mockReturnValueOnce( + new Promise((resolve) => { + resolveCreate = resolve; + }), + ); + const submitting = store.getState().submitMessage("Summarize findings"); + await vi.waitFor(() => expect(createSessionMock).toHaveBeenCalled()); + + // When: the user opens another conversation before creation resolves + await store.getState().openSession("session-9"); + resolveCreate({ + data: { + id: "session-1", + title: "Summarize findings", + isArchived: false, + insertedAt: "2026-06-24T10:00:00Z", + updatedAt: "2026-06-24T10:00:00Z", + }, + }); + await submitting; + + // Then: the stale creation cannot replace or submit into the open chat + expect(store.getState().activeSessionId).toBe("session-9"); + expect(sendMessageMock).not.toHaveBeenCalled(); + }); + + it("does not revive a session creation cancelled by a new-chat reset", async () => { + // Given: creating the first session is still in flight + const store = makeStore(); + let resolveCreate: (value: unknown) => void = () => {}; + createSessionMock.mockReturnValueOnce( + new Promise((resolve) => { + resolveCreate = resolve; + }), + ); + const submitting = store.getState().submitMessage("Summarize findings"); + await vi.waitFor(() => expect(createSessionMock).toHaveBeenCalled()); + + // When: the user resets to a new chat before creation resolves + store.getState().resetToNewChat(); + resolveCreate({ + data: { + id: "session-1", + title: "Summarize findings", + isArchived: false, + insertedAt: "2026-06-24T10:00:00Z", + updatedAt: "2026-06-24T10:00:00Z", + }, + }); + await submitting; + + // Then + expect(store.getState().activeSessionId).toBeNull(); + expect(sendMessageMock).not.toHaveBeenCalled(); + }); + + it("opens an existing session client-side without navigation", async () => { + // Given + const store = makeStore({ syncUrlToSession: false }); + const replaceStateSpy = vi.spyOn(window.history, "replaceState"); + getMessagesMock.mockResolvedValue({ + data: [message("message-1", "assistant", "Old answer")], + }); + + // When + await store.getState().openSession("session-9"); + + // Then + expect(store.getState().activeSessionId).toBe("session-9"); + expect(store.getState().messages[0]?.parts[0]?.content).toBe("Old answer"); + expect(replaceStateSpy).not.toHaveBeenCalled(); + }); + + it("drops a stale openSession result when the chat was reset meanwhile", async () => { + // Given: opening a session whose message fetch is still in flight + const store = makeStore(); + let resolveLoad: (value: unknown) => void = () => {}; + getMessagesMock.mockReturnValueOnce( + new Promise((resolve) => { + resolveLoad = resolve; + }), + ); + const opening = store.getState().openSession("session-9"); + + // When: the user starts a new chat before the fetch resolves + store.getState().resetToNewChat(); + resolveLoad({ data: [message("message-1", "assistant", "Stale answer")] }); + await opening; + + // Then: the stale messages never repopulate the reset chat + expect(store.getState().activeSessionId).toBeNull(); + expect(store.getState().messages).toHaveLength(0); + }); + + it("resets to a new chat and closes any open stream", async () => { + // Given + const store = makeStore(); + await store.getState().submitMessage("Summarize findings"); + expect(store.getState().activeSessionId).toBe("session-1"); + + // When + store.getState().resetToNewChat(); + + // Then + expect(eventSources[0].close).toHaveBeenCalled(); + expect(store.getState().activeSessionId).toBeNull(); + expect(store.getState().messages).toHaveLength(0); + expect(store.getState().streamState.activeTaskId).toBeNull(); + }); + + it("resets only when the archived session is the active one", async () => { + // Given + const store = makeStore(); + await store.getState().submitMessage("Summarize findings"); + + // When / Then: an unrelated session leaves the conversation intact + store.getState().handleSessionArchived("session-other"); + expect(store.getState().activeSessionId).toBe("session-1"); + + // When / Then: archiving the active session resets in place + store.getState().handleSessionArchived("session-1"); + expect(store.getState().activeSessionId).toBeNull(); + }); + + it("closes the stream on destroy", async () => { + // Given + const store = makeStore(); + await store.getState().submitMessage("Summarize findings"); + + // When + store.getState().destroy(); + + // Then + expect(eventSources[0].close).toHaveBeenCalled(); + }); + + it("surfaces a connection error when the stream closes terminally", async () => { + // Given + const store = makeStore(); + await store.getState().submitMessage("Summarize findings"); + + // When: the EventSource fails terminally (e.g. 401/404 on the SSE GET) + eventSources[0].fail(2 /* EventSource.CLOSED */); + + // Then + expect(store.getState().feedback).toBe( + "Unable to connect to the response stream.", + ); + }); +}); + +function makeStore( + overrides?: Partial[0]>, +) { + return createLighthouseChatStore({ + config, + syncUrlToSession: false, + ...overrides, + }); +} + +function model(id: string, name = id): LighthouseV2SupportedModel { + return { + id, + name, + maxInputTokens: null, + maxOutputTokens: null, + supportsFunctionCalling: null, + supportsVision: null, + supportsReasoning: null, + }; +} + +function message( + id: string, + role: LighthouseV2Message["role"], + content: string, +): LighthouseV2Message { + return { + id, + role, + model: null, + tokenUsage: null, + insertedAt: "2026-06-25T10:00:00Z", + parts: [ + { + id: `${id}-part`, + type: "text", + content, + toolCallOutcome: null, + insertedAt: "2026-06-25T10:00:00Z", + updatedAt: "2026-06-25T10:00:00Z", + }, + ], + }; +} diff --git a/ui/app/(prowler)/lighthouse/_lib/chat-store.ts b/ui/app/(prowler)/lighthouse/_lib/chat-store.ts new file mode 100644 index 0000000000..0cdbde9478 --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_lib/chat-store.ts @@ -0,0 +1,485 @@ +import { createStore, type StoreApi } from "zustand/vanilla"; + +import { + createLighthouseV2Session, + getLighthouseV2Messages, + sendLighthouseV2Message, + updateLighthouseV2Configuration, +} from "@/app/(prowler)/lighthouse/_actions"; +import { + createInitialLighthouseV2StreamState, + type LighthouseV2StreamState, + reduceLighthouseV2Event, +} from "@/app/(prowler)/lighthouse/_lib/event-reducer"; +import { + buildOptimisticMessage, + buildSessionTitle, +} from "@/app/(prowler)/lighthouse/_lib/messages"; +import type { LighthouseV2ModelSelection } from "@/app/(prowler)/lighthouse/_lib/model-selection"; +import { notifyLighthouseV2SessionsChanged } from "@/app/(prowler)/lighthouse/_lib/session-events"; +import { parseStreamEvent } from "@/app/(prowler)/lighthouse/_lib/stream-event-parser"; +import { buildLighthouseV2StreamUrl } from "@/app/(prowler)/lighthouse/_lib/stream-url"; +import { + LIGHTHOUSE_V2_PROVIDER_TYPE, + LIGHTHOUSE_V2_SSE_EVENT, + type LighthouseV2Configuration, + type LighthouseV2Message, + type LighthouseV2ProviderType, + type LighthouseV2SSEEvent, + type LighthouseV2SupportedModel, + type LighthouseV2SupportedProvider, +} from "@/app/(prowler)/lighthouse/_types"; + +export interface LighthouseChatConfig { + configurations: LighthouseV2Configuration[]; + modelsByProvider: Record< + LighthouseV2ProviderType, + LighthouseV2SupportedModel[] + >; + supportedProviders: LighthouseV2SupportedProvider[]; +} + +export interface CreateLighthouseChatStoreOptions { + config: LighthouseChatConfig; + // The /lighthouse page mirrors the active session into the URL via + // replaceState; other surfaces (side panel, drawers) must never touch it. + syncUrlToSession: boolean; + initialSessionId?: string; + initialMessages?: LighthouseV2Message[]; + initialInput?: string; + initialError?: string; +} + +export interface LighthouseChatState { + config: LighthouseChatConfig; + activeSessionId: string | null; + messages: LighthouseV2Message[]; + streamState: LighthouseV2StreamState; + input: string; + feedback: string | null; + blockedByConflict: boolean; + isSubmitting: boolean; + isLoadingSession: boolean; + lastSubmittedText: string | null; + selectedModelSelection: LighthouseV2ModelSelection | null; + modelPreferenceSaving: boolean; + setSessionUrlSyncEnabled: (enabled: boolean) => void; + setInput: (value: string) => void; + dismissFeedback: () => void; + selectModel: (selection: LighthouseV2ModelSelection) => Promise; + submitMessage: (text: string) => Promise; + openSession: (sessionId: string) => Promise; + resetToNewChat: () => void; + handleSessionArchived: (sessionId: string) => void; + destroy: () => void; +} + +export type LighthouseChatStore = StoreApi; + +export function selectLighthouseChatCanSend( + state: LighthouseChatState, +): boolean { + const selectedConfiguration = state.config.configurations.find( + (configuration) => + configuration.connected === true && + configuration.providerType === state.selectedModelSelection?.providerType, + ); + return ( + selectedConfiguration?.connected === true && + Boolean(state.selectedModelSelection?.modelId) && + !state.streamState.activeTaskId && + !state.blockedByConflict && + !state.isSubmitting + ); +} + +export function createLighthouseChatStore( + options: CreateLighthouseChatStoreOptions, +): LighthouseChatStore { + const { config } = options; + const connectedConfigurations = config.configurations.filter( + (configuration) => configuration.connected === true, + ); + // The EventSource lives in this closure (never in state): it isn't + // serializable, no render depends on it, and here it survives the consuming + // component unmounting — the reason this factory exists. + let eventSource: EventSource | null = null; + // Set by destroy(): async flows check it after each await so a torn-down + // store never rewrites the URL of another page or opens an orphan stream. + let destroyed = false; + // User-driven session changes invalidate async session creation. Comparing + // only activeSessionId is insufficient because both the initial chat and a + // later reset intentionally use null. + let sessionIntentVersion = 0; + let syncUrlToSession = options.syncUrlToSession; + + const syncSessionUrl = (sessionId: string | null) => { + if (!syncUrlToSession) return; + const url = sessionId + ? `/lighthouse?session=${encodeURIComponent(sessionId)}` + : "/lighthouse"; + window.history.replaceState(window.history.state, "", url); + }; + + return createStore()((set, get) => { + const closeStream = () => { + eventSource?.close(); + eventSource = null; + }; + + const refreshMessages = async ( + sessionId: string, + shouldApply: () => boolean = () => true, + ): Promise => { + const result = await getLighthouseV2Messages(sessionId); + // The fetch is async, so a reset (new chat, or archiving this session) + // can land while it is in flight. Drop the stale result instead of + // repopulating a chat that no longer points at this session. + if (sessionId !== get().activeSessionId || !shouldApply()) return false; + if ("data" in result) { + set({ messages: result.data }); + return true; + } + return false; + }; + + const handleTerminalEvent = async ( + sessionId: string, + event: LighthouseV2SSEEvent, + ) => { + if ( + event.type === LIGHTHOUSE_V2_SSE_EVENT.MESSAGE_END || + event.type === LIGHTHOUSE_V2_SSE_EVENT.ERROR + ) { + closeStream(); + set({ blockedByConflict: false }); + if (event.type === LIGHTHOUSE_V2_SSE_EVENT.ERROR) { + set({ feedback: event.detail || "Agent run failed." }); + } + // A fast follow-up can start while this refresh is in flight; applying + // it would erase the new optimistic message and provisional task id. + const noNewerSubmission = () => + !get().isSubmitting && !get().streamState.activeTaskId; + const refreshed = await refreshMessages(sessionId, noNewerSubmission); + if (refreshed) { + set({ streamState: createInitialLighthouseV2StreamState() }); + } + notifyLighthouseV2SessionsChanged(); + } + }; + + const startStream = (streamUrl: string, sessionId: string) => { + closeStream(); + const source = new EventSource(streamUrl); + eventSource = source; + + const applyEvent = (event: LighthouseV2SSEEvent) => { + set((current) => ({ + streamState: reduceLighthouseV2Event(current.streamState, event), + })); + void handleTerminalEvent(sessionId, event); + }; + + source.addEventListener("message.delta", (event) => + applyEvent( + parseStreamEvent(event, LIGHTHOUSE_V2_SSE_EVENT.MESSAGE_DELTA), + ), + ); + source.addEventListener("tool_call.start", (event) => + applyEvent( + parseStreamEvent(event, LIGHTHOUSE_V2_SSE_EVENT.TOOL_CALL_START), + ), + ); + source.addEventListener("tool_call.end", (event) => + applyEvent( + parseStreamEvent(event, LIGHTHOUSE_V2_SSE_EVENT.TOOL_CALL_END), + ), + ); + source.addEventListener("message.end", (event) => + applyEvent( + parseStreamEvent(event, LIGHTHOUSE_V2_SSE_EVENT.MESSAGE_END), + ), + ); + source.addEventListener("error", (event) => { + if (event instanceof MessageEvent) { + applyEvent(parseStreamEvent(event, LIGHTHOUSE_V2_SSE_EVENT.ERROR)); + } + }); + // The browser fires `onerror` both on a transient drop (it auto-reconnects) + // and on a non-retryable failure such as a 401/404 on the SSE GET. Only the + // latter leaves the source CLOSED, so surface a connection error there and + // treat everything else as a reconnect. + source.onerror = () => { + if (eventSource !== source) return; + if (source.readyState === EventSource.CLOSED) { + closeStream(); + set({ feedback: "Unable to connect to the response stream." }); + } + set((current) => ({ + streamState: reduceLighthouseV2Event(current.streamState, { + type: "disconnect", + }), + })); + }; + }; + + const ensureSession = async (text: string) => { + const existingSessionId = get().activeSessionId; + if (existingSessionId) { + return existingSessionId; + } + + const intentVersion = sessionIntentVersion; + const title = buildSessionTitle(text); + const result = await createLighthouseV2Session(title); + if (destroyed || intentVersion !== sessionIntentVersion) return null; + if ("error" in result) { + set({ feedback: result.error }); + return null; + } + + // Update the URL in place (not router.push) so the force-dynamic server + // component is NOT re-run mid-submit. A re-run would change `key` in + // page.tsx and remount the chat, tearing down the open EventSource. + syncSessionUrl(result.data.id); + set({ activeSessionId: result.data.id }); + notifyLighthouseV2SessionsChanged(); + return result.data.id; + }; + + return { + config, + activeSessionId: options.initialSessionId ?? null, + messages: options.initialMessages ?? [], + streamState: createInitialLighthouseV2StreamState(), + input: options.initialInput ?? "", + feedback: options.initialError ?? null, + blockedByConflict: false, + isSubmitting: false, + isLoadingSession: false, + lastSubmittedText: null, + selectedModelSelection: resolveInitialModelSelection( + connectedConfigurations, + config.modelsByProvider, + ), + modelPreferenceSaving: false, + + setSessionUrlSyncEnabled: (enabled) => { + syncUrlToSession = enabled; + }, + + setInput: (value) => set({ input: value }), + + dismissFeedback: () => set({ feedback: null }), + + selectModel: async (selection) => { + // The selection drives the model used for the next message, so it stays + // applied even if persisting it as the provider's default model fails — + // reverting it would make a connected provider unusable when the save 4xxs. + set({ selectedModelSelection: selection, feedback: null }); + + const configId = connectedConfigurations.find( + (configuration) => + configuration.providerType === selection.providerType, + )?.id; + if (!configId) return; + + set({ modelPreferenceSaving: true }); + + const result = await updateLighthouseV2Configuration(configId, { + defaultModel: selection.modelId, + }); + + set({ modelPreferenceSaving: false }); + + if ("error" in result) { + set({ feedback: result.error }); + } + }, + + submitMessage: async (text) => { + const trimmedText = text.trim(); + if (!trimmedText) return; + if (!get().selectedModelSelection) { + set({ feedback: "Select a model before sending a message." }); + return; + } + if (!selectLighthouseChatCanSend(get())) return; + + set({ isSubmitting: true }); + try { + const sessionId = await ensureSession(trimmedText); + if (!sessionId || destroyed) return; + + const selection = get().selectedModelSelection; + if (!selection) return; + + const provisionalTaskId = `pending-${Date.now()}`; + set((current) => ({ + feedback: null, + blockedByConflict: false, + lastSubmittedText: trimmedText, + input: "", + messages: [ + ...current.messages, + buildOptimisticMessage("user", trimmedText), + ], + streamState: + createInitialLighthouseV2StreamState(provisionalTaskId), + })); + + // Subscribe to the same-origin SSE proxy BEFORE sending the message: + // the backend has no replay buffer, so the listener must be attached + // before the worker starts emitting. + startStream(buildLighthouseV2StreamUrl(sessionId), sessionId); + + const result = await sendLighthouseV2Message({ + sessionId, + text: trimmedText, + provider: selection.providerType, + model: selection.modelId, + }); + if (destroyed) return; + + if ("error" in result) { + // Stale guard: the chat may point at another session by now, so + // this failure must not clobber its stream state or feedback. + if (get().activeSessionId !== sessionId) return; + closeStream(); + set({ + streamState: createInitialLighthouseV2StreamState(), + feedback: result.error, + }); + if (result.status === 409) { + set({ blockedByConflict: true }); + } + // Reconcile the optimistic user message against the server on any + // failure — it may or may not have been persisted. + await refreshMessages(sessionId); + return; + } + + set((current) => ({ + streamState: + current.streamState.activeTaskId === provisionalTaskId + ? { ...current.streamState, activeTaskId: result.data.task.id } + : current.streamState, + })); + notifyLighthouseV2SessionsChanged(); + } finally { + set({ isSubmitting: false }); + } + }, + + openSession: async (sessionId) => { + if (get().activeSessionId === sessionId) return; + sessionIntentVersion += 1; + closeStream(); + set({ + activeSessionId: sessionId, + messages: [], + input: "", + feedback: null, + blockedByConflict: false, + isSubmitting: false, + isLoadingSession: true, + lastSubmittedText: null, + streamState: createInitialLighthouseV2StreamState(), + }); + syncSessionUrl(sessionId); + + const result = await getLighthouseV2Messages(sessionId); + // Stale guard: a reset or another openSession can land mid-fetch. + if (get().activeSessionId !== sessionId) return; + if ("data" in result) { + set({ messages: result.data, isLoadingSession: false }); + } else { + set({ feedback: result.error, isLoadingSession: false }); + } + }, + + resetToNewChat: () => { + sessionIntentVersion += 1; + closeStream(); + set({ + activeSessionId: null, + messages: [], + input: "", + feedback: null, + blockedByConflict: false, + isSubmitting: false, + isLoadingSession: false, + lastSubmittedText: null, + streamState: createInitialLighthouseV2StreamState(), + }); + syncSessionUrl(null); + }, + + handleSessionArchived: (sessionId) => { + // Archiving deletes the session; when it's the open one, fall back to a + // new chat instead of leaving a dead conversation on screen. + if (sessionId === get().activeSessionId) { + get().resetToNewChat(); + } + }, + + destroy: () => { + destroyed = true; + closeStream(); + }, + }; + }); +} + +// Fixed precedence used to pick which connected provider opens the chat. Any +// provider outside this list keeps its relative order behind these. +const LIGHTHOUSE_V2_PROVIDER_PRIORITY = [ + LIGHTHOUSE_V2_PROVIDER_TYPE.OPENAI, + LIGHTHOUSE_V2_PROVIDER_TYPE.BEDROCK, + LIGHTHOUSE_V2_PROVIDER_TYPE.OPENAI_COMPATIBLE, +] as const; + +// Fallback model per provider when the configuration has no remembered model. +const LIGHTHOUSE_V2_PREFERRED_DEFAULT_MODEL: Partial< + Record +> = { + [LIGHTHOUSE_V2_PROVIDER_TYPE.OPENAI]: "gpt-5.6-terra", +}; + +function resolveInitialModelSelection( + connectedConfigurations: LighthouseV2Configuration[], + modelsByProvider: Record< + LighthouseV2ProviderType, + LighthouseV2SupportedModel[] + >, +): LighthouseV2ModelSelection | null { + const priorityIndex = (providerType: LighthouseV2ProviderType) => { + const index = LIGHTHOUSE_V2_PROVIDER_PRIORITY.indexOf(providerType); + return index === -1 ? LIGHTHOUSE_V2_PROVIDER_PRIORITY.length : index; + }; + // Stable sort keeps providers outside the priority list in their original order. + const orderedConfigurations = [...connectedConfigurations].sort( + (a, b) => priorityIndex(a.providerType) - priorityIndex(b.providerType), + ); + + for (const configuration of orderedConfigurations) { + const providerModels = modelsByProvider[configuration.providerType] ?? []; + if (providerModels.length === 0) continue; + // Prefer the provider's remembered model when it is still supported, then + // the provider's preferred default, then the first supported model. + const rememberedModel = providerModels.find( + (model) => model.id === configuration.defaultModel, + ); + const preferredModel = providerModels.find( + (model) => + model.id === + LIGHTHOUSE_V2_PREFERRED_DEFAULT_MODEL[configuration.providerType], + ); + return { + providerType: configuration.providerType, + modelId: (rememberedModel ?? preferredModel ?? providerModels[0]).id, + }; + } + + return null; +} diff --git a/ui/app/(prowler)/lighthouse/_lib/load-chat-config.ts b/ui/app/(prowler)/lighthouse/_lib/load-chat-config.ts new file mode 100644 index 0000000000..becc488a34 --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_lib/load-chat-config.ts @@ -0,0 +1,86 @@ +import { + getLighthouseV2Configurations, + getLighthouseV2SupportedModels, + getLighthouseV2SupportedProviders, +} from "@/app/(prowler)/lighthouse/_actions"; +import type { LighthouseChatConfig } from "@/app/(prowler)/lighthouse/_lib/chat-store"; +import { loadLighthouseV2ConnectedModels } from "@/app/(prowler)/lighthouse/_lib/model-loading"; + +export const LIGHTHOUSE_CHAT_CONFIG_STATUS = { + ERROR: "error", + NOT_CONFIGURED: "not-configured", + READY: "ready", +} as const; + +interface LighthouseChatConfigError { + status: typeof LIGHTHOUSE_CHAT_CONFIG_STATUS.ERROR; + message: string; +} + +interface LighthouseChatConfigNotConfigured { + status: typeof LIGHTHOUSE_CHAT_CONFIG_STATUS.NOT_CONFIGURED; +} + +interface LighthouseChatConfigReady { + status: typeof LIGHTHOUSE_CHAT_CONFIG_STATUS.READY; + config: LighthouseChatConfig; + modelsError?: string; +} + +export type LighthouseChatConfigResult = + | LighthouseChatConfigError + | LighthouseChatConfigNotConfigured + | LighthouseChatConfigReady; + +// Shared by the /lighthouse server page and the client panel: both need the +// same configurations + providers + connected-models bundle. Server actions +// are callable from either context. Rejections propagate to the caller. +export async function loadLighthouseChatConfig(): Promise { + const [configurationsResult, supportedProvidersResult] = await Promise.all([ + getLighthouseV2Configurations(), + getLighthouseV2SupportedProviders(), + ]); + if ("error" in configurationsResult) { + return { + status: LIGHTHOUSE_CHAT_CONFIG_STATUS.ERROR, + message: configurationsResult.error, + }; + } + if ("error" in supportedProvidersResult) { + return { + status: LIGHTHOUSE_CHAT_CONFIG_STATUS.ERROR, + message: supportedProvidersResult.error, + }; + } + + const configurations = configurationsResult.data; + const hasConnectedProvider = configurations.some( + (configuration) => configuration.connected === true, + ); + if (!hasConnectedProvider) { + return { status: LIGHTHOUSE_CHAT_CONFIG_STATUS.NOT_CONFIGURED }; + } + + const { modelsByProvider, failedModelProviders } = + await loadLighthouseV2ConnectedModels( + configurations, + getLighthouseV2SupportedModels, + ); + // Surface (rather than silently swallow to []) connected providers whose + // models failed to load, so their empty list reads as a real backend + // failure. Disconnected providers are never fetched (see model-loading.ts). + const modelsError = + failedModelProviders.length > 0 + ? `Could not load available models for: ${failedModelProviders.join(", ")}. Try again shortly.` + : undefined; + + return { + status: LIGHTHOUSE_CHAT_CONFIG_STATUS.READY, + config: { + configurations, + modelsByProvider, + supportedProviders: supportedProvidersResult.data, + }, + modelsError, + }; +} diff --git a/ui/app/(prowler)/lighthouse/_lib/panel-chat-message-state.ts b/ui/app/(prowler)/lighthouse/_lib/panel-chat-message-state.ts new file mode 100644 index 0000000000..55661c55bd --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_lib/panel-chat-message-state.ts @@ -0,0 +1,44 @@ +type PanelChatMessageStateListener = () => void; + +const listeners = new Set(); +let hasMessages = false; +let activeSessionId: string | null = null; + +export function getPanelChatHasMessages(): boolean { + return hasMessages; +} + +export function subscribePanelChatHasMessages( + listener: PanelChatMessageStateListener, +): () => void { + listeners.add(listener); + return () => listeners.delete(listener); +} + +export function getPanelChatActiveSessionId(): string | null { + return activeSessionId; +} + +interface PanelChatMessageState { + hasMessages: boolean; + activeSessionId: string | null; +} + +export function setPanelChatMessageState( + nextState: PanelChatMessageState, +): void { + if ( + hasMessages === nextState.hasMessages && + activeSessionId === nextState.activeSessionId + ) { + return; + } + + hasMessages = nextState.hasMessages; + activeSessionId = nextState.activeSessionId; + listeners.forEach((listener) => listener()); +} + +export function resetPanelChatMessageState(): void { + setPanelChatMessageState({ hasMessages: false, activeSessionId: null }); +} diff --git a/ui/app/(prowler)/lighthouse/_lib/panel-chat-store.ts b/ui/app/(prowler)/lighthouse/_lib/panel-chat-store.ts new file mode 100644 index 0000000000..d435fde2b2 --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_lib/panel-chat-store.ts @@ -0,0 +1,57 @@ +import { + createLighthouseChatStore, + type LighthouseChatConfig, + type LighthouseChatStore, +} from "@/app/(prowler)/lighthouse/_lib/chat-store"; + +// Module-level singleton: the global side panel keeps the same conversation +// while switching between Details and Lighthouse AI, across route navigation +// and panel closes. The full-page route can reuse it for the same conversation. +let panelChatStore: LighthouseChatStore | null = null; + +interface PanelChatStoreOptions { + initialError?: string; +} + +export function getOrCreatePanelChatStore( + config: LighthouseChatConfig, + options?: PanelChatStoreOptions, +): LighthouseChatStore { + if (!panelChatStore) { + panelChatStore = createLighthouseChatStore({ + config, + syncUrlToSession: false, + initialError: options?.initialError, + }); + } + return panelChatStore; +} + +// Lets the full-page surface reuse the singleton only when both surfaces point +// at the same conversation. This is intentionally a pure lookup: React may +// run state initializers twice in Strict Mode. +export function getPanelChatStoreForSession( + initialSessionId?: string, +): LighthouseChatStore | null { + if (!panelChatStore) return null; + const expectedSessionId = initialSessionId ?? null; + if (panelChatStore.getState().activeSessionId !== expectedSessionId) { + return null; + } + return panelChatStore; +} + +export function isPanelChatStore(store: LighthouseChatStore): boolean { + return panelChatStore === store; +} + +// The config is captured in the store's closure at creation, so a +// configuration change must tear the singleton down and rebuild it. +export function resetPanelChatStore(): void { + panelChatStore?.getState().destroy(); + panelChatStore = null; +} + +export function resetPanelChatStoreForTests(): void { + resetPanelChatStore(); +} diff --git a/ui/app/(prowler)/lighthouse/_lib/session-events.ts b/ui/app/(prowler)/lighthouse/_lib/session-events.ts index ab23282c49..84c722fcd6 100644 --- a/ui/app/(prowler)/lighthouse/_lib/session-events.ts +++ b/ui/app/(prowler)/lighthouse/_lib/session-events.ts @@ -30,3 +30,43 @@ export function notifyLighthouseV2NewChat() { if (typeof window === "undefined") return; window.dispatchEvent(new Event(LIGHTHOUSE_V2_NEW_CHAT_EVENT)); } + +export const LIGHTHOUSE_V2_CONFIGURATIONS_CHANGED_EVENT = + "lighthouse-v2:configurations-changed"; + +// Fired after provider configuration CRUD so cached chat configs (the panel +// keeps one at module scope) can invalidate and reload. +export function notifyLighthouseV2ConfigurationsChanged() { + if (typeof window === "undefined") return; + window.dispatchEvent(new Event(LIGHTHOUSE_V2_CONFIGURATIONS_CHANGED_EVENT)); +} + +// Typed subscribe helpers: each returns an unsubscribe function so consumers +// never hand-roll addEventListener plus the CustomEvent detail cast. +function subscribe(eventName: string, handler: (event: Event) => void) { + if (typeof window === "undefined") return () => {}; + window.addEventListener(eventName, handler); + return () => window.removeEventListener(eventName, handler); +} + +export function onLighthouseV2SessionsChanged(callback: () => void) { + return subscribe(LIGHTHOUSE_V2_SESSIONS_CHANGED_EVENT, callback); +} + +export function onLighthouseV2SessionArchived( + callback: (sessionId: string) => void, +) { + return subscribe(LIGHTHOUSE_V2_SESSION_ARCHIVED_EVENT, (event) => { + const sessionId = (event as CustomEvent<{ sessionId: string }>).detail + ?.sessionId; + if (sessionId) callback(sessionId); + }); +} + +export function onLighthouseV2NewChat(callback: () => void) { + return subscribe(LIGHTHOUSE_V2_NEW_CHAT_EVENT, callback); +} + +export function onLighthouseV2ConfigurationsChanged(callback: () => void) { + return subscribe(LIGHTHOUSE_V2_CONFIGURATIONS_CHANGED_EVENT, callback); +} diff --git a/ui/app/(prowler)/lighthouse/_lib/testing/event-source-mock.ts b/ui/app/(prowler)/lighthouse/_lib/testing/event-source-mock.ts new file mode 100644 index 0000000000..2672509510 --- /dev/null +++ b/ui/app/(prowler)/lighthouse/_lib/testing/event-source-mock.ts @@ -0,0 +1,49 @@ +import { vi } from "vitest"; + +// Controllable EventSource mock: records each instance so tests can drive +// named SSE events and connection failures, while still being a vi.fn so +// `expect(EventSource).toHaveBeenCalledWith(...)` keeps working. +export interface MockEventSource { + url: string; + readyState: number; + onerror: ((event: Event) => void) | null; + listeners: Map>; + addEventListener: (type: string, cb: EventListener) => void; + close: ReturnType; + emit: (type: string, data: unknown) => void; + fail: (readyState: number) => void; +} + +// The mock never fires "open": the client must POST the message without +// waiting for it (the backend sends no bytes until the worker emits, which +// only happens after the POST). This is the regression guard for the +// open-gate deadlock. +export function stubEventSource(): MockEventSource[] { + const eventSources: MockEventSource[] = []; + const EventSourceMock = vi.fn(function (this: MockEventSource, url: string) { + this.url = url; + this.readyState = 0; + this.onerror = null; + this.listeners = new Map(); + this.addEventListener = (type: string, cb: EventListener) => { + const set = this.listeners.get(type) ?? new Set(); + set.add(cb); + this.listeners.set(type, set); + }; + this.close = vi.fn(() => { + this.readyState = 2; + }); + this.emit = (type: string, data: unknown) => { + const event = new MessageEvent(type, { data: JSON.stringify(data) }); + this.listeners.get(type)?.forEach((cb) => cb(event)); + }; + this.fail = (readyState: number) => { + this.readyState = readyState; + this.onerror?.(new Event("error")); + }; + eventSources.push(this); + }); + Object.assign(EventSourceMock, { CONNECTING: 0, OPEN: 1, CLOSED: 2 }); + vi.stubGlobal("EventSource", EventSourceMock); + return eventSources; +} diff --git a/ui/app/(prowler)/lighthouse/page.tsx b/ui/app/(prowler)/lighthouse/page.tsx index 625aaf795a..f54be45aed 100644 --- a/ui/app/(prowler)/lighthouse/page.tsx +++ b/ui/app/(prowler)/lighthouse/page.tsx @@ -4,14 +4,12 @@ import { getLighthouseProvidersConfig, isLighthouseConfigured, } from "@/actions/lighthouse-v1/lighthouse"; -import { - getLighthouseV2Configurations, - getLighthouseV2Messages, - getLighthouseV2SupportedModels, - getLighthouseV2SupportedProviders, -} from "@/app/(prowler)/lighthouse/_actions"; +import { getLighthouseV2Messages } from "@/app/(prowler)/lighthouse/_actions"; import { LighthouseV2ChatPage } from "@/app/(prowler)/lighthouse/_components/chat"; -import { loadLighthouseV2ConnectedModels } from "@/app/(prowler)/lighthouse/_lib/model-loading"; +import { + LIGHTHOUSE_CHAT_CONFIG_STATUS, + loadLighthouseChatConfig, +} from "@/app/(prowler)/lighthouse/_lib/load-chat-config"; import { LighthouseIcon } from "@/components/icons/Icons"; import { APP_SIDEBAR_MODE, @@ -36,34 +34,13 @@ export default async function AIChatbot({ typeof params.session === "string" ? params.session : undefined; if (isCloud()) { - const [configurationsResult, supportedProvidersResult] = await Promise.all([ - getLighthouseV2Configurations(), - getLighthouseV2SupportedProviders(), - ]); - const configurations = - "data" in configurationsResult ? configurationsResult.data : []; - const supportedProviders = - "data" in supportedProvidersResult ? supportedProvidersResult.data : []; - const connectedConfigurations = configurations.filter( - (configuration) => configuration.connected === true, - ); - - if (connectedConfigurations.length === 0) { + const chatConfigResult = await loadLighthouseChatConfig(); + // Errors and the not-configured case both land on settings, where the + // user can connect (or fix) a provider. + if (chatConfigResult.status !== LIGHTHOUSE_CHAT_CONFIG_STATUS.READY) { return redirect(LIGHTHOUSE_ROUTE.SETTINGS); } - - const { modelsByProvider, failedModelProviders } = - await loadLighthouseV2ConnectedModels( - configurations, - getLighthouseV2SupportedModels, - ); - // Surface (rather than silently swallow to []) connected providers whose - // models failed to load, so their empty list reads as a real backend - // failure. Disconnected providers are never fetched (see model-loading.ts). - const modelsError = - failedModelProviders.length > 0 - ? `Could not load available models for: ${failedModelProviders.join(", ")}. Try again shortly.` - : undefined; + const { config, modelsError } = chatConfigResult; const initialMessages = activeSessionId ? await getLighthouseV2Messages(activeSessionId) @@ -80,15 +57,15 @@ export default async function AIChatbot({ return ( }> - + {/* [contain:layout] traps streamdown's fixed fullscreen overlay inside the chat area so it never covers the sidebar or navbar. */}
({ + setThemeMock: vi.fn(), + themeState: { current: "light" }, +})); + +vi.mock("next-themes", () => ({ + useTheme: () => ({ theme: themeState.current, setTheme: setThemeMock }), +})); + +describe("ThemeSwitch", () => { + beforeEach(() => { + setThemeMock.mockClear(); + themeState.current = "light"; + }); + + it("exposes an accessible switch reflecting the current mode", () => { + // Given / When + render(); + + // Then + const control = screen.getByRole("switch", { + name: "Switch to dark mode", + }); + expect(control).toHaveAttribute("aria-checked", "true"); + }); + + it("toggles to the opposite theme on click", () => { + // Given + render(); + + // When + fireEvent.click(screen.getByRole("switch")); + + // Then + expect(setThemeMock).toHaveBeenCalledWith("dark"); + }); + + it("renders as a shared ghost icon button, matching the navbar cluster", () => { + // Given / When + render(); + + // Then: same 32px square treatment as the other navbar actions + const control = screen.getByRole("switch"); + expect(control).toHaveClass("size-8"); + expect(control).not.toHaveClass("rounded-full"); + }); +}); diff --git a/ui/components/ThemeSwitch.tsx b/ui/components/ThemeSwitch.tsx index 4979dec541..8de15b3531 100644 --- a/ui/components/ThemeSwitch.tsx +++ b/ui/components/ThemeSwitch.tsx @@ -3,12 +3,12 @@ import { useTheme } from "next-themes"; import { ComponentProps, useSyncExternalStore } from "react"; +import { Button } from "@/components/shadcn/button/button"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/shadcn/tooltip"; -import { cn } from "@/lib/utils"; import { MoonFilledIcon, SunFilledIcon } from "./icons"; @@ -30,24 +30,23 @@ export function ThemeSwitch({ className, ...props }: ThemeSwitchProps) { return ( - + {isLightMode ? "Switch to Dark Mode" : "Switch to Light Mode"} diff --git a/ui/components/compliance/compliance-charts/heatmap-chart.test.tsx b/ui/components/compliance/compliance-charts/heatmap-chart.test.tsx new file mode 100644 index 0000000000..409974af77 --- /dev/null +++ b/ui/components/compliance/compliance-charts/heatmap-chart.test.tsx @@ -0,0 +1,36 @@ +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { describe, expect, it, vi } from "vitest"; + +import { HeatmapChart } from "./heatmap-chart"; + +vi.mock("next-themes", () => ({ + useTheme: () => ({ theme: "light" }), +})); + +describe("HeatmapChart", () => { + it("portals its pointer-positioned tooltip outside layout containers", async () => { + // Given + const user = userEvent.setup(); + const { container } = render( + , + ); + + // When + await user.hover(screen.getByTitle("Identity")); + + // Then: fixed client coordinates resolve against the viewport, not
+ const tooltip = screen.getByRole("tooltip"); + expect(container).not.toContainElement(tooltip); + expect(tooltip.parentElement).toBe(document.body); + }); +}); diff --git a/ui/components/compliance/compliance-charts/heatmap-chart.tsx b/ui/components/compliance/compliance-charts/heatmap-chart.tsx index 2d7ce547b3..f57fa70aee 100644 --- a/ui/components/compliance/compliance-charts/heatmap-chart.tsx +++ b/ui/components/compliance/compliance-charts/heatmap-chart.tsx @@ -2,6 +2,7 @@ import { useTheme } from "next-themes"; import { useState } from "react"; +import { createPortal } from "react-dom"; import { cn } from "@/lib/utils"; import { CategoryData } from "@/types/compliance"; @@ -115,44 +116,49 @@ export const HeatmapChart = ({ categories = [] }: HeatmapChartProps) => {
{/* Custom Tooltip */} - {hoveredItem && ( -
-
- {capitalizeFirstLetter(hoveredItem.name)} -
-
- - Failure Rate: {hoveredItem.failurePercentage}% - -
-
- - Failed: {hoveredItem.failedRequirements}/ - {hoveredItem.totalRequirements} - -
-
- )} +
+ {capitalizeFirstLetter(hoveredItem.name)} +
+
+ + Failure Rate: {hoveredItem.failurePercentage}% + +
+
+ + Failed: {hoveredItem.failedRequirements}/ + {hoveredItem.totalRequirements} + +
+
, + document.body, + ) + : null}
); diff --git a/ui/components/feeds/feeds-client.tsx b/ui/components/feeds/feeds-client.tsx index e91e16b6d6..6b0e45e367 100644 --- a/ui/components/feeds/feeds-client.tsx +++ b/ui/components/feeds/feeds-client.tsx @@ -58,8 +58,9 @@ export function FeedsClient({ feedData, error }: FeedsClientProps) { - + {/* Portaled to body:
is a layout container (container queries), + which would otherwise capture this fixed button and scroll it away + with the content. */} + {typeof document !== "undefined" + ? createPortal( +
+ +
, + document.body, + ) + : null} ); } diff --git a/ui/components/findings/table/column-finding-groups.test.tsx b/ui/components/findings/table/column-finding-groups.test.tsx index 5a8ec51e56..ca6e01bb7b 100644 --- a/ui/components/findings/table/column-finding-groups.test.tsx +++ b/ui/components/findings/table/column-finding-groups.test.tsx @@ -409,7 +409,9 @@ describe("column-finding-groups — accessibility of check title cell", () => { expect( screen.queryByRole("button", { name: "Fallback IaC Check" }), ).not.toBeInTheDocument(); - expect(screen.getByText("Fallback IaC Check")).toBeInTheDocument(); + // The title renders as plain (non-clickable) text and the inline-mocked + // tooltip duplicates it, so exactly both copies must exist. + expect(screen.getAllByText("Fallback IaC Check")).toHaveLength(2); expect(onDrillDown).not.toHaveBeenCalled(); }); }); diff --git a/ui/components/findings/table/column-finding-groups.tsx b/ui/components/findings/table/column-finding-groups.tsx index f200a4ed39..e5cd81cb4d 100644 --- a/ui/components/findings/table/column-finding-groups.tsx +++ b/ui/components/findings/table/column-finding-groups.tsx @@ -199,20 +199,29 @@ export function getColumnFindingGroups({ {providerName} ) : null} -
- {canExpand ? ( - + ) : ( + + {group.checkTitle} + + )} + + {group.checkTitle} - - ) : ( - - {group.checkTitle} - - )} + +
); diff --git a/ui/components/findings/table/column-standalone-findings.tsx b/ui/components/findings/table/column-standalone-findings.tsx index 75887ee9b9..30facaf97f 100644 --- a/ui/components/findings/table/column-standalone-findings.tsx +++ b/ui/components/findings/table/column-standalone-findings.tsx @@ -9,6 +9,11 @@ import { SeverityBadge, StatusFindingBadge, } from "@/components/shadcn/table"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/shadcn/tooltip"; import { getRegionFlag } from "@/lib/region-flags"; import { getOptionalText } from "@/lib/utils"; import { FindingProps, ProviderType } from "@/types"; @@ -67,11 +72,17 @@ function FindingTitleCell({ finding={finding} defaultOpen={defaultOpen} trigger={ -
-

+ // Single line always: ellipsis beyond the max, full title in the tooltip. + + +

+ {finding.attributes.check_metadata.checktitle} +

+ + {finding.attributes.check_metadata.checktitle} -

-
+ + } /> ); diff --git a/ui/components/findings/table/resource-detail-drawer/resource-detail-drawer-content.tsx b/ui/components/findings/table/resource-detail-drawer/resource-detail-drawer-content.tsx index af7e38acc3..1d2716985f 100644 --- a/ui/components/findings/table/resource-detail-drawer/resource-detail-drawer-content.tsx +++ b/ui/components/findings/table/resource-detail-drawer/resource-detail-drawer-content.tsx @@ -74,6 +74,7 @@ import { ResourceMetadataPanel } from "@/components/shared/resource-metadata-pan import { getFailingForLabel } from "@/lib/date-utils"; import { formatDuration } from "@/lib/date-utils"; import { shouldRefreshAfterTriageUpdate } from "@/lib/finding-triage"; +import { buildFindingAnalysisPrompt } from "@/lib/lighthouse/prompts"; import { getRegionFlag } from "@/lib/region-flags"; import { getRecommendationLinkLabel } from "@/lib/vulnerability-references"; import type { ComplianceOverviewData } from "@/types/compliance"; @@ -471,6 +472,16 @@ export function ResourceDetailDrawerContent({ const overviewStatusExtended = currentResource?.statusExtended || f?.statusExtended; const showOverviewStatusExtended = Boolean(overviewStatusExtended); + const findingAnalysisPrompt = buildFindingAnalysisPrompt({ + findingId: currentResource?.findingId ?? f?.id, + providerUid, + resourceUid, + checkId: currentResource?.checkId ?? checkMeta.checkId, + severity: findingSeverity, + status: findingStatus, + detail: overviewStatusExtended, + risk: f?.risk || checkMeta.risk, + }); const handleDrawerTriageUpdate = async (input: UpdateFindingTriageInput) => { await updateFindingTriage(input); @@ -712,7 +723,10 @@ export function ResourceDetailDrawerContent({ <>
{/* Resource info grid — 4 data columns */} -
+
{/* Row 1: Provider, Resource, Service, Region */}
- - - Resource Finding Details - - View finding details for the selected resource - - - - - Close - - {open && ( - - )} - - + + + ); } diff --git a/ui/components/findings/table/resource-detail-drawer/resource-detail-skeleton.tsx b/ui/components/findings/table/resource-detail-drawer/resource-detail-skeleton.tsx index 938b4bc35a..163a2dbd54 100644 --- a/ui/components/findings/table/resource-detail-drawer/resource-detail-skeleton.tsx +++ b/ui/components/findings/table/resource-detail-drawer/resource-detail-skeleton.tsx @@ -8,7 +8,10 @@ import { Skeleton } from "@/components/shadcn/skeleton/skeleton"; export function ResourceDetailSkeleton() { return (
-
+
{/* Row 1: Provider, Resource, Service, Region */}
diff --git a/ui/components/icons/Icons.tsx b/ui/components/icons/Icons.tsx index a4053e9f55..0a2edb0526 100644 --- a/ui/components/icons/Icons.tsx +++ b/ui/components/icons/Icons.tsx @@ -1129,7 +1129,13 @@ export const LighthouseIcon: React.FC = ({ height, ...props }) => { - const gradientId = (id: string) => (animatedAura ? `${id}_animated` : id); + // Gradient defs are referenced by id, and this icon renders many times per + // page. Duplicate ids resolve against the FIRST instance in the document — + // if that one sits in a display:none subtree (e.g. the desktop sidebar on + // mobile), every other copy loses its fill and turns invisible. useId keeps + // each instance self-contained; strip its delimiters for url(#...) safety. + const uid = React.useId().replace(/[«»:]/g, ""); + const gradientId = (id: string) => `${id}_${uid}`; return ( { + it("keeps gradient ids unique across instances", () => { + // Given: the icon rendered several times on one page (sidebar, navbar, + // overview banner) — with duplicate ids, browsers resolve url(#...) + // against the first instance, which may sit in a display:none subtree + // (the desktop sidebar on mobile) and leave the others unpainted. + const { container } = render( + <> + + + + , + ); + + // Then: every gradient id is unique document-wide + const ids = Array.from( + container.querySelectorAll("linearGradient, radialGradient"), + ).map((gradient) => gradient.id); + expect(ids.length).toBeGreaterThan(0); + expect(new Set(ids).size).toBe(ids.length); + }); + + it("paints every path from its own instance's defs", () => { + // Given + const { container } = render(); + const svg = container.querySelector("svg") as SVGElement; + const localIds = new Set( + Array.from(svg.querySelectorAll("linearGradient, radialGradient")).map( + (gradient) => gradient.id, + ), + ); + + // Then: every fill/stroke reference resolves inside this same svg + const references = Array.from(svg.querySelectorAll("path")) + .flatMap((path) => [ + path.getAttribute("fill"), + path.getAttribute("stroke"), + ]) + .filter((paint): paint is string => paint?.startsWith("url(#") ?? false); + expect(references.length).toBeGreaterThan(0); + for (const reference of references) { + const id = reference.slice("url(#".length, -1); + expect(localIds.has(id)).toBe(true); + } + }); +}); diff --git a/ui/components/layout/app-sidebar/app-sidebar-mode-sync.test.tsx b/ui/components/layout/app-sidebar/app-sidebar-mode-sync.test.tsx index 59caaae738..7eb39455b4 100644 --- a/ui/components/layout/app-sidebar/app-sidebar-mode-sync.test.tsx +++ b/ui/components/layout/app-sidebar/app-sidebar-mode-sync.test.tsx @@ -1,6 +1,8 @@ import { render } from "@testing-library/react"; import { beforeEach, describe, expect, it } from "vitest"; +import { useSidePanelStore } from "@/store/side-panel"; + import { useAppSidebarMode } from "./app-sidebar-mode-store"; import { AppSidebarModeSync } from "./app-sidebar-mode-sync"; import { APP_SIDEBAR_MODE } from "./types"; @@ -8,6 +10,7 @@ import { APP_SIDEBAR_MODE } from "./types"; describe("AppSidebarModeSync", () => { beforeEach(() => { useAppSidebarMode.setState({ mode: APP_SIDEBAR_MODE.CHAT }); + useSidePanelStore.setState({ isOpen: false }); }); it("restores the requested sidebar mode when a route mounts", () => { @@ -17,4 +20,26 @@ describe("AppSidebarModeSync", () => { // Then expect(useAppSidebarMode.getState().mode).toBe(APP_SIDEBAR_MODE.BROWSE); }); + + it("keeps the side panel open by default", () => { + // Given + useSidePanelStore.setState({ isOpen: true }); + + // When + render(); + + // Then + expect(useSidePanelStore.getState().isOpen).toBe(true); + }); + + it("closes the side panel when the full-page chat mounts", () => { + // Given + useSidePanelStore.setState({ isOpen: true }); + + // When + render(); + + // Then + expect(useSidePanelStore.getState().isOpen).toBe(false); + }); }); diff --git a/ui/components/layout/app-sidebar/app-sidebar-mode-sync.tsx b/ui/components/layout/app-sidebar/app-sidebar-mode-sync.tsx index c97d84a14d..b4d7887dfb 100644 --- a/ui/components/layout/app-sidebar/app-sidebar-mode-sync.tsx +++ b/ui/components/layout/app-sidebar/app-sidebar-mode-sync.tsx @@ -1,19 +1,29 @@ "use client"; import { useMountEffect } from "@/hooks/use-mount-effect"; +import { useSidePanelStore } from "@/store/side-panel"; import { useAppSidebarMode } from "./app-sidebar-mode-store"; import type { AppSidebarMode } from "./types"; interface AppSidebarModeSyncProps { mode: AppSidebarMode; + // The full-page chat dismisses the side panel: the chat lives in one place + // or the other, never both. + closeSidePanel?: boolean; } -export function AppSidebarModeSync({ mode }: AppSidebarModeSyncProps) { +export function AppSidebarModeSync({ + mode, + closeSidePanel = false, +}: AppSidebarModeSyncProps) { const setMode = useAppSidebarMode((state) => state.setMode); useMountEffect(() => { setMode(mode); + if (closeSidePanel) { + useSidePanelStore.getState().closePanel(); + } }); return null; diff --git a/ui/components/layout/app-sidebar/mobile-app-sidebar.test.tsx b/ui/components/layout/app-sidebar/mobile-app-sidebar.test.tsx index 75aae87f5a..343a6aef72 100644 --- a/ui/components/layout/app-sidebar/mobile-app-sidebar.test.tsx +++ b/ui/components/layout/app-sidebar/mobile-app-sidebar.test.tsx @@ -45,6 +45,17 @@ describe("MobileAppSidebar", () => { expect(openButton).toHaveFocus(); }); + it("hides the trigger based on the viewport, not the narrowed content", () => { + // Given / When + render(); + + // Then: lg: is a container query inside
; the side panel squeezing + // the page must not surface the mobile menu on desktop. + expect(screen.getByRole("button", { name: "Open menu" })).toHaveClass( + "min-[64rem]:hidden", + ); + }); + it("closes after selecting an item from the shared sidebar content", async () => { // Given const user = userEvent.setup(); diff --git a/ui/components/layout/app-sidebar/mobile-app-sidebar.tsx b/ui/components/layout/app-sidebar/mobile-app-sidebar.tsx index abb6fbbfe7..0a3f9afdeb 100644 --- a/ui/components/layout/app-sidebar/mobile-app-sidebar.tsx +++ b/ui/components/layout/app-sidebar/mobile-app-sidebar.tsx @@ -35,7 +35,9 @@ export function MobileAppSidebar() { variant="bare" size="icon-sm" aria-label="Open menu" - className={cn("lg:hidden", open && "invisible")} + // min-[64rem] (not lg:): inside
, lg is a container query and + // the side panel squeezing the page would surface the mobile menu. + className={cn("min-[64rem]:hidden", open && "invisible")} > diff --git a/ui/components/layout/main-layout/main-layout.test.tsx b/ui/components/layout/main-layout/main-layout.test.tsx index 9fc9ae816e..26ebcc55e6 100644 --- a/ui/components/layout/main-layout/main-layout.test.tsx +++ b/ui/components/layout/main-layout/main-layout.test.tsx @@ -24,4 +24,35 @@ describe("MainLayout", () => { expect(screen.getByText("Page content")).toBeVisible(); expect(screen.getByRole("main")).toBeVisible(); }); + + it("keeps the desktop sidebar offset based on the viewport", () => { + // Given / When + render( + +
Page content
+ , + ); + + // Then: a right panel may narrow main, but the desktop sidebar stays open. + // Margin reaches the sidebar edge; the 16px gutter is padding so the + // navbar's bled border-b paints instead of being clipped by the scroller. + expect(screen.getByText("Page content").parentElement).toHaveClass( + "min-[64rem]:ml-[264px]", + "pl-4", + ); + }); + + it("marks main as the responsive container for pushed page content", () => { + // Given / When + render( + +
Page content
+
, + ); + + // Then + expect(screen.getByText("Page content").parentElement).toHaveAttribute( + "data-responsive-container", + ); + }); }); diff --git a/ui/components/layout/main-layout/main-layout.tsx b/ui/components/layout/main-layout/main-layout.tsx index 5f12e22aba..09141c8daa 100644 --- a/ui/components/layout/main-layout/main-layout.tsx +++ b/ui/components/layout/main-layout/main-layout.tsx @@ -1,14 +1,60 @@ +"use client"; + +import { usePathname } from "next/navigation"; import { type ReactNode, Suspense } from "react"; import { AppSidebar } from "@/components/layout/app-sidebar"; import { CloudUpgradeModal } from "@/components/shared/cloud-upgrade-modal"; +import { useMediaQuery } from "@/hooks/use-media-query"; +import { useStore } from "@/hooks/use-store"; +import { isLighthouseChatRoute } from "@/lib/lighthouse-routes"; +import { + clampSidePanelWidth, + SIDE_PANEL_PUSH_MEDIA_QUERY, +} from "@/lib/ui-layout"; +import { cn } from "@/lib/utils"; +import { useSidePanelStore } from "@/store/side-panel"; export default function MainLayout({ children }: { children: ReactNode }) { + const pathname = usePathname(); + // Push (not overlay): the open side panel shrinks the page by exactly its + // (user-resizable) width so everything stays reachable. Below `sm` the + // panel overlays full-width instead, where pushing would leave no page. The + // full-page chat route has no panel at all. + const sidePanelOpen = useStore(useSidePanelStore, (x) => x.isOpen); + const sidePanelWidth = useStore(useSidePanelStore, (x) => x.width); + const sidePanelResizing = useStore(useSidePanelStore, (x) => x.isResizing); + const isPushViewport = useMediaQuery(SIDE_PANEL_PUSH_MEDIA_QUERY); + // Re-clamp at consumption: a persisted width from a larger monitor + // rehydrates raw and would otherwise collapse
on this viewport. + const pushWidth = + sidePanelOpen && + sidePanelWidth !== undefined && + isPushViewport && + !isLighthouseChatRoute(pathname) + ? clampSidePanelWidth(sidePanelWidth) + : undefined; return (
-
+
is the reference for the app's (container-query) + // breakpoints, so pushing it with the side panel re-evaluates them. + // min-[64rem] (not lg:) keeps the sidebar margin on viewport terms. + // The 16px gutter is padding (not margin): main scrolls, and a scroll + // container clips at its padding box — the navbar's border-b bleeds + // across this gutter to meet the sidebar's border-r. + data-responsive-container + className={cn( + "no-scrollbar @container relative z-10 mb-auto h-full flex-1 flex-col overflow-y-auto pl-4 min-[64rem]:ml-[264px]", + // Margin animates on open/close, but tracks the pointer 1:1 during + // a drag resize. + !sidePanelResizing && + "transition-[margin-left,margin-right] duration-300 ease-in-out", + )} + style={{ marginRight: pushWidth }} + > {children}
diff --git a/ui/components/layout/nav-bar/navbar-client.test.tsx b/ui/components/layout/nav-bar/navbar-client.test.tsx index 60147a24f7..c93ed3f6e5 100644 --- a/ui/components/layout/nav-bar/navbar-client.test.tsx +++ b/ui/components/layout/nav-bar/navbar-client.test.tsx @@ -6,8 +6,9 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import { getFlowById } from "@/lib/onboarding"; import { localStorageAdapter } from "@/lib/tours/store/local-storage-adapter"; import { usePageReadyStore } from "@/store/page-ready"; +import { SIDE_PANEL_TAB, useSidePanelStore } from "@/store/side-panel"; -import { NavbarClient } from "./navbar-client"; +import { FeedsLoadingFallback, NavbarClient } from "./navbar-client"; const navigationMocks = vi.hoisted(() => ({ pathname: "/findings", @@ -69,6 +70,10 @@ describe("NavbarClient", () => { vi.stubEnv("NEXT_PUBLIC_IS_CLOUD_ENV", "true"); // Default: the current route's content has loaded, so the icon is enabled. usePageReadyStore.setState({ readyPath: "/findings" }); + useSidePanelStore.setState({ + isOpen: false, + selectedTab: SIDE_PANEL_TAB.AI_CHAT, + }); }); it("renders an accessible contextual onboarding button in the breadcrumb", async () => { @@ -231,6 +236,61 @@ describe("NavbarClient", () => { ).not.toBeInTheDocument(); }); + it("shows the Lighthouse AI side-panel trigger in cloud", () => { + // Given / When + render(); + + // Then + expect(screen.getByTestId("side-panel-ai-trigger")).toBeInTheDocument(); + expect( + screen.getByRole("button", { name: "Ask Lighthouse AI" }), + ).toBeInTheDocument(); + }); + + it("hides the Lighthouse AI trigger while the AI chat panel is already open", () => { + // Given + useSidePanelStore.setState({ + isOpen: true, + selectedTab: SIDE_PANEL_TAB.AI_CHAT, + }); + + // When + render(); + + // Then + expect( + screen.queryByTestId("side-panel-ai-trigger"), + ).not.toBeInTheDocument(); + }); + + it("keeps the Lighthouse AI trigger while the panel shows a detail tab", () => { + // Given: the panel is open but on the context (detail) tab, so the trigger + // is still the way to switch to the AI chat. + useSidePanelStore.setState({ + isOpen: true, + selectedTab: SIDE_PANEL_TAB.CONTEXT, + }); + + // When + render(); + + // Then + expect(screen.getByTestId("side-panel-ai-trigger")).toBeInTheDocument(); + }); + + it("hides the Lighthouse AI side-panel trigger in self-hosted (OSS) deployments", () => { + // Given + vi.stubEnv("NEXT_PUBLIC_IS_CLOUD_ENV", "false"); + + // When + render(); + + // Then + expect( + screen.queryByTestId("side-panel-ai-trigger"), + ).not.toBeInTheDocument(); + }); + it("does not render a contextual onboarding button for unknown flows", () => { // Given / When render( @@ -245,4 +305,29 @@ describe("NavbarClient", () => { screen.queryByRole("button", { name: /start product tour/i }), ).not.toBeInTheDocument(); }); + + it("draws a bottom separator that reaches the sidebar's edge", () => { + // Given / When + render(); + + // Then: same token as the sidebar's border-r, bled 16px left to meet it + const header = screen.getByRole("banner"); + expect(header).toHaveClass( + "border-b", + "border-border-neutral-secondary", + "-ml-4", + "pl-4", + ); + expect(header).not.toHaveClass("w-full"); + }); + + it("keeps the feeds fallback on the shared ghost icon treatment", () => { + // Given / When + render(); + + // Then: same 32px square as the rest of the navbar action cluster + const button = screen.getByRole("button", { name: "Loading updates" }); + expect(button).toHaveClass("size-8"); + expect(button).not.toHaveClass("rounded-full"); + }); }); diff --git a/ui/components/layout/nav-bar/navbar-client.tsx b/ui/components/layout/nav-bar/navbar-client.tsx index 5ee6a6a0b6..088e31ac33 100644 --- a/ui/components/layout/nav-bar/navbar-client.tsx +++ b/ui/components/layout/nav-bar/navbar-client.tsx @@ -12,6 +12,7 @@ import { TooltipContent, TooltipTrigger, } from "@/components/shadcn"; +import { SidePanelTrigger } from "@/components/side-panel"; import { ThemeSwitch } from "@/components/ThemeSwitch"; import { getFlowById } from "@/lib/onboarding"; import { isCloud } from "@/lib/shared/env"; @@ -79,7 +80,10 @@ export function NavbarClient({ }; return ( -
+ // -ml-4/pl-4: bleed the bar across
's 16px left gutter so its + // border-b meets the sidebar's border-r. The gutter is main's padding — + // main scrolls and would clip anything bled past its padding box. +
@@ -121,6 +125,7 @@ export function NavbarClient({
+ {feedsSlot} @@ -133,11 +138,12 @@ export function NavbarClient({ export function FeedsLoadingFallback() { return ( ); } diff --git a/ui/components/resources/resource-details-sheet.tsx b/ui/components/resources/resource-details-sheet.tsx index 1ae3ec0e74..c0603d9124 100644 --- a/ui/components/resources/resource-details-sheet.tsx +++ b/ui/components/resources/resource-details-sheet.tsx @@ -1,15 +1,6 @@ "use client"; -import { X } from "lucide-react"; - -import { - Drawer, - DrawerClose, - DrawerContent, - DrawerDescription, - DrawerHeader, - DrawerTitle, -} from "@/components/shadcn"; +import { DetailSidePanel } from "@/components/side-panel/detail-side-panel"; import { ResourceProps } from "@/types"; import { ResourceDetailContent } from "./table/resource-detail-content"; @@ -26,20 +17,13 @@ export const ResourceDetailsSheet = ({ onOpenChange, }: ResourceDetailsSheetProps) => { return ( - - - - Resource Details - View the resource details - - - - Close - - {open && ( - - )} - - + + + ); }; diff --git a/ui/components/shadcn/combobox/combobox.test.tsx b/ui/components/shadcn/combobox/combobox.test.tsx new file mode 100644 index 0000000000..797b770c19 --- /dev/null +++ b/ui/components/shadcn/combobox/combobox.test.tsx @@ -0,0 +1,20 @@ +import { render, screen } from "@testing-library/react"; +import { describe, expect, it } from "vitest"; + +import { Combobox } from "./combobox"; + +describe("Combobox", () => { + it("uses the compact trigger size through its semantic API", () => { + // Given / When + render( + , + ); + + // Then + expect(screen.getByRole("combobox", { name: "Model" })).toHaveClass("h-8"); + }); +}); diff --git a/ui/components/shadcn/combobox/combobox.tsx b/ui/components/shadcn/combobox/combobox.tsx index d8f832babc..4420a469e6 100644 --- a/ui/components/shadcn/combobox/combobox.tsx +++ b/ui/components/shadcn/combobox/combobox.tsx @@ -28,9 +28,14 @@ const comboboxTriggerVariants = cva("", { ghost: "border-none bg-transparent shadow-none hover:bg-accent hover:text-text-neutral-primary", }, + size: { + default: "", + sm: "", + }, }, defaultVariants: { variant: "default", + size: "default", }, }); @@ -89,6 +94,7 @@ export function Combobox({ triggerClassName, contentClassName, variant = "default", + size = "default", disabled = false, showSelectedFirst = true, loading = false, @@ -113,12 +119,13 @@ export function Combobox({ + + + , + ); +} + +describe("DiscoveryCallout", () => { + it("renders the title and description while open", () => { + // Given / When + renderCallout(true, vi.fn()); + + // Then + expect(screen.getByTestId("callout")).toBeInTheDocument(); + expect(screen.getByText("Meet the feature")).toBeInTheDocument(); + expect(screen.getByText("It lives right here.")).toBeInTheDocument(); + }); + + it("renders nothing while closed", () => { + // Given / When + renderCallout(false, vi.fn()); + + // Then + expect(screen.queryByTestId("callout")).not.toBeInTheDocument(); + }); + + it("dismisses through the action button", () => { + // Given + const onDismiss = vi.fn(); + renderCallout(true, onDismiss); + + // When + fireEvent.click(screen.getByRole("button", { name: "Got it" })); + + // Then + expect(onDismiss).toHaveBeenCalledTimes(1); + }); + + it("keeps focus free when it opens", () => { + // Given / When: the callout opens on its own (not user-invoked) + renderCallout(true, vi.fn()); + + // Then: focus stays wherever the user had it + expect(screen.getByTestId("callout")).not.toContainElement( + document.activeElement as HTMLElement, + ); + }); +}); diff --git a/ui/components/shadcn/discovery-callout/discovery-callout.tsx b/ui/components/shadcn/discovery-callout/discovery-callout.tsx new file mode 100644 index 0000000000..f2c2aad8b4 --- /dev/null +++ b/ui/components/shadcn/discovery-callout/discovery-callout.tsx @@ -0,0 +1,82 @@ +"use client"; + +import type { ComponentProps, ReactNode } from "react"; + +import { Button } from "@/components/shadcn/button/button"; +import { + Popover, + PopoverAnchor, + PopoverClose, + PopoverContent, +} from "@/components/shadcn/popover"; + +interface DiscoveryCalloutProps { + // Controlled: the caller decides when the hint shows and persists "seen". + open: boolean; + // Fired on every dismissal path: the action button, outside click, Escape. + onDismiss: () => void; + children: ReactNode; +} + +// One-time feature-discovery callout anchored to the control it introduces. +// Compound usage: wrap the anchor element in DiscoveryCalloutAnchor and +// render one DiscoveryCalloutContent beside it, all inside DiscoveryCallout. +export function DiscoveryCallout({ + open, + onDismiss, + children, +}: DiscoveryCalloutProps) { + return ( + { + if (!nextOpen) onDismiss(); + }} + > + {children} + + ); +} + +export const DiscoveryCalloutAnchor = PopoverAnchor; + +interface DiscoveryCalloutContentProps { + title: string; + description: ReactNode; + dismissLabel?: string; + side?: ComponentProps["side"]; + align?: ComponentProps["align"]; + "data-testid"?: string; +} + +export function DiscoveryCalloutContent({ + title, + description, + dismissLabel = "Got it", + side = "bottom", + align = "end", + "data-testid": testId, +}: DiscoveryCalloutContentProps) { + return ( + event.preventDefault()} + data-testid={testId} + > +
+

{title}

+

{description}

+
+ + + +
+
+
+ ); +} diff --git a/ui/components/shadcn/drawer.tsx b/ui/components/shadcn/drawer.tsx deleted file mode 100644 index a688fb0f88..0000000000 --- a/ui/components/shadcn/drawer.tsx +++ /dev/null @@ -1,133 +0,0 @@ -"use client"; - -import type { ComponentProps } from "react"; -import { Drawer as DrawerPrimitive } from "vaul"; - -import { cn } from "@/lib/utils"; - -function Drawer({ ...props }: ComponentProps) { - return ; -} - -function DrawerTrigger({ - ...props -}: ComponentProps) { - return ; -} - -function DrawerPortal({ - ...props -}: ComponentProps) { - return ; -} - -function DrawerClose({ - ...props -}: ComponentProps) { - return ; -} - -function DrawerOverlay({ - className, - ...props -}: ComponentProps) { - return ( - - ); -} - -function DrawerContent({ - className, - children, - ...props -}: ComponentProps) { - return ( - - - -
- {children} - - - ); -} - -function DrawerHeader({ className, ...props }: ComponentProps<"div">) { - return ( -
- ); -} - -function DrawerFooter({ className, ...props }: ComponentProps<"div">) { - return ( -
- ); -} - -function DrawerTitle({ - className, - ...props -}: ComponentProps) { - return ( - - ); -} - -function DrawerDescription({ - className, - ...props -}: ComponentProps) { - return ( - - ); -} - -export { - Drawer, - DrawerClose, - DrawerContent, - DrawerDescription, - DrawerFooter, - DrawerHeader, - DrawerOverlay, - DrawerPortal, - DrawerTitle, - DrawerTrigger, -}; diff --git a/ui/components/shadcn/index.ts b/ui/components/shadcn/index.ts index a36273fe55..6b720d6f79 100644 --- a/ui/components/shadcn/index.ts +++ b/ui/components/shadcn/index.ts @@ -12,7 +12,6 @@ export * from "./card/resource-stats-card/resource-stats-card-header"; export * from "./checkbox/checkbox"; export * from "./combobox"; export * from "./download-icon-button"; -export * from "./drawer"; export * from "./dropdown/dropdown"; export * from "./feedback-banner"; export * from "./field/field"; diff --git a/ui/components/shadcn/popover.tsx b/ui/components/shadcn/popover.tsx index e64bae46ad..c974718f39 100644 --- a/ui/components/shadcn/popover.tsx +++ b/ui/components/shadcn/popover.tsx @@ -32,7 +32,9 @@ function PopoverContent({ align={align} sideOffset={sideOffset} className={cn( - "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 pointer-events-auto z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden", + // House floating surface (same as tooltip); `bg-popover` was a stock + // shadcn token that does not exist in this design system. + "border-border-neutral-tertiary bg-bg-neutral-tertiary text-text-neutral-primary data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 pointer-events-auto z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-lg border p-4 shadow-lg outline-hidden", className, )} {...props} @@ -47,4 +49,10 @@ function PopoverAnchor({ return ; } -export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger }; +function PopoverClose({ + ...props +}: React.ComponentProps) { + return ; +} + +export { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger }; diff --git a/ui/components/shadcn/side-panel/side-panel.tsx b/ui/components/shadcn/side-panel/side-panel.tsx new file mode 100644 index 0000000000..db4755592c --- /dev/null +++ b/ui/components/shadcn/side-panel/side-panel.tsx @@ -0,0 +1,142 @@ +"use client"; + +import { + type ComponentProps, + type KeyboardEvent, + type PointerEvent, +} from "react"; + +import { cn } from "@/lib/utils"; + +// Base right-hand side panel primitive: a fixed shell that slides in from the +// right without a backdrop (non-modal). Presentation only — open state, tabs +// and content wiring live in the caller (see components/side-panel/). + +interface SidePanelProps extends ComponentProps<"aside"> { + open: boolean; +} + +export function SidePanel({ + open, + className, + children, + ...props +}: SidePanelProps) { + return ( + + ); +} + +export function SidePanelHeader({ + className, + ...props +}: ComponentProps<"div">) { + return ( +
+ ); +} + +export function SidePanelBody({ className, ...props }: ComponentProps<"div">) { + return ( +
+ ); +} + +// Width added/removed per arrow-key press when resizing via keyboard. +const KEYBOARD_RESIZE_STEP = 24; + +interface SidePanelResizeHandleProps { + // Receives the pointer's clientX on every drag move; the caller derives the + // new width from it (for a right-anchored panel: viewport width - clientX) + // and clamps it. + onResize: (clientX: number) => void; + onResizeStart?: () => void; + onResizeEnd?: () => void; + // Current width and bounds for the ARIA window-splitter contract and to + // derive keyboard steps. + value: number; + min: number; + max: number; +} + +export function SidePanelResizeHandle({ + onResize, + onResizeStart, + onResizeEnd, + value, + min, + max, +}: SidePanelResizeHandleProps) { + const handlePointerDown = (event: PointerEvent) => { + event.preventDefault(); + event.currentTarget.setPointerCapture(event.pointerId); + onResizeStart?.(); + }; + + const handlePointerMove = (event: PointerEvent) => { + if (!event.currentTarget.hasPointerCapture(event.pointerId)) return; + onResize(event.clientX); + }; + + // Idempotent: also reached via onLostPointerCapture (capture already gone), + // e.g. when Escape closes the panel mid-drag and pointerup never arrives. + const endResize = (event: PointerEvent) => { + if (event.currentTarget.hasPointerCapture(event.pointerId)) { + event.currentTarget.releasePointerCapture(event.pointerId); + } + onResizeEnd?.(); + }; + + // WAI-ARIA window splitter: arrows move the handle as a drag would, so on + // this right-docked panel ArrowLeft widens and ArrowRight narrows. + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key !== "ArrowLeft" && event.key !== "ArrowRight") return; + event.preventDefault(); + const step = + event.key === "ArrowLeft" ? KEYBOARD_RESIZE_STEP : -KEYBOARD_RESIZE_STEP; + // Same contract as a drag: report the clientX the handle would land on. + onResize(window.innerWidth - (value + step)); + }; + + return ( +
+ ); +} diff --git a/ui/components/shadcn/table/data-table.test.tsx b/ui/components/shadcn/table/data-table.test.tsx index b63a5a9bfb..3332e4aa91 100644 --- a/ui/components/shadcn/table/data-table.test.tsx +++ b/ui/components/shadcn/table/data-table.test.tsx @@ -89,7 +89,7 @@ describe("DataTable", () => { ); }); - it("should stack the right content below search on narrow screens", () => { + it("should stack the right content below search when the container is narrow", () => { // Given render( { const toolbar = screen.getByTestId("data-table-toolbar"); const rightContent = screen.getByTestId("data-table-toolbar-right"); - // Then + // Then: md is a container query app-wide, so this also reacts when the + // side panel shrinks the page; the right group stays on one row. expect(toolbar).toHaveClass("flex-col"); expect(toolbar).toHaveClass("md:flex-row"); expect(rightContent).toHaveClass("w-full"); expect(rightContent).toHaveClass("md:w-auto"); + expect(rightContent).toHaveClass("flex-wrap", "items-center"); }); }); diff --git a/ui/components/shadcn/table/data-table.tsx b/ui/components/shadcn/table/data-table.tsx index b0dd231ab7..26bc6bd2aa 100644 --- a/ui/components/shadcn/table/data-table.tsx +++ b/ui/components/shadcn/table/data-table.tsx @@ -285,7 +285,7 @@ export function DataTable({
{toolbarRightContent} {metadata && ( diff --git a/ui/components/shadcn/tooltip.test.tsx b/ui/components/shadcn/tooltip.test.tsx new file mode 100644 index 0000000000..c543a41362 --- /dev/null +++ b/ui/components/shadcn/tooltip.test.tsx @@ -0,0 +1,22 @@ +import { render, screen } from "@testing-library/react"; +import { describe, expect, it } from "vitest"; + +import { Tooltip, TooltipContent, TooltipTrigger } from "./tooltip"; + +describe("TooltipContent", () => { + it("uses a constrained content width through its semantic API", async () => { + // Given / When + render( + + Finding + Long finding description + , + ); + + // Then + const content = ( + await screen.findAllByText("Long finding description") + ).find((element) => element.dataset.slot === "tooltip-content"); + expect(content).toHaveClass("max-w-96"); + }); +}); diff --git a/ui/components/shadcn/tooltip.tsx b/ui/components/shadcn/tooltip.tsx index c024b79c88..698880391c 100644 --- a/ui/components/shadcn/tooltip.tsx +++ b/ui/components/shadcn/tooltip.tsx @@ -1,13 +1,30 @@ "use client"; import * as TooltipPrimitive from "@radix-ui/react-tooltip"; +import { cva, type VariantProps } from "class-variance-authority"; +import type { ComponentProps } from "react"; import { cn } from "@/lib/utils"; +const tooltipContentVariants = cva( + "border-border-neutral-tertiary bg-bg-neutral-tertiary text-text-neutral-primary animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-lg border px-2 py-1.5 text-left text-xs break-all whitespace-normal shadow-lg", + { + variants: { + maxWidth: { + default: "max-w-[min(700px,calc(100vw-2rem))]", + md: "max-w-96", + }, + }, + defaultVariants: { + maxWidth: "default", + }, + }, +); + function TooltipProvider({ delayDuration = 0, ...props -}: React.ComponentProps) { +}: ComponentProps) { return ( ) { +function Tooltip({ ...props }: ComponentProps) { return ( @@ -29,25 +44,27 @@ function Tooltip({ function TooltipTrigger({ ...props -}: React.ComponentProps) { +}: ComponentProps) { return ; } +interface TooltipContentProps + extends ComponentProps, + VariantProps {} + function TooltipContent({ className, + maxWidth, sideOffset = 4, children, ...props -}: React.ComponentProps) { +}: TooltipContentProps) { return ( {children} diff --git a/ui/components/side-panel/detail-side-panel.test.tsx b/ui/components/side-panel/detail-side-panel.test.tsx new file mode 100644 index 0000000000..482e5bb738 --- /dev/null +++ b/ui/components/side-panel/detail-side-panel.test.tsx @@ -0,0 +1,177 @@ +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { useState } from "react"; +import { beforeEach, describe, expect, it, vi } from "vitest"; + +import { SIDE_PANEL_TAB, useSidePanelStore } from "@/store/side-panel"; + +import { DetailSidePanel } from "./detail-side-panel"; +import { GlobalSidePanel } from "./global-side-panel"; + +const { isCloudMock } = vi.hoisted(() => ({ isCloudMock: vi.fn(() => true) })); + +vi.mock("@/lib/shared/env", () => ({ isCloud: isCloudMock })); + +vi.mock("next/navigation", () => ({ + usePathname: () => "/findings", +})); + +vi.mock( + "@/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat", + () => ({ + LighthousePanelChat: () => ( +
chat content
+ ), + }), +); + +// Mimics a table host: local open state, detail content as children. +function Host({ initialOpen = true }: { initialOpen?: boolean }) { + const [open, setOpen] = useState(initialOpen); + return ( + <> + + + +
detail body
+
+ {String(open)} + + ); +} + +// Mimics two findings-table rows, each mounting its own DetailSidePanel with +// per-row open state — the real layout on the findings page. +function DualHost() { + const [openA, setOpenA] = useState(false); + const [openB, setOpenB] = useState(false); + return ( + <> + + + + +
A body
+
+ +
B body
+
+ {String(openA)} + {String(openB)} + + ); +} + +describe("DetailSidePanel", () => { + beforeEach(() => { + isCloudMock.mockReturnValue(true); + localStorage.clear(); + useSidePanelStore.setState({ + isOpen: false, + selectedTab: SIDE_PANEL_TAB.AI_CHAT, + hasBeenOpened: false, + contextTab: null, + contextOwnerToken: 0, + contextOutlet: null, + }); + }); + + it("portals the detail content into the global panel when open", async () => { + // Given / When + render(); + + // Then: the content renders inside the panel's context outlet + const detail = await screen.findByTestId("detail-content"); + expect( + screen.getByTestId("side-panel-context-outlet").contains(detail), + ).toBe(true); + expect(screen.getByRole("tab", { name: "Details" })).toHaveAttribute( + "aria-selected", + "true", + ); + expect(useSidePanelStore.getState().isOpen).toBe(true); + }); + + it("clears the host selection when the panel is dismissed", async () => { + // Given + const user = userEvent.setup(); + render(); + await screen.findByTestId("detail-content"); + + // When + await user.click(screen.getByRole("button", { name: "Close side panel" })); + + // Then: the host's open state flips, the content unmounts, the tab is gone + expect(screen.getByTestId("host-open-state")).toHaveTextContent("false"); + expect(screen.queryByTestId("detail-content")).not.toBeInTheDocument(); + expect(useSidePanelStore.getState().contextTab).toBeNull(); + }); + + it("keeps the detail mounted while chatting on the AI tab", async () => { + // Given + const user = userEvent.setup(); + render(); + await screen.findByTestId("detail-content"); + + // When + await user.click(screen.getByRole("tab", { name: "Lighthouse AI" })); + + // Then: chat is up, detail DOM survives hidden (carousel/scroll intact) + expect(await screen.findByTestId("panel-chat-content")).toBeInTheDocument(); + expect(screen.getByTestId("detail-content")).toBeInTheDocument(); + expect(screen.getByTestId("detail-content")).not.toBeVisible(); + }); + + it("hands the panel to the newest detail view and closes the previous one", async () => { + // Given: finding A's detail view owns the panel + const user = userEvent.setup(); + render(); + await user.click(screen.getByRole("button", { name: "Open A" })); + await screen.findByTestId("detail-a"); + + // When: the user opens finding B while A is still mounted + await user.click(screen.getByRole("button", { name: "Open B" })); + + // Then: only B portals into the outlet; A closed itself + const detailB = await screen.findByTestId("detail-b"); + expect( + screen.getByTestId("side-panel-context-outlet").contains(detailB), + ).toBe(true); + expect(screen.queryByTestId("detail-a")).not.toBeInTheDocument(); + expect(screen.getByTestId("open-a")).toHaveTextContent("false"); + expect(screen.getByTestId("open-b")).toHaveTextContent("true"); + + // When: the panel is dismissed + await user.click(screen.getByRole("button", { name: "Close side panel" })); + + // Then: B (the current owner) is the one that clears its selection + expect(screen.getByTestId("open-b")).toHaveTextContent("false"); + expect(screen.queryByTestId("detail-b")).not.toBeInTheDocument(); + expect(useSidePanelStore.getState().contextTab).toBeNull(); + }); + + it("registers nothing while closed and registers on open", async () => { + // Given + const user = userEvent.setup(); + render(); + expect(useSidePanelStore.getState().contextTab).toBeNull(); + + // When + await user.click(screen.getByRole("button", { name: "Open detail" })); + + // Then + expect(await screen.findByTestId("detail-content")).toBeInTheDocument(); + expect(useSidePanelStore.getState().contextTab?.label).toBe("Details"); + }); +}); diff --git a/ui/components/side-panel/detail-side-panel.tsx b/ui/components/side-panel/detail-side-panel.tsx new file mode 100644 index 0000000000..c7d30aaa4c --- /dev/null +++ b/ui/components/side-panel/detail-side-panel.tsx @@ -0,0 +1,66 @@ +"use client"; + +import { type ReactNode, useState } from "react"; +import { createPortal } from "react-dom"; + +import { useMountEffect } from "@/hooks/use-mount-effect"; +import { useSidePanelStore } from "@/store/side-panel"; + +interface DetailSidePanelProps { + open: boolean; + onOpenChange: (open: boolean) => void; + // Screen-reader heading; the visible tab label is always "Details". + title: string; + description?: string; + children: ReactNode; +} + +// Hosts a detail view (finding/resource) inside the global side panel as its +// "Details" context tab. The owning table keeps ALL detail state (selection, +// carousel, fetch caches) — only the rendered output moves into the panel via +// a portal, so the AI tab and the detail view share one panel, PostHog-style. +// Drop-in replacement for the old vaul detail drawers: same open/onOpenChange +// contract, no modal overlay. +export function DetailSidePanel({ + open, + ...activeProps +}: DetailSidePanelProps) { + // Mount/unmount IS the registration lifecycle: no dependency effects needed. + if (!open) return null; + return ; +} + +function DetailSidePanelActive({ + onOpenChange, + title, + description, + children, +}: Omit) { + // Owner token from registration: several detail views can be mounted at + // once (one per table row); only the current owner may portal or unregister. + const [token, setToken] = useState(null); + + useMountEffect(() => { + const registered = useSidePanelStore.getState().registerContextTab({ + label: "Details", + // Mount-scoped capture is safe: the component remounts per open cycle + // and every consumer's close path ends in stable setters. + onRequestClose: () => onOpenChange(false), + }); + setToken(registered); + return () => useSidePanelStore.getState().unregisterContextTab(registered); + }); + + const ownerToken = useSidePanelStore((state) => state.contextOwnerToken); + const outlet = useSidePanelStore((state) => state.contextOutlet); + if (!outlet || token === null || token !== ownerToken) return null; + + return createPortal( +
+

{title}

+ {description ?

{description}

: null} + {children} +
, + outlet, + ); +} diff --git a/ui/components/side-panel/global-side-panel.test.tsx b/ui/components/side-panel/global-side-panel.test.tsx new file mode 100644 index 0000000000..0626997e0a --- /dev/null +++ b/ui/components/side-panel/global-side-panel.test.tsx @@ -0,0 +1,427 @@ +import { act, render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; + +import { SIDE_PANEL_DEFAULT_WIDTH } from "@/lib/ui-layout"; +import { SIDE_PANEL_TAB, useSidePanelStore } from "@/store/side-panel"; + +import { GlobalSidePanel } from "./global-side-panel"; + +const { isCloudMock } = vi.hoisted(() => ({ isCloudMock: vi.fn(() => true) })); + +const navigationMocks = vi.hoisted(() => ({ pathname: "/findings" })); + +// jsdom has no matchMedia: emulate the push (>= sm) viewport per test. +const mediaMocks = vi.hoisted(() => ({ isPushViewport: false })); + +// Toggles a render failure to exercise the panel's local error boundary. +const chatMocks = vi.hoisted(() => ({ shouldThrow: false })); + +// Adds a second registry tab on demand: the real registry only holds one +// today, but tab-switch isolation must already hold for when cloud adds more. +const registryMocks = vi.hoisted(() => ({ extraTab: false })); + +vi.mock("@/lib/shared/env", () => ({ isCloud: isCloudMock })); + +vi.mock("./side-panel-tabs", async (importOriginal) => { + const original = await importOriginal(); + return { + ...original, + getVisibleSidePanelTabs: () => { + const tabs = original.getVisibleSidePanelTabs(); + if (!registryMocks.extraTab) return tabs; + return [ + ...tabs, + { + id: "second-tab", + label: "Second tab", + Icon: () => null, + loadContent: () => + Promise.resolve({ + default: () => ( +
second content
+ ), + }), + Fallback: () => null, + isAvailable: () => true, + }, + ]; + }, + }; +}); + +vi.mock("next/navigation", () => ({ + usePathname: () => navigationMocks.pathname, +})); + +vi.mock("@/hooks/use-media-query", () => ({ + useMediaQuery: () => mediaMocks.isPushViewport, +})); + +// The AI tab's real content pulls in the whole chat (server actions, +// streamdown); the shell test only cares that the registry's content mounts. +vi.mock( + "@/app/(prowler)/lighthouse/_components/panel/lighthouse-panel-chat", + () => ({ + LighthousePanelChat: () => { + if (chatMocks.shouldThrow) throw new Error("chunk load failed"); + return
chat content
; + }, + }), +); + +describe("GlobalSidePanel", () => { + afterEach(() => { + vi.unstubAllGlobals(); + }); + + beforeEach(() => { + isCloudMock.mockReturnValue(true); + navigationMocks.pathname = "/findings"; + mediaMocks.isPushViewport = false; + chatMocks.shouldThrow = false; + registryMocks.extraTab = false; + localStorage.clear(); + useSidePanelStore.setState({ + isOpen: false, + selectedTab: SIDE_PANEL_TAB.AI_CHAT, + hasBeenOpened: false, + width: SIDE_PANEL_DEFAULT_WIDTH, + isResizing: false, + contextTab: null, + contextOwnerToken: 0, + contextOutlet: null, + }); + }); + + it("renders closed and empty by default (lazy-mount)", () => { + // Given / When + render(); + + // Then: panel exists but is off-screen, inert, and mounts no content + const panel = screen.getByTestId("global-side-panel"); + expect(panel).toHaveClass("translate-x-full"); + expect(screen.queryByTestId("panel-chat-content")).not.toBeInTheDocument(); + }); + + it("slides in and mounts the AI tab content when opened via the store", async () => { + // Given + render(); + + // When + act(() => useSidePanelStore.getState().openPanel(SIDE_PANEL_TAB.AI_CHAT)); + + // Then + expect(screen.getByTestId("global-side-panel")).toHaveClass( + "translate-x-0", + ); + expect(await screen.findByTestId("panel-chat-content")).toBeInTheDocument(); + }); + + it("keeps the content mounted (hidden) after closing", async () => { + // Given + render(); + act(() => useSidePanelStore.getState().openPanel()); + await screen.findByTestId("panel-chat-content"); + + // When + act(() => useSidePanelStore.getState().closePanel()); + + // Then: off-screen but the chat DOM survives (scroll/draft preservation) + expect(screen.getByTestId("global-side-panel")).toHaveClass( + "translate-x-full", + ); + expect(screen.getByTestId("panel-chat-content")).toBeInTheDocument(); + }); + + it("closes on Escape", async () => { + // Given + const user = userEvent.setup(); + render(); + act(() => useSidePanelStore.getState().openPanel()); + + // When + await user.keyboard("{Escape}"); + + // Then + await waitFor(() => + expect(useSidePanelStore.getState().isOpen).toBe(false), + ); + }); + + it("toggles with Cmd/Ctrl+.", async () => { + // Given + const user = userEvent.setup(); + render(); + + // When / Then + await user.keyboard("{Meta>}.{/Meta}"); + expect(useSidePanelStore.getState().isOpen).toBe(true); + + await user.keyboard("{Meta>}.{/Meta}"); + expect(useSidePanelStore.getState().isOpen).toBe(false); + }); + + it("closes via the close button", async () => { + // Given + const user = userEvent.setup(); + render(); + act(() => useSidePanelStore.getState().openPanel()); + + // When + await user.click(screen.getByRole("button", { name: "Close side panel" })); + + // Then + expect(useSidePanelStore.getState().isOpen).toBe(false); + }); + + it("groups the chat actions beside close in the existing header", async () => { + // Given + render(); + + // When + act(() => useSidePanelStore.getState().openPanel()); + + // Then: no extra toolbar; both actions are adjacent in the panel header + const newChat = await screen.findByRole("button", { name: "New chat" }); + const fullPage = screen.getByRole("link", { + name: "Open Lighthouse AI full page", + }); + const close = screen.getByRole("button", { name: "Close side panel" }); + const actionGroup = close.parentElement; + expect(actionGroup).toContainElement(newChat); + expect(actionGroup).toContainElement(fullPage); + expect(actionGroup).toHaveClass("ml-auto"); + expect(newChat).not.toHaveClass("ml-auto"); + expect(close).not.toHaveClass("ml-auto"); + }); + + it("renders nothing in OSS while no detail view is registered", () => { + // Given + isCloudMock.mockReturnValue(false); + + // When + const { container } = render(); + + // Then + expect(container).toBeEmptyDOMElement(); + }); + + it("hosts a registered detail view in OSS, without the AI tab", () => { + // Given + isCloudMock.mockReturnValue(false); + render(); + + // When: a detail view registers its context tab + act(() => + useSidePanelStore.getState().registerContextTab({ + label: "Details", + onRequestClose: vi.fn(), + }), + ); + + // Then: the panel appears with only the Details surface (no tab strip) + expect(screen.getByTestId("global-side-panel")).toHaveClass( + "translate-x-0", + ); + expect(screen.getByText("Details")).toBeInTheDocument(); + expect(screen.queryByRole("tablist")).not.toBeInTheDocument(); + expect(screen.getByTestId("side-panel-context-outlet")).toBeInTheDocument(); + }); + + it("shows Details and Lighthouse AI as switchable tabs in cloud", async () => { + // Given + const user = userEvent.setup(); + render(); + act(() => + useSidePanelStore.getState().registerContextTab({ + label: "Details", + onRequestClose: vi.fn(), + }), + ); + + // Then: the context tab opens selected, beside the AI tab + const detailsTab = screen.getByRole("tab", { name: "Details" }); + expect(detailsTab).toHaveAttribute("aria-selected", "true"); + expect(detailsTab).toHaveClass("aria-selected:after:scale-x-100"); + expect(detailsTab).not.toHaveClass("rounded-[8px]"); + expect(screen.getByTestId("side-panel-context-outlet")).toBeVisible(); + + const lighthouseTab = screen.getByRole("tab", { name: "Lighthouse AI" }); + expect(lighthouseTab.querySelector("svg")?.parentElement).toHaveClass( + "flex", + ); + + // When: switching to the AI tab + await user.click(lighthouseTab); + + // Then: the chat mounts and the detail outlet stays mounted, hidden + expect(await screen.findByTestId("panel-chat-content")).toBeInTheDocument(); + expect(screen.getByTestId("side-panel-context-outlet")).not.toBeVisible(); + + // When: switching back + await user.click(screen.getByRole("tab", { name: "Details" })); + + // Then + expect(screen.getByTestId("side-panel-context-outlet")).toBeVisible(); + }); + + it("contains a lazy tab failure inside the panel and recovers via Retry", async () => { + // Given: the AI tab's content throws on render (e.g. chunk-load failure) + const user = userEvent.setup(); + const consoleError = vi + .spyOn(console, "error") + .mockImplementation(() => {}); + chatMocks.shouldThrow = true; + render(); + + // When + act(() => useSidePanelStore.getState().openPanel(SIDE_PANEL_TAB.AI_CHAT)); + + // Then: the failure stays inside the panel body; the shell survives + expect( + await screen.findByText("This panel failed to load."), + ).toBeInTheDocument(); + expect( + screen.getByRole("button", { name: "Close side panel" }), + ).toBeInTheDocument(); + + // When: the failure clears and the user retries + chatMocks.shouldThrow = false; + await user.click(screen.getByRole("button", { name: "Retry" })); + + // Then: the content mounts normally + expect(await screen.findByTestId("panel-chat-content")).toBeInTheDocument(); + consoleError.mockRestore(); + }); + + it("renders the next tab fresh after another tab failed", async () => { + // Given: two registry tabs, with the first one failing to render + registryMocks.extraTab = true; + chatMocks.shouldThrow = true; + const user = userEvent.setup(); + const consoleError = vi + .spyOn(console, "error") + .mockImplementation(() => {}); + render(); + act(() => useSidePanelStore.getState().openPanel(SIDE_PANEL_TAB.AI_CHAT)); + await screen.findByText("This panel failed to load."); + + // When: the user switches to the healthy second tab + await user.click(screen.getByRole("tab", { name: "Second tab" })); + + // Then: its content mounts instead of the previous tab's error state + expect(await screen.findByTestId("second-tab-content")).toBeInTheDocument(); + expect( + screen.queryByText("This panel failed to load."), + ).not.toBeInTheDocument(); + consoleError.mockRestore(); + }); + + it("keeps the context outlet attached across store-driven re-renders", () => { + // Given: a registered detail view with its portal outlet attached + render(); + act(() => + useSidePanelStore.getState().registerContextTab({ + label: "Details", + onRequestClose: vi.fn(), + }), + ); + const outlet = useSidePanelStore.getState().contextOutlet; + expect(outlet).not.toBeNull(); + + // When: an unrelated update re-renders the panel (a resize tick) + const seen: (HTMLElement | null)[] = []; + const unsubscribe = useSidePanelStore.subscribe((state) => + seen.push(state.contextOutlet), + ); + act(() => useSidePanelStore.getState().setWidth(500)); + unsubscribe(); + + // Then: the outlet never detached (a null flicker remounts the portal) + expect(seen).not.toContain(null); + expect(useSidePanelStore.getState().contextOutlet).toBe(outlet); + }); + + it("re-clamps a persisted oversized width to the current viewport", () => { + // Given: a huge width rehydrated raw from a larger monitor + mediaMocks.isPushViewport = true; + useSidePanelStore.setState({ width: 5000 }); + render(); + + // When + act(() => useSidePanelStore.getState().openPanel()); + + // Then: applied width is capped at 85% of this viewport + expect(screen.getByTestId("global-side-panel")).toHaveStyle({ + width: `${Math.floor(window.innerWidth * 0.85)}px`, + }); + }); + + it("resizes with arrow keys on the handle (left widens, right narrows)", async () => { + // Given + mediaMocks.isPushViewport = true; + const user = userEvent.setup(); + render(); + act(() => useSidePanelStore.getState().openPanel()); + const handle = screen.getByRole("separator", { name: "Resize panel" }); + expect(handle).toHaveAttribute( + "aria-valuenow", + String(SIDE_PANEL_DEFAULT_WIDTH), + ); + + // When / Then + act(() => handle.focus()); + await user.keyboard("{ArrowLeft}"); + expect(useSidePanelStore.getState().width).toBe( + SIDE_PANEL_DEFAULT_WIDTH + 24, + ); + + await user.keyboard("{ArrowRight}"); + expect(useSidePanelStore.getState().width).toBe(SIDE_PANEL_DEFAULT_WIDTH); + }); + + it("exposes half the viewport as the resize maximum on ultra-wide screens", () => { + // Given + vi.stubGlobal("innerWidth", 2560); + mediaMocks.isPushViewport = true; + useSidePanelStore.setState({ width: 5000 }); + + // When + render(); + + // Then + expect(screen.getByTestId("global-side-panel")).toHaveStyle({ + width: "1280px", + }); + expect( + screen.getByRole("separator", { name: "Resize panel" }), + ).toHaveAttribute("aria-valuemax", "1280"); + }); + + it("does not exist on the full-page chat route (one place or the other)", () => { + // Given: the user is on the agentic chat page with the panel open + navigationMocks.pathname = "/lighthouse"; + useSidePanelStore.setState({ isOpen: true, hasBeenOpened: true }); + + // When + const { container } = render(); + + // Then: no panel DOM at all — the chat lives in the page there + expect(container).toBeEmptyDOMElement(); + }); + + it("remains available on Lighthouse settings", () => { + // Given: settings must coexist with the panel, unlike the chat page + navigationMocks.pathname = "/lighthouse/settings"; + useSidePanelStore.setState({ isOpen: true, hasBeenOpened: true }); + + // When + render(); + + // Then + expect(screen.getByTestId("global-side-panel")).toHaveClass( + "translate-x-0", + ); + }); +}); diff --git a/ui/components/side-panel/global-side-panel.tsx b/ui/components/side-panel/global-side-panel.tsx new file mode 100644 index 0000000000..539cca7880 --- /dev/null +++ b/ui/components/side-panel/global-side-panel.tsx @@ -0,0 +1,260 @@ +"use client"; + +import { X } from "lucide-react"; +import { usePathname } from "next/navigation"; + +import { Button } from "@/components/shadcn/button/button"; +import { + SidePanel, + SidePanelBody, + SidePanelHeader, + SidePanelResizeHandle, +} from "@/components/shadcn/side-panel/side-panel"; +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from "@/components/shadcn/tabs/tabs"; +import { useMediaQuery } from "@/hooks/use-media-query"; +import { useMountEffect } from "@/hooks/use-mount-effect"; +import { isLighthouseChatRoute } from "@/lib/lighthouse-routes"; +import { + clampSidePanelWidth, + getSidePanelMaxWidth, + SIDE_PANEL_MIN_WIDTH, + SIDE_PANEL_PUSH_MEDIA_QUERY, +} from "@/lib/ui-layout"; +import { cn } from "@/lib/utils"; +import { SIDE_PANEL_TAB, useSidePanelStore } from "@/store/side-panel"; + +import { RetryableLazyContent } from "./retryable-lazy-content"; +import { getVisibleSidePanelTabs } from "./side-panel-tabs"; + +// Non-modal push panel (PostHog-style): no backdrop, MainLayout shifts the +// page by the panel width so everything stays reachable. It hosts the fixed +// registry tabs (Lighthouse AI, cloud-only) plus one dynamic "context" tab +// that detail views (finding/resource) register and portal their content into +// — one single panel for every right-hand surface. On the full-page chat +// route the panel does not exist at all: the chat lives in one place or the +// other, never both. +export function GlobalSidePanel() { + const pathname = usePathname(); + const isOpen = useSidePanelStore((state) => state.isOpen); + const selectedTab = useSidePanelStore((state) => state.selectedTab); + const hasBeenOpened = useSidePanelStore((state) => state.hasBeenOpened); + const contextTab = useSidePanelStore((state) => state.contextTab); + const width = useSidePanelStore((state) => state.width); + const isResizing = useSidePanelStore((state) => state.isResizing); + const openPanel = useSidePanelStore((state) => state.openPanel); + const closePanel = useSidePanelStore((state) => state.closePanel); + // Stable action for the outlet ref: an inline closure would detach/reattach + // (null → element) on every render, e.g. on each resize tick. + const setContextOutlet = useSidePanelStore((state) => state.setContextOutlet); + // Below `sm` the panel overlays full-width; the resizable px width and the + // push margin only make sense from `sm` up. + const isPushViewport = useMediaQuery(SIDE_PANEL_PUSH_MEDIA_QUERY); + + useMountEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + // Radix overlays (modals, popovers) preventDefault their own Escape. + if (event.defaultPrevented) return; + // The full-page chat owns its route: no panel there (read the live URL, + // the mount closure would keep a stale pathname). + if (isLighthouseChatRoute(window.location.pathname)) return; + const store = useSidePanelStore.getState(); + if ((event.metaKey || event.ctrlKey) && event.key === ".") { + // Nothing to show in OSS without a detail view registered. + if (getVisibleSidePanelTabs().length === 0 && !store.contextTab) { + return; + } + event.preventDefault(); + store.togglePanel(); + return; + } + if (event.key === "Escape" && store.isOpen) { + store.closePanel(); + } + }; + + window.addEventListener("keydown", handleKeyDown); + return () => window.removeEventListener("keydown", handleKeyDown); + }); + + const registryTabs = getVisibleSidePanelTabs(); + if (isLighthouseChatRoute(pathname)) return null; + if (registryTabs.length === 0 && !contextTab) return null; + + // The persisted tab can point at a tab that is not available here; fall + // back to the context tab first (it was registered on purpose), then to the + // first registry tab. + const activeRegistryTab = + registryTabs.find((tab) => tab.id === selectedTab) ?? registryTabs[0]; + const isContextSelected = + Boolean(contextTab) && + (selectedTab === SIDE_PANEL_TAB.CONTEXT || !activeRegistryTab); + const tabCount = registryTabs.length + (contextTab ? 1 : 0); + const activeTabId = isContextSelected + ? SIDE_PANEL_TAB.CONTEXT + : activeRegistryTab?.id; + + const handleTabChange = (tabId: string) => { + if (tabId === SIDE_PANEL_TAB.CONTEXT) { + openPanel(SIDE_PANEL_TAB.CONTEXT); + return; + } + const registryTab = registryTabs.find((tab) => tab.id === tabId); + if (registryTab) openPanel(registryTab.id); + }; + + const handleResize = (clientX: number) => { + // Right-anchored panel: dragging the left edge sets width to the distance + // between the pointer and the right viewport edge. + useSidePanelStore.getState().setWidth(window.innerWidth - clientX); + }; + + return ( + on this viewport. + style={{ width: isPushViewport ? clampSidePanelWidth(width) : undefined }} + > + {isPushViewport ? ( + useSidePanelStore.getState().setIsResizing(true)} + onResizeEnd={() => useSidePanelStore.getState().setIsResizing(false)} + /> + ) : null} + + + {tabCount > 1 ? ( + + {contextTab ? ( + + {contextTab.label} + + ) : null} + {registryTabs.map((tab) => { + const TabIcon = tab.Icon; + return ( + + + + {tab.label} + + + ); + })} + + ) : ( + + )} +
+ {!isContextSelected && activeRegistryTab?.HeaderActions ? ( + + ) : null} + +
+
+ {/* Portal target for the registered detail view. Always rendered while + the panel exists so the owner can portal in as soon as it registers; + Radix keeps the inactive panel mounted but hidden. */} + +

- 1) Deploy the ProwlerScan role in your{" "} - management account using a CloudFormation - Stack. + 1) Choose the AWS Organizational Unit (or root) + to deploy to. Prowler creates the role in your deployment + account and rolls it out to every member account under this + target.

-
+ value.toLowerCase()} + autoCapitalize="none" + autoCorrect="off" + spellCheck={false} + /> +

+ Find this in the AWS Organizations console. Use your{" "} + root ID (starts with r-) to deploy + to the whole organization, or an OU ID (starts + with ou-) to target a specific unit. +

+
+ ( + <> + + field.onChange(Boolean(checked)) + } + /> + + + )} + /> +