From 5177f6f0e1ce1b453f0975eea0c0a49e6c3783c2 Mon Sep 17 00:00:00 2001 From: Marek Libra Date: Fri, 31 May 2024 12:35:40 +0200 Subject: [PATCH 1/4] User documentation for the Notifications and Signals Signed-off-by: Marek Libra --- docs/notifications/getting-started.md | 168 +++++++++++++++++++++++ docs/notifications/notificationsPage.png | Bin 0 -> 137787 bytes 2 files changed, 168 insertions(+) create mode 100644 docs/notifications/getting-started.md create mode 100644 docs/notifications/notificationsPage.png diff --git a/docs/notifications/getting-started.md b/docs/notifications/getting-started.md new file mode 100644 index 0000000000..6a7ea6314e --- /dev/null +++ b/docs/notifications/getting-started.md @@ -0,0 +1,168 @@ +--- +id: getting-started +title: Getting Started +description: How to get started with the notifications and signals +--- + +The Backstage Notifications System provides a way for plugins and external services to send notifications to Backstage users. +These notifications are displayed in the dedicated page of the Backstage frontend UI or by frontend plugins per specific scenarios. +Additionally, plugins can implement processors to send notifications through external channels like email, Slack, or MS Teams. + +Notifications can be optionally integrated with the signals (a push mechanism) to ensure users receive them immediately. + +### Upgrade to the latest version of Backstage + +To ensure your version of Backstage has all the latest notifications and signals related functionality, it’s important to upgrade to the latest version. The [Backstage upgrade helper](https://backstage.github.io/upgrade-helper/) is a great tool to help ensure that you’ve made all the necessary changes during the upgrade! + +## About notifications + +Notifications are messages sent to either individual users or groups. +They are not intended for inter-process communication of any kind. + +There are two basic types of notifications: + +- **Broadcast**: Messages sent to all users of Backstage. +- **Entity**: Messages delivered to specific listed entities, such as Users or Groups. + +Example of use-cases: + +- System-wide announcements or alerts +- Notifications for component owners: e.g., build failures, successful deployments, new vulnerabilities +- Notifications for individuals: e.g., updates you have subscribed to, new required training courses +- Notifications pertaining to a particular entity in the catalog: A notification might apply to an entity and the owning team. + +## Configuration + +### Notifications Backend + +The Notifications backend plugin provides an API to create notifications, list notifications per logged-in user, and search based on parameters. + +The plugin uses a relational [database](https://backstage.io/docs/getting-started/config/database) for persistence, no specifics are introduced in this context. + +No additional configuration in the app-config is needed, except for optional additional modules for `processors`. + +### Notifications Frontend + +The recipients of notifications have to be entities in the catalog, e.g. of the User or Group kind. + +Otherwise no specific configuration is needed for the front-end notifications plugin. + +All parametrization is done through component properties, such as the `NotificationsSidebarItem`, which can be used as an active left-side menu item in the front-end. + +![Notifications Page](notificationsPage.png) + +## Use + +New notifications can be sent either by a backend plugin or an external service through the REST API. + +### Backend + +Regardless of technical feasibility, a backend plugin should avoid directly accessing the notifications REST API. +Instead, it should integrate with the `@backstage/plugin-notifications-node` to `send` (create) a new notification. + +The reasons for this approach include the propagation of authorization in the API request and improved maintenance and backward compatibility in the future. + +```ts +import { notificationService } from '@backstage/plugin-notifications-node'; + +export const myPlugin = createBackendPlugin({ + pluginId: 'myPlugin', + register(env) { + env.registerInit({ + deps: { + // ... + notificationService: notificationService, + }, + async init({ config, logger, httpRouter, notificationService }) { + httpRouter.use( + await createRouter({ + // ... + notificationService, + }), + ); + }, + }); + }, +}); +``` + +To emit a new notification: + +```ts +notificationService.send({ + recipients /* of the broadcast or entity type */, + payload /* actual message */, +}); +``` + +Refer the [API documentation](https://github.com/backstage/backstage/blob/master/plugins/notifications-node/api-report.md) for further details. + +### Signals + +The use of signals with notifications is optional but generally enhances user experience and performance. + +When a notification is created, a new signal is emitted to a general-purpose message bus to announce it to subscribed listeners. + +The frontend maintains a persistent connection (web socket) to receive these announcements from the notifications channel. +The specific details of the updated or created notification should be retrieved via a request to the notifications API, except for new notifications, where the payload is included in the signal for performance reasons. + +In a frontend plugin, to subscribe for notifications' signals: + +```ts +import { useSignal } from '@backstage/plugin-signals-react'; + +const { lastSignal } = useSignal('notifications'); + +React.useEffect(() => { + /* ... */ +}, [lastSignal, notificationsApi]); +``` + +### Consuming Notifications + +In a front-end plugin, the simplest way to query a notification is by its ID: + +```ts +import { useApi } from '@backstage/core-plugin-api'; +import { notificationsApiRef } from '@backstage/plugin-notifications'; + +const notificationsApi = useApi(notificationsApiRef); + +notificationsApi.getNotification(yourId); + +// or with connection to signals: +notificationsApi.getNotification(lastSignal.notification_id); +``` + +### External Services + +When the emitter of a notification is a Backstage backend plugin, it is mandatory to use the integration via `@backstage/plugin-notifications-node` as described above. + +If the emitter is a service external to Backstage, an HTTP POST request can be issued directly to the API, assuming that authentication is properly configured. +Refer to the service-to-service auth documentation for more details, focusing on the Static Tokens section for the simplest setup option. + +An example request for creating a broadcast notification might look like: + +```bash +curl -X POST https://[BACKSTAGE_BACKEND]/api/notifications -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_BASE64_SHARED_KEY_TOKEN" -d '{"recipients":{"type":"broadcast"},"payload": {"title": "Title of broadcast message","link": "http://foo.com/bar","severity": "high","topic": "The topic"}}' +``` + +## Additional info + +Up-to-date documentation can be found in the plugins' README files: + +- https://github.com/backstage/backstage/blob/master/plugins/notifications/README.md + +- https://github.com/backstage/backstage/blob/master/plugins/notifications-backend/README.md + +- https://github.com/backstage/backstage/blob/master/plugins/notifications-node/README.md + +- https://github.com/backstage/backstage/blob/master/plugins/signals-react/README.md + +## Processors + +The default backend behavior when emitting a new notification can be tweaked using processors. + +Depending on the needs, a processor can modify the content of a notification or route it to different systems like email, Slack, or other services. + +A good example of how to write a processor is the [Email Processor](https://github.com/backstage/backstage/tree/master/plugins/notifications-backend-module-email). diff --git a/docs/notifications/notificationsPage.png b/docs/notifications/notificationsPage.png new file mode 100644 index 0000000000000000000000000000000000000000..7c96ab77af2d2d9527acefa99027468e4d5b3782 GIT binary patch literal 137787 zcmafaRZtvVxGnB7gJ*D;1Rvbp-3bybxI2Tp4HgK5;O_2D@C0`anm};3K`#F}_deh1 z+7JCz^-Fj4+RJu~x~d#D1_%QV4h~yEURo0l4mA)C4zULf!8c7OFwi~Xcj=e63A&5Cfjb-=CjNg59xgMB zuDmJ*1o+9j%-^;H2EF%si|tsl07HY^dZERMhoC zaERgHsNfW&CA583kGmn`j%zxUyu+(7*yL5th{%4=S@Rh(!f=9bkvNqKMoAe!om4|o zAKC*5#caN#Fc%CmBbj=+Y;Bre>tWO{xx<_^*Nuwi?k3*COD30$OwIIt4DS1L&rt? z{??&Z=`jyFiZm1WH2uM85*H4lc0uMZ+~umOn%bN=crL}9y(_WkN07+aV;Wd%hnxMd zyPIt~n$TT2{PBBlkpy1Qv21cmfFjQ_PgP~aSwu0Lz}nNXW;=QPc4&OxOcS^FxSq>r9#prj^4~@>*y`2 zqvTpX_8gnt0v|Clr>?YK_YsYRRx$RQmmSQK-=-o7ys=_s+*IXa&O$G^A`OvI6vq8h ziB)NL=O;2&e1Lp{%qTgC2~qD7jxA~8w5&m|>{Hp~TI9qO3E$Uqe z=W-MJT5)1R9S{hDeE3`F5bDZvJVns^1y8NvZhD8dXOiZ%?X2zV>^ownBY{VM&&`Yk zw|M7xA7gA6yH0R+;oeB%TnOBE>^=^<#q9gl)f{Ir67P$h;8j2SP4tyqo7bNv7|v!j{5wlkaJGkK$^*n= z$bQw_vdxjZ))UjC8}p#N$ET;8Z@nIK6b>fy=k8Be@Ebl{+^S8asG}u?eXW$x_IVR- zm}lnm?n~O4lI`XS;?@?UPsLMuOZJ~lv!q<*#4jmooJ+<|-Go*>++I^nOUG9g7wT7t zYhp#IM9 zy#0=doq=0pxsxYetm=sD(=)8hGuthK8uy-dfq4q?%IKt6G()_av%g=0YctpgiZCXM z7$ZjpjqaAi$n{GwiRZOk6PGAGdtzWd^Tv$cnDXCbgU7Sc1}=L1-LVsU9=aYmQ%Ri7 zQP*mk0m4DrBp*{}Xb)wulASMbR{e*WT0Jbj1l|tae;3t=Y(F zLOIDJljJuOzeA9$v=~7;kXkyNXM7@<(6`Zs;oKA`y+J21Vaj3ZP+Z8S3f@Tgx1)u! zQ&;PmvH%QsC$HjBubtwK-Q<=~ka`tS zs&CARPY=V2&XmOt*haZ(QA+g~;zQn=g%TS1dLZjjd~Ch7yz?&Z+qq8wSK1SE=Uiv;e;FH$w;D zKe?m0obmQ&tKm-%pI4dXqYdmE=fY)WQEK8I5I&aJ_WKBHB1?^vF9CP2@H?OjRj>T6 zJwK$M5=d$jwSoBV`*$6HGUwC-*f7eMdB0m0_@|jLe{A++gFD}@n=5?g&E_V!2~$=( zs_CiLo2kHo;YritTO~GG5)^gPao?xt7|$9W2e4SiJo@`%hH;#{ za@E!?Jw74JljZOi8y6(Z?(>Rpitp5I*tYQp+q{&$NaiesWC?zNx6JQE+mrjpeBw#CqVVVweut#yRLv?B}=6G?#HrX2_he7;-{`C<5eeY1A5c zCG!UI|H2Ov;pPH6t?J_hPW-6ip+Mp1;7>l2SPZU24ZEeJ@dO}04 z4-4SPqc?Z>1fkL8zFpW5#>K*zB&q%qaB)0vVV(g!KP#Uh z6jM*vWfyAS_OOng)hRq5XwMSQY7fX-EDh0T>le1YpjNY-a)kunvo^q0Qfa4MP=5Eh zzUkSBa_V2+VDEfY#gUSFhdI6DL=k=Xv5$-@w5+yJs zEQK1wOfr_Z&^0msDI|W%w~OfttBha}h`v~gcBF+w2H+)Syq7qL(r)lA2lSGoyEo58 z-r&qsOO;6F-iqwWrmaVBJcLw}MzLC?1X z4_lLpZTMu_NfLrV&J`#uz9z0D$(94?6}N?xlu0v7ATG}sA33gsRGOy`y|_F65&Ee5 z`rI>RUSWJC%omoP6hpWEhE1L4QF$B?%S-<&e|ak9BiykM1pne4WD?i~cH=P+GDb?l zu(e3e$k!g*cc0m6GhwnqwK(Ad^6JXo(Da)WKW^AI?R} z;}V-h@KE%hf%t$1!14-Oo(3D@apHJ04sX+vHL?-Cv3BBf#L38}KLy)w{Ufvlf>8FD zPxN(|3K%rzX9249js~*Sq-Tug5m#g%ehi4wTbe91L39UKa*%JkkFF$Xe8kZ9#{`E@~{AQ2TlD!jgbvQne++DUQx zq9l?z&sXlmsBM?aMB5NI9LHDmmY@mZo#*(0r>-JKBb?w{C{r+GrYG}RcR%s0)I1L{ ztSz!B!g@&L-`y{s0!s^0LbI;$%=MUbBZ!*kZnWK55jfZZsSI%S;)B2Uj&J_CYzQ?& z3YG~giiz?FFK*6d*qg{fC7>a%*Q;IXsN;GxM!;G^R7GFiH;$jW)-AGvsw5*)PR1*Ypg_*8X|xUdT`W zCn@blknfT;12KgR;ll74x~Lz<{l`sF!7=(>I>18Sy(F-z!UW(!v${KMCrniUwk#31 z5`Ej`OQI=84DMQ3o0|TU=DBgfQxTe)OFe;Z(!RCS28(l-0ii|W|C+xhKinH7% zE_AkFzUjS;VfIP3{^e+?moCN>@JIS(gaGzMF*Tv_-_-&-wlZ0N!?^F1Ex)qOJQ4uJW`M7n#CF+Utyq;)q0yl`j;2ll?V&cS z-%Y>D!IY2Au>dONtjYvl*RIetjQWD-TBh4UW_|)I|0ZPPvtCZlaSSCqAQsU4yCl@) zp+_S{wEE;dFuq_njrhYoL>3L!0RP3UOTr1Tw+BB2jd3tQd(;KXtFTzv^}@n1F;xc1K3dZpP0k@H)oB2e4r3;@ z@Mo!|asxRf?uC-hE(WsxCcXTo!(4<8$)6aHo%y=t;o5jqLKc>Ub49|%(JHB-Xu%8L zBdu_IwVLg}jg05h6AQY(l%A!Qk$T|P9Z4W|3K$X4u)C<)_v}yj@7Gha^9V8x3HD&^%smHZY;dRz z9{Ub;GH4hj6R7x|+ge0&LN_!=L@&ePFF)RQKo`NNJ+0geZ^$$+CcncW{ICs*D$U!5#kMUYq(n(8EVmDh9g_eLT!J6g#w zvA*gTIzd-qbZK$|m?$R-*3G?pNr*kqHSvZmwG0vHAmKGC)$eY#@ZIOYS@!K@xusd^KhZG zpaD(L%+C=`($TgM0m|IHwX+46(#m4tiQPjalpeNWRO!__o> ztsN>JEH5RDo$nSgz}2~z0M3XQwmt6#yc}ZWJndjIR~rz|91&s=(J0P=(%HC}qT)@d zTvybs{~=#xbt}vxzV9r82C?s`P*OhUsnZh)LnLgs8am&VeKG9K0y>=jDMoSg>S7~l zhk|TXH2CXoIVD5L7Qi0Mab)H~XQm3it_zL`kF3R`c(k8lzydapi1skQ+g!BSXvgMl zS;Qs{t{ilbP)BpX#KR)y%ezPnc`j{Brs+rEpuiw+5lC%y@O=FO_k6n0zU}fJgU$Hk zpX0!ocjo4Mg5S^_W2El@jZKWJOONs3RbudPIH+GLzoj<34d&#a8vkV_x^?iY`p#48 z-0i~dl{rDnodm2R+Ejt?v}WJW1kFP>C-TRtt?lPH?`d_rAArQU;8-xN&xqbM&;ilCT^nF$r}62 zx^J{;grV4W?yW@QX;juwk(e++0VS?Q4kUR7={#nW{XE391NFO#>~5r=- zXP^yCCj`Bl)oUsHqdlbqWwFdIX5f)U5GbM{5@IL3un*M!3ZqJdi=!Sxxn!&O2+1VX zq%DkE%Oybiz*_p3<(Fv5SVfs3w=ua=LJ51H8w-}w++e;TCJ@pITOkj{T+*u(lnl)gy?pcHl-u&Lr)kfRoqu8W93i{03ssViQ+Agx(zZ>;5LcvM zDX-0lzNOpoZbvCgLIGrMt@dgmPQU?i!^OY*ba5)JWXe8$7M!tG$)-nqx7ryEPg5tx zQ?Oyl?9LrJf$l0&K)qP_aeE#bB8PqZtxVjP@By&s>Zcr1(s?_7!jHn~9l~+0i z&0ob&rV^WVI50{>T1bpq40V*laN(BlMR(?wJfEJ7x}5K{KmOCn^lkNTc0+H=s(m`1 zmJ+LFMFx^+y@qf36)12uW4{DBs&2-40_7ZkEWX%-8Y4xVGip|cNubG8#mxyly*fv{ z1Tnu2Rzpu7>{4WtC+HRFRevG6OeiKuX9IE&IE8D8W0LBhY@qi#-z59QJ7VqiX|u8h zP8uCkGNCxHr*)EgQoN-SQy{C@A2!X6oue6R{)3jm_w+(}X`|f*9QGM!(gkL5hDfIL z)zkPfW>*BqN7bOPU$ zXh|y}fy}F;ykm ziUn}KYWSH1kY6D{%ljn-)awC|_K=jTZoLTkO6^BmH2GVbtkbvaMWEE>wO^0AuPe-U%yUa)`iC4H(ErzMd_rAG z*g=?@>BmoTdGgdb@n1wqQb(1B*O(jzp&<0r0I9X5G~Q(k5kGPuN6Zwa z0XP>QN7KY_pP5&ez7q%blrhuY$g0siKg}1P*ke;Rqisj7I#F8you8y#YpO|mJqDGF z(y|v%hq9)=DvXu@gYCkT_nk|LrVqO8sc@yh?}ltri}zsBs7Nt`X+iQ~PI#QU&*Qo29X!SBkxyc6iy^pPs%ZR|AVu-TKlT~82c9qxSi zLCxFtEkKk^e86z-zM3?mh~eHo9t34c%agy$FPTuTjTv?>0XTAtTOMciNO`U*oG^+B`SxIKurz#zt;B1zag$b*vHz(*%UU5{T@*7&i?p)&O&}{|nyInD@yiz1*a<9eVPD3Ar=LZyU2L6i;Vuj0A+Hlx;)&=hp`*zV1oTIK zhUl*8S^YrU`Cj#zoo>_mMHoiaDZR$`VVXXvXLX-vl#?^ZXrP9$xCT2gBI8SRFDC_b zv8|DURXXBn{D%3*P3hvBrNZd)FpLo?(JIwok!eqNxZ0y?^nQu)-PEsr1&Tc$=!&Z2 z<{~^MU5Ys$LnKZK^?ROoj8GZt)3z3N-_;&nYDj(yyERENta3Xiyk#KQUR+aht#ySm z!WNdYxXc5SQMqa$IOkcml_kSBBaJeAF|twk3M)AIIAYZpX_-1xlbnaG!;XQiSO0>Z zacjYO42!gdq-aKa?f6fYX{}xPzNTv0TYb3bFtjYDso0(3f1%}4 zTDs3}=J$kd5^bB>Q+zQmES=I?gptX$#G_|sYmiD2vYO%dch6axRKw|(!d2dQ_56(N z;Og0ZBqxoZwq^{caqnwd>*5H3urgxzu~qw>C*y`4z2boV)L9st1Rs+n0Te7=4wfOf|Dk zC(Ol>*Iy<|h@#1`)5U}4Jt5KA8Sv-r-J*r(75d$=mn zA#862-`tL_=k^~-ffTjB5HJo^D#_}0ZU>$V?`&sEmk~|Pe+-#lKx_{j5SLeykL5OF z>ijO8OoP4RJ!fuAB(|chQG<9V9nBP$TRlI>QFma6Vz+R@0;gS{4Q?uE);-c0_>~Ttt z-T~|ZpTU8yzyjsOE4#rgGlCAVdbVRaiE|nPZy1^my+XYV8`{74?wqx{_W{wKR&wNu zyRGSNL=KVVUBk8g=bx6_pVhxa&D>8=m6dvjW#Dx|#5QmvgFn!_A_xerV(M3zt>?3L z_sZ5pUN;xNUO#jMWez@{eddqf`!QL2BuWHD%RjN36S{q#bPP6q9fF*X5s%H>d$x5a zg8oZe1H6p>v(e#i*yYCi{y;9ZYDSlW?y zQXr_!TxNlXkuJlylF5_TB$$9j-P%J6=%NQQkA81LXTz2Tcjn-J!2gf_!g(`bn}qh> zf5PC82rtq;TkY1~toqba8%kN@IjGv&;#nj79@$i?B|aJo=vUE+%CS{l4$L@?{F-z) zU!e=c#1Boi#bMx49FW9l&b0pR!#FWZGg$jQ`UXK|W)vW@wONDBz+4foaMzmT{Ew%spuqNip zIMJvVi)w)}7mt%fWCJIJHh)qsMT_hnL0F*T;)LpF%mqz5;B5I`5gP`)QCmYOsk3m1 zT#iu09Hvy+Ney*u+pwLnykaCzT4bdLn$*XFFxvOpLF!K^*sDyShCHyWAA<7r zVCL2;vnQFsmR=@g+$m#UQujc{_(#F43$ooYEP8LqEb8E9$M@FT#l+KKm4Sy-;SnY(ipHVJ3&uQ5N9Qn)M?!Z zzX;nz{{$LT(8|Vn$%!Nu);Mzk)?-lAoNB*EQqil{Hq+c(ApfMUs=lB|E;ck#wqKvS zOnVFTuOwc47ST*Qzmc*IGNBKaC3R8R_mbS=2w30$!U`pw)Gkb&Z z&NEb|24ft=el6^F>6iMzTwIM5RVA5~&{z}6JUVpTq1Brv?} z_~5silyARqM}*e6ed}p6+oPEGyU>|swLO9H$w3a}Mm0EGk^0E*xj{WvPLa_V!Rqoug%CSe3 z*LzICM^^inBfMpO3p-L~7{dan_!zM`12l|imn&;KEP7`TTb+N1g9%@YU{=}I% zDnmG{a3lH#RYW)b}$BDzjPoi zhK$iaBAT?PA2GIKw~MzCu|Fp)z#PEk5F|jF^sa5w>FDeJU{Y>QOYM8=JsX@7z!J$w zX-QzMOue8!6y!)9K^Chj9_VI0SD_xK7p-x~e|gRO(m=eF#4$VByxLXWOU|+Hydf*6 zzj$A{LQMuYc?!4QE%la_u7G-XA4vg|#_PDqCDf5$X-znbFTTUFGVDA^@G`?(D8Yf* z{%`zu|KcG)y!<4pZ}9p~W*7Q96aySc41Wy3DYzhYJP7x=*uGYj3a`iqR;~j-mr$;> z%~S6Ye_;to(HNpi6*$(_i4N{HS9{2armFVnJ6yZX#2TOjg$r$x&bL57WG7k6*` zvTmTV^Smi0`?LgrN!h?o-+Yzj;vA9I6~NOlyWY_Ir z+&^_$_{nNddqk@`Kc!6b4~3W1mXx!A6=_+(S|6uoNR)|lM5I5-a;K*fX;toWah`U4 zaqY7Af3dAVK?aJ@R$axoV8D$l1TXgk7qYk<7xOgBXxYkd*(xe-N9LpLy4_W zkTx8fNJ9?pDjnW10TmH>z1+&SiDJr6_I9(%NmJDAkM`?}(aH$iO@n^M)5 zpE^_ijEeqJ-6L{?mef~01(Y7gBNQg>^VF^Fonb#}5V(0F#!_wk$1h5g+r<=nB@3lY zoJzxFZAoSQPQDOzRI8@@fM(L?Pb$HL1mYMzO`uRyz+7gx0jp6Hpx@z@ph9RH0_fTz zj+~y^0|QTt&rWCq{=vy_R%MUMdr&cLf85R`wRs8+0RV4*L#;z^n39FlDUAmvtkt#- z@$E?#GiJS(o?s-Du0_rzGqS}$=^3mBI+15E*lkx-4fBw8c8@OH=C zO8ywTNP?+Fq7p}&z`(qd@AZ%feknMM1M1v-YjZgDMOf8^{hGHyl2h4=Kqz_ERkd^x z@dRZnl+^#_P*wzSdr#f^i}Z`Eycue+-Aj&LwOB=wxgA7Ba}EHs(PE&Z4N--P(YCFH z`WDAHI_$gVCPhrAk9MGF2)+c$#`DDMQJp!EYgIbNRaQGak#G}STG_ZP6N$f9aLIay z-B!{j4N@3J#%&OM&`B{2>!6@o+Dg0o=a00^)mYz~mRniv+Uy!#i298P9L!6pNXs=g z$vTwy5l-6t_P03LPhPel)3wlMoRq`vX)zwPa8W=5;*xP9sC}#ZolmXnODq{-HU!<_5&_SdN%>|a9fN# z@kZmE5eTkjQ6{c?hF4W2i5sZ0*o%3kFP^DoYaC=KT96{0FCZ2d{0rn(zEDEX-c3Md z^ARPq6}w^PJ?Coy`2g}$)aIMLX^JV^QUryXKz)u^T+vna$paRc?;@c z?(!c9tw30Uk;-m5RXKLKheNY=R}+~)XX{r7apPlZNx#fyW)1#WK@Vm%*A%&V2|jb) z0)OFXi-N!k+q=BFPhFJHKdxLZ{t7zGFXQ%8*u2R(YWeotbGp@ZVna@?DRctcpNG+IF zP#0=Xj$mtKcPj{k&LzuoNhyBQOxp#%Gf(fCw6_dmcj#4lC6lb)ksF<~a&D)PIWPSN z2UvIjkS^{;c|A)Tey3a*8%kQhuky{`^W09f|3X{J;SZ@)tNNsm-7JFLT=8YKCnV^k z`J^OQ2e3wgIMQRY8T}{{b;|>uka9H5r4CLM8p9^mtY!qyh7FqjTf8NVfiQ}eA{GRE zmt~Iz9(TbPTDeg1%_!x=4G5!;pFQf>1Q_ z)gzqaBAD963?!nczi{+V&&j}N+8}|yr8x|;GsiRI(K`+){cSu8*;?4~)v3TU+#-JM za6@sq{wULPcn@t$jC6Bqaw<9)2AM{=Re<4rFAo5;_LWN^8q zZijCNnwbrhQv9636f$p8&}^twIQ~#KU(dn$JDP+SM4?E#D222JswbLdpN!hp1lOkJ zDAF#lGB<9x>tQdRJlNLmn{c2-$vh3m``D3`DZo*R@2;x0Z%Fq zx}ggtR#zB7I}#mqmVVYxO`to>H}Oj9A)yb)&kP5JHl=5h!<%_xxNJWfN|5}EnEgPX zU&?%{S#>`@b9-~(Udf+r|0Jn0k-!AX#$wgR&i|M}=>qJ{X>nfWx8#-_jNbfe zi-bQ*fY(p@4s6iNM%v$Zy8KRU&HF=F#f7ru+L96bkSv#M^rpc8?;?0V@awv4lkRT1 zLqTuM*w5LvmL`h#6Lw=ZR?9)sUQR4Mx5A10>H=b}MG-AUIwvOdIUiRo$D2Kx!@US| z3n}<`@+Ai5=V+R2x$SK$o>#2C1BrK{Z-+;n z3qL4Mc$W057fr)SPNG-l;v?G_bzmVp>fa;3AVa^1ullxF`TWd!<@l+miRw>R?s~*Y zvoe9{ZXv6}%9_!pUL`ijutYDX`>2FV5}uXO!)?i=KRW$@{9`K2=r!oCQ-Im` zC`>qTT4ZN7CBx3kC*dWGzsMngMG_tA{0kg7jw(2l$1sHN+%ABgn+J3&3QaDWdY^1@ zGaP)_&Hv@vVxV5>Bw4D+=$Qb_!tQ9gQQIe?oFws(qQmLyG{D#Rk}K( zc@F+Bu3aV_KN^eROg$1NSjJ2ZiB=*HKJ|T;w>=|hD#*__n6Y=yob;0>Lc1QlArrJp zyZje1%~f<6sTn!#pgWBDY9ZAT2_0Z*Xa0-zJlR-&{|a6(;#1=1(kQ>*kX{lC=85CK z6zD~o;YmxF3MC~9|D=3u=C!LKd8s0$1XeFxwqfzS4mGYU%;$`FLutbm6#~mkfL#q@ zb{W{PVWtw`(vMb~xKKI@dMq_Nd=VCcu7$xjbb##dt(o2ZVmrh|au)wJ6@@EF0 zQbyS~sF26*xb{TJOIQNv*)%1rdEm0z^BFOOyVR*5!LH(C+V&7FNkLXi?KiYjS(qX^ zwzU)UbbPU@Y&@bJOgF+kY9?4-;TXUD$e5vq%d02ft@PesLIqt}>S;Ce_-pt3raoQT zB9ixYg`8@naCkB8W@XQ;<@;+IaUA9CS^RNU4mbDST&gsc;u7%Yv9}Jw33&IG1Sn}g zA}Z)VircsyUTN}v+&kM?i{Qz2>^6+))Pu4))hQ5M4TI1mL?bjaXAQzH zo>$xjmpE}uLO-?amy|SQ{dO@E)rXprk44wML*O2O3yIIv|57k>?5`!jLqc_WT`Be06vE-YeNob6weW$fU{{wcjXi9q_1UQjLL z7_eErnYuc4I34;;kch59+loJyj`un2V(i@iC z@8AGAwW|!Wj&+=8CL*FVM-m$9r$<>~e%%!(1ll+Ac+1(7(0L0TQ~9id>LdX>7G@zMpRp7%MdNKzfD@6g1@TK0MdN_l`^Zn2q3P zJy)}_)-`e;-=&~erV38!zOSSfiV6+L*?9PvKr(l!i^TIod4e>}@MEW$!>4iV#XAL| zPxhya(Y=uxF`Nhlc0e~!*d+M3jK!$>t(-0H=NbO|;i~;C=VsR|F>6a4t&El;uWE*8 zI&*5@zq=4r(lMmJeDEO0Gd5WwS~32Sn8*M&VM)?d<9|$>B0VuIA<`7HG!ryB?nXJUm+^WU7H$l^_@aEbL8{Na0?x`gdn9O~ zKLglK8R3;Xho_{l>%>>_(Fp+d2w{I`eFF+vSsTO=Apr>Imm`?#ol2M?GO`vnZqMYv z|J=;}Fqx;n08fQM8Z$~_S#_V2f>n+{hUS5w<7o_jnsLclGeCid_>o-d{L=y$HJ#ue z0yO8tki*g=z))2rL?x2N^}=71-P03AfQZ(QBaaQ#d{QF@!Kvxq1~1<72sTkkCpUr8 ze|I4M^xV3&0elVM`5{q=a|w_^XJNx+j*WSV#5(+%hu@xI8f44z2XUoZw$R{1qFdtf zc7j6!i`JUn%zZPsiBn^=lYO-Zr=Vc>Q@V&pyY|_FUuoChPh;|!2bp0MH@><*^Op?# z62Hj-_DLwp7)4nEQ3aQ7RZgT1Z88pH@5~Rcz=gvU9{_@}BdX?E`qnH(x5}DPW zPs9ioj+>89MbyW*6(=88w`uu;rvdR?z>->T^N4-0r|=M(yV{x_O(6QHiun>+(dus? zb0pt1e=XphrB;JA8IT!Gu026vF49taqC484QvCCY)sb_NcARv)t-Y5da#TDseBo@_ zMiti&ai}Go%QyI@+TzFp!}%C;0*h{A!&kpM-4(l6C$vbyA7j2QnBbvb2eDl10m)(EW zYjWtH@y8|Me~k2gYv{0Z?r_B%Cu))!7B@DDO65gJw*0QLebudf{W6R zPCNlei&KVcd$WZ{9lPKH1a^Yj_vht$us5n3z{Gm_YubjP_S}$c!u2<2Tk>i<&JJIg z3&DI$MANv~dv!PIc0Hfs<467I`-lOmKzhl*Q-a))?@bAxMqbje$(5xRO%weX1+B=9 zhDBu(lO>)&+L<{eIAHB#96TTy^aK`uKcPq&50XzUGB1gjb=CdFX8)=pE!Wp4ArPd5 zx!4-@q*A@Uw@)-y2DI{vqgLdh{#-UQjJXR!;P2+|8+dcfzrU@k^eE66)6Niz%v%dx zl67?yh%_xx&3;_0gC^wxQbTYw{pHMeQCxna4GhrFKX0z>1~|G z!MsV;C-Qp=f-M*S$}T>RDCusi*<9J-l+zWdkLF{r)FDH}^r;aNmk^MH}4ym3+yq8}UGqpzSuyjAFSQ*Cw_%8!oz^IsL z(l&9H`}=&v_1KaY>QoH^UqGhbHxJW`XgWL;VZ%lkvpVZN+5}zZMoKG_?q<6SHl~Sp zA&gu;jAysjn4B0zgZU@}h|IeaJQQ)$pPVOiBcHX}k2Ok{bIU9YdPj*SMl}wP(zSV92~qO3MQ2IQI@rjm0$I00 zsv1LT|NLC4L-z;zX0>clau~kL{AC++rVXTu=&wyOmU z_+RI139+N+^}?HVG0C_PNbkAxJ{Q1JtZ3IDR@MyjRss?{49Zk&0Cg_>Ay#>vwNvjfE)-1Vr#>8AB2F(f*nBx9J;?X#P93B;EilQJI+C_aB}A_t??m zjj}7PQx$uhOK3tazSi12#9PqXjIVCR#pAg7fi}{*6u0oC(tZ>{>bO~%+A9j8(*{v# z3ixv+1o}_{pW z#GgHCWQYaN=JfPdg^|)e@n{bJoEc-X>u8rhgh%0$M9J%5jj0aet8|36#TD-q&y*r)$>gRtThcg2|6X+$`wRkTw=~P9TPK?&4Gh75LW!*Lfc(S}oQG2pN*NYEUMqS?ew52X9<;LCYnkzC*XK`4J!HG|c zD5CeLDr=wWkw*6xqz0e=S58t8?A(zD=4s&>_SlBk7MSUTmpGSNeG>xMLtAookeQ;3 zV-dax(tR{AYdDD>ehOAVlAQteZ2MRX=83Qh5mUvh%VMLrPSIrILeJB(Ln780#(1Y& z0P-@LTa)u7_>y#z*XEVzYc_=vxIet-FN=*O6Z|!-5%}AKU0!~6oY?3km0FCj2^cSX zj`#UY6Hz*|iYbA)0-*L|5@00dOB}a>?Yc<7is)pa+JO+7!+xH?C848DX#L7EWMp zmHeSS-o$%zdA67AV6n0ZnzRAmp9?i6@L`GL5n9O3Wd-1l&cZ2!eivjnF*#UfnMj_MDWc>({8+p^Sq-2BijN0!iF1%u-xp!HEZeA zpNkaXBY6~5u2V8#c~)ziBX@H0)6*awPo|K9o!3R9^f+jia?vMD=y!^ru}wH%%&o!N znxhBdEg8Jywb;q9 zFM!L)ujRu{3i*~H>^gj2Hc)AmBCg*tD*rpU$+D|HFwaIz_5r=%-26x$F}~jFWoy%uiBQ z##fueQ~obcKZ3tl3(+rn&VOO)_@oxjM9*_!2Q?i*RIi%(`hNiDKp4M6OdW2{D2Z6i zX~ec2Tl+lMeL?tg>L9-ElGNF0t;;Ocd9Nn1iOgLSK&BmKQ{MhOZN;;$1RatNNO}q$}+|PyC9m=T#XRH)q3*^&kYjraER?@4<@LM zRCkIsWo*re+7fPiLvNFOj2toYMA{_Kq>ykRQ+VqJ33+=h^oL;VA97ZJ?_{ zl7`kox*-4nAOJ~3K~yk}n0XS2S;}Z`fTQngAm18OA` z@jg7_w-@zmNuO96*S*XEuEwui|By$RJ}`v&ebe~O<@YkreK^E#oG(9^#&5vP+@tX> zHOIRUzX4OjXhwebg9U!;SI=??-=oIw@j71cS%LUDwV5HeE&CMdiriD22m zO)Ao&qwpAX3ilT_+RmgN>g8@tO)D{JXv$C*V!J(YmGNN8?&KE!7f?7aC>)d1xdo6% z;JE8A`@NBdGUOdAQA^P%HGN$wG;u$>UEspCHLOktR-kGTFO{~CS3IB`mEBUrFHl@a zA&)9H823hVX(KcUDQPz#MvR&ra#9m0D)wf^+e3KmquEQjjaX|{ijH(%c(pXztU~js z5m{oyXu7cGG}34qf^MTzav;-8#^uE(@TTim_X3PlYQF0zDBz~e-SmiukD*{JdqlP-G$4Ipo%rMeQSR^t@Dkd zZN=Vit1+w8r7Xm6b{%WlhR})lm4(R!1v%G_)C-orgPjn+)Fvt=va^jRZEas!=q^S0 z+eq6NbVRW_E{-Hdg!rwgw-rB25p}+y?Q2l^7NLcyF%n3`FAhfh2$5!}9{)s$Fs>nM zNdpiCjhK`ycn5U_E6MIP-c*QRrva0|(ZEZ_>n@{}hP32}z=jctYnMh04f*&JEkBDs z;uj2r6e7U-6kvU_eU7q2|F((dHeo&53$;;o_XQY8qjYH(7O&3YBSzD44Ape*n!l9* z=iX$zxlbaE&tgh$GGuiOM4)0xk>$=$KzS(*OgD^TTo-UPP8EhbgUWj8yvYKpLv#_hAVO`w_drC;f^pBmGBw;rJ`AzRXQmOqRbg90m@@mqKi{$|jG+Uy^Hxz9Gz{jd zdVb`6w$B5`h)ItjBcmZ+ja#_hYQL-Ag~qR?Ii7y5h(QwKhK2ZhY7JlO4~ggh6)JPY zR^wOmv-0_u{9GfV>o^E2|LQQdL4bTWB!eWg#^lc(#tcoug{W>gBmy{p3E)#N6Wsn3 zNBxS%c50a>LMbTEULO&^$Ln~(>qz6*p_Fkt(z`l$2^J^F`w_6d#xL^D+N73mmhqE1 zJ7oOvLP4aQLx5RSC5O;bKB#6c^h8d+rU{j0Sq2DGvrfL7O|@)k$VUFQcf2#!D8DZB z{Zvu7k)=79MBEq}GKD()OXAWK?mgPRZ6+qoh_Q$Md7uA^{gcgfkZTx8#|M;m*VcNx z^5_X%dujz2udiLE27TT-wSBF5EJowNB5hyYKKR^lPw-eHfyB{ryz? zt)TIY7a_SWXkbsYb-WbqE46)n#IGnkm)t%wshoSzzF<>kYY4=dPF0^T3aIl_n#!J^ zC5M57Y5Ruu6x%|dwx77asu&um|0qBK;;=*-i{uwMBm!HN&auu<+>mL|LLUEXh+iTD zp_Pv(eNB2zo712WG~&PMzoJepZ&tm$hR;Dy^rs6)&V8c#2HI-d8ik{i^E0aI-kmM_ zw`}5~*da7Ep(z|`8ow0eCz2YEXe0Qhf@Xw3jSx>3BF>sv4#hRk)4QF z<@{7>OfS*+wM18qf$|W&Q&|WT`7p$81mb-~V49k$;y^hBmAD;yg4?L!X*1s!9^S5ccC-&2U?cO068ZgPw5anO*kB;&_ zNN7yOqnPL{K?L~y4;T22Upn&{-S*M=6+a&lzsKu%J)rBWFTJDbpfV9XnGIhI4LnV| zFU<5A9nw@I<+`a8LD2@ND#( zk{YR8YgXMarJXNSHK>&d4KyiDZC^HTw5c_@D$Oc_`M(!p3HRW=o%z%>2ZGg);XmqN0oUpMNy=^u{Dq+;@Q$jqp~~N@3cK({Jc_s_x;uOwd{u&2g(%` zo5J%R3<1)<6FG?c1j4!TYh-KtPKhDH5TQtc#%*@~RJ-rR4~1d|6NFmR-0`$FiQ z-a*j@R}ez7nSiKn4ABbdRXl1*iIA-lHM5oI+bUZRWoz9TP$VPX zX*BOiXC0&BBcMrW2J2EN61hK*P^BSDI)WRyMl*}gw+#fszDYe_Wxo*V$fGI2zC*&T zPGDOk27t|7VucB@-p2FpAP_^+-!eN_ih)qqsNeZoE3*bJBAD8Pr9j2BK!#>~wT?iK zv!>@oU2Bk-{iwc&pPxudDCruH6lgcXq+z{l6wuNj60z9)JjXrWIH9V|Y}n}%Ak9kM zv_(Q=mG6^b)L17LpR#jH5Fb{*_>ki@4n&;`@gxjcbj;u!-wTjq6z7J(l6%uQY2c1HY5bi~@p@LThYNnInXT zxXh1a=B2W!B8NphA5q2I%wF&AMZ`t3M!0UT&H2#QH|dD@<&E*Rf1*kgyS+D!p$Za# zC|9_p4C8Ug91?wwLOmZy2e=_ohB?4Ou#;k^L&gj4U+YFjG8i!yX|i+8@r4@LL;x2r z1AO`wf?KarvQZCP>9`Ic+7a=4yp9*V9yNZUp&|^aay=?zIt;=$qrnCi^|7Y$+d;jX zO?)2Y+FLW%MkclMco2!ig$Um)^w?j2L<^|2At-F@KZRY0D_^_Q2-L8z^Bf0+C%)(c zoV&8p3n0ey#5N+MJ?d*KE@1>ntv~8P!;sz4&KUwIMx>ia(V`)aD9;d(9G~J+AKzbX z-zA3{Posw?z{@?_CPf@7F27*|7^OIx4c8C_%nP-Bb5q!AUQ&909SE^qDAxg6;*Rt7 zz~nFlBny|+wa)sqee-rN?kFx~Q6W()nwOGtpuE3bK;!O8BT(*Orw#WK`|P28FW*?h zwWro_`R2-un_5lggtjjPRHF`Zac^zkG}W`gSfMfmP>eQyVA{TQ0&^}D@W#3TDOYBP zK@QSa>p;I>+P?MrcIDIZ9h3s4{ys@OZM@ramSWp*h<3VMTCqZfN}N*&Tv=cV_hO z-iS9Vp`X$mv?y^DjbD#ibcn+Z)I^NM&xnUdJX`q`TjRI>Ij8ZMh({xhM?>ROqh9US z_%$_70S=`Fo70pI82=U_p7%rRk*#ZUqIk7}l0)lJ+5#`=?a;kwYUR)jZyS z;rSIIU9WN_LR~@K?6|m~b9iupQ_DSl_{9UCg?$PjYHIx*grKur| zGSth82HSECW#wEvcH|T7I#g#QYDV+Yq(l=Mvg->2oWHVC5x-rK@Py`IsD){2;jxZJ zmKZ@~T9?)Vm1z!o^FyM;og)NcK_}j)ts|Wh2+N*?Hb#hF ztPuoWrfeQ(rSPgD`ZcZKv7@)-wAGd%e!0dkWHrGL-KY?0smb;1CD4k{95fOI61f#p z^JX-AGf3=?j$@99h^S*VP2W&65%cj4Wwd?CIXD&Y5pIgcFCCzBPDAMKqwTBOBd5`% zs_uA9Q&#z6dz{SDM3Jy6>twV)hmg3I^o)nJb_ zX2UqC)Edep5ZEnp&xq4EM!e4<<;wY@l!Ugg$IMU^JJaRgq_(g0N0uhDVDv~j*d|Qb zBpYSKd8)GK4l_a7u=s`)Mh&tNl9)ggx8qH@IFhvWEhKmhja3j@z!^t7A=Ng5XuxV< z+U$^e8=-k85qoSMH2Y9O^%-)}lzbtBs#qZAh@60ef@6VGM<|6B(d_fzk4=o#`JUSw z>HiYizSa3wt{YPRz0$bnY0i#~CcHrl6{M8hKl8e5_XC2VIjA6zD51?M?Z`0HL{-BM z1w5>`2=`JX_W`T*j3}5T#=E9{UFLaiG&#XW{*uG+hVuMP`gyF;T$JZ3 z&P)NVUqnOGQI%ed!hWe?t(-rk9RVhVqDi8VVjqAZCJ_vcM~f9rvmpzRj3BimK}Yf^|(v&G8ZxTAOvP1CO%n`NHJ^KK)8DP`|ze zlzD!_7N~SY{2s641+OEGU+RPIyPAW0>}pp#tQ+xaA*k{NQ8)39c|^fd2$=r$PT`dj z2<$^6_mYS>JJQFr#&1J)w6G&7qj?Dnb-kcR!_#w|OA6asV8Rk47p|}2@wZ+u6Nfnj zpGe%JuX(8p~r#qayrD1yDDRMQ=U zg;NXf#&vTBu@-%!2`&rS3$%T$?QN}R^R*N9fg*n^6OsM%x4*WpIP z4*aTxYa>P5a!1_7#;Vg}K0d!c{VC2dFQ9PpvNdvJGf6ePw;Y7WMX4XrkzQ@2@i zfMty)Q^6JNMhy!dmvt|^{(Y3 z5D+MVXhV$8Phch5Rn1MvA%cy3%`n7_8iADD(>Chz=f-8Sf9haG*TPjr-Fd+H7?1` z$f(qQ$Pg8xrJidJP95Ha<^ta$VQTGMw=tj?2vbrJOr#f{yR=VvCw^szX8T0DL}X@f z5DCq%XulLqlg-yYZS0+f zj`(dFj{-!gu3-muftcpT2c+D3qvUvJDE3=afqw#P5Wfv$L#-VKnRv$;Z;tp%`6{U~ z<}3%wN+%>5y|~$=10#K1>e#9g#^{t2nuFXfU43E=H=a9%%MY&_1Q>XQBdMV*w0U8P zwl9c(PdZh$%k)wxWRUQvQZ1w}Z#*K8y4uk8)fojeq_3{+ODtZt3g%K%lPF;5QS3&s z#-FUl2huew18rY9Z*rg8V&uXNYQJ6z`EvJ~ zCN5bLD{TN>he@!NiYcHdjd&GwUbjzUV^@RJliSQ=Jb+sB5j7+@*NP;G zSgbXfD~;bmwN@q6nx=(m+=9}8>cump#et5NA_+gWI$^c^Gn&`mbS!Kk$EDGVWsPgt z+UZoh?KH%sS&0nDR?|2ZASiXtcT_c%GYGPXVFXfIkalDBbRO~=l6UK|My$7uU8(U2 z5R{}Kf2|ljLi|pjlkD@X{t$F&4T+#@7&bEV0U`}##_Lw+wI^9K9{@Fb)HBXOamk!w+fi~DHnekkV=v_S zUc~EUX#dJ{mBy?=WzM5i`B$%gLA54(^mkK!Q2U>vA%5{8gipOv;M1>=%J?wfxdyg= z2TddVsPTKeju$+5#4mLsW<97s^=YhTwDw?+4&7c2!W05b9Q<(~q$t6n!l?eo3lODX zB?90u2w#u01``@4!XxvJX!I!4_SF{c1q?45uZ)&&f+{E~BpEMu{kd~+_30Cz8q-6t zQ|^6Q>aGM8@4{_kA>LB+LzJR6Q4yu$XN!W@3WUpu&>Xr~;P>xz(Z;V=w_;rzFULh|`xJ0eeLdrp@ z94?9vvNYV(VgD(I*w&~ct;Aeryyd(c20Ab4ilPWql6e;b%_Z+EZ&7 zRyHct9}iz!-bA{hPE9MB1NPPS#ctH8Qm9lI0z#^O zL&PuBLhM7l>Hao@AR~;|UltjLdq21J2(?2TDZst+6M`XH+l+TC9hcV?U5a@25WkT& z>3u@#vEdpL`Nw)2+2`4oaZNb%gCGnKgTl@K(E?3nBc4G?xuN_69AH0<-=-ekqw%{8 z@w+#|yx0Dv_mQ9fe=QNe8sm!An2QMwV=dmhpNLr>j7PEB3K?2c1a{;_p-ZJnKv?9GG)h7nL1zQJE@7`oMxShc%>E< z3l=&U>Q44T1jCq+5{c%o`mV>}%m3_S)6bv$=w0}cuX}GzKDK+1)5`;V*}wlNJomL% z;Of(-Fq|OVeYL<#zkLUO{M$YNxI*~OUwdoyPCxU#&%=9u^2Pe`ti+ZW|Lxc6cR3$0 z{dbG%D8cPdWg9tB0m7j{tNxk)`E%jPKXPgM`8_}RBE0jvpKr#!&`vst00yAC({b#+ z1`>%cNByOm1_gnrbTZ1j)F74Gnae1`X*XQ+y;)%6yoq$XJh)BCq^fY@-w6P2y?6#! zo;tBL+hoHRMTzisy=^<@>UpWxvxoRK3MrhDY81DcG^e)qW7MFE=7(6pwUw-8Mfjb) z+jbO-_XPHHsUg1AcB8p)%sWjzdsKA>Y6Uflsa=URdDQEeQi$J5JEm&6oqyhLe_IQ( zLd>)GsgN84L&gyE1KzP-h)iwAxxQBeOw4Xji_WUoL9Wp$VTIf}zD*s={4DUo#%>)B zV!bu@$}HC!PEtDz#(fhP6J!FzL_; zr`B-!kyVXE6zdx_cgM8|rTrfFPedLlNXl8@vXKU(Z74hp(K~n(7F47+<^WxQ1 zNEYadNW?1zyox%1Gy7i}gl6y{>_I323M7yR!?c+0Syn%l#|2_roCK8KKQdL%qMq z^jFA%VJ#v=qNl;2%9iKZ0aRNyGRJJ!bF1M<0`XgEGd5b-b0b=9H;kzgcEfb%P&C|dKfCk0)HVQ=fNwlO=S9WUp`g!cJ)UI};Sdz9xxqDC^QLITQRC;|Hw zN3xIc2iPo3b^(m4xN%VYEsxX3{1^;mOQDSCe=_3p-T8Jp=T7lc3q)x4w^neh);|gM zk|0q=^}J1WGNOjrikS8!7~`!qis;f{=)}7WL57OIW&V`M=hA*m{dVwO+QO#Mm?h7L{65BY5mFWA z_-N4ju?xX4=-)5nQDpg@Dn8+H5E$`4Ym%$-f7;K4BLB!Grsg}Rgx47FcvDzm=h@p!1=tP8CsqXvx2g^;nLSE27wSIg_@m; zhbY&P$}%4&=fS$m`D`0mn4NYU=(L`#G}*YW2XQVG_P&an3=7Mp5an^oZ1^RB8&3{! z^T`2T_{fI+eS6N$G}>8U{MS|C_e=l7?|`TO#2Q^89*;nA5f9^xOpcU(=dw0L`#&huY|Km;5zqxm- zzz=`LubB-r)jy|%Mv7pblA18X?v8|Q!;|W9aA&}GcR)C~IKaR4W1j~PfA0C}FVA0H z!6R?F;5GoE>`2GmL3Q_xjg}79ok{au9BSBIb|;Izq3VvteH&HsdjjvRv~CW&N#l0{ zTNBdN5W}|P%Y6PRxEP6G=DXH8CVLX}JKry2eg>%S&EGZ8Z8VCBKOn@NgO|^bv-94~ z`R$iCaQmeVTzGiZJg!MC1N8x6>;SIryLCt7`tuM&qxOo~-dI2XfU{+)?8a`{jj)Pw z8PeG4$nN}O$A6Eaqfh=k4a{Kdr*Y2=-qSNXg2*f`nQT!eH>0=^f&uULD({gq1kZ96~$3(*D+s~M(bqHJ?% zYK##X_8QUOhs<2KjbxSG*zJF^{p>J|_qnO6ikGB48Z;DB>u-ngX9_{$DTEecF5ctF zmAY{XTFo|wVn6`lUo{7+_*<-F$%o%?0@t5Dfzyk#ovCsgL;XH-;m}ZP4&uQ46ZaEj z)6rE4WHEoR8fp8)1cR`fVt$d^LuNbLSdv_g)ol{9^;>oFgB%1${XEhTBkK1#{>Nz@ zb9*$$^PYd1_sjM@Tf0XNVqh{I$ljCYpTR-!&1<+_hn~)A<+l`C#o2C*ahQ%6po#vi z_E&?5ALh75+}Sxmv-eGWL&oRJdc`$!za-*yT5lR+Z^$)VqjGqX z3=mf3K*mRd;cuI`anO*^>?_212(9zdAmVi%hoFrlLmBTyh&`0jX?kULS|&!kj%*L3 z(?Eb4ps;#w4B}mMHGX-#SH~N|AC7UvD(6o@%nJYp^Qpw=DEApoMYSnD!d)J0e10w8 zGN5{Xt?sBFf)K3uPCqBYfX!!Xc4AQP(tg|VC8D0+na{Ceek`9j2`Q74o<3(FBx%fc|G^GEAZr(UxMHH`BxqB8cT~r9+dLb zyaamZKjMt+efDiv;9vi5o&x}Y_x{~az|VZ|^GfTAE^s0{u;216*PEg*(6;b49wMy{ zc1~pn94W*R5e~w)>QF)-5eNZN4MpeN*qZeApZt7y^ex*0_TPNld*PLj+*33`^odXr zz7_maAVL-^*n*XB<{(I;1TvJZ%G z>!mX|e{JRH1n)FL3PVB&q-%r3X*%e9Fgy;M}v5$w}Jp{3u#UZJL^QJ!tI7q;8zh|fz~Y8)Pdvr-_9dW+Jjl7 zriopq**~G!H!8m##dMvfwlCGl8&6A5^)HA9HT%r8p!?VM&i5f1n(Y`%XQwou$*}vi zzpc4J>+dBM$wqDCI+h!rVLE*Un6=|Wc>{a{dcHptuhBsj-2bBF)wd4TJ0IE8CZu3IfV;GNNe zn^rQPDD&2?Q-gY$YiKEypIWiDM!p2vz8F#WlZx;i5r$f)I!VN+vY@ueQRZI^#Hgw{ z$TX_PiRbH0j$8Bf6*5xkv?rfCp(xB3Qrp+ld6Njg8ja8*fF%N@lz-cV5$7RDAMyS?!9Fd|c1ue zjy@8888uy70@x5k@XX8+NHA$|*NI`NeW)-VjM6(BV#)WG0cIS3Q+sfVb2UWT&dv$M z6h|D@h$(8AZ20RHMZ;D4Ee?8|sBcApOJ(-~oS{rW&E~LzrlLZ_JX1t`ClRC49x4gi zve}`2sYSw#j0(eQ{&^SxPA($AErPRqP&@E(zIN+rSfNANUL)P9Vh)@4QK1@P$?p_U zP9oNRXhI0ee9aD&G@dVp0rhyXP=olc8GGtRM2<-2h_|siIS9s`iLr>;Z;sq*?1W@i zFwRePrO;+3tC+CVkCXeuxT82liN-M~ImRE^*V&|X%AAML(um`naiqUS)mz4GH-LL? zn(X^PE_G?9c%`R(>XRr+DrS)nD<~n)ZQw$nApYe*Zm2F$IrC9?otTXLgh5qIoUx}l zU$l%VZ7;t-Py)Hq0Gx5rld@@%?7F|Q`e#NPUm>0wWTRq+#Wak1u*eX@aygdj{q^T2 z=e=rX%W<7Kj8W85nM(xi*jOZ)gZTMS+HY+>QyS@{Gneb{ukRl&X+vPgN0aa7i5%se zNX+g{3@-{v8P7wic`!j4-V!a&qR9lpPc2#3NcMYG?{9w)DGdkXKfCe705_k)ZSl8F z3or)5Ca|sUB$!~v_4m3c{QmJD_>1u7Z~xN(0Pw+g{VY89^>2f>{(Jup{Go6DM)>)^ z`a|&kpZI&nD&g^h&pwQ=-&u@Rr#a3DU$fP(Zsn65?ajXX?x*0#zxCIrghonJ0$Ils zV1;x;cfB$_Z@EV*MDxi%a=Ci^TQ8o$kAK?- z;N|D<&VFeF@MGWn8`a-^@^|k}9d?99=cwB`)OMyKM^aFIP{^&1x+Ck_v*)LxuZnoy zJ@`An`*}FIw3_DQ_Dg5G@rLGZQ&u|E64v@7vODY)gw)j0IDqKT+I7^KEm{`hPVZ#2 zCG+!W8EwOgwJi|SIN}<84E{LHTYy*`?~}GK)CVP;kiK)P@EGh@h;_OC z0u5If>Kq+d2w(R3R6~~Q{WY{jL{K`~$MrR=P_QM`ovN}!a!PziMh1!aDm9`)&dYQV zFM1^qMMrP7-L&=2_aBkjk5SPfYUTo!b!6(sbxDBoeoO;B~mq2m>;Z_9XU?+%!$Y zdZj@~E@J|>dsdI{AmqQ$MGo)QAKBEaO((eUw;l2I2-*HQGn|B^%j^tZTkS15BS;1Y%L#iO@#+@?$X>npEWZLn$KJB3ufPx}I@` zQ*ooJ*%-)*2Jtc?orS;UaSjo+>v_fQT2h$%L23i`VVDtfQ{>7LQkmHrswL zs`EZ4!|MAmps(#aj>q`!Rot{iCUPVNHcT)(yFSc}N}S?!n*^s80D-fAB@*_!nHRxu zg97QRG^Qaq2wm=mic&Bi?H(dv5&lUeKhf9+ql{_UF+A{fts>P27H{x*kn4F>-#L>8 z0s^gQMwBx9$L9|j8nH=YN`?mz$l(d$yPK!o+)r`(AfU$lgLbHF#4$G2kf&J1hJ!$W z4D39@W0eZ2%o>KI!x+bxNN0eVes9I!E7TD#9FfQ3umQnApx4Nq5y``;r{}mrgj-af zLnSl7Y=%ZQ51bfz2wF;^`MFW|vtta)a-`aMcCrTsbHGS*J*-hB-Wt{*&a>P5xl0Jc z9fGsF+u|@xak@Y}E9X}pJ`XF<5rDga9DrJe5uEo8DDgT+iI1O!(%wi$wlROe5tjl{ ziioXdu4IN8?09LMS6*nD;=PH9XGS{X?)<3c!*=sO*&T~9Z$L?eTAiCDGHyN}&i0g_ z(JX|QU3u3verF_OOD$WWCDCUN8Vp1ls)$&{jt&?=@%ZO3MgY_q@(8`cIfP7X>U^NW z7(jD=CD!)!#En}<9#u=*SkGw05n2XtdfpUL)5y0$1yC02L$l8gViA*Cujm6OutH3u zj%);n`d)bkZ&_A_O4OyKtodje-q6q3qR(JhovqzklmEJnQq(M+GCIoA5?+ zJ?cydTBC+$&*gi}OkSiyziG#UkY^agn90Rk*XV38R5X4qv3Nt{cl`a$Cs**oM@VO6 zs2F+l2lE&-A9&&SYyaAR3ZM6yx_AQ0jwE<02yLy4BDu^8=rq3zVP3C7~cI8AJ;V{ zOvEp9!~p==ku0e@NO$-3xdER0+N(|H-J}`0`@f%h;U0YIg?p`dff%@RSL*2gqrdPe zc=`D|!f^up!TWB3Ru5D){ER@R(LkcQQ`$vhnOw|VYo`F>Fx|i4o30u^4=1YZ05Qtwg5!e7i zq-m#t$F^^&kvKJF;comjBswXGC8a~IaKw?N(S}lY2~&VS3qU3{{LFD_`gKTL;NZlkt(8@`BzONx3$4-z+N;44yn;jM*K*i#B~-z zLTWNIja*wwwebfs9%3g3+Fd}YCi+lnt-k1JW)s$9#zx$B0Gl12q)f_Bm zGa_61+x6)-v3+(IU~`wngNBA@H4j|lS79Ki5oAUlg`a1coo_ULi}bHL!icYHD}P{2 zmq6H}d%PbEjbAq}p`4#+Xf!a**kCcB1^Y>rC; zp-n#WPb=#3#zPlj*~IIKe1ws{Ez}m{^mB#K_SP8H5(w?a@5uB`p_b`FjCa*1Zp7%C zM!04_q#q)~erTHX);>}zdR0EfLp;aNE%V4~KDP0%WH847Yg$nlHK^A5)e*n?>#Aoc z(|%CpPBcWbmPa3uDh4C&Ux`7zIfE6*^V9BL#dlaEiktimXNVv_k2js)RR$LkcMe!< zR80jPt+>zr%VBU-v_Q1)lx7uLddwe)d24e)z!u z_D%o*c;&;t13&d0-v!V9YhMF@>@WYvaPtqp3BKj;|0w**fBQecKmWlWI#vje7r@ELQuQ@=yyI2A9&}>aQD?st0`e3e#1sTw;_gDPaf~=1ps*VtFOSx z#i2S7G@b35<3Z8k!Vs_gI=fAFhoopNpqW1#UncVO3DgRVjby1;}mzw-_Tt>dmmOpQnnp7~IzZVkFFX&!lpIzhWQ8{{uyTM(9=!C)a~P#nAGj`S8W zQ)`4_s^ydiy%NEP^*FBtV#?BRLag-atVWcH(O|VjETD&&=ZVpvA)rAtX&NS6>?}f9 zy9Hpy-0Pr)DhWG7=i%N)(mUvyyzo1 zz}NO2WHGrx6mTTA?QeNUFp;g<&b3g{IgA6;9q$uDwL{z2)o3;}rZtUK9Z}HQA0o%k zVyzV^5&kC^26*_H6S(%wiLn2W(DrS=a68Uilbs`|GIV~ZY7|Q(G06Ci*$HwG5x%zX zyfp}Pgd0k2UlQ7bI2Ua+i6#)5Q&aNC(5P!Q*Ra<31w-4nVSuO+%Y)P~Munn|Bg|J+ zNx-0JTx^IbJZ)d7HNtB|tkh(#wS7&B?g@TY5Ufi%Aktt&Dy)h zde*dkp{5dSHQ)pn5^^N8C`^b#BcOq3nqIF)N{#k!h1fh(gYYMf5kR;ap$U#cBesr@ zM#dN175Q|=lPWG&5PP+9k)>%aG=2r5R<3IR!MI^)Do?@wgowvR+m{%ccK~dixq@s5 z13@nB+%TYXe%&D+$vZ#Q5ED(~x3Ysm&yR-vymY-vR=!N2?Vy74-L6j z&4-NV1j5(WD6Q8bIf%UqVQu8Y5Db4yb-~D@wx0Yg1_(>Zh!mYKP|Y4T%nMdyb^AQZ z=VGGht1xba@jfd4mg;wNHLKBJ4BP#Th&rxDVY-YoaqamsG^Q=!xcV)z#&1O}pD4h$ zc}(3vBIe!?5IQu4mBKlW_PX|4ym^V|&ou^!>QMwkCufY*n8t=dIbWcC&gK4Mjt@XJ z%o>9WYK(_yl#$Vs}=(_+t zX+_FVju;wYtmF0Df9eb2>NBTP$J-0d}S z{g>e0txYo)|L(iyXSA-5f8aL!=)duP00Q``KmRy<`Ja7k`rRi#dKZ4=UwtnC06hAK zFT$Vsi9ZyM|K={i4}I~k!Y}}Q=exhC`rXfb&-3t}zw@GApg@4n`-W@qd0%%09{Zw; zaPh_(hBd;iPn^NW-hB(+_fs#yZ@%+oI6L!A>$CsLL+}OPbPXPV>qWTy_zA4fBi#K| zftNmX2R{6NzY72F|MUX9`n&h4uYdEOx(?s)gKr4m?SKES--h@9gO>mi;oE-fbK$9f z>C*JOcmJIi;ho?8yqTze=!p|}>$g4(Z}`f~aQ)eN9zXqwGx*qhZo!BC>8tSWzxyJb z-O^PM-}24Z;ZOeHGtQ3=MK(yq{cH!4qF}9#*G=(oqa)tx!y8+{zatg?SeR zlFp_g(L3q%e*kq0vHX59-s$l-5wm*dvWnO-wIxwgVXxB-6d;02tNrEABlX$&4cA6CeXyrN~DIGtEkfL>i^QynoJ)d(UTRp&7_U3o+|WT&3A-G6gV7eBnnq z64gUcbLIvOF>Agb-%lO>vDQ3}H-!B;p8dxPk(#l8Gb0R(7p(O>0MOaC_-OjoBA|ZS z_=|8f?D$guK^@-}qFJ*PQQ7CZ_Nr;eV2=L>lnC%P2~L%t)aP|Z{##zw>y{ z{tXc3vJpHVg2>vauaNsoC94mx4j3K+e(&TH16mJd_rL+)R*X$$qgZ{{Bi zjcLoxHHcux-YNNrNJCilyN(pD%zWq@Uz)D^W5wq?ow$JYSCmjM2y!W4-Mp7c)UKNFAq^TBUd19^%EVpb7y~RS#bdP#sBVO@D2a<8>j#F z#czKE-u>gBfR}&gZq<-G+8+3Bon?$#Hrf5!8&2Vy{y+BKJI=1E>i_@jeWy<{ z$;_npgoGq?LP$W0LAn$H1rZQMP!Yt6f{KcT$HHTMP(&Z~5gx>bNH5YsdWp1T3$wbwr92FvexeRX){b(onu_nve1K5MVN_xgO^|1||8X4ZKxA2OyI zL&j8N+L2Az`oUh@^@&y3{zktScNF-h0$F6)28`LK0sEgj0)PI( zIxN1kJ<$+i7p~9*DpF0L651NzkWY@mffwlQIIN)t!zR>V#xcWi=qE?xp3B!_`9nLs z5xKvMuVmE?D*!M!@ca>2aQRqv2@S1Pm~m7SW*pUohpyUy=YFx(ugJFshhI7d^FKHu zQ7^LlKDru1Mpt9Xp+oSNkB-KjpIL+D5AO7hjsi>*UjZU3ru8f-b74WLz_JOj{9geAE(zq+&EO!HQ@I7LvE%Zvsqg5|!<&N|YS6 zO~(2to7_`aK_HZHB&X66pT=?t61b9+c#m*M%)ULIr7B0mKY&PDp{5I zQ7~MQ9(nn+6Sx({y2@sE6%|#SNlJ0P7b`&uqA)-zLad&@GQ}w=`M;~!bJ~TmeckaY z#O^gtM#YpzilWX@^jc$>;#aaDQwF)w6+$6No@8NLJ;6@ny2*5sam`g2HpnRqj!JV)wys5n6x@*Sbl`IVzciq9qDtY2dQ zD!2?`-ytAjf?I>CTEJL~fj&YMV0L5SEoBB>{#M{pvhz<8pn;njsHO*akwzt?gHbNxI<59<5b!14LDKg zj9+>FZ-(*f#&?hLYq>&BGJfUyqqW(LVrzJw5oG?FjKT+JBZ)g6i48m>7_koXH~kD^ zE_^m{^pu5)1sM|$zzT~fx3n)9V1QJZY)m} zN8_^HwQynl;ZVEZ8Vgr`oC!FHu=g{{^CSD44LOWx?Gad~W$*0=U;|w-OHRUQOb%lj zA+~L{!r5pHXp_wl_7$_?jpdM&rrw{!j9=#bsI9BS-1mSZPree|nGYJF*jD2>&u2nN zhq$0-#JB>sZ=wvwulc{t_^ll_6mS2ZYcO)}*~!mlzvnaz-)#yWyW*Q@U$HXyw{1&T zVEiHTP^hgzeQOJLu3ew`S+m}K3Z|cYtoplXU=Z70TY`bEE-bm_E_ANn_)p*TJM3$h zW7xFGc<_^7MEB;c|K0`t7yQar7>4933gb7{IYnT0dMd&6@USbxq33DA3Lm~Yp!pu!ihhcf_pDpjU{)qB^TY>F^Jls z7Bxc(Y}2vWPZ;PfmS0n3%&GtuLFvAb)+-t$^tKlPP~iPa7dF@z?UJ&oX?zXN`0aGm zH|K}V5wq%W`mcAxuiv>8JJt^*%eJ-vyyLpb7_)B!dwut|LG*V;7&g8-S%9ssw>a+V z3D~i&4;xHwUOO2#y=Mj1KGzjQ?y8JV#(*q8PY5X* z4QDFD{~(QFU0M*~AKTqFh#{k@e0;4_d7s}!IomgzNm*i#WE;u*N)^xI+ffjdDtgn2 zDCNODO;`~tnUGm57N70wGk#0xkFr9>gt@3`J88?Kf%u&v6d+eYkz7xuN>v0HRZc~4 ztoVq^lWMG2jGCn-)JT1*{(fOzZ%oO||X>eC8}=vmi;zcPaebNQM|^mdg8FxnkU97?vufD`R3O ziZ690Moh71tqplSe?XKzcOAxMN_25B9UtE%ovZFqlT*x%Tk~hT}1~UU&&C}(Ihn9#`ldl zgUwNdB^%-nBasaMUWJq=juMU{&K)+1=f8ZM6~A|v1zCI(it2d$6-psF-V&wCr;wr} zW!LEn7WZ63id4ox7s?wJ2PC6YjK6Lth{tOlzl8%z#OE1o;ubUNwedqq{8;)#`T{E% z!5obHA1EuJIq@!KtTF{3V=U{18BviKhNw_gTAUv21qKI6T^}ORZr;3B%%2!D5q!KN zLXb%+b4UYyB3&wu^$Y6Qa6%OboHW>_mp{7G8_xKJ!uXB*rLO2KJ0cYvM-8b6D^jUg zD~=lp^Vem-JGS?A}cmewlaT=+eQNHUEF?KitEMTK9 zBQV1u3bS(4e$C?`L=^EW0s@Np46AI{ks!=8NAA3lw_`@UgJ95W>w=!*SDZKbR^Wa< zp3gK-;(u1Wcg9(mJT`V{{Nm1Jae*Ug!(hOF6Hexf1mBSpckb!_*#0<88pkP`g- zQLg8-jx%UpYtXhiVu?#u|3i@U{7>Hat!o~R6Ry7ot+RIr0Ni)sXV5UJ6$gImB8;6k z2dCft8@zhsAMosVevE;xZoc6%c_L<qr-UB1{nuV&`+JDIVpLpZ7=xg7BKVN*=zjs*ie_!!Sv};m* zA3DSHQsiJ~vG2JfyiMOVPj=#| z?{C1?#l0xh8caE?35Q-j4h&u0tHwL8pO)BO+k(NtmyE_A&wm33221blz|wm=Fm}HNocY`7?0s%Lbt!hN>u3GJ zXmcs!cdG-=8|iKOuKG(S9{bKlY+2NUsyd6QZykywzAz4rBhz*~=Bf!;|3VLTtm{wu zTqK;ltLrS@_QkOn=!x*`&$eL0!X7k^s=~Yvjzr6DwT`0D;DGnH;?7HZlJu%jZ7}bG z5&V8#xgIay+?H(M4;fX3!#_I)d!5=`=EoZ>xO^;bJbjs35$rRZWCf~F-UNG`9AtTg zm766HV_Ngax3|5B{_Y4h4OW!h0&WFakk#o{1d~wU1Og9NfGWa0S?a4Xb#fF0zJkxF z3^8Mo$;u8|Et_l`Z;vTzW0kPn2#2rG4wckvj9*gjx5Hdc7BBM{pis)Sl?yVmBHhaS zYZ7}KS6OBP6}oOoXxM%@WiFdSneArD0ksN-7^58PR$8D8_Ls)^)mZO}6<=k}?k1U3 z7-TbkjT;}xWU#Bj6vUwlZYcrP90@qHxsrHfoJkTg3pKozxDe79Io8%B*i(VcUsjQ? zC|`q?N!DFJ^iNQ-eI-LoN{W)_B*cJ|mCTeA|BcBdbL3VCL$KMQDRB6P0R_~lzS6{a ziy3u8Em|g3qiIZ)&!(4*Su2F0Hq0J$$4~McXoxc-gZ5=|e324Fh&U=3v81zonUbzT zwy)gqa@oEJD5M5(m2~URNtNyn<1cpFtQ+kJ0e-lme5tK8dCEa*g&Eol$Rj|MC_me zt1T~v6FB3&f57V2wM2C-5Ca7@a=a}-XZv!dvaX0A#TLQ{X0eSG)h3|aD`bziUca=+ zWF|_+Dg`BK(AzJ-B=oH|4RhK^@^NT+jPaC{GLv%Sv^Bm`SySc^A=7p@vCj@D^x`8!L}o#}gtypD{Lj{*)-&DBw&JJMowdi*LmNC5^e<*#t%u;t9(~@)CVvx9r5+ zC;|#mX$~9TUmNIulJV{a2wMQE8vxVi6mL8I-Bs)nV~%siFH^h*8NZb=I+JcLn9CJ2 zekq^v>p4Og1e{DX#;?!lG>+pE1@euUC7t$r5x)z<5lJv4$qH3oKyfMA#Hz!XDaS)L z`=pdNtSFT=aU^$RF)SW2g|ZQOmSc1g--d$Cawaqm^Ij+#g~ZU5C6dyS&~;ogN*w2o zS&k!(aAdH-@m9}gO@L`$iU&y4c*zEm;ofnn(w{P228~fRkXT=J&YwiQbHCTtJSlr^ z*2j*B^%UY8nC|zQYmT~}k`+KIj4wc*)vw8ze+K3vS@T(BtdDsNWuvYy`-)dFUYUG{ z1AqQmfdgUCaygq=5LW!k^Uh)V%6VDHu*&G`5#GkR$=E7 z!P@ZS=I@877DvoMBUE9`6xAkB=kJ_Dp~|3jd;x8ni90C;jw;GaeE(0`_^lt&f)j7} zF`8#gL$SXf_gwHvtb5{F0Kkg79>BcIF2StRPsU#7o`LBn9*viO`5Uab=K=I=Yr~|s z9*jf3dO2!_mNsvmzWSP7+ErWg=#%*Cb=UiwUqc!(^_T_N{hcS`i2wWwHa`Cnx;Jn6 ze_}(?R##)(`~%Rlb^E_}SMh&a@hcTZtO7=qQ1Xg72nAALVAT3Y0q9uQhriyi1#`|H zmHhmW&yL0KPG3@bUt}qMOCL~GZ!q^mquH-Fz0{4{KD+`{EG-TV_5+LWYQwhWy*Tp^ zGm_-3s?K8n^G4#4udibjJ(}u?NXwiksCrBleER82#-PcAn-MVa;6{wypKsVc`i=E? z_2%u#ZC`wM2Pgtg_+e_JJ^9d~XqjG%ZOcm5^yB9?pmWne^82o>gLwJ3sp7w5T_0Y& zehU_SVSMtl3G;`bPz4MQr0J)2ZBayta?w@zsO&kXdsWq2%>T$J_L2>M?Z(aLzk#UC zDJ~8a@%kO@*tWbE=l*F1Qzg&6U<4kxa-HZOe2g4ExfZ`Zb2-*M-<58{-@gMF+&>d_ z!&Bw*#CeU5l8P{VQY~tm(%pShg!3wbh4pRHNsMG#gsrJP z#$6tBFv#>xOAIM~UEE$7js{Gz7byKq+s}UskLeOs%FN`7Y)=8ADY(gH_-V=X% zqABBk%c}T{%H_1uIIV2Yg-VqbjhaIPuShQ|5aYZ-QRHY!#w;~>Q~~Nw@z7>}L2TUB z7bd-m^T6}P6*yc`K!n^0zr3KKBMNAlRE_%Kg|ecW5``|=O4z_^Gzf#nw>4^^B&j3K6sHJ;L~0{dl%`GuCw7r`+DMpp)# zNGQ-rUsp0l%mc*zCL=3o$)BzT7|R}WHA)q58kAQ)PcpxAk2(a`xwIUG8z2>K{usxU zi$)*5FEq_`h3-KnGwIA?RuE54!HTN16zeKRcNB^o91D*h zLSg9^*kuHcOeU%b@A{Zcys}$JXyyG5-RF3%#AFp6yZNYc-c0D7FwFz`E3y@|t`)Pc z*j3s~i67)#xV$}leMU!dht_67j9(&+5ia6}$g{H)y(FBu+}(ILA2Bw=VM<}TlW~;& zQCgJlB2ZF?fYNmlNhbvEn8FJvWxgZETU9~tI;JQc&BPE-P?7wy#pEYn+8UmzhCQu~-Rn(5a9n zQWO=|sO-p4@r%43$?QuKGUIPB!x-3@MHmavtiORl(3HDI+;3fCA{AIkrEZ|YQ`=X} z%2nd(%@DIaRon`;ube{&#frN)sY_;zH(Aq)@a0~CAs4UaFinDNUxo4Os9HeCWW^Zc zFNA1pUy7&eCi_`6ISknnD=cL+N1;+;*X9~ zcP``CsWc`sVMVJPKE<;wSzOjiwy#iPNd-HyyKBOv(RDl|{3Moqo-8Ep=$G@I>fkO|E$1eESM zMGqd^*JVb!F*efsx6k&)F0y?kV>UZZnDW?e4OcKqRbOvdelSu87gtzNTP&XeBxQSqk+7Y+uXr8HMd@sXS&l3rl1? zLlLRuDag$NkYJ)3l^K~lX9aLa8L3#S5{l<|&n|H;2{7QSWUUH@ow7;KhCj>qEhKw7 z9#0c?Uw~E3dFx#1n|`+A@*l{c%aYAtLPq1bOQINJl(_x@HY${c7uBiSvaGN(mNv4JG>BX7M@=20f&HkQU=x$3ej{lin( zQyM2?#k$vDHH9d$ov7m6E7@Q%x;3+0e+{veL)R#s<4mBx8BM{Rq2Sl!hQCp1LyT}E z*AtZap?hDAK7lkD!b$f&OUApLOH`x`)tJ@laASf_P4a!L$yl&AS@7!$t8P4XsP2FV zBN@N`e9)NOv&r~@&NR2?Z%{lNXTB6#kF^2kHOG<181BHMIr2zH!X(aF&iM7_?P9zN zIXbZEw)Gjm@)$Fs({a|%XA&ok^5<058jKuYz|QT(lrin)*ZTRp$K?I~k^5Lf#*f8` z|NCP!O&pK@&Mw^b{!6fV;VbHEx4iTkZaMA!IO0FA#Eetkj$&UwRz3I_s941Mr=G`_ zR~BKP^UgwD%W(Ylr#JlF&arLj3XI%)Hfo1AslOk!@17XG+Y}5LI~t}?K*!3}Sb5*W z80_s+Utd*MixGRx#>l<*K(W6M9dE40#^?WvVqbs7=QMn`DQFncil|t`#^=&a@~ZlJ zj5}x!hVM2N16|$dSh336)E+ng0GO&m+48h1vAf>-+G6zY>}2OTX6}AynmiHpt<9h) z!uqG5XPff!t9iyWw9K52#!(}%Y2ho_^ukNYXZE&tVEf`_-rv*=X~dYh`=NRFY3O)k zHP$}<3);g-^Dh58%9*2X?zWKtnE+BeJOC=q%#h(sCn9A7zGp_d0%7p z<7(f{ul8WD->+^i4iFx=a$UxRjLMbrKtpQ*BWKs6zPYMg;amD@nO5h=m0H6TU@9x4 z%!yH%0T~jr@dx_txcZ4sl{rlytb4ADZTvQltirGf)#zB;AJpJ1y1ktLiaq@ zUb*p#lrbkWadH{IE^D?>R$pgWeR0+u!Pl3%7L$sCQ8169C<8sJGBuQTg9+YuS4rh7 zaCD2OirBs(W;;{LfGHy-J62P8cndoMKBzM1vqajCP~0d?su1IZ_wSHAC!6i7EB^=x z`#0#U>>(+ZO=_o?gjroXXXRvJ~qjv(XQWBa;{ZIEF5!r7!HUSt(u$GXa$ zeCHjd{UV*|#F6!+R?w3ZXTA8vSab3D@_1pb%l4&=IInap(H1c48HCvbeiSM5DVNb61=4|p0Ze`ZU^s(NRV=ILC)i%H zzXsX9(AmBqU#U(3Wx8Pe7Ku|H_oOG zSTQr$&4=9aiiEOKHY`(2#EKS&T^f1pUU!~pRJJdRZ!DjNr^Jj@#T#+85kZksiO&~# zlc%6@##>_*R&{`7T`aoHPZD`LXUb}hN}huNb9UkLCswE>mA#TNt=i}W@>wN5ha8|Z zMX)#C5-|m4F^UlxCUw+^^QFi|qm=Kr4KPt-Wop3y)urnn>~kC=tim89cTw6`Trr0i zq-=99e!!1CI`mL7e#vvT^5TO*ZoU-GlLY!giS7}F6mk$wKAh<&H(rgx{FQ~Pu3|nY ze2lol9YH~F_Pi-BTDDS|DxLC@{wx&9iegVHNYla%jY%x;bKd3-@yh2c%U&n0lcm6T zE8@2Cm%OlxJap-mn0WZXsB3A)nn#{Mp|%!# zz3<&o(xNi!Vdtm{I83xcTpLj?L4j0sz{VuVg=;c=*9M{6D^c#xbM3zvFIPu17li$@2Z%V$u{j3YI;h7gon|q)6 zDE5B;ncjN=z{)>Ag8M%58TPZd z(@UF;4Xss}`=QZz>iZjWRmnrgRP+9@eGmh^QK~=`*VDPtFMenoSzX%rO%ggq@vE^N zO@Q%>w1Os6?phIK!YN`I&9Aj{t|KuuI*;V@ruIYmJ)t zAcyhmwd1xy4D^!2U*jX(j`ahIvqLpH)(!;kYsZ=ak0}cn^tBHL6zS!~nj+!hZ*9bh z-s3o57Vr4Rn5LK_5Z}biWcG?mVKU)$Y2zw;QicpEiUOh>28&l}9$?lLgfhbf z+Dou~W&0adu}wP5$z@(L*>VChgNXv;lUyhXRQ!e(996b2vLL>uGOJ#fK|^82uj{Nq zR{0A-1nz2A1zPnH=SYRAL8NuG+*=nYbZGf$b>@vYBitOUEtD%3}K(Rrx9v zlH_7JwTfV&*h7GkD-|C;Ls>sxBFenqQt1)gzLLyKuTGylW}5rlkeJxH%+&x4AnQ~=Ld2t(*`8Ev69t&cA?1lsgcSH5N4gMf9R8rrx^&sT zrXsel(tZx}(%o5%6%p2uY9E(Yo^!TuvXN;+%4ZQTESKITO3OU9uc&yJ3i)J{hO*}y zpj1&n%0n&{zpf(zu{=s=`%)kx*z#hrHM(M+H)zTn%vA6x3Pg`-?SAikuw?v_H7eWJ zRbpo;B9iBZLdp};*}jF?0U{93lN_H|pCSs(1>Er#K%u;;Vgqbnx7~~)a3LkfWGu<@ zO^lhA$&#|n%aiZp`{j(cBV}fLavwV_#W}VB{B=RAMaXc>+INR4{MjBIMGBbw|6CMwB_O(#n z#BX4P6OS|B(%8NTDECa({7KnJBEeV(@MEonIU5$hXZn=A5stuev; zPAc1NhzTwo3{0ToT9dns#QJtr@+dW42NZ}JMj>xw6b?h%AVY!eY(S^|S+QD{{hr-EBW{nJ zSA-P589eTc7s&Y$X$2c5U$I;%E_8keG zami?oT+*@B3Wd4i*v9UuHQd?7>W(KKBfR`R9t%9Q{w5g4^7?{|W=o2#1kdA)=;v;| zRZYD?>o|*@ZN&R3iG2a`*TZDJ`#*H!_l0YIjx`TIfdenS2xAW14`<&02Rwhxf9EQ8 zs~SohBEzOkL|scW>PNI-$t`zb`5pJ+pvyjnJKlTI-+XS>jSZM{@%b3J&mP#mco|mQ zbwAtaJo5WrM@`dEYW9IIMgD$%S_g(bauEFn)J;U2zcE5H%?F20N)|b$~vlDln z_c3h#>#G2O$wwZJxu3ic{X0AH%zyp}+g@7&7+~B%bFt3_=isofe;(_ed=6b3H{gD- zc7NxI*!03nSbpc9(Xnz3M(w*N_PO9}9Qu{dqGo6#7XIW{|K9J-(3@m21|huhDWg(X z<0d2(YZ2k`Z>`74Kbw~Pe&2IP;?>`8M>Ifziu4G^SX4LiHy`YcN-Ds>^$hm-?^oSm zc}bS0_ys8lynvF~NChTxmBFDc0{0_ohKOtJ&r{rxqwGpEl-chXj$^+yNo|+B?!hYk zGZ?>q#bAK(TRy#-M!sS)&>N+dc8X$eu-BI=)YMzXBlL=2ItKkkr1CWdSsUdQ(${Wj z!(eZOqrN=O+kj7Ec2fbfPa2NdCk@A%r@L_LC9BZ2dC;jiEmxEZCDpDlezTdr@D*|3 z8)Zo)v|B;vlwfvmA3)RiYS=0ht_*hBVI&n^e4{7NO4h6VjKT<5Ba}2I<|iwxDwJ7< zoT-+f46K0dn<_Agy|1ijtXR=R*=%1T<4K5I1(G#z7=DU;F`(%57_N>2RA;y&$RG^G z`_kWq6(A{-FA7$4`q!b1Pm0o7Q%v~xy)uR@V@PJ8gWZX%$KHbRDs0*LDix>MY+n)% z0;IDC15C_H*uL_C3p0MR6?;+vmdE%l70ePJUjk~HN)+v$(pM;yd5v0)|hh#*h((R0Sgo1Bz6# zoh+t`-VocDD`NB;CLJ5x_)L{3eJO*ns;4l}olj7q(pP7!GA5;DObg{hmX||3KDrE4 z&w(Ukyp4*kLy4~VMb`5dQp~E%WnZb{D)h)>XNMWTA>|`iS}2NNs#GycK}V!?DiL;Q zNUqC`^Fpy6R3^Eo(TK0)`pyPnwyzv-No@G>`<*h6JytVGwlA^#o+J#yc_3C_4sl(g>g2i`Z4GPtzKN#qv)MUG1c#L0?3QD6pCQ0WW$>`LS zvFyA>zNA8;(_@rKC=uw_+$lyXxZIs+sen^i?NWg%;-6FHtuu0s$j_~CctNTTj|eE( zI8S%R0rwc`XdViTuOWqBQaEZ2Q`i|-@$Wh;SUo>a;zl7uc~^`Qycb+WyYsw6g7s;P z?vN7CFM^82^2TgXxd-s`wz_f;k#qv!d54Ezf>~ZgHgarouU9^I&kz*6k;Blx6(o6 zv!>nruH@iCnalQMGaMepdZmgsC|`%0=V=mb|NiLfVb)N%{aBt9aL0*+qna2mTgMn| zTm|%Yx{i_Iqt2xN2XFkI_NVKy=r_0EPp6%SeJ(f$dz^I|=707Q%zW3$c5&XpZ^4^>S_T1>z{rBJ65g5l0V*w-A+6j$N&8Mc>K%Xs%)R691$iQb`Vp+0zkuv zRt(>5O6fD6dJcd7DBrxCbi`q(X&Q=+&o0F6XMLFcZu7!daLyBVp=IW7a5=_vF1Y{z zaO>&kqixw6$?uljd{rzD-SfR?;E*q0itf!@amP6qp?yWV zK|JBmc>sVHul*%n{^d={&(}ZoJZgqCVz2j~iD}0liI;zQ6Q2L!&tR*oG3TS_W3amy z&;Rged~^Afw*vs4yz2XS`Io;=-|Ok;K?EG~lqg$KVS366Igcpy*TyeUt->+7h}cU4|=NUe}72@ zTv~A(%V5HlGJ3^~s;G1V+}bBQvFgzsn0$E2zPC_g@Rm=H#lv4)7f_zsvU)obHs=;< z+$J2G=!78Lf9y7+NuFkHIt4td0{`o+6gxaA6=UR<&o*D}yEyJpB zslwZ?oWM4Hw=M0(LtkHy&9C&Jud4_UFk#*hoPNVJ@061YB@;SjpJ|fG_$?p%yNY}> zzRso$Ah}QiQ`)Q-Uwu0rrFT$`ZIp9RVZ~sI3Ii;;rvu9$*nz2s55?34Losn)BU*Q> zQ#a5j&TqtN*G<6hDNNBSq8U?@0u{P`t-8-#4ODPu-p5pN6d^Fq3O1y4crXE^ z54T*;Q2I&*k8ljI9#cF}umPwWu9ER<6Sh;j@uzNFN`+xygU1@9vbRFgAD8W`^*`Rf zjk74DSKOw|Fk%Z4zT(~yY!hWTJQ!8+Ci|OIkPzi4wFA#ri1F*O#KijzA6JFeN!6$= z7pobgFvnf?Y#gU^*uKW-ipBKxe;eD^X!)xXW2MzJf^1*OyrdkqZ@`H`V_rJ_&6+S$ z1n&KHn3`-HwAtgJEpQevq=SPsjzzmazQoE}? z(^vWmrBxC)NGfKHD2@>CTRw-Rs8C4$tc=@|@oU|JB83@dICD9<-z1$4bhdAtH<=`k z@Uh5qC{fwI##j8t?c_!zcOhTqvm!1fLPf#$^_j{6B~qLZQn)|EVVx%IYLD?K+CzR% zoY~13zZvU<@D!-LeQcVMl;)C-a-FHL35vqE{Cv8elJTaYO&v>;Jlvhnnw0TNQ~|3q z=)}O4A50<6oE{ujvq_aK0n|1MDif6}Ta0V{=_yY$jaOKIXADkjgo@m-`wlDO41`Q8`{orme9CRkfw(XrPx+i~{49 zR9GqVT4NmMuMubjcY{E$a|<(ml>~8D8Na&ImeP-mKi|q?{KABkzIr~E#On}S)d)wg zfWprN9Ijk9Drlq1&W8&at-Jf$-XQIk?8NZGrS?Qd4e6Wi0(wMM9Gd}M; zB_^OVtF`$jvo4m3ZJ|t*jNkP8()$!lw&Rx6xOrIL~?npfQ-5=wR?>HBST=^M{-hXeLbklWMdEdi${dc!wu&)opCQrol zlaIsLdHVwZHa@!$Yae?GhkfmG%zn>l80_xBlUIEY6cL7u9gWTnoAP#kOPjnSThTDG z6fHGHkqWE#A4YzXHXt z!uSm;e&xbwC6Ls7_FMPXLALQbbZm97qRCbKn#2MIn0mxe)CiUIy`NiyO)qt`0AD}c zW+;A36YP+ZSqkhj8NcO!JB4*~Lu(bP>kRsP{8DTJVb}z}9d~Z*ca%N>rH5iILxCGl zN*fmk2+JPWfn^WuC~Z*JTa4MK9uwye!QSs`X6H3-{{~E+KLo3u>I_s`Qy7|wR2dSp zE~Vf`_Af$qkKhion5Cf2=f%Bs`A%eX%dN<+;|AH2T>8jRkD3GhI`6(advJz$qO>s zz8VuUQGytq!AZHs2MnltyKLYHV2T9#bw8J8z;#DcctT1({?I z3U-ag`1LAQHAb6PNunsUM8&w*Ebh@AU%l}&{oZB!rV8sE#&1sXr4b6a5aU->5C^Qk znBvz!WdJ3LF)LWV(jmpOs>^1~$(7JN#xE+Vz$U%_sS2bFDK-HZF{v6YQ>sx_Z5hK! zQzkRzl;I3W#-NP?1qB&wUzfS5GICwT8GF7R2ZzYdgVTO(c*Qe9iW~$LO>&dPiy={V z{EH~ZA;e|-YK&j8(VxWWm>E{|6*7E0q8tV-SbR?yzbbQ?y!i*a|B~&iF*TF;lqwG8 z!WC)Ce^2pSKHm@`A;5Ta9Z5*Fx#0>$ZMact)G`0#j(VR2N_>d;gl$V9VR4Yjjxe5zH-K| z%j|Sn#3U5TTK|*JXUzC@k6MD1u!B|UDts2V>$o8l_HyAnRs7~y@fgJ!#A%*L!vmS0N5~W+8aeGJ z_~R^6#V-WomqZ@rSDWySf2(fX>5Sj3^-5Qf7}_7z){{xFh` zv3q?|Aqs_AtmSvsWcz3mE7}WRm(OS?b)F*E!{m7D#u;xt&smQRIX@(ig5~pLQs#rQ zy||+qIkFpVT};NOa0hA~Yp{7W(ASr@@gH7){D*G*&N}lH+;jdXFztk+anR>KiT34h z;PEeg8^fkf!hxUu2&Npf08@@x;Qd|u@|Aevs_$aTQE$c8R~O@{Z~OpjAA1V>UHE>C z*lQLR-So%Y&o<@qmnApffrl^qs`vZW*)uTl@Pjeq)D!TQFI|ed))qYXy`KO8Hofo? zHofo?fD$Kn?7TT>-fb!hHPx7Y^08iGKVr{W0Duk8yr`Z_=Y~z5@)ijP_tTjCw!;7b zU7NP38@P*pa|?Dq?F5WDa6g>=_#Iew`@L9x`+ewGxf<;&R-t>#wu;;2_21u?{C~^L z=@_~9Y&4D?jk;k?n04l<-s?y1H5&l1?ulpB_uKf~Lhol|=k8y&s6Gr6-+Hk3`(aZi z0RTqryVt*Wd6kMD<_%9F$Rtw5Z-{APbC_yQ*4DAI53l}a8}>eXMDn^rJ~Iw|JBp|q zUhr76M1=LvcVgf7j$pqVKYs{TKC(k)noNAl5W#)zPwjXELq(~QrZUE_kzV;^DuYZ^ z@Y{_GyU{$gHu-+k9`&fIvl#3Z@K9rL_RZ5#*IbqS{Dog`!NTjeqIpWK_Ze-=`qIj< za)Hmpw+vNJCaKWW7G>THFKNKVpTqua>^>pYZ7bv{Ah)#An~>LvejI72&&0qWh~e3m9@ zW%34@Y+sH28&_HrQko=#JRo~A(BrjMvTw5bwasR3g&uI1No5>}vZpu{ zH;Iz`$W?~HXAXJ``Z)@|LiwF68L{Li>{W#`4`WPc#Jl);v62DqD0&%7 z+hP1B<1J;3uLbE;qp;WwSKi%}3R(GiiN#EmD&<4$I?rLuDxp(jssfp;Ws(DU{2n&DKU?EohV#4x6qO8( z;v~hPRRU`=vVq89{lalXa`L4_GUqBxow$=I_*`XV`S->c)HDFaK44%VWn&u=2jzI> zGJXq%Y$Uc9@4%VMaFyi-3U89Pm)6gXqv&MMv+sKtFv6izQ1LI*Va!BU+ zQjuB+F(RG!Gr9u`&-=mSnh7Y|gyTuFfnmhh5ZK(a-n`SO$~_V@AGwdFZc34)Q*y?y zhDu`bom?e4czm)Ztnzf3?9TYg=C?9m@|d|IUsC5QX`D{ZQ;e^MxN^^cf{l?nErsV# zR#^{|5rsMU!DJ}>GZdY93QJExsxO%2D?5FKeDHpo9K~xm?PiG#vm&PoSnt|;4e}M8 zT0Wt!XPOFRMyldBoQH?=SmEH8A&A!RugGsqNHL0h#pp_!r1`X&JQyG7Yg|#9+;4WWZ-<2^+;p093)G}rdErVaTXijh`5uaSWwc?WB(M! z?~t*hamIbW#|zi|957EC|sSWG|Z*yQ&w z{o>bn>Oa0;(dSjw)ndK4|H{7%PWhpeeqJZ8Cz9fk3w1fE7iX7*I-Yt z_p|yDEdYT1FFG&tT;kW^Us~A{FYWt@U1~H)G)q+nBO<%ArFr zYEOROHoe>(RJRTpQ-$p-`jTrOF|!VPz0-d#s%mYSdFJrv>-Li?J27Wv5p7{5{4 zJa0U*6FqH%sCU|N-iJqG#UrJ5bSqCM&2PlS`Hk%DUcIF)wbcu9@0>f}G96V|ampdu z@9b8Lo6~@nDYY0rr3Qa^{~Orwa!<-YvL!amKp$b#YrSmaHyR+;zw(Z*;w@n*ze!Rz zIU{ep>ET$}j%9AFc#SKW)Bcu$2+yFEq>B?I7*vvlWSvTXojIr| zDIG;o1_4nh-oo*YLaf0o1ZM>(b&CAVC{eO*uIK_ zi&a!J#c3qiK;bQEslZg97l(mFA-21W$$?)}fB_s5$1c@b zJzRlk1ap;jkPK*)b~zacp^U&1P>i|EO9ZU4vzX?R4H>gbg+iO0%dBa%7%`<9O=GHf z?RO|{l;bxQNoD)Gic*yU9#=pYUBw?|vVBPj)Si-GWd#S=zFPY+We;cI>TKUY`?<

nobr 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

-ZZF}2&0dyTfeHG1VxJoZ)&u~SsmQN;u%#Z`Xd zoGD`JV0~eq6uZXBFNr-kpQ%02{H4F`opMo<=^l|&ed;L95b6OYGsNY0Hf@SXas{__ zEo$>QnS4S1VX>tf!66<#LLIwK74%oe*O+GBduDoqwx;uo2A_e5rdOM7gSd~lr4bng zF5Jp23}U&Hq5(>FwfoAbU?`9}4$2cO*Ou6_JO^Hp+YUKu?!5h#s?&ngEdsbIE_~f@ zk+V{hClJMOTQ=RTWAOeIF7qHZYR7e?yag6VQG5$}H%x}Q=?&$kwA|P-qq2=D>*`Vj zhOL34rG9zRo%q@>`7afqp&~40DMCsBAgK_Z0O(f{kl5xW1}?1tVnD~nNiq@J6e|1>m*XjA~N{| z!Hs%q?AnYMr;7FtP&OWdra$IPBjc4Opm}4fW}tk4NTKlTGoQI zEeAB-w8ETDnquRBf8^*S3>@&u46s>5v)&0Tn(5clluU;Xjw_@{%N(*4QWZoiqVqo) zo8}!6zFBJ99_n15GDEN~c(=4`guV4)*I@qhT(;6Yfb>CEc&}Ops85s>6VUqS=`hr! zNmzHI`+SujGq}www8Hx%`(BD>MP0CPEMb)su9Di7A2){yW`v#r@?7Tp{VN_3&I6%0 zU7Ny=o7@bM4Z@nY9jxJ@p%UbI+9*C`(IJTN2BC&h3vNpW#O?xydddU|wIKQBj~Gc7 zenP57o+vmq)bOyckkSbX5QD#+q;t@o6@?OCgSXa0-TZ=F!1RQ;Wtuu+8mTDs|5Bm) zf>0#VZ!OmWdH?GySCbdLlfi%BDFcxz@9T3u{g^feEn zd07bJleSH#8CmF(@ar!BqD6>;d5^|3T+CLkxak9}KV~RP&bto=7_?efZ&By~33kg&sjUn3R zjXHCf#uZ8O384Pc;{Ob{tJk~#^PPsSkYuNLd8y59MDp^|&7L(KzGQUeKrmOW9K zBfsIE;-vEC* z)TH*&{(AC2SXf{46{N+1kl;vVw>6G-l4`#Z_zeXO8fK_%5oR4J#%#m=41xue4JH)hO~Wv25*@*0(lz-i z=zse%z(F8kLROBi;tX?Sy~qr6CN0aYp$7EVJgj#DNn@< zY~1`7$fE?I6JjIkur%nUbr$dhqZ@veadP*GLnFSMQnKP%+s#6jO+db=9CWRTrY9%n;IYxUa3sUjHi)BvOK=E=p%cDAxTzfu6+MMzDu1N_9hR+iV!wXd)_m)1Uz#6I*VQO{k?#D=ji`oC9c}&gAZ#lPmTR23m{Q zdEOGkxQa-aUau4j{X}Y?RRD-(B{-yop!)iw(og7V(BS#j+*XExKs(S+EAL7=EJ!UD z)P^GKaze2oBsnlWln}2Jpw3G^NJ{I3*B37^4fEIR(*{9l zn9vGRoprD1VDIx6*^IMh6bk1lxjnm%6*#XO4p|<*5Q*upjt;83ZN#j1**vtoqW;lM zWs@J#Y()jbv)DdXI?E$}#26ZbkWL!UUUJ2!^yeBA2?s*piG(etm)XN>^V^lf-+ud5oMT#=q{0u2wZhaq9FrRQPr7>&ot5(^GPWc^qv?1MktI zhj!yEADuuSKjRcJD3#GbcOXnC_ov1cAq~pD=fdxdI*jP$)SzB%ZtvbbtS#)!!QTBT zF1zDi^XRamt9<->KPnwnKAj;Z>74Z?S@C3pDXWY+bef!e@XtaZAt>jHVNy~srI%c5 zL6j2Q>(SBCK}as7d$35K?bq3N?)RpFJj)a}Y}9&$j|U080l{D>IIyZgFWi%a>P}lG z#Q$g#j+HQ~c$pc~qSWpiWgchDe?Ztg;H$Y^cu;?iPRC0nyN$$=5~?<7p(EV>gPN~n zbn`A77^qfxmNSYQO1^0=7oXZ>%}V1|RZlE+9}4WD!B(byi|=GBER_a@i1Zv1Y6RL**C*s39*6Q2Kj85QI;B9I%_;eUk1{?*FR^a%=O zZxu~nS!~u7ww|$L?G+p#B}iK~*+t-xh+uba+{;MwwA@^J?w-Ie1+!83NappW?@mhD zIyST96bu#e>|1>$Qhv5sk@wkSN)LV>`&>0!JapIgc$~uy;)Y2(AfZY_FrR<4KFI18a0QCcW8nL)a zYkf2q`q?Sa(05!iV)*f`?dbmpkoY+<>n+1L*2Wk8$ zikAj&Lka%Pln_SH6+l?JB=-3hux=${Kl_2gp!yiPMmC9}!i?=UVJ&g2s2y3GNPixQ zCo!*Xm?RJ0ROgeqcIz|6&zh6o&ZH}spRFFM;7)&|wV?0DLd6VZChmkd3dxiBdS88X ztkVm+@7Z+!@_;z#IxC(2`h@flF&Z_t#sYmZ^*Yi_Rl?i`+|htw$o!#XPchllUxKpt zOAq8XgS`fVb&4CbA#2G#AS7u)G)?E)KZKn+4^m_|#LXVWN(_n|5BuFa~YxLs<+3w=vg~g-b-`iWpJuEdv_Sg9@Uxnp~(bzk5 zBzvD7`+lOKQ=F&p>Ce+X-aky936>Pn=B#P`LK`6c; z17bQIByS>VSCod19XHz}!geiq+O~v5O(J{Jz+y_SeNb}%gMoY^i|F9C5qH{CY12l? z|Ad6s1Mf~!R|Tnhm)&zRRdoV9I5xjug_i6b!kHORIcu4cl#s*~Cf|;7`wRV%p8n8#q#q@ z5B`|zH`E7RiaLa3x%8BtmW`%;Vs*#}$pmC+{6mDmD`Y?x&k6lQ$% z!{aZ6Irw9W7_%AsKdd@QJr)5FeV}~`S0x&^R}RB9eH7g*Enlmt_u7CzBE&gpd{cHc zkUzXUMfAZVONay~5^TA1Vf1Bo5q9kFiQ5Lc8GLg0`0TFc(r5Q7WSVOQX7=XoTqPOX zRQ@JCNA>p!R@3wL_%pRq{e$m@MEaztIC}A&dE$kxa=!^fI1#3S8LI>Y@F4nPNFW7X z-a4>%UcPv70Ki>VcD6D>?()pq?Jf_z|FOs<#Q5My%(B6Jcf?PQMJ<(42VHBaM#~x1 z>Gsid3$F7)(jAYSYlGbsvq)bVnrq+ai?t{@3>3EMcRjeHdHc>VBE5>o{SKr0TU(lM z-;|44%IrR!K-(V=E*NWiMh-FqB@5zcJzVBg=+XEincjhQR@d6_n;b2Y(h-Isx|XSJ z%nl93!I{)i=pXfo-xHJpC4!memG=o*dI?fD0%v{b`2ZRe`SW|i_urgDls7?$dkLY` zFSkLt_23AZe!lsHi{BgU#`#@g;)_O2t&4(9X*TZ`$DnCjN3lzaOYY7EqyI{wg!zvK z2>oaHC(TT)w_!z;7mLG>`k;^NWpor)vLVpM2tp<;n?_(a%4eSLH%u{+fzQSWVSm|e z13``iF{dgxwGpWIe-X5QgkAL2l5hC7bsGhHxDpvR1XHJVHhdZIXN&fIHpY^55ZdB! zM2EZ_4IL5ha!KY-5)9Z@8icAy8w}Yr$r{G5!(y`t?%{0LtW^RLgD6B|i1EbdO8k}q zud3)x!_w^+59jS{dPCYoK<<)rMIN`7$PidknH9X5L_mT!6Fb&UbeJUNQa^Z(8XId7 zK<(0Gpx?S_PKtnJukr8SHsG}C08bE^r8j1s;IOkj5;yo(y8x02GpbwnN~8yYfPaB#&e{ zum>JJ?Zj0MH@+f1wD+Hi-GBrD&HV@BG~RMal-B^Ky8Iv=f|tJewsyaaAR(X|;) zPptc!aum!$!*>i>J@nJy+5_o!cgdJ-js>ZMS&c zUE(mozlW|qIVzoN}Pu3pj8YZ$?5ZwkYtXL#ch zz1Lxp$n8Rqmdd%393L$sro;TwOwwitVdhJN_5JK9uaz@BB z2nYdhXyeKYzdC|ds&;jqt8^kPcAkCMg-?hZ9x55+zZ!f7(jA|1n+X{0j zgn-~3Jq&)ZoGUT&kPym5SZ9K4MjMTzBn?;|ATx?uN2+Q}OA#wG_md|hQt*#^f{SeF=DyBzZDfdhv6Z(Lub3Qg9PdBzzGh3^4NLwWZ`^}qRc~xjA59> zc3{y4T`~9Q6YU9~8x4vCVTm93^|}yxzPxg1AtU6-9ADv0*fol-7`PL@eSQEh06}F} zZ7`PmnGALyX>SGJS|HGN_=#7AowI64$d=&rVj1*JO|2L2E-UWG+$`4Y<@TKXCtZMp zZv*vS3wf?9FHx3QUZ&u^<;fy@s5O{=S*+sz{LJZJVBpg5zWu;+-oyj^CJG41d1&hs zNX`^M5m~N7fELKcFTYarpqo3f=An2>6RjVi*Fjf^Kdwj73%UtfuEEIHB+4uC2rIv?B}Y)kH%$*K8^Lc3C~j}Z6Vje?ThYl3El5=& zf>6hZ;v@`{gV-gnAWCfu;cQ86DlkO}PK=x>Kugv2@OZ2X5t%T1mY7cke2EtUy8jph z`wytmAVxBQmG6#kiQ7bsBp{|#bqLsRS^qz|G6IG0Hh- z2*b@8>3YLz&#f*|Nox~L^&hamO=}HfYj22{aid{QB}eU2q=D=>7c<>gKs%CgL91V} zwA%I+kz*9*DEe>I5v0c)%D2}Hrb_?Lw(+#0F&!>b+cTKaZ8qALetSB&83Zq#`QixL8AUV--zqrok4IISA61Z9+VKr1UbhtE9zILu8$6!Jqdp0KGA__ z=}6cDAxYX!UCT@4r-r0s0T%`=4;QF2Lzoo}!96VYbN}Q%mQ54Y3!OuDb3lx)Zs7x_ zs70O%PVLJ2*{8oRLbnXrZU4%cOIXiYXk?F@j+ED>XL}gt3aO??V#LR-`h}eY9@^-zjGYip& zl$92ecse+2%U6XNDp~habH)%0KJZa+Lwu4gWDuq)o50yW+7Ony-W{c@#69_jzs^By zbhT260*@9dw_Rw%=ZKlBmAFicR@o&FO~Kqvcla?uQ8Pcbu`cm~Qr+e?Mx~JzKHN0f zX0JhpH;67)W@z=Vouk^=Fa2EyIrcwGJ>LxPhy{K=3P!e(H?BZ=m6troVvqW^v9y4D z3*8LIYpRSHmLNQ))K%>7Y)CpeEM=^}{KU}U9E)~t&SabD5)sDDxQL_i;GA>g4z>Lw(1i=oX>Iqsi%*P17&k)^&QBkrx?1cyLvZ#!WYLb}PxN|2pCcE^WTJq*}pZOt#3w zLduHbGJPVY>7l|uqWs>zVfn@D+b*2y`*W$Q-MA^s?Zw<3s|%W=3fp`8HEZ7e>m>eQ z`l{Kp*)NOpuTJn>YAJZ+xkBOa&~<2RZ${RFLC(=pTx(6mbjz}Xw&nb#uS?Z0q{AZ? zwK?74KB^A8JtO>7Rvmq}n}>f<+1{YwT92HFK@;!M!=JFX%ql3=q3OUbQPbPMTR16` uHPZ50)E({ck8C%roN#!A-;TdRWUn1-8vLIKDkr|8sPS0qwMMo&X#fA)xZc Date: Mon, 8 Jul 2024 13:04:33 +0200 Subject: [PATCH 2/4] Prioritize user documentation over README (notifications, signals) Selected content of notifications and signals README files has been moved upwards to the user documentation. Signed-off-by: Marek Libra --- docs/notifications/getting-started.md | 80 ++++++++++++++++++++----- plugins/notifications-backend/README.md | 58 ++---------------- plugins/notifications/README.md | 8 ++- 3 files changed, 78 insertions(+), 68 deletions(-) diff --git a/docs/notifications/getting-started.md b/docs/notifications/getting-started.md index 6a7ea6314e..583be64cc8 100644 --- a/docs/notifications/getting-started.md +++ b/docs/notifications/getting-started.md @@ -51,6 +51,8 @@ All parametrization is done through component properties, such as the `Notificat ![Notifications Page](notificationsPage.png) +In the `packages/app/src/components/Root/Root.tsx`, tweak the [properties](https://backstage.io/docs/reference/plugin-notifications.notificationssidebaritem) of the `` per specific needs. + ## Use New notifications can be sent either by a backend plugin or an external service through the REST API. @@ -134,12 +136,70 @@ notificationsApi.getNotification(yourId); notificationsApi.getNotification(lastSignal.notification_id); ``` +### Extending Notifications via Processors + +The notifications can be extended with `NotificationProcessor`. These processors allow to decorate notifications before they are sent or/and send the notifications to external services. + +Depending on the needs, a processor can modify the content of a notification or route it to different systems like email, Slack, or other services. + +A good example of how to write a processor is the [Email Processor](https://github.com/backstage/backstage/tree/master/plugins/notifications-backend-module-email). + +Start off by creating a notification processor: + +```ts +import { Notification } from '@backstage/plugin-notifications-common'; +import { NotificationProcessor } from '@backstage/plugin-notifications-node'; + +class MyNotificationProcessor implements NotificationProcessor { + async decorate(notification: Notification): Promise { + if (notification.origin === 'plugin-my-plugin') { + notification.payload.icon = 'my-icon'; + } + return notification; + } + + async send(notification: Notification): Promise { + nodemailer.sendEmail({ + from: 'backstage', + to: 'user', + subject: notification.payload.title, + text: notification.payload.description, + }); + } +} +``` + +Both of the processing functions are optional, and you can implement only one of them. + +Add the notification processor to the notification system by: + +```ts +import { notificationsProcessingExtensionPoint } from '@backstage/plugin-notifications-node'; +import { Notification } from '@backstage/plugin-notifications-common'; + +export const myPlugin = createBackendPlugin({ + pluginId: 'myPlugin', + register(env) { + env.registerInit({ + deps: { + notifications: notificationsProcessingExtensionPoint, + // ... + }, + async init({ notifications }) { + // ... + notifications.addProcessor(new MyNotificationProcessor()); + }, + }); + }, +}); +``` + ### External Services When the emitter of a notification is a Backstage backend plugin, it is mandatory to use the integration via `@backstage/plugin-notifications-node` as described above. If the emitter is a service external to Backstage, an HTTP POST request can be issued directly to the API, assuming that authentication is properly configured. -Refer to the service-to-service auth documentation for more details, focusing on the Static Tokens section for the simplest setup option. +Refer to the [service-to-service auth documentation](https://backstage.io/docs/auth/service-to-service-auth) for more details, focusing on the Static Tokens section for the simplest setup option. An example request for creating a broadcast notification might look like: @@ -149,20 +209,12 @@ curl -X POST https://[BACKSTAGE_BACKEND]/api/notifications -H "Content-Type: app ## Additional info -Up-to-date documentation can be found in the plugins' README files: +Additional details can be found in the plugins' implementation: -- https://github.com/backstage/backstage/blob/master/plugins/notifications/README.md +- https://github.com/backstage/backstage/blob/master/plugins/notifications -- https://github.com/backstage/backstage/blob/master/plugins/notifications-backend/README.md +- https://github.com/backstage/backstage/blob/master/plugins/notifications-backend -- https://github.com/backstage/backstage/blob/master/plugins/notifications-node/README.md +- https://github.com/backstage/backstage/blob/master/plugins/notifications-node -- https://github.com/backstage/backstage/blob/master/plugins/signals-react/README.md - -## Processors - -The default backend behavior when emitting a new notification can be tweaked using processors. - -Depending on the needs, a processor can modify the content of a notification or route it to different systems like email, Slack, or other services. - -A good example of how to write a processor is the [Email Processor](https://github.com/backstage/backstage/tree/master/plugins/notifications-backend-module-email). +- https://github.com/backstage/backstage/blob/master/plugins/signals-react diff --git a/plugins/notifications-backend/README.md b/plugins/notifications-backend/README.md index 60c9a4e078..ebd129f572 100644 --- a/plugins/notifications-backend/README.md +++ b/plugins/notifications-backend/README.md @@ -4,6 +4,10 @@ Welcome to the notifications backend plugin! ## Getting started +```bash +yarn workspace backend add @backstage/notifications-backend +``` + Add the notifications to your backend: ```ts @@ -18,58 +22,8 @@ the signals plugin (`@backstage/plugin-signals-node`, `@backstage/plugin-signals ## Extending Notifications -The notifications can be extended with `NotificationProcessor`. These processors allow to decorate notifications -before they are sent or/and send the notifications to external services. - -Start off by creating a notification processor: - -```ts -import { Notification } from '@backstage/plugin-notifications-common'; -import { NotificationProcessor } from '@backstage/plugin-notifications-node'; - -class MyNotificationProcessor implements NotificationProcessor { - async decorate(notification: Notification): Promise { - if (notification.origin === 'plugin-my-plugin') { - notification.payload.icon = 'my-icon'; - } - return notification; - } - - async send(notification: Notification): Promise { - nodemailer.sendEmail({ - from: 'backstage', - to: 'user', - subject: notification.payload.title, - text: notification.payload.description, - }); - } -} -``` - -Both of the processing functions are optional, and you can implement only one of them. - -Add the notification processor to the notification system by: - -```ts -import { notificationsProcessingExtensionPoint } from '@backstage/plugin-notifications-node'; -import { Notification } from '@backstage/plugin-notifications-common'; - -export const myPlugin = createBackendPlugin({ - pluginId: 'myPlugin', - register(env) { - env.registerInit({ - deps: { - notifications: notificationsProcessingExtensionPoint, - // ... - }, - async init({ notifications }) { - // ... - notifications.addProcessor(new MyNotificationProcessor()); - }, - }); - }, -}); -``` +When a notification is created, it's processing can be customized via `processors`. +Please refer [Backstage documentation](https://backstage.io/docs/notifications) for further details. ## Sending Notifications By Backend Plugins diff --git a/plugins/notifications/README.md b/plugins/notifications/README.md index 63212d2c16..32fbb8c701 100644 --- a/plugins/notifications/README.md +++ b/plugins/notifications/README.md @@ -2,13 +2,17 @@ Welcome to the notifications plugin! -_This plugin was created through the Backstage CLI_ - ## Getting started First, install the `@backstage/plugin-notifications-backend` and `@backstage/plugin-notifications-node` packages. See the documentation for installation instructions. +Then add this frontend package: + +```bash +yarn workspace app add @backstage/notifications +``` + To add the notifications main menu, add the following to your `packages/app/src/components/Root/Root.tsx`: ```tsx From f4612847a2090aec61e05798f7a758328c4df3c1 Mon Sep 17 00:00:00 2001 From: Marek Libra Date: Tue, 6 Aug 2024 16:05:57 +0200 Subject: [PATCH 3/4] Add install instructions for older nevironments Signed-off-by: Marek Libra --- docs/notifications/getting-started.md | 104 +++++++++++++++++++++++- plugins/notifications-backend/README.md | 12 +-- plugins/notifications/README.md | 35 +------- plugins/signals-backend/README.md | 39 +-------- plugins/signals/README.md | 18 +--- 5 files changed, 107 insertions(+), 101 deletions(-) diff --git a/docs/notifications/getting-started.md b/docs/notifications/getting-started.md index 583be64cc8..dc006e21b2 100644 --- a/docs/notifications/getting-started.md +++ b/docs/notifications/getting-started.md @@ -6,7 +6,7 @@ description: How to get started with the notifications and signals The Backstage Notifications System provides a way for plugins and external services to send notifications to Backstage users. These notifications are displayed in the dedicated page of the Backstage frontend UI or by frontend plugins per specific scenarios. -Additionally, plugins can implement processors to send notifications through external channels like email, Slack, or MS Teams. +Additionally, notifications can be sent to external channels (like email) via "processors" implemented within plugins. Notifications can be optionally integrated with the signals (a push mechanism) to ensure users receive them immediately. @@ -31,6 +31,104 @@ Example of use-cases: - Notifications for individuals: e.g., updates you have subscribed to, new required training courses - Notifications pertaining to a particular entity in the catalog: A notification might apply to an entity and the owning team. +## Installation in Older Environments + +Newer versions of instances created by the create-app have both the notifications and signals plugins included by default, this section can be skipped right to the Configuration. + +Following installation instructions are valid for enabling the plugins in older environments. + +### Add Notifications Backend + +```bash +yarn workspace backend add @backstage/plugin-notifications-backend +``` + +Add the notifications to your `backend/src/index.ts`: + +```ts +const backend = createBackend(); +// ... +backend.add(import('@backstage/plugin-notifications-backend')); +``` + +### Add Notifications Frontend + +```bash +yarn workspace app add @backstage/notifications +``` + +To add the notifications main menu, add following to your `packages/app/src/components/Root/Root.tsx`: + +```tsx +import { NotificationsSidebarItem } from '@backstage/plugin-notifications'; + + + + + // ... + + + +; +``` + +Also add the route to notifications to `packages/app/src/App.tsx`: + +```tsx +import { NotificationsPage } from '@backstage/plugin-notifications'; + + + // ... + } /> +; +``` + +### Optional: Add Signals Backend + +Optionally add Signals to your backend by + +```bash +yarn workspace backend add @backstage/plugin-signals-backend +``` + +Add the signals to your `backend/src/index.ts`: + +```ts +const backend = createBackend(); +// ... +backend.add(import('@backstage/plugin-signals-backend')); +``` + +### Optional: Signals Frontend + +The use of signals is optional but improves user experience. + +Start with: + +```bash +yarn workspace app add @backstage/plugin-signals +``` + +To install the plugin, you have to add the following to your `packages/app/src/plugins.ts`: + +```ts +export { signalsPlugin } from '@backstage/plugin-signals'; +``` + +And make sure that your `packages/app/src/App.tsx` contains: + +```ts +import * as plugins from './plugins'; + +const app = createApp({ + // ... + plugins: Object.values(plugins), + // ... +}); +``` + +If the signals plugin is properly configured, it will be automatically discovered by the notifications plugin and used. + ## Configuration ### Notifications Backend @@ -209,7 +307,9 @@ curl -X POST https://[BACKSTAGE_BACKEND]/api/notifications -H "Content-Type: app ## Additional info -Additional details can be found in the plugins' implementation: +An example of a backend plugin sending notifications can be found in https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend-module-notifications. + +Sources of the notifications and signal plugins: - https://github.com/backstage/backstage/blob/master/plugins/notifications diff --git a/plugins/notifications-backend/README.md b/plugins/notifications-backend/README.md index ebd129f572..a6b6615d9f 100644 --- a/plugins/notifications-backend/README.md +++ b/plugins/notifications-backend/README.md @@ -4,17 +4,7 @@ Welcome to the notifications backend plugin! ## Getting started -```bash -yarn workspace backend add @backstage/notifications-backend -``` - -Add the notifications to your backend: - -```ts -const backend = createBackend(); -// ... -backend.add(import('@backstage/plugin-notifications-backend')); -``` +To install, please refer the [Getting Started](https://backstage.io/docs/notifications) Backstage Notifications and Signals documentation section. For users to be able to see notifications in real-time, you have to install also the signals plugin (`@backstage/plugin-signals-node`, `@backstage/plugin-signals-backend`, and diff --git a/plugins/notifications/README.md b/plugins/notifications/README.md index 32fbb8c701..78bcf4e753 100644 --- a/plugins/notifications/README.md +++ b/plugins/notifications/README.md @@ -4,40 +4,9 @@ Welcome to the notifications plugin! ## Getting started -First, install the `@backstage/plugin-notifications-backend` and `@backstage/plugin-notifications-node` packages. -See the documentation for installation instructions. +To install, please refer the [Getting Started](https://backstage.io/docs/notifications) Backstage Notifications and Signals documentation section. -Then add this frontend package: - -```bash -yarn workspace app add @backstage/notifications -``` - -To add the notifications main menu, add the following to your `packages/app/src/components/Root/Root.tsx`: - -```tsx -import { NotificationsSidebarItem } from '@backstage/plugin-notifications'; - - - - - // ... - - - -; -``` - -Also add the route to notifications to `packages/app/src/App.tsx`: - -```tsx -import { NotificationsPage } from '@backstage/plugin-notifications'; - - - // ... - } /> -; -``` +Please mind installing the `@backstage/plugin-notifications-backend` and `@backstage/plugin-notifications-node` packages before this frontend plugin. ## Real-time notifications diff --git a/plugins/signals-backend/README.md b/plugins/signals-backend/README.md index d76038a38e..24d8832d26 100644 --- a/plugins/signals-backend/README.md +++ b/plugins/signals-backend/README.md @@ -6,41 +6,4 @@ Signals plugin allows backend plugins to publish messages to frontend plugins. ## Getting started -First install the `@backstage/plugin-signals-node` plugin to get the `SignalsService` set up. - -Next, add Signals router to your backend in `packages/backend/src/plugins/signals.ts`: - -```ts -import { Router } from 'express'; -import { createRouter } from '@backstage/plugin-signals-backend'; -import { PluginEnvironment } from '../types'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - return await createRouter({ - logger: env.logger, - eventBroker: env.eventBroker, - identity: env.identity, - discovery: env.discovery, - }); -} -``` - -Now add the signals to `packages/backend/src/index.ts`: - -```ts -// ... -import signals from './plugins/signals'; - -async function main() { - // ... - const signalsEnv = useHotMemoize(module, () => createEnv('signals')); - - const apiRouter = Router(); - // ... - apiRouter.use('/signals', await signals(signalsEnv)); - apiRouter.use(notFoundHandler()); - // ... -} -``` +To install this signals backend plugin, please refer the [Getting Started](https://backstage.io/docs/notifications) Backstage Notifications and Signals documentation section. diff --git a/plugins/signals/README.md b/plugins/signals/README.md index 38dc18808b..5b08983621 100644 --- a/plugins/signals/README.md +++ b/plugins/signals/README.md @@ -9,23 +9,7 @@ Signals plugin allows backend plugins to publish messages to frontend plugins. This plugin contains client that can receive messages from the backend. To get started, see installation instructions from `@backstage/plugin-signals-node`, `@backstage/plugin-signals-backend`. -To install the plugin, you have to add the following to your `packages/app/src/plugins.ts`: - -```ts -export { signalsPlugin } from '@backstage/plugin-signals'; -``` - -And make sure that your `packages/app/src/App.tsx` contains: - -```ts -import * as plugins from './plugins'; - -const app = createApp({ - // ... - plugins: Object.values(plugins), - // ... -}); -``` +To install this signals frontend plugin, please refer the [Getting Started](https://backstage.io/docs/notifications) Backstage Notifications and Signals documentation section. Now you can utilize the API from other plugins using the `@backstage/plugin-signals-react` package or simply by: From 8e185e43ce5d4d99369d45358393f5d4d2ff1908 Mon Sep 17 00:00:00 2001 From: Marek Libra Date: Wed, 7 Aug 2024 15:04:20 +0200 Subject: [PATCH 4/4] Add Notifications to documentation sidebar Signed-off-by: Marek Libra --- docs/notifications/{getting-started.md => index.md} | 4 ++-- microsite/sidebars.json | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) rename docs/notifications/{getting-started.md => index.md} (98%) diff --git a/docs/notifications/getting-started.md b/docs/notifications/index.md similarity index 98% rename from docs/notifications/getting-started.md rename to docs/notifications/index.md index dc006e21b2..95d77a9b7f 100644 --- a/docs/notifications/getting-started.md +++ b/docs/notifications/index.md @@ -1,5 +1,5 @@ --- -id: getting-started +id: index title: Getting Started description: How to get started with the notifications and signals --- @@ -203,7 +203,7 @@ The use of signals with notifications is optional but generally enhances user ex When a notification is created, a new signal is emitted to a general-purpose message bus to announce it to subscribed listeners. -The frontend maintains a persistent connection (web socket) to receive these announcements from the notifications channel. +The frontend maintains a persistent connection (WebSocket) to receive these announcements from the notifications channel. The specific details of the updated or created notification should be retrieved via a request to the notifications API, except for new notifications, where the payload is included in the signal for performance reasons. In a frontend plugin, to subscribe for notifications' signals: diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 075025afbb..71d0257dc7 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -295,6 +295,7 @@ "conf/writing", "conf/defining" ], + "Notifications": ["notifications/index"], "Auth and identity": [ "auth/index", {