From 4d4d25104dbc31c5ebfaf7cb44bfbecfcdcaa77a Mon Sep 17 00:00:00 2001 From: mauropasse Date: Wed, 23 Mar 2022 11:46:08 +0000 Subject: [PATCH 1/4] Update intraprocess_communication.md --- articles/intraprocess_communication.md | 96 +++++++++++++++++- .../ipc_client_service.png | Bin 0 -> 123620 bytes 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 img/intraprocess_communication/ipc_client_service.png diff --git a/articles/intraprocess_communication.md b/articles/intraprocess_communication.md index bdb26b5d6..3b44d2249 100644 --- a/articles/intraprocess_communication.md +++ b/articles/intraprocess_communication.md @@ -4,7 +4,7 @@ title: Intra-process Communications in ROS 2 permalink: articles/intraprocess_communications.html abstract: Description of the current intra-process communication mechanism in ROS 2 and of its drawbacks. Design proposal for an improved implementation. Experimental results. published: true -author: '[Alberto Soragna](https://github.com/alsora) [Juan Oxoby](https://github.com/joxoby) [Dhiraj Goel](https://github.com/dgoel)' +author: '[Alberto Soragna](https://github.com/alsora) [Juan Oxoby](https://github.com/joxoby) [Dhiraj Goel](https://github.com/dgoel) [Mauro Passerino](https://github.com/mauropasse)' date_written: 2020-03 last_modified: 2020-03 --- @@ -502,3 +502,97 @@ There are some open issues that are not addressed neither on the current impleme - The proposal does not take into account the problem of having a queue with twice the size when both inter and intra-process communication are used. A `Publisher` or a `Subscription` with a history depth of 10 will be able to store up to 20 messages without processing them (10 intra-process and 10 inter-process). This issue is also present in the current implementation, since each `Subscription` is doubled. + + +# Intra-process communication between Clients and Services + +## Introduction + +Communication between clients and services in ROS 2 is currently inter-process only, i.e. client requests and server responses are sent via the underlying ROS 2 middleware layer, regardless of the entities belonging to the same or different processes. +The specifics of how this happens depend on the chosen middleware implementation and may involve serialization steps. + +This design document presents an implementation for the intra-process communication between clients and services. + +## Motivations for an implementation + +Communication between clients and servers can be expensive. If the client request or server response involve the use of big data messages, we incur into a not negligible amount of CPU usage due the need for serialize/de-serialize the data. +There is also a baseline CPU time needed just to go through all layers from rclcpp to the specific middleware implementation, with the associated bookkeping and data safety checks. +This extra steps not only have an impact on the CPU usage, they also increase the latency in which data is available since it has been produced. + +All of this extra overhead can be avoided if we take advantage of the shared memory space between clients and servers belonging to the same process. +There is no need to serialize/de-serialize data when we can just pass a pointer to the data (requests, responses) all done directly on the rclcpp layer. + +There is work being done using shared memory capabilities from the rmw to communicate data between different processes, but performances are far from the good performances we can obtain performing intra-process communication only in rclcpp layer. + +Many ROS2 features make heavy use of service/client communication. +For example, ROS2 action servers and action clients are implemented internally using several clients and services. +Other usage case comes from enabling parameters on a node, which will currently create by default six services. +And probably more features will be based on service/client communication. + +The new intra-process communication implementation between publishers and subscribers have laid a groundwork which can easily be expanded to support intra-process communication between clients and services, and furthermore to ROS2 actions. + +Having implemented intra-process communication between services and clients has the advantage that any "stub" DDS with stubbed DDS apis can stil work with clients and services, since the communication doesn't happen in the rmw. + +All of these reasons plus the need for ROS2 to evolve and be optimized over time as it grows in popularity, decided us to implement intra-process communication between clients and services. + +### Incomplete Quality of Service support + +Same as what is currently supported between publisher/subscriber intra-process communication, the proposed implementation is limited to communication between clients and services who had set their QoS to "keep last" on history qos policy, have a "QoS depth" different than zero and "volatile" durability. +Nevertheless, other QoS settings should not be too difficult to support if needed. + +### Problems when both inter and intra-process communication are needed + +In the case of communication between publishers and subscriptions, the current implementation of the ROS 2 middleware will try to deliver inter-process messages also to the nodes within the same process of the `Publisher`, even if they should have received an intra-process message. +These messages will be discarded, but they still cause an overhead. + +This should not be a problem for communication between clients and services since it happens only between the related entities. +That is, a client sends a request to a unique service, which will reply directly to the same client who created the request. + +## Proposed implementation + +WIP: https://github.com/ros2/rclcpp/pull/1847 + +### Overview + +We want to make use of the infrastructure created to support publisher/subscription intra-process communication, which has been designed with performance in mind, so it avoids any communication through the middleware between nodes in the same process. + +Consider a simple scenario, consisting of `Client`s and `Service`s all in the same process and with the durability QoS set to `volatile`. +The proposed implementation creates one buffer per `Client` and `Service`. +When a `Client` makes a request to a `Service`, it pushes the request into the buffer of the `Service` related to that topic and raises a notification, waking up the executor. +The executor can then pop the request from the service's buffer and trigger the callback of the `Service`, which will in turn process the request and send the response to the `Client`'s buffer raiseing a notification, waking up the executor. +The executor can then pop the message from the client's buffer and trigger its callback. + +The choice of having independent buffers for each `Client` and `Service` leads to the following advantages: + + - It is easy to support different QoS for each `Client`/`Service`, while, at the same time, simplifying the implementation. + - Multiple `Client`s and `Service`s can extract messages from their own buffer in parallel without blocking each other, thus providing an higher throughput. + +These are the data-types stored in the buffer: +The `Service` buffer stores `ClientIDtoRequest`s which is a map mapping the client's ID of the client making the request with the request data. +The `Client` buffer stores `ServiceResponse`s which is just the `Service` response data. + +The buffers have a size equal to the depth of the history and they act as ring buffers (overwriting the oldest data when trying to push while its full). That is, if the service queue is full of requests, a new client request will erase the oldest one and be pushed at the back of the queue. + +New classes derived from `rclcpp::Waitable` are defined, named `ClientIntraProcessBase` and `ServiceIntraProcessBase`. +Objects of this type are created by each `Client` and `Service` respectively if intra-process communication is set to be enabled, and it is used to notify the `Client`s and `Service`s that new requests/responses has been pushed into their ring buffer and that it needs to be processed. + +The `IntraProcessManager` class stores information about each `Client` and each `Service`, together with pointers to these structures. +This allows the system to know which entities can communicate with each other and to have access to methods for pushing data into the buffers. + +![IPC Client/Service Diagram](../img/intraprocess_communication/ipc_client_service.png) + +The decision whether to send inter-process or intra-process `Client`s requests is made every time the `Client::async_send_request()` method is called. If it finds a matching service available in the same process, it will send an intra-process request. +If the `Service` got an intra-process request, it will send the response also via intra-process communication. + +### Creating a client + +### Creating a service + +### Client intra-process request + +### Service intra-process response + +## Perfomance evaluation + +## Open Issues + diff --git a/img/intraprocess_communication/ipc_client_service.png b/img/intraprocess_communication/ipc_client_service.png new file mode 100644 index 0000000000000000000000000000000000000000..361dd2241300030af3363851d438002485af4a3b GIT binary patch literal 123620 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 z z$N}%_XdIY%y_D#FZ(`#%IuK&gmBg#G`Y@|M(Opj4Myi)KVBER-J=t zflFBLS6Pnn<)6}L>mOAv3%LU^lUNOO!U9hcDf)0-$#`oV1^XZQF_ow>y*XkJ44+`_ ziG!MvuxI_s(Eox=GVac8>;pFEk#e}r7}+z~mu9w7_4ky|=>XcmR~*~*HkLPnuEoU+ zK$3pA|h=j)CF|?kX+4;{nNWHdiST-1pYM zK{8@;&=#F{f&}HMk>-mdli6{iPw$*nx-tBK3Ic;0^u z$^$*nt@N{#g|)7eO5bk|Y&DyauN4IZCpQd=wFa%L)6=#Ne6CKE1EwQ?|HqKcePaiM zTl0D=V^FX1=BE74(pb+jw|qUp(~eHSmaX2mHfgel|I%hA*pgXKzgHTq$aAJdG~Rc9 zK`Kx@@#1*Ln)FYf_G~c*>3oNp9jh_KgWU$FX{y5u7E^%n*_`+QGYVJrIaB328Zph? z>#vSBx4qB-s(+O4Ghrh+N$4}z7*uIiI6h6SlBHNRwtK#+6%gv!Sbh8?l|*u9 zIEG28eNRNOI(z3YpG^Sbp9%F(Naafd;Fp)TXKjwbG?C73I^5^KNL%fkH%)K%h|mL@ z-5%!)4?o-<7)tI9x2^r_yqT&Q-5B}8Abiim*QoS#Kjv1|)rE6MNpw5ld)F>^@vMF0 zc(mzoX+D!7fMRsVY?r3g8qLSr4{B?9uG=6`&*-llC?*6-ErVdY(RDJ3ImI87Jh2}2 zW8F>!2`(z&9h>x8DLO9c{8w}v%U=^_b+dK0ncq%~zPfi1?r}ZN5OFe1Mc(O=%AV2@ zy*iR561H4dn^SxHSqOT{#qkGn5|N;Y?8=f1ju;dfnZ}*sa<}&J`JI(Ewd-F-S1BV8 zrUJI&ESIh8L)927#5%srWMK8~--9`gjE;nIQ>q-tIVPl5ToE^hIt4qcSy3CR)#gyG zCA`=#W>ZKK(V22za-J*Jcb?Zgy{gHx(FtKvuY*L+shg9SjUUXW)UWQ}YX|pERW@bt zw|gl>%Qx>%v;p2BbZtA|F`ia^7IH9H8>wSK=yLp+zUQ=qQ`S%?3|V;&8N?w_6eG)Q zUT2CfFC?B_nF&F-cwJ3?5!fk{^Atw*mcY$G5 zGW}{+7AehTVbA3zPRQAlRUos9yeLFU9E)_qzhpWi_v9{SP2e#iYU7d%t`#n+RX-yk zP=361@b^L%yJ=T>iDu1rJv6f0;D9N%b&q53O_m@sFj@Y+uiggZuvW|Ej1YN~EA5P7 z+C|5GG{+wWEc?U5=2P>L(dFMM>=tx9<2-NoiCz9ta0k1X4b>=Sdcc%SqkVpyl+2j> z90|*kbEgMonuhFm#uo+(op%v z0Ee%YVRE?oCxGlm*GCEZp+v;J+|ex~X$rNBT3HMR2x#CcHt6V`(DT5D5ub0=LJu5v zt#jwM3lclq*q+R2iMpOo6u6)}0syw^(cnAeQLOV8wI5Y&&}?B{^cl@Qx;5-{6Nr9_ zP{6k~T>h;yw^R(8YU3RTdlB3~qMLplA?O*KA(;CfV8NKAws*Ll-1~EAQC>q)M7Ds_ zxH{6(1@-G={wGZNM-k`==^u{>9k#s|Fdd~Kb=-UcaivA*VuXGyZR7SJ<_*D$;Km6^%3c!-*+95m+8F~Ps74wA=vg2H(sQN8`9$kNu zh!eoO8fl){DS`(x0F;uLthca`Jza94Y(9C^)ZdbeQvjgN2E@-U!#e~k@R94i44eU! z$~TV>oKPc-RsdQQ?^XbT98lNU$p&OrC5|UbB_tgzEzx&gkTA+ITA@F$-6dUr#x+gs z(o<4C&#i<1tP?0=VrJRri@s*37-GLlCHWW0roB_a8UNEm=FN<6K1?HdLH-|&D&6d z1vmm;%>P?L6M&&Dp*IqA07Ut&7je&+TvP6Az`rd55NHP%>)#76)o9U9Le|Rwj7FkE zRjqhI{P_yMS4iLzn8wD{&A)7WC!uXe((9F#k;4t|i(FETY$-Y@B@^+}%hi!l(0DF5 z;UAa6U?`3D7Pknw{2togN1%d#Zn}F0?+4&38DwFVEyaK?S!y;Y} z7yfy%t4hF&L5vYoni(p$pg8KoFS`WPS=>wFnuS$`QOY3@rZfR}N$rbYV#zKc36P_W zOhBmQQVt8%V6XmCXWO$02jFe8r%#Xpq1&_x_VlpS9%%r_?&0N=e?d}<;;Z~?CwB=c zDf8`ry4&MDeX5Pb0M>BSxI^rZ$*N3??J@#9jkrt#xqxp7Rn@qaTmt!JnUV+p4ZapL zBAUQ{dq}ydGbsoJ=cvf**X@_&E0>d_{6Rc0FCKSsxb4d!?&4v5B5}qSu_EH?`GBH<;v42YbZM+IvE>eg;4Z+VcCfva|pU6C)v6sElgu zV%_^y+p=F3wYL`|>_{RXJEo|w*SHIcginBj&x>QrLMv2C`!bmcB4cdCk71ND@5mQC z1`c4~u-kt&=})d+DB*1;+H-+f3JHHhm~=#KASB zVe9!)`;O7ClicmTk%+9c>kO?#+~b@B0DnQ~AESp~CS2qDhkp!%gc-3i17RKzg__RBt>QA&px{Fcl?Nl zD=FiNkonCmd?;L3k>^+8$+*A7GbLX zk7U*~F4y@9KjT%qGUKtY^AhzLD>rsbdi#gTSXn8$x`hkX`or>r@zm4^mb6Dqf@_;o z9Uu;!Du8pn{b~%zRTCeJjob^!6(6stt}d&p`(C3F(VAbqV+f2oFgDzIY>$O!n5|k6 zn%aqP_?cPdDP#f%aX8TzA>6D0Fko&Ndua;pLRI1R(U(Ul zUd?F-I@+53R-sIK^}Bv-ZlK|zd&`U(pws)T>j=rVsu%_sP5ZZHT^=%fC#GKswJ?iK z7s)>+`YEGb@B-YeRO9*iMbGefTtO2z+<-``=)$@Y>0CzFKXlL2Yll4DIJkXY^p5h> znYEgv=zKl&b588D@`;sQ`UKq>&tO-iJEG8r`yfLOwT$j!C)C3dIVQuSvdgxh8Kda-QBeWRUM8I z?o>09hQMg505_HsB88Wf6%&$gmpsAF68_`9MVo1G6x%bcAXsNjlUFKjEGvtEgEZX zavB(y>Y1Wj+9gctJ&rfTw;MClszNVLOPMS9T4oOVlbs);Z1D+R7Xi_2qQwV+Xdcme zHLk0QjDcxR{iAXPqZ-fIJCVNS-Q=yZ5`7zPAj`gS?{@*=PyO2^+_Kak?z6XQ|v zy@O3p)7e(+ijd5Y6=0KC!L0lB1)`7m5Gio{r^&L{BUzavcJPws^X~&-a<3zz)NO?x zi;QF*0s$V91)tg1k(~=JuS7p^*3!&5!m*aSFa(k0T>1;+dyeTO@*_(SLFo%iRRpJp zxzIcNTgQtTgLKSz@%V?VX8c%m+nsaxO)ez;0^>8lmgZ8@vqG9nlG`%31kL2U+FL4TZ-W<+pu+(b;`$dMV<`)NhmE4mx0%{|sUCrR;iWq-^_nwRnB8d`>l@m!&Z4hN;=#w6PCOM`UC*qHD_@ec|R* zls~y(v*0UeYiAt1&d(`Ce0X?-=a>u+DZ!EV>L(Ox$v6-Jreq;sIp(s|%4)b3I9$%` z3F{p!(MkQ1B*I;wvDhf0?0AEo!zL*G`fs@M7V(_8D%X0w^b@4+Eb?o|!V-|97NEP2CB z`(ZjGnN?Yu5bxckYNX7SG4}H+b#MA18EyfIydBcj;+jUZ}F$fmeNM3J2F2PkBly=ZO$cLyv=*eOo8kKeP_rziki;J6Afp zE;MzH2v^jG>JLp?^BmWL^mt?c$^CYC;dB{X{hl)49?yp{3u3anj@te^`mlLz>yrR8 z{~F#*QP%>I=*NorP{PNGXZ5vag8ivBqUQ6qS5m;}_AjHXf44{ivzpF8w?QV#?*j=e ze4>%mUXnYH2YC-&t+)ZrgbT_n{Ajo@Hg|I}sQ(eY`IAL0Cx2ODpe@QJ$37DMx3f{k ziEJ*aw4n@aoBN41R;n_<5jtjg0D&v2cnrN&OG$ZuESV_fP`;9g>_D&D4dJV%_V?D@ z4&aQXh{t~joGT5_3eq3Fb`oX(cr~H9D%h1Bx&{ViQBoo~-qcKHyIN6Ns_fj`U03bT zcJq;9FIb5-udQ~R*w_pQOaMI$~lKbFpk+BO%=c(o) z|Dr=p?9Fj3Wmi_*2kb=JrW-4>c)M_UyhK3eG|1 z8WOUDEdFm5=RkJaJZEGX>M{m;waSE+|EVeu)r`AV+bM{UVQVTDf0BE_ng-4)FjPT=~=Wq~S=Jtweu={#_%DY(_=+ zZ%WP#SWPc$gJWhBD`2t)&*rK3*?22YZC-*7ycWTXV)f7O+$xr(nfKyB96Fu*phW=LZ!>7zSWa{#ZI33Pvd@cZ$oL;Xv8iLx_`DQBwy4?evY;ikVC7UN2Or_Cq0=)2Llb@QAmw^CxV1v*QB zRuVL0j!)6oSA|-P>6qK5l@@lr6ihGuUf&L{DMz-$md81#&{D2uL>_)TTFh3{u$1j@ zQ&J{;i(}kZYIeZA$fv7jtu$nPHU=8`%3kBLd`TexzHlUt=kqu|J%TNgo+PLK74EUQ zcjILfiVP52Jjn~B7_T<^G@C)Z=9ZUze>C6CajsZ0C;~Q>@}!YndAP5b|I52V!>*Q&uG)c-EYi8L?#Vz5q^C( z2iVx4fs#Q_{!~qK=X6evG@Z&MESJI0Do`y9P` zw z2E%B{C|4u>FbhmxyLYiBC9xzJ5E3rbu(&zb)hzs4!IMeh$?|z%Nd`x|h+2(+)4R;_ zv;2Em9o5Qm0R~D%mApTj)m{@I;=0mch40b-w^fa$WpjuLj*IQE@nVpXM1PD-fuY{3 z)-Y*#*6m;wcV}B7nP2TYCd>7MmEj5}yZr~n)uEQNN!gEv_Qua+u_pwlTXDtGu6n(K zvokFDty&h-b_kI}76$}>Laxw!Xu3hpp><~O>vZ%Cf5;`%LkEKLN;0lqb=OlEz!dBz zI&z@Qt@i93bt5LQq&WIr-jsVQg^ld@-5N0#^?xw#{ht0@?jfEEOIxh2>K!tGM$wRx82VG30Q!J;9ZSt=UX_^ZMuIZ?l9yWvu(nUhi?ckl9dV^z*t-1I;x9?f6*x3Xj_m_46s) z&qbctxce_ndkD@5=7=$B#yeAp^F3k+6ZCa3lht-%2x53W`H$02EwHOuq5CC9A>M7| zw#Qu}Y}i!}l197^Wcf4Cq?d`8iOOyByHydN*WqQ>=#&0BM_FWvMM3lLfTk&@E% z2HMKOn33OV*LAy%95%7EXSv*1*1x8z0RZ*Jh-lN43x2S zu!A_xrm0Bep0v;A2qH+Hx$UB}`gmnbIq3Vo431emRAl2Sb>1uy9elFh2~H6-;afg{ zozLCu!IA2o@nB+@e_1rAAnu#VUi~YX+)DGDd+&6-I(kP=g^HbW<>d>jLCyP=%*(7* zyZNMM8mqY5P;rv=HMu9uPH)X`g}vs)g*m5PM}hrk{W{%0QpR3EgSS~x&)>~5Nrs2B zSl5?#f+m{nNQ4}#Sm<{O$McXfj@M^Ct@i{;vN@jV^;7RWoxii`V&)=#fG4`nk{3jL zn(i;2{l1u7cU-P;eponsx0zYIt38_(^bJJ));mBi?%W}nQrgW0d!x^HwBbz8$uszC z$LGg`{)am|*44>Z^_Q)(?mln4HN_{N|4Ak{xoI_$vonv;F%2Zu$r&ZrQAUg6UH%3- zWmTeHZ_BMl&-X@}l97;PY&(l1YY45g+mioHq&;Jw4lkFl_Kd63a;WLWy*~+zM+4%bMldLkdR{-;~j=%#Q2t>FZP?Ir%d(fY#>k zuW!8!Fv`kQn`$|?<2d5%-uNAx^0ma+tE9NX^cAEQ0GZ7(jvse3QOlN_x0M$N1UH@MrAEL@UEm4t`d$l(8Ue&D{@ zwF6gOtE2d3AWtkjPv;weNOVcMbXa}mJT~FTeYXu#(^Ss}h1D*gEzZ9}RwXdj{am;8 zEpBj)`XZsI2bL>DA_1(fnS0`=x0-T+_ji|f6Pq=yY4>F|{=yC{^GUQp?> zFvr(QOtX;>{=u++uS(SY;!SdHcW=S44NtyGDb)fol8cQ{a#HD^D2}r}gVVi>0}M=_Zv~dXG4=he zgTL@+{x1Ybf-isVaNF2Bm4HtjR=2Yzs5GzN+88zDM zX%%!={aX?!&JX{(m6M`D`t>R>8IO%HatFL|RnfqSSmlxr4zdV90g zOd1D5o#H)z%%^g@43GTyzCE%v&T}PsB=I+)hpsE@b7L8potoo09J%4B-DwE&M!R(8 z-Erdud|70<%f#aO8_P~^l*iqvVv5#9-ah0G&2X1~idhkzg>Rg$wBtfg9Gt30`MbYw z=pCEz)p+uz4Yr@Rv+nd63$;JY6}!*WI9rL_D~9haH-dEM*|Zj@tCE!@0w%4|

&Wqs*QI9i>oUT4d+VZ}P#R8%K_w8qoiuIIA@2+G!*%hfU;MFcoPTYQAd zg>EU139kf%jY@vDq-0o#^ytiFm}ByuzR6R0e(!8?IUDZc;3JcH3$uE6b2jrW)GBFHAO_-=0Gq99(k9X2h(PH6B)$0mmnWK4Q>Av-7g&pUgowxbkl zcUpq$-o~JupuVXVTLfVoq|<3e9E~(>9;}D@@jO#u6z-%)|_%TG%9rV6o$4EBo&Q;P7i4~ zf3y<_QWxuy0$vwOZfO!=%=>Fwp6*F`O<113ZjrodfAmX*f1)_~7>(uHC39K85Bp?x zK`Pr0^)884PxxAsQV+u$>uux=7gl>GHzchDCe_XcHy-!?*5O}4)BbLh?WlYGIvk-= zS{Dkc52fBtHM?tH6@f;C5_dK^q+GHM%8G%wVKLMaNX{%W4|~C*qq%f(>&}f#5Xqjip`m z#MESDri?5lm1R4GBZ#D3kRFk!<{wvJN;#xAfct%u(6!Fbi?m(5czz}$O)Q=6U2jM$ zc(*h;j;A?2wFu)@IjsyY3H{=igBpdLBzENJmC*LXv&h-%AD;D}X5b$2|eiwkj+s^LE|H{W0*SUSZ6)@A|B}lyd|XS|5mCTV<^DFL{@IkHk9x zcVA92HhQ|*bzQiy8I4TIF6w;IUJY(&lzXF}y#+BM;%q_l`?G;wy$h$;@`zZ*T$ZoU zEcM0JYj8QbeH5DBv~<&zCN#MO9O)%bPlHLu-Sw!9EZ2?ve;-;q@?X@+Mg8!)*gX;w zut3R!AfIk3QJJ5(CTrL&cgp1?DI)Mq`fU1nlA8{t8fq@z;zrX<8?LrYEM5K;q+TH7 z!x-E2TUTH+QJ|j%Khx%%n0K^kL_6Kcm`Lhwm$}DzO87`9eznW=SohX#%3W?MQ1 zFL~fV@!rhl(JZeHfOX;D_JHvm;QF}pom-Kp%QYCNjMoHIP?QYvrh z^&Ztf-c55e{I_x;;tMa^`FQ7eX6N;|FY5f}i{ZA`%~ZK3Nm=7Ff13tOGC}?Pp;~QSewm`Lr{L`p4)4GqN5lCUL(?MBt2^kAwCEIEoRrit=#?+TU>3=c>WK zF3hv)^n6AUw)GEFB-?c~4mF88V8K)hslz|`WHq?aK^O+&bs=hJR{yAYbW|c&`E3K% z+2fhK_Lfz)uDVpmxvIji<$6zaT4WEGyx5L(Wk=m_!czFzRKcXK$%wxV&GVc(v&k3t zU}@p(GFWL>dursj8Md4Ed|^H8fKqBLN>YkR?UML&xl8Sn2wP2q(PQwBDm2(~`Ud;? z@f{2JVJVJZsoiY8Dbo63%Sz&zD?y{(dpu&c3EQpgB-(OtjgEY4jxH`4sI9VOB%iyB zkvI>_kat~&ye~qmduQrvp!-_n-C{h&x@0}2Cl5nOINKLlb&&D23)yj+V1|I>9|CN! z=k3$sp(8Fiy`kr7*VQxb3}3i@Fx_BlRymmc-EEG? zU2Iw?7p@w<;8_f!HVp`QGk-waxN{>p5=Ol(=eAOwG%IuLbi%*N8GE08Qq5u^Yra@F z+ASOk4L0=fqlVHtOt?QX8K^hchr+-`hR`w{oCfd$@>& z(6Q2o0LIixJZu>JiIEs`#enb$OSh!hK_gu-q0g$+>SN;rN%}}&z}uhcg;1;euZ4cK z%qBYWubMr#w!%L{KI~mAJ!m z$og@dOj(l>wuDz)WWU{rXR?5n*eVABlp)JKD5* z%{F z>`K9rY-9-5R~_-$x|}M}u1rY#Fd!ZGzg_?iJ{WAney8clY!R`)pTnx(wS9sKYz<) zz>DrKPGU-zNe{JoM`%7XE+W_dUZ_QgH90-C{s^>&R{V=ztDRk;o0=n%k%pQwYzg}A zkN;FbX+Yr3U(FZZTgesp2fMLV)~Nb()Sp#-_wa_N{3&8!Cd*)3J@7*(#C)OQHJK)Y z5#^_mpxBLw2B%R+Q9>>wB=k|pckQYJk1DUTZ*?b);`dTkWk>TpmDcD!>o#w=fATr4 zx+iTq^Dt?O`dfcadzvC#nM4%`T)Vt7G@MqGnqJZ$AG)Gmlgd(%JeLR|R}`j^yz%bX zPVjYNuENAHNh$iY8d@>X86b|a4NHl9sI?!NdbI*Vu~*9BV>H_rCy3k`l&@-a+rOw!MX#)uysL+aB`TcwZykLqpSuwDGR!BJ71%^xxvec@=2S zzhdceSX;GnF5P^)32Hq-xcm5Z=G|NEvUoS!KhZ_HL)=4D%pyVIL@FV~D`EBUcQ8ed z;2ZtL6)<0UVfe<(oMh5e^7nxl*-%n<&#jv*jXDpc?tcnK=?XYV^3Ql_3E#XPwcf)2 zsN*P2bDiMt#bxz%z4Ys9(f*nFpzCOkB@Nl&PFDv9Z#Cw3RxvP>sN>!1YOzw3&@{L_ zy*qRCY@u#wXkmTUA`W-0&$@-W++A&IGZoKtsrXM@CTezJ^J2kE+ffE2q|+skn*${SD77d)W1;v#%<)4;qVm;{x@S(@oLX%O1a4`$xtr))Ua#9E{LKO05sdVfD4T)>TN6B?k|9a*=sXhBE zt342#1kZ2dNGZ|Y`t2Br8R}PxGlQB!zUgIPvU0Zlr$eg!OMI~Eyp}xBmPaeurFhV8 z;pwYdzRP>G)3G|FcXw_g04$N!?Nxg8mCKQTP4$piN~ zp0z(M*?Jg!X|;SWWipoZO7XV*7#}$gA3plRsJ~spdWdet6xH)Jp=6jIwP2#%C)6Vb1OZ6a~k6 zXBMLR2!~rrjTv^@J6oUGPbIN?8j?6BYZ%mCl0Bd=`Db=te}m`P-aL|UK}1u5(&}1F z;>hSSduLmJrX+zo#PMbFm0(_K%rhIJ)ZbFtX=RAFwovV5(PXLnJrA*ZH33efi%%a) zS{1z4Urj*Th75n1-Xh7St|8bu=6zUTzA>hH_cN(~`yO7S&Yr-mDt)S50Op2{Yx&9D zMiaDL`llH(y`cVVvnfk@BzeImJqg=P;xRtjhDdX+)?hPwxngpxuS^HpG95#YOHuiB za+T%a>fLYI>!Xwdw@lk;prJKWelgdG1qqEd>qy;*H33Ole^_5=<#p5Wya9hH;Tk)E zwW4pj;!bn%UTLw$dMU?e-IHgnPYpTyw_m3}CxLDSpI5Y{F6DTXFc4AzIS^yJKiBx? zhWRPz#gZ!#g?;DP{7bDGyEg@_AYLW}50@!d$lfpA+j{a_beR+19y=yv8*KhmDYyyHj5m+7PolD>$DTcyx|+jn_`uGDnRcnVGU?fL zUh=ruMADY0`CMmXt+#Qf3moqv>b|2IPYYd%Ng)~x8HIcbht#_l)BaPZ8I_s`7*jYE5n#Av_6W&ze|#3mo*qKmj0}} z&2EX+I{w{gRR84=%D|S z?`n11YM@h&Zi^@w$s5=88TnSsYrtnV=E>q(J-v;Jquzr%W0GgRe^}IDvqpbIolv{# z=Jg2pWY8l)-3NVjJ1W9lJDYpwsC2`kC{F8?^*2$RPk2|bHRM%MKbHonb^!hPd2~*8VZW9X!6Gz1( zlVn}0&R8m7!Qg0rKkl<6sNte>F(bQP?aIB4KYlUhAY;0G`1)czRfHlBu~;mD&y zSFAowd82ox(Q10{iWX1dMvPeAGuvK&wkKHh5tXjiz~)qT zh92}PdNfsu$e#k)6J6};1ci!6+0!V0YXjzA3J0Ib>y!gjw{`7}=(>O!L$!%t{QI*9jc z2%B+X*r_~ee;DM7)OCd#`+IrY*WPia^~hz^#zwJ<>>)r-1xu;+NI=S&6v^y-e2FoN zI}M=>4+m$$`ko;b1?GD9WB(APL|b#lRZ;3C`H9xsE1#5+&(g5AFzMCy;Eag%&*?31 zm!8{a?xM*^^2J#7)VtrJwmG*oMN|k6rMj9XqMqc~HWJ22JbZ_mcHv`I4u$ROhF8M_ zHval!y60+Xg%#I*r`k!~?usjtEsoO3gVq4wJKoyioVVTDW3A__4_cJ0W6=P54z)AP zB{1>oBj(Mz^sp$=s=!DqrIXLbbI+N!vYq;@@8!xyJx6ile(y2fXiia9gy+q};ZS9$ ziMGSkx^R&wkNotSHOoG@9#zsk;TJa%iab|;Mx$2rG+_fW{O-*wJuQs?6=NtbAffk* zJzWSq{(Fj2#&?8uk9Y%|&jR477;MS+-w-3h_?&`**^yf1BVOvjk|pni9^eX zRC_n50MXLW8!3~CHLSDIl8G29^j+;>0n7MWUP)Zo9X3XzCYQXj^Lm8ej6gR)Y>rPW>T$!Wu$-G)7Q?GmD^q3Y1p z8mO^}zxo zn72dcw73y=-2e@TdQs^jzkB#WU zE)8T*7)-*knr38W(a-m3imGxcfk*bwN7qf6Z*5f(w|`liny2}MMbiM}jrBLS(B=%k z&1*e9PO-|4N@{bT%r@%i@g8d;QI$RgiQ=zCp7YkDYWub=4_=}Hu%O2a&;Okc2T9~UrM+IdNN$6qdZ^3 zxR7{{=w);o-X)pdeYy}_;PB=hzP*osII~T7azEE?*6sCYprZfsW((G1oj5$z!5+^P zJYqH`5BM95Hqm2&I+B$`~};4EN?p4i|JI3G_cTdaH4ZOJ;h@W0|t27Wwtf_n>n%kg7}EXmvXVUb4uZ>gs4J2j3)POUpy+#SCN&4l z(S5et@f!Kbo*@*C?e9JId4(+i;?cI2MO{nJpg-HCv4SXq{B^sKc#IL+MSG|Zs6ov4 z&$MPFKyGeiB%fl>G-XatliW`D%N=CA$&wp!hQ6K{ng{6YEg1h_iPB#LA=Z{1NmItx z7$ZeM`5H2w)LJV7BNNl&)$L`VO-9<9^X%!*l)M(JKm7Am{^RU5a?(?Y(V&Yo~Nj z3%mgF-<|woll$AIcHwckimSPx(ZKu&j3(aRwH@2Ob^pIS8(#%d;N+@M-(a5JdIKTjr$o`#>g32(Y)PNf-FG>jh;{TI3CnP1}$Nx!{8yp`A z8gZbk5jPmbUrHd~Z|soC;SRZP^PgtOcF*?tO+~>e*Z>W<;qp+R{$I?Q?MZp@^^h3e zbpC+_qYs`-fhh(+2O$8&&dqYM+W3q9sdeGL_&uAIsb&M;OC1|Ec#rjXs z+et*ZGc3Y|W|4woh3ERZFjk)MHvl*ZnaP2*mwEPsa7kkR9HuBJTJ5poLg3hHZ>C5hH?XFTAjwkXn&zf5=oD!q#JN2;rFfWWM#913+BF9PYkHFfTW+$k{v6O zD>}H6YbYz1l-ns`_yEaxV;irPDq(AY-U_+Ahi*)YAx74s2ha;nMeexFmwQ(d+k`NVW z4<&a|(~C^Ph0MZw7NNN_>Z=6s{#W6n6F^e6EE!!NME4VF0DRr>#26_VU)J8Zn=J7q zf3DT<{5Z17!OkV@)_gLGM%)Lb+J?qo$LZ>@o$aV{a=_&zoM-jaGWnxpP|7$IpWqr1 zm}p*An7t!l`Tw)w>u7=s)pI2XJZZDGlDV|i_?cy5qbSKGWM_qT_QG&EVpyt#cMpzZ;bw&=_5b*~ygZT`{E`Nw>sQb`T9#D@Cz=?sHTotRzM{=8M!Kha#a|6Rh=mJxlh ziCwc*e!d*fG+1>7Q3iyRBjWlthB1v{JRen!BdTVxZsjF~?!e=B@;hZ^hp6uLBG!0i zhhY9Msn}Td+#T|(2LDh&or3N5+KJlkw!wlu#Un9cgllSgnq;XSyo$AR1yK@2wsj`X zsfNLIaBwY+zxgk5;eg}K4&H)ZdQ^;v^IPRfE)_)su4yTP48rjEaB&U4sG8i23wtjS z$Y(evCl(P*<+iKTgd6W^A8x`^NldncX0>v$c;gsVFwVNDgFFB*Gk4~z+$$LOIfOjM z9)R-$`BPVWqBSrp(5>AsDlMi-h?+^s$Xl@TAX&#%yy7aQe5JHW!SGtLp0!Oh9SsA z1iuxpj}FW zuLQ~OmA`t<^{q059<_L%aq^&Q)k}VD6*DxH|M)~t$Hq`8i=TzBX(s=q*#S*$U&13C zTZ8tbGT)nV$kv*Gb^n*F>c*UlO_*Pu7Y`dq{O$HAEvu?M%cCKwhV=oh?GJ+ib``J2#O8^iPMRy16c!#Y4_$D{!bh{dqz#xQhA0vMP!LWDFq@r z-U^}=2&<_g?_^3fO0g)?Br+pc`-*mVuWKrUx~w7q9Ukr3RfxfqJhlZEHP!4&M4${g z5ne;%8LR~1t`S?zk2ECKjoxHNP$^8*OXK+RyRLH&nKi z#mtR5Jf(C_W*538MeI8q)ph~Krj4_Xv}+u0?6*Ox<7SNVZT)+m3j zu)Tj_(AotozJyGU>6$oKAD`GzT(YysszK85Fu#OowCMi~k{!|=+v&%O&JvT7cS4lI z?eMJe%rADy|6&|TeM@}_H+eKl2qV_P2?C1O_$DFBB3HC4ft>oP0T;2=eBm5Ij1N&TpFA`)Iw z>(%G6czMNhLY3(Ew>Q!Ve!kH+aK_4-wg$4&VWz%kg4#B3Fo0?*lpK&rki-&)m1Tdc zp|3O0JNr`B((otVNXRDS9yv%brrn?0CWHXSUw#{nguhXVkI&hWtk~|HXsUzOwkfF* zB>)69BB~>`l&XUdKSOnZ6PZ?XO?FYl7Ho%r5W(DEd~$bSG{A;Uo@&eZJgn#s7s~7&1 zdtH0;yXff*JU1B4-NvAefC9e2Vttbnem8qEMtHkA3LkLDbZwiEufMAVW8SXwj84p{J~#!I;h z?CuV&WZ>s1NHj4tdOD%m8xbECL*~d{1&icWMTN&`$z}++1Al3V&7`= z6UP^r9+n=P@7=^XD^oftV1&XYgDCHg(t+u8U@Qu313Z{h7^9WiMo-C|8{2N$|FJFd z0Bux9D{{Ph@vsT;uga#ij02-t{5M-gjM1ZxZa8$bZ=Q0}93okimGsC7W$+*yV+pE? zU+MgA&g}k^yG?v`8|+VUxlonnxD_Z4yJ|6xLb!?0DA+N*P(jrFjL__)p+~s~fCOYF zD<>AinWXhS#XTM5K^m|lh$Ry1HR=ODLE+lr5#)U3g`{NEw$q!3%T$* z%50odiB2mC8xyVl!6@GfA~Y^8F0)~r1c)Snii$5POD!4oNEe?<3EC!v2-IPQagHrF z+3u@YJS%{ROm=k}W#62^mNCik0yN2hk>1p}7{l7rpBboH!t0$}e;(U_vJ}AcinVX3MJC(vOV1U>rJJH{_ zflnqS_y3qPHRP4K5+U}}64P)A{2$Ti@v8FjDK%{5Jzcrgo`1l|s9oW0UwdsdG+(%H zYT}mb^&NH!PBs~S+1nJoNc2G2p|tS-c*`bdyKz9(zur;LL8gJyaS#TQi%k~e?VH+u zVe!iFODzMX$Ir+oJIjG`(*Nc|VNUyV-Bs>qL&QV!8p&ivQQKl#USYi4UB24710QFt^6 z)?hS$94W*+Ma~+R*!@d!e*TjdCC?$}HCwd&Kw;7UGBgwS73jG9$t}s7@BhmQ%%_ht zUgb})wrtfj{>#VOZ^ol49O|w>M?j;4nj{i|T#rCjq*g#%2Onin?*EaIh!5=SMIJ4eWSkX!VI+UOMX#Lam( z<}|%{<-N;jV-VQ$>F3+iS$*yCN>IV6eU0&h;^K+2Z81+E;lk_rR@ZhUrk3HE(N|h? zV0(;n?t~>%_xry+y z|Lp~+bUO^VK5NOm{rL#*qOz&qUE|YGZuBbMq_*aK?Ff^rI^ojJ=f*Hy8slj26+AL= zux0fbH3OjjPyK-)OJZjP#Xlk>Lzd)DNh^q=Mz?FfvwQU^7~3n$pLVE zzFJ`-<+WFgr8}A#spT2NbmI&E*+wsXa_ohOt?V z%l76{8e&QDwmP_0Sj2x~JACGWP@i|t+Q7dra4s2OTEBRI)QJeyTsqJ(ef76HUbgxk zw&Gjh?yz?|e!-X7S{?&nQd{j&*3L!**B;}9=ho?qy#jz>5bnTmhW7@(?iv8&QS}<< z*fi6oi0re0Uq{n+w#ob|=0ec2j4;VJkutlkdI_xsCgiUBh736t1}d zP47EqG8a?dYN(mU^hj&^b~!ZSU^9A1w9&8h*^2uOjDl?O`o7H$^}BM&ug9`E1WS<= zq`~^_z5E0L;NN*ne%W>YOUYcXXIIl{pzFo%XXfdz$Cn1n`5X%0A)bX+TBK~1OT_Kv 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%0D_XK}MD=%qSx z`CSc;YSxzXwVstFC7$fZ{@*ek(#kuYWiu&-9Sdr;4vNN+JlBgKY}YK~T6AUx-IBn8 znA015Q!kppb~*n{rXG>73zUCEF-8DKv%@!?ugAXm-DOyQSZhj@VRl13`g=oGpbF2y zxUxi5RoGx-BV*Y49_-Zat%4F{R`Lg3Km9S&g4-Yw5oOUEvG@mr^-I&i){7}+r14aD ztCfO!kxjy<_-IDKw#|)JWXzoVjmNMZ!btUR%CS+B;Wb)p(SEf(SJQs)x!lm~ar_G> za(Tw5v@mi$djtDyy2!{6I*Pah|7q@k+O0K_ykb#|(l9iR@s)m*=`%)Ha`+E>hA=rZ zG?NBu{O)qgw9EI6z6*4Rr@*77gH10-&L{4cDM2T0I|MEw(%wHvQ!|r4Q37A_$xwCNCUrw)H!{&_ zGRIcc{?WlVj<0J6YWA)q4v|7tI zZigbjchq0~lAIvMdaF9_0bJZ}Yg<&#*MgZ}`(45YanzSguY}(;Z_a+pePG|3(zECY zrA_rGQWyI(q(L0cQr*Ab+K3K^B;=Y`aD0Ueouq23zDs$l7%G2N?xwY7HDSxHZ|PlS zF%|v~`vun^Sx4=KJ#b8N4i0CTj%AWYcObAx30!sLnAWUotufWzge7Vdjgh<`^DC+x1gk{ z^d!oYV@*Ua#@zQ?xzjXUYtpY~Pd-g%!cO-#bhhv9L|l@zqf>H~?51~;!FH#+DPFbj zdv1Jh+Ru@hB3@HFifWK%_p1Gl+j$ets1&JC_3mpO}wJ3Hj>Hnt*-rcd zyx-j6FS3m;UByUEZ6X@G$8(v4eLAs`wKbE2so%Oe>Snw}{H&1U!97Db)@5D7D&o9X z7g20;=_7Ly^-cX}tJ$nqpW5!YJuU6Jk@!@2a=lmd`PIe5ukU-x!+5p8j&Gbr@M5Yy z&)i8uS3ZA%xesIMC0?iL8~sq`jl=dDtDlFj1;O&!_I@^qR5p6ca9={na|KPef?5WPOC(( zl0MUbDRa&+a@6rP)q*#bW+N4=nnOT}u_%+>?l!DkMLf7-S1+}wV$ZkzqJr8oPZX#w z>rSW^iSQ@Do`S)GTls0}Gi+j?6Hw?(Nk!;QT_?0D)~wZLXwg{F6fm@;uj;IMjXdzz ztR(K9>I92n^8#=QxwT&K>C>?xD+NfEf{@>yt0mE&m(-97aGu_tKdrha{%eVS1gq76A?Vn08Yn#^Xn zwLxV8yigc`D>fFkSx6?ZayzZY<3(BW)WHlKG!^8|vA`&xQ5U#qM#i~<>Cm8kU$oPG zl6f!&t~54649-{Jx3~dh{f17(RtrWPH?{VR4|24|=6-HAA%>pOU}x#t&|v2rj>s4l zv#UD#^K?7zwr%mMc5`Gu>X(D>&7B7h6{m9YO$yxm@ZUOxYvYQJ4yk_9RKfOj2a&s9 z=oI~Y$xWzrit`0rcel|N9xJU{d#2`}*NbIG$IvBR38IC{I7NW%aeT*Jmcb_@Mp-Fe zy>$th_6^vx`(L#H;G6@aYj3NMipCD`mYOW>fXh_Rq76p&)$Dt2r-Bt66$c%SO1AKS z;ENtYVUB`8YCTJkyw#ZJ51ddYY8jrEPFf|HnUd2gyj5NQlu6iKoIc&Ehf087QEbG| zXy-{jGxbq0vGCoe^)e-Pj~+*h)=;HPI@&D$lA+cxC9$(z_X1zc{mI^wDMnfqd7;aA z;|JGiy$ZR7>$=P!TN@~?qtsMUsRaaG(nIf##bM4{H%>F9%D^PxT&AhFqVFL6;SR5e zB1+p<)=UbM=+0)Y<96wKbM7;;Ih6ziB3ef7!~D|_K;cTT>p%^1VDRVk<_nI00pED~ z?~80S$%n#keIX>LcS>|a@X0&Z)AcWQaM98l-zS$XQFTo!qYHZOckLr)Sg^&U8M1k= zW^F0I;?Y(1?eE4%zP9h3jK+aU=s_-%F5t3STDmDK2(6Go>FN(rKgo|RV!}8~C;6yo;wx&X(W35HL z11$X_uKAWh-l6umR<^Re?PNEag6iMLH}fikOX;|94IS#^iVInsh0t|_0TiO9sy`pFi)j|^BoASNfu#{+&w&YhUMz%JXQ z{s=0L;5NU?x04mVEGvb!5FyrQ0fyviikw3BaH6su*|GoUYFDW0Ep!GO-iC~kmk%jf zuPq;6$S_vD!4ymI&X7<4;Cf$jGdrqz=_j`J-8j+50)E^#b)n$|pS$NiJ1aFV_v>}u z_|WD($VYaz_0v{M%Ie!(Lpv0WZx_KGG%|@0O+M#2?fQjmZd)?+xLcc>6myG8>2CJ( z3|{mtTcTa6xKVc0w)Cv`t#5|O_dEn_xL6eQ+8qBmF;QPNrImJ4&jjm4vSn%0u40JG zm0Vx?Pc}c2qGDBTK+9maO&_{7FXO-eSia|(Jg+#!h!(u;yGmUp#VC7yqE7Xb@RAb!^d zj&u+OAp*#j&W5m`^iJQGR<@TJHNdezFV=&K)b#fRu;|f12{M5a<*g#AX!>cKV0=Vo zz=dCP;Aw9dyG?cVU#7?`(oU^w>r8qrRctxV9I8KaeZBbdY^7xFnTgs4gybv(t!9TQ zP3ENPy7v^nIcS}Jn=2>|qV>aqgejM4@g&oMekXpKiSa!+zI7eHt+E|JLHx2mx;>5J zzgKJvteT>M3{z$n4CtErEo%m*cb(kHLE?<*%0;_R(pu*k#qGFpR5kqoDRx`!{nEYs zWvxCvdsOa^Cp2lrj2@=En(v>n^xJHg@p+ZCJW^oN+xcE|rqO*spiNsc=hxmU+%jL` zfz5vBDtRqZio9dHb43Hyr6m_-9or9qFoU;8YzLEQeB7Sr>qi15Qb1ai{i$`K&7x+5 zlmY{!8sgug1t>PTFt^D7gtWg%SyPolp?IQ3p!~*fk5*AW_cRo-$7ndU?4!4*7)y_ z4&%#$f%P!kFn_a*<^^x6>Xf8o+cHk_zVNO&zOqK}Vm0Q3~d`8%dT7vcW2reCxJ571h; zKDJrI;N)=W;3q*c3QPnZ(34Ne;ObMicozDT5mD$MhVL5kiefof9;im}ZvX3Aw=xm6 zX+H4b@5|$3({ex4H`rXEx_E#D@`ub1)RBMXT38B?p6oPS3G4dIWzgs`kx*Ee<)TH4@Anfl=_$S;0Tl-e#fzfv7KStUL4`i z26{)1yMVHLga|t%UtX|kPvS$;y2)<+Kx__FxHf4)H06G@et4St6NQ>5nbpN`nMICa}`IgPY zUU(MOda}+@Lz&NHOKc_=;&-hlcC;4hJb*w=ztkzsvV|&HUW0Zl>4kFN#mI=LFJ#{U z^BucisGU@{&-(202}C}@0M)@WQth=FP3X&Cm9O+OtDj zJqH2lUi4twqRtP~`^mPv6n{IHa8oB zvF@ry+XU(zeMiU6CtQMLwj2a`7=OB&no<#ESMTluo!hrBLkC8g$536t{F{RJ&gBn% zU1X~?P#lZ$n&Oe1Ev= ztbYUk16Y1kN$FE_v6{HSp7NbiOVnKta0)Uu!#$Tl=$o^X%((vCP38Qz(bbOo1B2HTupP3PPNY%eFW7cbhz+ycg8gvtC z&UN(RIVk(s#}BL6>XJbZx0*05K%BmsU^{w^3h6GWH7%xyzx@sxm?3-R=R*B22&|AP zqVw3MH!+5|Y%StBle3`aG_z*p?JQ%fgd3)AV=ZCH6U^dpj?{TL43VMV=2q`X@u0Lv zcE$y`XJbM zTKXj|YZ_XI+pE3r4?5b9d2jkwmZ|yp_PucbOfb32U!9X9iF6Z_v+{)fqU=3krB?z2 z4I3rdV{BgWq1!h+>d9E2iMA&-i3zCk%<_`5K_0Iu_l=vY&j`zA1PnxzK;Xv?R_-)F zv4|Wgecj!m{+VMykw42&BaoEo@6*+E-RUy`nF&q*dY@X9h{Dt-MWkSLg59X9qhlf0 z9=&;;6=TCI17#wzbTV-Vvp6|o0+TD>>%qaFChe3GB^wA?(f0e}BfOXfnP4DS`DL{D z{t=EU$*LJN&$w)V;#$OM&~{LJu9#9<20fUJRnVrRo=OkK3|S~`MjJ*sb@0%BJ6Fq1 zNz_}^SQ3xy^m)ow9A%PlU6++}3Ac8bfB1}p0~G!~0)eA6CPvIUY%Y!>wgJmiIch$8u|mtLfx$>mT<)DN2d1h$hb?@tt)gIvT1$%d4P$Lbwa%fb~!NiaFIl|57h3$L$Ix$XP#;Z^w zKw81*wMoZS@NwiYU9psRx+kScZdN_3YR%z@E!nKGqa!d2V+1oTClJQhn%tQ34w{~8 zG!Q@6601!7UlM?LoP-NZX9rVW%mOEsfP_*Y9buwjczcFHjmTC`XcY;FjQR&e(!JiN zW9nP`Y{E1l!9|^N-?Gk$=k3$i8MKbBf33h4jZPRBR!%Tmap!KK|2!e4UBw0JSG)7O z;+XRWW}NX4_@6NKg<$8Vv=j=QY>1mYmX74g?(uT0gK z#?!v*BnDQBSZ_i3f`*HTggX>I#@y zZ@!fJYz@>{^)nXzfTF>%h=DIn=%ORdp2RiKzVqZ-M_;7APi~U!W~YM`4-9 z7ezIy`;?mY2vWZyoTe7JuV2aEqk))`^D0#-_vrv&DjsRZ+XC$bupAbsvzzcYt_81~ zzj20Iu=eZlA~{UV|88H{k4dJdszei)^6_ql#Q?BXwV(VP-3J2wUBZ2?OjPZSD!OON zYU_L*P9M~TmYpj+?8xNo?EeH*Y#4=(GqxSortx)%l5PfoMWDpe&gGbypPPV`6K{x; zDNn80{)M)UVyuxJoib9RmZ-Y$IQ<9T)I8m8?50QIl8Z3_uj zZpFbEEFf{(YW=ZBZD|BrYKYn zt$lx>Zynh7rYgWybF$_x?}2gk{0WHUO?Fg~Yc;-ZSJu_Kq$8br89 zMZjhm&CH>6VLf4`<2nuiJF~r0t(0m?M<)R09|654oVC*n+i3LKFa)l%hBPm*O)YpJ zHZ~FVuW}G}FfQ@G=Gtt%8-ShS;%&54IcmgULO5eg#JdNDEXq}AAkDZ47G{7_G5q42 zLtH>__1F4uxF)%XCOQWs!{_TAkSN$Y1ERA6F&abw=`%LPEL#roi z{$|+A09mBI!c9oIW#vwo@Db1ljL*$Hs$J~9&+{16D63rL&c&&r^j4r73&fUCG^6z6 zwXwXM;$PSlGAKI|2jr2~`4s^8#{%?QN7|@cQxIe*0{hE=qlKPnggvRu-3In%b$0&~ zeXMQ!7J>qVU_*J+X0k6geUYAJvt}el=t`0zgjs!P#GpSbzvv2>OEN=+MHEr+ii}lw zLZ$zRJPQDJ%KD}yU3n>Yde2pZjnR|Ahnn`!rqM8gB=E}`5BTvJ%KhQq_%Cmm*n7(j z9kp>ljsGwnZQ(?patdM%d_+HeW=(9VE$!Lv>gw7#o}Y<56RZayVssCRD7!gD|OnxVLw;+!Ys;aZ`C!cF(|KnEu6?J$5D zWdu^2{%XT9()Bh&7?Mrw@EO>P<(dm>d)Lf+qHeDq1$f=xuKIw3n<3~eEN2AqMWJEC z5R>4dt~UYh$Fe{r8(>w%uJ44Yit2fVXn^+$s0ACpk!W{pF8x?^PGv#N0LnIv>Mb0g zfqLY313=-Ax_&)A{4qegiDPzCL~5PXOK^>sAYSa2C=}aigr8GI@}Wqo5CLx%?ToY( zWX}vhB0wPxxayAD?QtrFFHlHca&2RMXYI(m&i9?sKhe+~WZXG=75an$rfjn~q$L!#HqUMIPFbG;U z^7Nsa;eDn(gZPb}M3mHOsO}kN@(c*%X|{Z9+eB`uRBV0$Jgaa+u3D_LlLjB(M-8%9 z5>k1bTC6kK(9p*2?JsMRXtu$5bb^{%lewNwohUf}i0FIIDKdfrG9Zt3ikyb?-XBy@-edPvdw&q_uRRwC>v$ar3rX#39b=Y-e zzrC6;CEwaSHl<$aY>BUrep^U76)2{$E2mhS%@BqW%@o`J4e|IWMRC3MUhDuAH-Wji zj>c@+*Q5g39&3(dErFWJc!N5lJ}rN1*R3|DSMuny|Fs0i(*@y~*6R{Qf5jK@3d}Jw zD_YwcR7sNUajyj0P-j1a(}e3l#@S=hcV#vnGen&BdV`Wdy&1G1{9X!Az{|!F@`TcC z`X-BAhsRR!F)m0}F>A!2tlBV~4xf8{F{{ct1r0a&wW1}=RLyMNO>Xw#(DbVyhJK6x z=MSVH(D#D6DkB7pZ>u<-32*SaWh=(5=UzKUMz&CzAa^-+M~ z4}w6lEFMb6tOf=ZHBW}QSR`49V`ogkySE_qkrjTR^ z5}-pvyoJj#so1CTZ7>H$z>cC(-ML%_zh8K$=m{`sE4n+3iZZhdKTW@`x%n^O@VU13>a080L-0YiXo3Z6m!&B~ zm*tHc83u9ieX`}SI?p^~p4V&F<_V9}ex&~4(X*>rLA+sf&}LAq^Si8$2Jstm&Fnad z9yaBeeCtLH8||WT&NzK}lI$(*qTJ=+2+GRi>LI}mj-tgocc{KdMu;UE=(OWKL+-Tb zrFyUOfTl(4QF8sepBdHpFTDuVLC`^4FNL@+w2B{c`8j#6wHNt@0la1(bD#3EVg@HX zO>R#)DsVlS0H6JNlQ$_F*Ci1>v3DiiD{Bii3Z6YF@K%h?9^GUh6Z=(&A#JgFMnJ+u z&Us$#4-$X)uHbvKO3T!j6vcHpaZ&bGf*lxalDefcas8#vV`lDzauX6Vi44?|5HYt{ zR6xEnM|61{*WH|EOk&IR7^l$6h4sD(lX^QBDElo_ZVMf5>Olt&_L$HN-Q7}CdN7Cn z_t417nXS#mW>;RucMcN=%E~S@Jw|b~7r!8>70zRqMA>oX^(pQXsgm$Us1&T-&N5Cmn!xtDLM?*jK zkC0>zh6aC^nW$`>?5F2}J&uQ~gU?plvkbm|Hr6ZEi|aRaPsmStkyVeEU^%M6AQ9Nb z;?PdD+1+btH?o4S-(Ek0qQXQc#&#!PQn8PxVhjBDG={O>1O->>3?^kTXQ^jH*JJ1K zlD$L%r+alB5a<<1?wy2Y|3p=hw)OoGtu53J4DjgL$yaTG!@gGSbbAL=DRMs2y)zOF zf0nmPjbn~6i--5M`BQX-grXR#wp*#wA)I~%w%fBPW@OW1Z!y@|C+K5T`upiXznRFW zn$ON-Mecs4_yHjGa8{V+kC9)@q@mHCTYt>tPiOpa;p3UQSyUj92no)Yv#mKdErAK> z9RWM9;0WKNTZd`^g~+JbQ}uRGon@kZOV-;rsj4=U&>NxC>rh<8#5&(!T_3&u(8guf z-lLtrC8Y6eV**l!o>5k9kqE2+iR094XqHSGuy;Rq+BkE$S+ko@5FYmRD@VW22FPfT z9|Liu&G~7QD~UcZj);JELY1A`b_Egv&-GZ};EwVg?I!gxGafVyFKdXV3YGf?>&KOBXM4`R_(z#U>qCxE zQJ)jstALEZZlTIUj<7lyif5%Re?IbpMFXAJ{7CoRk0?3|_2B)gN4Mwa6^c3qD^)4z z?b0X_avB-4EnT_Eg`>&6GLLaU{Y->W+jRuQeYTIcWMr%c)BiDO4>IyUSqe=Rkc?DD zf0dZZ0vHc@LAM_wDU)HC^ICH6`tocPX`_^W2e1@I&vCwhPtHay>VVA%RN73eBAh!_ z$|h~*T#VF0oH|8x@xN}LTu{f)Fd1m8b=`l_iwktNu9r@fV{a7+9b86x_1FXJr?1O3 z`OFZSkxQI{w!)kGECVbSx%2ebJy>Wl$6Q8|@R@OY_XsDexF~+;+vgX9)AUXwYIY(Q zd)UF|<6F3!dDE7#Vt%EfbZ(vxgDP^{r@VccMn9e$w!L!c7`*G-FG*OMHU|V)#GT$r zR(ovnrx~Y+>Ubzo=24@8n)~LSj-3DkeH<0VL_}Q%Rcuaz6PH=cI?>*Qgjl~KiZb8 zn76`x>y&OEXRItLH3d3JFa#ewU>$3oeRThwA0!?JpV*&1aT-SamasH(){J6#eBa<` zB~!x%q&qahEEg}n3K|eSzKV#dHpuJQ*uI<`1aEwn(r>eNc;m#wY1hiSUA2rb_ z4^DrePk2dDguAkBZNM&bZ=LrU@1Mu_YNbKu$Y|}#Jc)7Hm8D<)OHVzGobxrDf?D6X zC6`*XqXScVVYAw32UsRFvSusdGk|5co|z2#TC7KN0f{BUg7GT@?J8jGzccvESTp;d>$0Zo?sAVSMOZRS8e==jlJ!nAZcmtcUwMW8Xvd?)suZ7)BUj>B*3)! zWtjy+6J$_lIvz8w);wfev-#zKU|bZt5xle4RHENJ0<2-gRFjpwJY9y>fE&3ampZ%~ z)63oSs6E1qpztf_)n|WLvw^O0(G$?36qJ+Xy_GY7`ObWh*t;4`4Iwl;RpS$h&ZQvuW zEq2bf(z5!edrUDwo9sVEVu*)s)!oGOb61ti#&VVzRW664+Sz`O7t4;pc2^jsWk@;V zb|&?x28JkrFFzLgv+kh8g+|rw96vYGul3I`_VJ3+pL_mbTnOS&y%du4-H87Rx!+RH z2+G$eqS{paE06q`Y0XL7^C@7UUvWmlYME1Ox37cL^a@9=wq&*Ns6b9Mz&QTvrQD`k5kUknFP~T|?Ytr?HpZ z$;EIYM0B(pbUwo{8DWnwY*FQ!OB7pU01~OrCoEe}z@>pkKD4XmyhWrGMRP2~HCXs= zw!b#*%k*dSEl#GGemcf;^9k?*jIa5)`cm%bQYyU@OlL{JA%$qkGkb_u0~$&9d?BXeY!s=mzrwq*YQbz)o{CU`0(b&Hc~X2Qtq5 z-+-5JWZTfXTOIR&W zXc4~BfmRqVmPaow7Q4f=BzvD|^~bzTRqXfBqXW^z70y~}vBK09KC5UDFv7n;G3C!a z-nS>!l^BZ}A>PZ_)iL1hDvz34MnUU@^(8H~`s%h}dx z&2KBrWKWH|B`}g3mo*$DuD4yJ#}DgPB5U?4U%&S>z}P`PHhUosT{?*&PzA8~ZTQxXvxE{^! z^22~90iU39#rN(4Of8AFmTbwgK$~CLZzC!7OS=3Wi*Z3hll%DA{g6ogx^iPnDUVC< zmM1R~b53hN*1Waa2?no>Ee%5S%z?b|QrlxNGqJ;=fT=fddXpg_w|uGsiEB`23zgZL z;z=Z6*6OZQx8QF)eJXB?8~UcCtVCmYo6KkSmQ0Wfm^fN^tgX+*b!*P?(@I3u7&fP4 zpwna&7M(euh40ryql43j1tH49KLNp}0cN@;rFgc1TC$||Jdvd=&K23sR%^}+QXwzvPn&Pii)+6GFw2+|kb(jx6d)%nS%Vgf2qSbSHV=65;Kfl1Np zRb@3xPw2SIHN07CPrtn{ua0>Z$<(JVVUsgY+cd!1$0iOXQ)HSxLU%4dWL7(o zpnqcXF&qBNMDA>Dzd$3N`J6-(;T(w@!}8MGHo(SzRD<{5v8+rVUj&wisr522JH0<> ztTUHXb<@GFvo@0Lb_^Ym$I(!gqlY;T(=r|x5sgry_MWB#t5 zs|Ks5O~lJ;6%tK|cgf>Eix0%x7+?TO-Gyx+p;@ry_`p{-Ahw$;$a|VX3&d;IiYIm+ zMw*mCnnY4FOw1!X-{%TgLX}cU?SXu-2@^P^QRtJc^-)P-xf~*G)|^*?T7I%lM-S4Y z`8y#)z*%8*4^a-uk>wfLRsqRTlbzdi-%P{&e=WNnakDmrCVx4x^ruJYFKQD^HworIjgJ{V`YJVn&Z}* zRjeIPFhAp53L=*G5|&6bS;*q4=SptT)0mhjN?ybj%zwhmTfJyewMx?-4Uqr&q)~zt zl?eaWY@W5ru#2Fa>R1_uIT4_+=B|8!YVvqHTiY?h+Dt){b@7|2OMjw;M$*qhdzlcf zy;OMxZf4fu+*4KzZC{9#O%j}e07MgI%~R;iQz%PQja=gVO09;8j^-nTeta#6SbVBU z!-TZd(@eJ;@2hr?WT`4);5!o~3=uS__1)(#y?+$rPNsdYvzKORcbQ*9JK1THUn%rM z{9R^!Wvjz$pIOP{o80ZguSAD3YZtwQhcbklc+BK0)KtOuiAjK?IL0nyviTKCdCEX` zQ!NFmOI@2wUDxxO>3f;{!baP=5-7;)|jEE7=Fh+7%JSYskH1Kb#NuA7}Fp>>iq z`AssA8J72JlOKav>xPXGPe`H+kyYIGp}-aAf=e)JnajZvAljG)HyZFkG%!`G@Kz-l zcqPUFMQ1KpD%ZfQD>Sq^jx7XEm@VW0{^>C&I5WIgtK}F2i7%LPToYYIXh||;lgdOH z5VAcztj$8q1t2MqU#aJrjH?c1cQEEF8{p2j+A^`cWmmsZ^$)wTg|j|kUxc)HwiSUW z4=fS4EHeqIZlyXR%I@I*-7%#UPWZ%Ei~pDqHB(bEQaw=nr0EP!t6QMH0_RIZXsz+{ zdQ_8lUpSQ&+Hj;1ln2`TbbLfoQsxM~-K#^gU2*a@=0h}q$*R54^OCf;UJE+G$zRAG|P>;B!QO}x~qt*9HNC7$kg|f2e zY_;2phUS+C*dX?R2Af2fKb2#;x5o;Z*uG+eXp)m6aS3s1q4v83kx_A64B{=t&c7JB z3TA3u5O^rkW{j2fB?-gt@zSuzBq$QkH@ZJpB0i8wWmO(%*GpiA4`zGp&Qlz?V4tYc z`i|JHe%wVJ3)7k;b!dxB7%A@qfx)#Kegm)^fl#mLT zc~Pq}uOD^Gt~$@Nu@Kq{#-PKeuEdHQg39tapgk-*%h-V)lVVi79$T_TxrrwLb1JM9S>>V~pCsExRyjbX42lZ>+dD=w3rgqfCh+1%GbxFovSnrn$-& zGF7aA9CVLEOx3V}g`V6nnD5q({OFL*a-RmO0x6)xd}v0#rb)By)Ps={g|9(NmC$YK zub%_)A+7~9@jwfoU|JI-LV%`=b_QEjTOW$* zFcO~HOhO1Elrez3ZT4jnv@8&crP5@WK6m z2WeYoQ2OJ>kTo1(1GIOO#D+H+>%gsUmMjTov5Jl=P7}34*<|P)1iAu5sf1R>4(`Z8NqusM&C?;RDe| zIa$mKIt9Ld$7v8SB$}(kFE|0~=YbY5NM}B4ac5 z0^J%Ye+=nkdQnt;v;nj1Zb<;vt$#ieB&&5?9vq-@Z#)hqH*-%P5&CN$-9j1 z0Hj^QkwDP|21r&dV^K-JV=ZU^#xD+dCl6ro7Xw}1!e^&^ws$KJj78?v z^5>#UK$Bzs1=J|B?#tV@aDuu6vkK9k1Ax86aW+rw;n#rAaR;#{Mz#Rf`TYsKHo1{G zT7zdzkPYc<Cpnb|yP z3U#;-WdKbS_aRh{iQnL}Kp0TteKe{qnYdRwwfEs-%w+qj-Nj~!sTwG7 zEB*`zbGG(FKQJsMOHxiX1dgRiDIT|oqs{idy%#LYa_h)_jiNiVdjUY5eeo+#0>R?{ zF0+|ki{G3n4aIYG182x?6HNlt#&mXnGV^efnLEuc5M#u?^}a2+I$qwxDh>D*Ab|!l z0(_+al6cUcq?P+aqa4*PS`mWUmf@(9$>4Xy(a>_+LVaFV^+2Q= z)8Y=EqfZJAuzaF67;>T2uq!s;o>Xi)bOfv{1RI6*=9a)9(5dF`0V>ygz%5^=vY?8G z&}jeYRh+pUB%3}>#1qmTxm`w8DbZw$%K)cVw&uxJN+O@LC)GH|jmM7R6K4MprrtU( zswe6nM-dPMR6;>Yr9nC*7o|bEbET!Fmfi(XKvKG-q`Ny7L^_u4kY2i3dVhEMJiq7r z+`slUduPs^_o<0%ZTjYs(iCTevp zl4oMZ82yQ6&VYFC21<$pw)aDKE4F8ibsTUnzyil7XI5t-oZLH@TH5=rE<9{8Z5rvr zPXk!yVr~DoR>6g~?TNgZ3$bNavli#4J7Vy_f}&Hkv9~alGMStQxI1rLr--}%78PL8 zXaG*&^GKo+aj>L1$F>{EBasxA@tm= zV-m0A9$r{gIUGbC))Z@M-YAnqD@D%f7-JZw2DEHcy+Ul~ac^`=M9#3odUphW4^kTm z?E2%s9xaot3Z`1%`t(@s{ka67^)LQa6WoGRwayIybN7(*IP#HzhP(MPSi2R#hk zi{v(#cG({Q(Jjxz7g$a*?PpeR9b8^zo=c^i$9wW%@ZPeuVYz#Yl@2gkz``a5prK72 zsOGiOz6PC>$91hSs=sfiHERfvUn14S`dN6DLe8tnt}MMJXttuB`)Se@SQnDKniAbt z_My+UC(tH}*`a!MqjVpu+dAM5OT!18HegAOX6jxOrp0_=mxs~jF2Kn1gTSubR0Xgq zjEjZ*s+^`^`^TdIpt&Tz`H!H-rg;a_0nCd#nB=S5?-Hh zeg1Z0x~fJynOz-P0c5;!;|TN0RR{o-iz!gbc4jzO`1BN?we*&m-4n-wxS#9n*{q*+ z*`rYpFVwlhVj%(g`lAH55J9r9ZckQPeN~wN1ixoJTG-=OI6{fhc8I6~XJ!D2N6P78 z^|lorT?>rzi3X?J##71Pdz?voc3Cl-U4ryjncv)4^A*9#f=w=mo=Kw{MOw7Ti1y9s z0#oYM=v{^e>-ZtgAq1mX)L;#vHV#k~qrjjGtCsw@g_$mZ3nsSFGL_~vv(3+j#bIkP zLH^f~wASXuHjp@*Q{gEtgYs#EaDDs=@D<*sFhYIyoVKhxZ%SQB&U<5 z57q!Mi;e-w>71KHM{xh0Y~dir`5bv^)uLNw*0TAt(yXQDOLuHHK(1*q30pJx!wm$` zo)$Korm;g__Lvg)?_cM2zYFO>+-4(VUs-3%$5sLp5sR)!bG5`VHh}Y3o+MUFvf1+o zVsb(LenC=SfdM4RV?5%}dwggia^>6#gNUE7fc2cIa{ zL1G<^`BbUCw|@*E>O7S4NIUFm2w3bgQg*}=E62aEB01z|M$Y6aOE-PJk!t__zCGhr zyRlJwhEenW~aQ>WM- zQ}fp6&6GHwADnggj7?=~)9#1fVWA3UqzZmP`5f!fQRtmso0zG{bmz-cY|V6=0WJUo z;E{Po3`F|d2bZ;C2$QCVdD2S$J7W|0`Jxn)(R2Ge(*8d$|My7_P>%h-NACLE2?i2} zZl4yP|2=*8Q_F9x+jCX0usDDj$^RV0`=S&G{a7t8PWp=k4}Nd04)m(XzE62Dch217 znm3qS@Y*#c=+KEDEeM)G-kx<3`H|*@s<&G3W|H36;AnmffE?`jwp z1d!`Ps6+^XC3p2n*4Fbs%fHt}4yZvivwcf2r!9-Y@`~(L#hnT^lXOQ1XS4m+G;OVH zG`&aG$}94!6mACoRj;qVqwML1F!M9$;nWE*zhxT!L!!a#xK4J)jFtK9filhaIwvO{ zhdmW?ZbzgdHOdu|-@mMuG{F$wS-__hVD&Po%FDKDTG+6v=5loHgqbv$rOiA>2$8k) zwVy>M_~=NzHjD8sWIdk-b_7#WsyIF>z$9pv3YBT=D-`Vjyv#LPRn%#mDCnUrHNBk* z5))^})=p$2heud@Am&Un8$Y>wU&V3Dw}1aWZ9Vy9^<8q$0ECf&1vo4rfh$2l=vVLZ z&Y&K3U!>54*bWm-a4KdU{)-&PLY`^5(W; zI+sTd^R2v_ztl}PidI#*uby1e$+G2$2T*fJ!fH=Dn=W)Qn&7+uM_LJiI(bn-uTQ{e6{upY-5J~ob@mHG?{xNjK}hkTR^d=# zU9ig{p`wbJq-APq#oU(K`xJTlC`*(Qu8(00+rHQXmM+B1>BvO$=oHytDz&#%0wjs5 zX&HC-Ip)}C+Mhxt=)7!2ij061ulFt|3f|CWNVpb`yZ#M98XB+;rb0%LmSHMf39-0^ z9Bm30&YJzjD&mc>k6uNdXWb^BdZf17j5qNc7GtBxN<69D^AYlckP;rC$5OjE(DsbChz^cX} zsY?fLB~%kzTa%hlQN?pi9ye|1j{Kk}wYwaz%SjWIAiPE#=X@5MSPXp&{bFot{pp(7 zz9BeZ*FEqy*;z(YPkzuZM-f2Hy?#P|kT2YR#^Na!l8`t}>_Km@Lys|E!Q9LcOXrL( zG?rvl4T`aOSsQD74AqIty^ii|!0*7ZF7C1;E_NG^| z7wgIJ-&Yt#kNnkbI_wQ^{;+&Xo*j^KWnV&3F;{V3ffv_;jZ^|C205*-=2sQD@_o2i zWLk&--nJza28d$=l|L0uETm>hvJ@OIJHaPdI<1d9%s7)`;+D5#mhXsZVPGll+S#m1 z{+Fy60EHX~T(}Ly)gJ)I=&!~D)v-bjE-ovMw>+tbG@d7C9WMPg6fkcHc>ELV7z9{$ zJ4wUQ>PD8Qk6e=cU;(?JG&PhD%s+oEQ?kc_In_OF??m#PN!FGs{K3&A7QPr7aD=M* zM$Phu;60MG;n-)#OZ{|67uTEQXBf9B^V(YjDi_%~lm3C9MeNQo`z;B;EA`I^CDGU- zVwOk8o~LH$I6dF;ki&csNyF55JkTe~0;20)KFO=4flq`##A^6(=Rs!eAFqk(I+Y>3M7&J9P$_J$ z$6<3bcwqdOBnu-jEC+IM#;8|wXsbNEnY(Vq_8bt~(u29A078VFrZ4W@_f0pueN@RN zz->XULk|ot1Mob6uQY+jdl|Tpb<`ex7+>7@4^M;*1o|bS7203a;BA=HS@0SNBiF#G zp)w8viUG8FbEqAh&lWVfaN*O!`Ky0wA~%1mMFhiHI`azH1ocv3b^2Q9n;R-1D-W=Z zJ&%JOLYEnAC1lV;gsP-YQXusy0LpDHfJ1oL!A%Yrc|I{e=1mC7$~K5jE7Sf+dE@f{ zNS8PUK70jkCUh>S@?Hn%S%|^T*SQ_d&5>0BdxO)Dt30;r&?iV?K+6S!HId~>dn%RT zYz=q-(Na(LCT=x2?4N^y`w$^dZouk#K*jpz*ar6r0(7H_wtsG3}+ta!M-oKuST}!i6&70+E z!U|k_T)~Cn5yf(T2xNegG&rpu?AG3Owm#SS8CL{DZ%6@7A~Li5bPVz}NSICikMy6r-?$wxG zFQTX?Xx8JRdEv8(LB`F=Y=MX%9HWrzqS7oAg&oF6o}LnvCz!X_;5*AwLF9D)K}e_(Is6c3*}m)`+d+SI^r7H3LE?x=O-HRnm< zxZgVX3@jWP*A)2?`p}`a8t}wwOe(m>8~*|!!U)`-yrTcMB!4`Me@^mN0^7dp^KRf8 z&{=Kqtl!~LQ#fcM*uHNNzT22C4M2*TcdKi5-A-rzL_~{)%hB%XI3kLLtw{4?)8V|X zX;a~`;MS&|hNgP1{J^S%5{iO0U{L{DN$b!Qz$KJyQ;nonYRc7S9p5pjEw8Ahz(h(UeUB2>89m?+ zyuaRhVI&xcyroWnHe5WS!+e!K2x0`?`8R_hrxu+C6o@SVk;%uv1Yq>~YiI;e;xms* z<)5FRgux<#015F0Qs^#lSZ@91{K41Vr`PadjzD>;#}qN~O;8=wo5 zkJ)_j2KTBB2~ty&GE!4qvsp>m0x&M8J_x8;AAo6dZagMU;qA`F%rc_vzs|k}sv<>! z-upAMIBtPZYPZcANCJUfMEuT!7LF#(uZCV>v055iMtUls%-jk4X%2Hv@sC+-1!brK79ljSetD#1G3-B&UQjvscAC9#HNV? z+Fq|~;4xy*^y>-GBnR#)1Jf!*~-WZJk{JsZFImGhQ06{eaIMAf4V1W6QmVqe%rY1Ct z|5JbwWiw!YG)&6>y^#(S+`I=0EdQqf)5Z;^jlA0enkfu=Xs-6MBKbbDn|N00G?DcZh88>)qi-@x?qUmbxs24 z*2XO-G%6>MbN8-hA`gLASdY8_-R0R^Uj__p9hC_v&F z5G{P}{0FQQ27|u<%b&#l!x4so?XPK2=dweFIF=YVFVA{3L2I^f>8scE*{_l4So4ij z&S_!MIn;g>IdA0$!kb-Posp3X8YZ9vkz|0}XxTJ*(S$)u1|K8_XZ zeTJhO%Q$M7^+_-0>wM^gN?v9vGZzl5%=(boyE+v?W=@Y|cr9|d^xwqj@QeWs&|wxME6<8A)QU&QXTL%@HhAAK5ybzvTAmAD6P!AlW(pk3HmP11>_zJIGR>G?}^o5 zw${uWwsGgmG3&AE{yAkFN7v65Mc0Nr1JWFygnuUvc4j8WXC&QGW+hkV+140rc>iia z3g`Oq14tz^`J*1wGRBHD)q!$L$7l+fSBaSzaL$3SDWemeHd&;t-5g4t=e@IaXmj>4 zLQKrE`jNmPbIdALLEn{Zx%ug~A0ZY^m4vwM=I0yL=IrmApLL3q1C-V(oz1j9Dxdyb zUM+m5y9VrJaF)Hqu=oqZB9EN%b_m?AIx+5AFJ<#Q=zCjv!-HrwVM(3uYG%E_qM9&P z3)T~SzV4a*@4`vuy%XwhWF2F}RdxeMqPdTW{YH!|Fuiogh|nGAWe=EN&&6q1Rr*@j zY>k8^$1VR?J07D*Mho&Y;AB`yH-6SYtEc(#XJT~tECGQRe z78NA$6F0A1Dl|ZQROfs}Dw?fNNW!j~w*`Q+4REkz-oJtsk!!)zs;Ap~zO3eb8P4j- z69#fkk)N4@0o{(oj1g?!<0pE&PCl7F>n<5>zL7V3PN>xy$Q`ptVFfG_Vi6PYO6=0&Ft@uvjiH1+3a?zd^Z-&eIP4>Zsf`)XZQlcG zuN0*eKjwyJ6n;$y5_QS|?ZPZur}Zuk`D|(lr^jxxs|%kC*L8yJoHOtI01&{X0vyX3 zX>=O4v@rQ-#}t2_%PJmos#|e+Fd-*kH&`NT_Iml7b%cy>?0@1?9%$)s9fpSSd{Tzq zZD|3V3|4~}e&W@Klqy~R>&~D6Kk`Zh;#Ly?XML*8Gn#$kgwFkvBke~37Y`fu3k{1t z1~lN)KVZV+GnaNx!SKePz4Ek(C3=Hdr9Bhe)tCJg%g2|NYAid8u)yq^B8J+r$Wi*L z1t}qm5g0BX#2c9UztGprwAgLXsd9Pjakddh9Nb>-{Ro&I7yrMpNtW`vVLaI~5!f87 zMw3H=V^F8%elx!s^bgHR{T5zlx2i{G@fq#tYDrKHJR?e)IyZRXcz0+D1V4JMBge3_ zA8sfsFBO++d5)a&FTdo#qs+SRS_;`>Xpg~LQtoo)Jid|y%X@?6tBwA#kx zh&uNXTNNv87U=9PwwUmXyel`jvQz-o(y%wo`(q@X?>uV;>|oXxZDc4NN93SxLb@oc zQwOeg%LI=aIye6pcnAz+Oe9mx=;up*u4-HA>Wt71{g^+H* zc4ZmgKs~r$o{CRUQ5EBuN5uen7yt%A;l;aWxpTawA-MaoE&vAXkhM&VZrxOb#hD=m zJocBBj)R>L>UOJ8M{2LE-SbSz$m0QfSng74<7<22%uY5ziMkw6_T~Vg^C8kZ2HHh^ zybZG(%N-hV-j!E~)IHu^up6(uCQvh9h4!R+6hja9Bxgu`lO7A~s)`)d2p#t=><;Rc zh!h1VQq$waZZ06+&b=BDu?JT9b0{+xL7w2qm6CIb2?OVJW@#m$l~!`-l1BY`zs3VQ zAxD{l9JKg?$SLir<}O3$H*S{>+YybX9Rm4RZ=okpO4mMzp1H`qtAJ)^=4D?i5%(g4Yo`PTGsjO&updystY%4Nstcyn7JpMqOrDtl+)hXEX% zq!q0=R)-iEiGtVb$7JMmb1r@~*a!G%TAOQHf9tUmmTEnUwCtfcF-Z2BaTYl**y~mG z_{o+~Rux$^VeNXQN`w;nm=J?!JvpSc5lfcTeBimVwLthu>(}=Y9#eRMI{&%~@7s%l zA&1DjK$y$KjB1enK#1t?5R@CdH#+rBX=}de{VEY6reGVh%`Ftsd=B;%ob%oSjWsW9 zT%6=(kQ626ZP}j%thFyqUsgVJp7NE99CjHbgcZT`A*ByK@=f*8x4#q}E+VuUjE;im zw6SniZsviIAq(*Q(ACZjdz4`g(V^9GS4r{6p6JwA){)M1f!9&k&<@oCK?2oT8!TFM z$21utQ@6B}y7`qGR@|_VKN1)P%lCwyh{W*r5AU%zt4=gdvC3Lq?Ar@&N}~spip=Vf z{w&TzwWWrh|LBt)k63Z&c$<$blHE2;67A=}utt>TwN<_(V$Ly!4GKx7wHz?1*@}dD zrEg!ek1kL*s_;`p=ebff%C3tx=E{fL^Lh-Ml2jrlSg0#yBfU})!$Jy*JN)iQ0>sSR zWlV%^6!Cb7=kDP0khjaVS!eE_8eOGXkARyhv#RagFqP{+a~F%(+?CUOQgMb({!$tu z8Nl_4?6T#uksmIQuJBPZm^-){plpINEPBHox8eF6TmUZ&@!CRRBZK;8%gDKQbjSL= z^=%7MxdjzJU13_{bRy?H!v;&S!-iT(NOu-4B2vI-5u&MZ z6~Qkh$thFdqaQaHYmTx6p$R;04br;mkhLa{ouGrr%$V?N4Yb~K^;J~K2>QmY)+SQ% z<+H)shbbd!;mt*0D%bLP51aaYlLWyn|Ann$wYi{FenUTdFO^_%m;4|6)*Wipxq^n7 zTlTe5>k4IZ0T!Q6`?ik9NA?OXE-kF*%00e+R1AH0tbF}1`c-+dxz>OHL%EtaAok`#H7>76}6IPn3p5# zh3fMw`xtY!(=CQK<*rU4cbiV8@47D$B)c3X>&-_oZC(w~d6dr4M=1p1t!>^sk7bPZ z476)H|43=hzx8cNR{?YlzLZ1aHBITL%hsls4bl{ zzhTD0d6*f}AhtMO%x0b^tPL=}r$CIIo?us=PrHs0LP`L}*I>~z@r~0g36>C1(E43R zRXA7C-fIGEL0v3PFHn7rSo#ob-gJ>UAhafCrn#H*1D>4slNRRrC4fB%-Euy|_uf&l zNnfdGpAqd7?0n=ZU+t-xlC4NpwL0<2TL7;6D$Dx#Z-kyEo1A-wwB?s6*A29W$iDasN*wnk}t8)S47jri~`)xz$Mv%+Zih+L)RxX?xAs=Nrg)gy+& zqmsaR`^+z^xEb8Wu$M(4s~U?NXMdvsOv3+gl2?8aZ!l#ZGHi3KZe(cVago@qHtDqD z|7<3$Zso1Su`In7^-R3T6NP)eW&V0_#hSAS;yZNg*eAeQXnJKv$v{~ z;s*nVMxGDn?=3)6i$SF_kJ)cz8PM+I{LQSclTbmA?X}3^l;oVDsPJ+3h2-4dAv<*gy_hYQd3Ss(y+_qkXm#UC#+%J`Q%zI?nDp#abn?Uj#*HZ z5OgIT%ISR~Qo8;~wc4_maP(sH(lGUmy7Eh7-)h&{VyDHL^;Qj2M>$PuKjwaJ^@k&l zcp(!JXVZ)_7cNzXpDijmp9v6J7B4id9*~}M`CCs%A0+Z+=~pYuWIrn4B38HVmn*WN zE)0gcR2V`REytjz(#ii~Nnsc1v40_`v(vp$g>h^7rH$r80)86ssn@wmohNl#8k~FXEVz zI*6KB?Dql3NS1T5r~kTL&9fOZV;;p^!|0h?BR6Ob{fIwp0QlV~i|chDedJ;HU$Eti zcU(3bk$*0b-FPnO-lMS>3$jnGScX5Ig`g zIEkCfhBw!U*^-#>3Xc@24G75KWD|%u^@d)IRFoiht&4{ibHLeXPcOerO_B59)Qy%A z_K9;8JktUUl}AJE{7ElfGrwrA@lS$WpK%<8;S@7j1P#P%WQ(pex-8(c?_0dw=TjA1Sn!0CzUBGbc1+44nXVm`XhkM>nRS8<47$ z?j7tW;dM6#zbKFikxj5dw|BXrsdL88#BG3$VVzap$7)LBms7Tg^?O$N@~bV2`q6;_ z03uP=l%p#eN9>uv{x-MEQlLI>zo!8V3QZ6eat~uNX|!wJ(Wm5L%&*z4lScLBjb1C= zs7z1^Xs5WdZy|ttZd7ocT75mXe>5B)y_wZL{^M7_c8bogKIXXIh`4k?Jxy|raHaOh zGW6X4K)I-!k$OvHYfY*=RoTa{sccd_n)YIbr_?szcg)wXld?+K;!-q<_t zDN-|4D`UIt-MQE~uzTxvteEVyVei~7F3)?lQgFN}!oWOJxz*{^9Pv&GKubka#|6oG z30ppxcZ1hEhCE%@FJOQ={_JUdcwB>LICe3#zSZH!5B6wu_s-FfHgF9{sXctLTI8;# zh2B>3Xe!o^TR5_qbMm^O@<#Y1b0!RHaGs;58upNk`RLH)y{T_D({>+ZKFG@;X_{P> z#qw2c?g!zN8etRvl`8X+l#n3aQc^Aqlp}e9lNmTnJM8JBJR);v*cA%t1>xYxqbU+7O97${@6E#&s?(!W_s zxsIzYk%*Y)V1b1=mt>kcE?b@>*W2@!CqYzN2lRSW04rf}1YFM1_;K7Dr8F z5a-g(5zuWsAIBgapK4J%O^b@my4<9qovXHQ{(OKFR-uTfcCdh1(P4oDxCU^Ju-;uPT(o${=$*ox!UNj|PZB;4e!03u-~eHI{ra_}VqbG=pvdv_v0dG7i^eVx0ry?M4G_1>TFEVM zuj}s_O3JC!9bN1CFB+4_f z)Fo)CneO$AXZvMX(?3z(Ak~+fOg0Dwgfe8R&1ld>*vWq_A*C8!QP9o347v>4Tfa{K ze^pa~sxJ>N*CSFQL%>}-18jg|WXe>;*o8IJBqNJbg&LxTZ(lE#yptO!bElT)UVr~_ zFTclq^16dJa^EZeENyOVt4c^n1U35fhy>2_J?DNiHI=3R9D{HqC9t|L@u2JbE95Bk z8soiwUp492sK_S)u&nw2NNJbGS&HNH6B<`5xImcdVzn06*&oI-UlBiLS|j!e3M5Xe zc!j(PYAdLC;jIonL~PsRztG~vv5@5(+K14Uicl- z;O~C}LB9-oG?)MYBDT^2;r{I={%WY>btWt=RM#1-_xGIbFq1w(yZ~zz#r&;*_uW`PyoFYXowDG#Pp`|H_)5RCwZEj+OLpg zOb$ZbGO}$2>LUNCXJMW0wZqZj+RD(_0NX0Xt?=V+1;}L~J}7cY$mP=UOaH{^=+qdQ zb~)+2e_tsyA)diyN5t*hb-)8V)2_S>*y8S1K>JulOBm2Y$Be_{g1$Txw7wQ~@69>C zl9f9un9K|0imwEk<)2twkJPY^7eEtYDBT4%!k#ik=W9G#n?XsH*`r@&55y-Ih;Bpd z{U2?24(y8y-}HRj%C|uHwjFyySQi7r^tC_&5yVY6u6oM8lu8m3D^hEV2ELg{$~rrk z@Y+44M!^UY>$c*8FjshdE58%zQJ;?|J{y=`%bQiNDNHB$#C&0KWh}c z=$jw{8`-<TM`O&LET^AAg#CMF_6?PT~ zh-RSHJ&u8wQ*dJEO@?96ybkHyQaDkJ3bfFE&)<0uTM@XO>R;G4!rs!Kr1j<@MY zie`wtE^l$Ch=|}S<2?f0y6AvW@| z_wiabiv$3#A@SgwQR}9e5K8D>&TA9nvZ+R_fq=9O1_SQ@8pCNFo5BGAJpJ|f{T}tH zpc*W`&BxQz_=Qy1#k-eZ6|c5m;=%=emF6kJ3W9qjFZD^GDFXiC{Tc$z9atgUlqYZg+_aq`8*WwCoGDxM2+pP%3Qi%!x6=qgAD{#NUjZN*!* zBPU)VM@;6I{W!%D-_tDG5X|W$Y+Ey(y9(+yt*l>HWQ2am|G2s&sWO#*wm7sA{l%s3 zbl`RSM=5`7LVo#($6{!M=j}spWNTvwFSYE12?DSSlIYNPm7lYORjSolc?t{SQd6f| za35Fv|G5Cc(D6d3tq-fXGDdS$f8N?7=Q#;*og6F>FU8Yu@ZX`%>4tTU!)wuqF%V(bW#Q%_Z?*wz%}m zYl!rU9=gK?C(S|qezVu^ZsCXj$PMz~VWh2IWXv(b(AYPR{nSgq$*}mM)ZLTQdC=Qt z#`9-@KU@-RWUnkh8{fGL=k667n^=1+cKiddRS_Wy%be2MHN@&35dI>0gM(v2^l{UM z7?$>{rpg;jbgrk5ccv0L!R~R=U}ylCwB+ALz~!3Y)s@MZuK5639OD&DlQ6OPb-vW< zlWZlogt2nmUmVi`n|n(<|Rm5gww)~X<13Fo2jLN z_&HFaU6`4Z(&f1Q6clcy3UD=PtC9U8l-_D)>enqfi3bPXT8ysUO<& z%Ik8T5wZvBdcJ_@;OVD8MI`SNajoAGA&o)5!5C5IKOKGj7Uz}PxdU#k05^BT%OeT9 zHpD90=F{#H3C4lZYTc>@w#9R)X-}H3d7!>-jr)m|kR*N;P62AN*ElRYdlr_e1?&Y* zH~fWxBc{X^69q<8Ya_lV$V=D^`$dh612LJ?SJmcI3ih6O1KoWY35nu34DiOkX+8kX zkfGD$5dG|I=`W3MKPYUa%x=u`iE)N*U?{1A-oZ-lp1{v&(EF+_1;oMmvC3$_-@;)4 zd{-fKE&K?~*Ty9M_nA5CT-??&*&3B7QYALuY?iIoeWct4&+x{EtnA#W=Yjt4?w)2pLp2pxHg`Bw$SA-kqEsY$y+FU86JKarf?7k!WvEa{~A)M*Xv-r0=U7_P-0IW=F&_qNMK^Zu&mkI7iVsUh!A{4$eK zQu@Vymvo59<`H+I2KZ5$hF_4dsL=G(DzQ}rC&PYS&sFNgt@5qlU_5BM3^X836yq{Y z4l5B$Y#swgkI1VcAB2Bgo=|vdGhG?5vAp|cr-s4ZX8W${(PF&663!-ne)pJ#aWA#d zy5gtJrTwkloHdh&I!zm&)@|Wg3pLuMMcA!R`<;M7@W>d;?BK<4;A&to7xSo!DiQHuX2U5ta&n} z#7?tc*2RVxIK4oh4C}*QeQDZ3IJ#9E{jqZ=a{j zEk2K589~nuMeT~H`sDXSbckJV>UjI!UhS=kQC)c<%;H*vUdM72gPjrsrgIH) z_`*XjzMEJi(NmkYBIlh;Udj|bfla$^byki^mwU1LlXYvMz8y|lJWLR+eCS$TEEOzR z<-XJge}{jCGQ!*S^2T3WK>e1wZoYE4ph=xGNReiMb;r*ztL&Zrpx|CSj`F`Ek6&Sv(u!$d$-qg{%gU=Z^S$QQ-Y<11yZNJZ>2T5Lx+nf;3zF#7yHfr z;dexS_r{fAUz=?|qN&zF@i zs`1lX6RJzRsxI_roYqSduV>vac5P-d=lZCoLKR)SFzuLa5j1ixFR=K}{NPzGI)`&t z>Q&h^ezl{pW5cBrc|<`^!P58s^VQuB_|eNd*YKsSA;OU|C?&I2zGQG1b^_Ol$;J1M z@;#YhNd-3eJ<)_@C&Mg+?c-ce^J8Q%sF3cU?~-f#+K>loPA(63^A~lk%y3Ean7z5; zfzT&qmb{do!2{8F&8XYiPsJWs53{py=Ipf1!$Y%`V14W*vr;>ngyruBe2t_kOoua^ z8&2r+7l`GW^gNG-3(+!l|K4RUhQVPpcP#8$d8ZFn3Y65)e;<(A4fvelJhGXOaDabI zhvn!xdwV{{>KupmM0x8e*FYt$sx8Igam^+chv#SnTO)kFsEO=yE6k~rH)CRdao;fE zjeXMCYPB@jXd`{ZV!#QwHjd(bs-8U{+@MjL5#Kw@Yfi^~d##f$>z74Ch4?ihB0pSI zbl@$0QTWkKTj+QpcN$({`IT*6N9>>w0pB?xdpJbxb`&j(3GAHF;8(dNb5hQQYgqk1 z{w2o98lZ5vwe}hqpRnjO2sJhEwY=mAN4Na+wO3j4P1SLyi5Qa?&FXIE6c&J3n!j{) zE$r0d^7M2S1y>|+`ceP(vws0&1%b%_x_7eXY@E*vqNptpoY? zT-MTe_4wXq>TME+yx`u_pN!{a(Jc60$;}jKMM?4mqW)ch^9M zHg@1s9yAejBNs&HLrslm%dfD0KNmr~+4FarkbZgYIilH7E!b!6=U>J(KnvOULgns+ zSEDrD)q(wkHGwa%EBxYcZCm^WZRx)vhO@SHGIQG?i>(3MkiFy%PeiCi1AYLEymfMn zOhJBEDirV-+hrfBPNz-M->2(ym4)2G+;^=UsFb#na3seet(-_lfVt#yUiw^!dF z&7=ef%C&4bbZVoGb9|WXBa3BrqFk3x!r@Ifct7al11$EhO4;`t*NI|ph&pD6T+Tg@-*`QN zJZqcnv=C4I=ep;6b+&E@Db()z$(;1!aQhxa=;N^Kz^A{NZ!5hlNQD0UIlnA;eqSGy zSo55sonzwQG?%aodCrL;b-6cEw_w88#_+a|aa5#t-@eVj!1_~vD%0EGWD}J#cfq^r zx3gDX?+enWOxc)eRslYHh0qlZU{1YJqTV}v&lFPzqMGf9V=k1|lIJ1KUb*y-w|JI( zJ8_TZwJN5_+@asJ&l)!hA49*sLXG};`GwG?z0J?_+2zc{x8!7o(f#zx7SV4P7fWkH zfyMlBX6>`>>mS@1M=O=-s91)RJd?WA1Dcir!aMr=$BMvZ2U z^~HOBn+a(8kTFc<6GJW{?Wh#9(|57cbL2LyN3b+7od836@FK-rP$JvH&Z|G?3cW$7 zD%ODhIm(gGf4c-4&h0+B_SC<8A?kvh&k|Lc8F#p17P$WLnEGg_P-Jv(HkJ#wmh9*5 z*tdpD{yz(ylq~qHH*c9PqN^q_^CN zIg*$@d_#e3>HKI0Cwlux@S6NQ+47RZ&lBh1QYl!#l0GUvK4fv%uYV2;B}NY7igJO4 z0cTa><9BE3%$4cP-C-fo4Kvo9e72jX>;^KAIdGxl9AkB^iGH+SP5#S3ny!FmbZK+; z$m28mm1@t}>(P`3(>@NOv!fi){?5tW>#bDxrZHr%+FZ}kWuw`;l&|@{`5tit@v^)A zO-!~{wGN*wB&x%sqE0ojhefuW5OXg0rJkQ~dQN_|^tg}I!n3LWDSp13u_Sj3EKSxr zr~K&{kCW=vs*B)r&fSSTm!gZ2Ge}KyQI?%8!o7^^H#f->a$ifSpM3O%@N-86w$QVa z^^Z3Sd{b~6KI@+2%3`-Hs`{p-RkVi3kc!kBQND|+a`4{xR}q5)-^m&KM|DQ_6Y~DKYyhF- zAo<5SpQCh@1S!{Hk}nd4D>7FOYbQs`N%EV;&Lely9i zY*~or%6`9Z(zI%2JMEnhipf4qZz@O#CO)Hbh~%;rA6VE>iAnO*Z0D%qaI)u_f!fNB zb;l8dON2P@4V!gwtUam?CsnW-YBUoPgwzG^8oXS3JX-7d&h;&YL~8a?-ds5mWy5Kj zTKK>>H{yYG6FWBg{`}eshG}1;7w6@lrcdgfUs)1yD7;Jjy!3Lr?VxGk`gKQ_W8WtT zrP1Y$cJX+B3XG*H-t^dL1?od$7FXOha^uWWqy)=O2Q#j~;Q< zns)SpQ}`bUX{nO&B~WS48FChiin?9;!iJg)P84WaB1 zIach^->3DAWl{Rn!$%-3!~qmG=|6$~B71BznK#nRfb}EzkHE7_q426l^_d?0a_zK> z)6F1+t4@2o(8~jjCP=02T!NxO!yr!=(MS^sLUbF!>rt0 zYSrqu@$!DzssdKxuV3dlM$jTg_SdiZ>2F8SscU-UOvv+b0=!JOvorChSB zi%)MFecyoQ-(NC4ugRN7;fX@aPZQpQnXRf2N6mU)DCwK$M|0RQ<&Cb=yS)u;>&=rKMDge~wGfaSck0K> z=<)X{FV+O5oEuVC9-g|oRWF88&!?X!lrC5uF|KPXMPrAf1`iv*2``oq#t?++GhWRM1*s=oaFWH7JN~2**3pBbU^<; z#!qId;YZ*@yd^s6XOys*-kwk?=O%$~yuq;*9=m%I{Ci5)3%#ip;fEx-KO2+w#n%~> zg-=m6A5*W{H*QE6EkJ*on>yL7h^XCJ!J0XEfiu;HlsHUgo z*RSFOv*iRJc4PH4RWm{Yn;CbNou@N||48*i#pF3i{N~u}7dTL*$RorV%Wq*`X3z4y z1vHyg5{3KKEHQTXfkWn}9L>v1va@Mt^P4NdtO>8yp!;~{j>12>HRUFDy9|_+)<)c& zHkL(GQ)4?-wXa{Mgro+%$CqCVXibhFIBge{k#pVsJUBT*Z)steZ*lY%Oz5YZ_4eDD z?iVKqsLa+}?n7Je>iu(uf&qhKsN$8b)TzxtAjr7fCMl1CS6pNg?!G0tEEDzn4f`I# zGVDn;cWibO?yz7N5msk}_cv*9iNLg!qABMdH8V$cPc!EYrbkv| zNgq-1M!@*&`YWKoHdRL!X0<$C;LF*&YyXfe-PNDMk3op?nZ_SM8d!;MrEnV6#yK6j z3>rb6yo(VIf2FBRP@DGd-Yd@~=A0RJ^6Q^WpWjLBgmpGhv(b&;v= z@HYt+y(CM7KjVL0KKb)^pvcvg-g4-#Q$a=Q^Z>sES#Ug?pE}`wsl?V$4aPku5GCtd(9q@?0 z^oJw%toeZBv^6!^&jK0ts9Ro_*d5#NxVEol8?CQVC39#hEM3Q3%HC1jOG3zF3+``+ zFHSMHZkm6hrFbnYn6eW63#2t+x2NQeezvU-_kA%!D`53ljlTcQ*aXd?jA>Z7Yxr|PIuLf&7qh9QNcnN%($GviQuZu7eCV|KDeG)foi@H)Tp}jBPeX;Y|-tRDwm96;A>{V$lPz4tdQn1$@ag- zoUFj=pAZ(}M{!N%+G&`r+e(%z@zu+MXn-(`vpv%VsC*=uIT6CF=bQ4DG|){6J?yf$Qq#blIJIHHU_KN;nMn4 zzw3EnDbM#%s{su?!)c20^!Ao*!PMdDNtdaQY(UZIViVd}SRB6Bjj;>V^EdtD4|kC_ z+e+$We8F*^ILQsL9(flXu1cK#t?{KXocTxR#t&@09?Q8Tv_wx#mqU-=^4u>Q%3eTs z)m}dAI4QYH^_J{lk+CsWL>5KPXZ1aL{Rg`e_otqQN~R6@8qU;_-d_W66uf~|nC0L*P#2kYZiK5 zvN(wjpXu%>w558cP|NmHntUEh!%a>}ko)I@AF?y^bx!SKe==knr%H#j2W5VkY2naE zB{pInle=)~{(3XScr%bM;UQnlUfT)^H;QweOt7*@DZFg!GslusitSpcrTS7HN_5E% zYO1`>tZqLTRL0V~znNLabI6hFj6%B=DBPtMo)6mO|33ULY<)`2_8!r0Nq~IlO(Xh4 zhSPeZ)J$6FH-;>^I^bm)t2O_5TCBIY*MRZ<+9DHcDtF7fFRQov;!FYqyFyzz9xnHxfc*m#=?vqIqhm&9Kyc0T z=S0xEeen(Pkr4I{_`X~7G2xT*JvT*aL;3F=B`fl1wb+g*^Rgk#?#Bi=lS8k;9W;ZY zFt<@!Z~_GfIz5TAQ5{?O+EDOb&cD0tUeqKl9$&$CN65nzy5eC=s&|RVwCEg%{z0el zKJQF{LY}=@4%owIOy3~izY~=SeGQ<_OJTp3-nsE#$&~pZsDywdvBM0z5b&aZQ@+=S zS^pneYSqwbr5Z{tM4pOD5Sn@ ztZ2Sza1<+a%69*KKx#SSla_@i4+gcVug8b$I{f``$Db*dx(-Y)sZCb0$LM29T894E zUv{h?1&x$dwehSfh!oKQI=kfk_H0LTj?GFWLiWJf_!@F;b(iMO7Y7tRdLLn!o zT;0=KYuy6t&!;`y*h*tyP^YP(C!$bES-rn?Up1pmtbkrr7@_xdW*4O7VUY5+bz; zrjihsUKhDf^rA{3C1HyEE+sHrqjo~OBa91)nkdu^7J$t5$b1z#JB|bjnKs$bkm2Rt zV(y1Vp325;BaY&re7w9xH0F*7$&9$lf;N$8xn@UfDJ36}F zIFN?-Byj%LTjO-3e9vdQ&k3=ZmoQg2? zCptQjU5~z(IyW;b2UgpGR#1YN2XGEAV$RbIH?;e%?^cesgtc>{uH(;1T8hbGfPDZw zUqGn_&>Fri?AclA%9dV+Y3Hx}!}zEqQ2B5~jSdR*j zHX@(LN3OI)4OWhoz3~+?ME}-1+_u9Stru+A1fNb#y+cls{if*ysTB_v^>YGLgqwyb zo$$;YBgWH{yO+mj6u)8^U?@BgkIy>i``c%;f&mJL2!JLBsYg#1zGyXoMWn~y-j_cW zk&r`LTH-%9*6N|I6ZV9WdmD|vjYqt_~Y zjV4RAI%(%r@-h3bkf?N>RuCZvOKH6JM#@j@6kC~ZaGF5DQKV>BGQV9*!Vujw-PIc| z1g1WNaQ}y+H8X`<{GlOdQME1xa73O#%Y%R~W!qqV;Vh(F>*wo+V&QzKU$mebGeV;pTFup{I zaM-qWhJK>f@}FyBMN}{R_uY@k?dDxYp4X<>Sh=9F z?c9wAEAiiZp4czIJ+!S&SduQ9S}$KM9~gcf1Pft$Aq4=7`v_7F23gtux%po&G~3w6 zx^FBJcmY>Zi|brt_&9GPp`3)K2-S^k{}a0a7?z_-Q-&}EfM5Omc#F)!GvWY|IJ=}rzjDCZ1N zD{tg{yA3)HvCdy>2%)&Sm*z_PxQ%H#GA&%0WK8=hRqWi0(8s~ zJ+h!&4)u$tw);OAb9xLo5^-fqn;fh#t1b^JUV? zvv`*252=!zpQ75y-PJ@|F=^z*ISEih&+Y$Gz1E@Jqe%Slh_$y%2EN;)=}qNQ7}VBg z97jgO0bw6ijpCoH^SqE5WDJ%Icvd_Ba;wW+B~%G8OvUF(|Aw(OhlwTI(FOTS(~8V^ zBEE=p-|yPcM7)M)dyWhYnAPav;(JfW$Kmp*@z%-lAG%M1^*)iA0BXwn znp&I}&Vt_Y{g~~a)n=nQy1DA*pG24Z+i>x8yDY{DEP{{j>J8=n0EG#lb%^8xObbAo z^f=rAya{Ccm7X~bD034ye&GCd8uI#?AXytnL}**(JN{}4`dT26l6tbNb$k|EYT_{0 zfB}{Jz>IX+lyYE!LCs6Y7EosVFk)^674@wW9?X;8q4JP+{-dTRfvBtg z>0zh>#Y>^^!M~0lz#g?v4?zFOo10()UbA*3(-0?xH*r898I=<{89A}iq*ajK6FR#l z`AtOk?jz4{0gT62>gS_x^b-Qg`_Tb2u!Vl22W6|GT}W4+CfSM579di>(UZ0N7 z_xDuB*dz5)DIkKeR-n(Ow6C-E_z|HLZhnWx2lTA19wkY+*f;U{FY;!S9X4Cfk)j=@n;9 z9F2D$RFuq`5sG7|6swB#ST8@AkaSG@c0OybaVKu~en*T%eUkI4=_B-A)MHO?6K`T7 zi$5LxQ+;z+1Nc*0y|XjcKl@g#ozME=NdCag6u`r1s*-0!Sq*H*O1ro*dwt@9S|ZTZ zDo?5byl&8a@(uV=TqQHH(4yAHAizx=U50(|!ymLP6})k9PCT_f#kL(~UpX(pSWTt`MO^>7id>&`Wxda;%J$5$sv z`3?W@jI(Rq@|S+If0%Ry5S4*w1N7G^^g7L=@DJOLHvp70U}6yat8wur38##PARKx89UE6_PtYIUJ%!9aoVZ@E0@DRnpi)aV^8t8W zfZg1xtWcW?R?*xpVEZX;ovUeE9-27ru64MImrkvlaaUwq3evQ_CpoIs=5}dUALQTS ztb?&}fHri-LR(h5ave(_JgA!?cE|lRClxL>fDYVHw^Y5b5kOdZF=flC5%DE=ar6>N z?UH9hC}#&ar2dnC8FZZW$WV{=&uq7@B8c#$9n#u={6LvZD?n!hhQvQ%)Oykwf%U!g z@s361=T5M%6aT;ozzYM^IsI3iJ(yWs%f>?Rr8%whrk_8wz{wT1La&p43hIQiCWFM6 z5Z&@I9gaYK5=PjhpEQ$TQM(LEE>z$F%%RmNRzA)hNq~jmX1tgMrxyu#21v-iXXzyb z-q>sN-9CaHjp8YQm)W*IjmapjD97^UL4?|JhnFZq1&T-~TXCq1&U#(VH&~yQnjv~k zM2nb5dxzBiH-5CE*TEo(LBkNe{G2j#C(%PRTn;~kJm=4qq4TwBl~9UKy&qcKVZTSS ze`jL1@>NkV0V_ijtw(!)MbQKL-YdbEDkH61s$y>l38d`b-oBe)d^5wlGI z+*TJrXUtla*`TlSmoJvVKg8z=BRuiHM;r)XJ6e$J{1%2=$-Ma+gm3s9jAkj+ywkZ1 zAp?2~KNQ;Sk?xUgKc;Vw+kPt^5;g~cIXcTd7vUeTjNkW*U25;|3*Xo(Ml9D&B8*^}6AJzbw8(n1k6)f5R%<`gJzEPrfXE}DvHs_4x=;V$?DNbE; zzT4v)qF-kodc{Bd>YN=YtCejyi>9Lpp|JRX!8L*P;M+HD@fhyci&g`W6*tYMYUbo7 z=O7-@fnib=`yBhQfQgsKJ<)i~j)OY)(^A2M2A(bex2tT5xV3FVr$7UvYYvn4#8a*`R z^iQCx>*F;W`@0BXN)H@F`;Cog_ooML4I1`k{hcqRL1H|#3nF9 zg4A>UL=XVm%~Bk9E6J_y9I`RrS&QSMR# zBDlHTZ?JDf?>ujyoBQq)k?9+uLUjDfy@}2AFJQa#_!%O%r9QVk^C`LsB1oF z=gSu@zpg$|O^eR5p(H;ryzJ4m&wB$Ul3DIJBM{T^xi^jf8~^IH$Z#N7S9pE)`@!z8 z51B6F+AUj-3mZ?R(7g$`kQi(c)VS%PYFpgi*nX%z-myZ*tI7Gg3CVBRUaS=XWK>&= z6LZdJonT$?6F!}4T1Nl8Kw;r(D5Bv`+bL}Ttyr~CO*_1cAD8pv??&#b3|UR)1H>M!P=YD{4_I3H zO#dUNOSKBk4Z@zp|G?DTV2fX=#@DmTiO^BJakkQEyx1^Si`R@=zwU5gN!23Y{S5N) z`MqE6gU;v7eDcYgjDRqZuUR9S-`c!rv~1iNumKr%!FBVUfUl7ErhV%!Xwz_QZV7p!hgoHp`U|Fy zvV`aRCjMwe8ZNrA7*2U*s*hOxC!y9E#3nen?&b z2|&338|{F><5}Y#_Qxn|5gS_!gVJE`z^uUCk$StV5J_th_f90g?B$D=>ig0)^yW~r z7Omlnm5hrV#sR*2@UJGi6PEzu#}K3b>`7h?2Vm81W7iTLGt3)W%UrhvrVFiG&x(|r zJx7)cL5@eOeI9eNgutf9;CkBGT94B&Q(i3I@`r~t7_Gjb@Z*_*g8}zaws1c!rqkNQ z7#C9*GgR`^X$FS1M(6h#O-)nADo*BDuq+f@{dQw>9I=?i7b~$S>7lA6ph5)Hv)&BP z0Rne4f&IQ`@+w@1FiSJ?@l4H!M(uU}_HxNxdhJc*Qw_Iv+CN)-tJ9XzKt>6b)M2AX#+usm&#YmnQ! z(}R)Ld;9Huiv67e$fcS3A*iq5#_alR(Q^MrpU&>eV0liTm8ILhyRz@uW}#+lkYRkW z(XOT4%KBU`9W_hLPBWd+K(qto-F58O!xZte4ux-)VG`Dc{~ zj`c&aPiM3*<3xJbDP+$&=$ z%=9?TJQF{j`Mq)0y_b~tCOgwKI-h$7G?|5`t%}9Yo|e5yAOJ+hEDq-K!-%dLIZge# z{}O5Is95uz^@H(}ruF%&2=Xv{DNOjL`)3jYVH@)Y@d$%}QOj36Wj4JCl#Z_9H&F;u z#oET@V-@C$K2#u&;GJ^F=5`{66g=Yn&B1fYOP5s7FlJax@EjUTjWT*Oq#_~OI~it2 zQ>Lcgiwr;yY|e~Drjz^2bPreU$lh`ct9>;0<1xW^KPkR=XdYY!EeGPd%aKXCT%*r< zzFo@+%?^$boNE?1URx67z0kD+cvQ=pKHOW2T0KNIB!t z#Uo`x5(}_AsL9bZsf%DA+@LBHyyeOtof@$aeBDqIruN)E6|rMeja*vD30e=$Ak{VZicaJ zF+B0FQX+~25?fZtO0T~wWfj=OQeB%yO`o;@&RBTtU`%@9{QOYy=oa}(X{nz<3N2-R zaBAK2uxJO)TRD||;(TT}JY!bQo8`IHMtV`Y3QYS_3_IHbX9){wzegc_rrXq3TK(Q@ z?W-2kn(>oZmx9Oj$pO4Vn2O!e;J(tkml3tLD7|0I67DZvFW^;Wgbyd4>CNmodNI)4 zUN2ixmN+jlFIeIVK@1be?XRbtgT%Pw3_5=sbR;0&Uyi@pCxjnw_Qc)4{0Qu06^<6@ zlo1*UtRtN}MLSV1#`{a-YKN^uZ#JidP$mMPd-SGZ=jJAAjY9g)*}#n*)`PFcJGOxD zinNba1Kv~B@>E?96+RM+{Tdg%u2aswrHwkL*TY<&k?HpU=%F@J>f53X)lFXrIj*B`ehgQ$Nmu#K9(Drr8pCC`!4PIr3VQGsVei&_!l?UVHMth( zPLL*`k=?0*%`g1}z-&5ivs(?~?};S$N`gx*9%S{U)>=vpYDBOW5wjz21vv_CZE07$ zs9vpF9@v2`x+Lg87mp`tPheT*|Hhj8=`8MGduD^a&dDOE+9vj{$X<4c5Te_HY)}&ib;%$nynntf?(c|c?8pw)zBKtBUH zUx{tFx-=@7@$`I!a_o> zjJqO5qBr@{*3&42YjehRP1$M_WeMv>YR%k)7E#pq&bMyp^KtBq$eQw|!>bB;#&gZE zli*!6*QD#l_eYuRo1C6O?n;qBiwe7VcL0zAB)3pFf*gd)KWRKuiHA~uX;gySd#{s< z!+xpYO1}?NGkSV);eH_=OE;gE$cA2xg={=x#i9uXe>XXYQK-L5e_V`n%a}raHmQ?gb()sjTa6Vgj`ln z5x0e&ILYr0m{?z-wSir4xTsqzhociyx5fusG7fkOZm#*wRUKyoO2I|C$Kh;rT9rYa zT4*ba5muYyR^Y8T@6&~oF84bA(#VZ`&$TNGV#eb&>T`%QC0UXNe`@O|_oUOdR08va{8Tol~Z}N5&UsP22*^lJa}!(w)t(t{>1+{g5PepFm{C|dQzRD;Yu4?{>p6kx&rF;}s58oPMlGl}>LmE=9=_fzGU z0u1^m#UHucSOd{IQ|}UW4h_XbUdPe|>bo?r0gLCaN>Yvl!q>){B&<%^E2 zB*P!0pQ9}G+-!|jj0OZSQ(;INntR`yed4)skvQ`sTvB)@FNRHmF48-q`<$I&U;Dm!)WW&rJ39Ur3PKRij;mvjq~&G zps!K(ekTm<4-MYn=Xy3Yn%{9C_aB_FOOJoF3A8Gwh1 z?}U8bw~-x2E~Ycf%z1_n53q$^1sUGVWf)#aJl^`@e!d|E%gnS|tVvnp6ao`MX5w=w z$~o-w$w#OoEunK{2~=hX;VRNZBU`8hX z_*pM5|;?pSGgVFa6%) zq;lHybf-FydenpBOmwR4bq{!5Ejz5JJrd(0SDg;K5{xTlzQ+}M6w~Io@2uMIq9Abe z#j{z}k7JL*i$2v~0lNuwMvWHN6etEqwRC&`?yKlypBS5+Hfzj!#%zdj@9_B_OR3pa zgB#m;*mlFa&(v;nelnu%`OZ~&t^QVfYol`r&HD7nHV2FWOR|AGUrW*1@EtdtH-@h* zjm1*J-DUTdXlouO1V7W7dNp~ku-)U1j-=6K5!`5d(j5)nBw~H~@QijB84{cRm7b+a zmC3Z>l9D#;h;e*NV;_aG>z$hnybPgixCZg+PEv?%C&9J$lEzZkHP zUCq6<;y=k`p*cYY1~lnTVI3X(3%ieHaQwtTSFSPHQ}>IpZ?+zRft9@;ymOUC`@851 z@P+!bj1h0Ej0AMU)WE9O6XDvn)21~_dE$E~Ie$1@*^lCxj`Z`~CmT)%JiMDUiQH>B zSO+Z_6Twv^4+w4;tc|#si<%kp``UA8SLr#)KB~kOD>+6r7<^t2821wp%qrA^PyUic zthiRR=*y7rrZMGaa&zHm;hDoh{>rK1`6}6U5E8cz`mI$8G!&T<-rEb*Bv7cR4 z^fY@GFNv}`AC5U#RNtCTAuRCc;{=O`8X4eTa67eGcO``}FkEWY1=xM+mC+O`=0>*U zA1hK<7OHzbopJOD#GiiBGz^rxvpXD{j6XykF{@tdvC?D2Jy);XXE^LuU0JH>L&{6+ z>0fILZbq!Z`8Z9K1(LcU!Nz{=aKzn-$KXuA0R$=fZ#8_$flrd+7Fp9Dzx5Vg6niMglxE zQKqVjj%yzXb^;A;=LP8psn?bn*kb~N>+$G46zqd=@$Ie;0k7&&Fr8{}7F8Amu8BMj zZzDg|?V#v9MsLO2zg0l!Nu;zC%>RE0stM@v|3YoBWZRnjiwp37x$hz&c4*+Q#qSM86$7@S;^t$!c5%>S*3zg=cK#&knfqvL7>+J8HNL z#YT~jaf)WE^VI}g#1mznijeO$-6tIs5i?hrM6x!6?Qf!%%3@50lR$23hC1T$r$iCy z6qUCgk~w>4+s(_iburK?+9~OiMUw`vXG+JudRxiPU~OyoAk+jVxK7z4m&mdRmB;Su z!Yx;|y|w%y*Kup1Jws{6f24&!|MwG*bhg-CjgrCFC$35o-6PruLdBlNc7b%j&3}CR<-aD zXf@B4J{$A({Nyt8<5}$soG{AyXgs}ZcDz`VRwJpn@vIA;nA}4j;R8+S1?;z=Cj8{NEVGr(bKbGDVU8WGhT3B3vL7j5-DlTw{GWJ4w2i}6*WJj z-7j=FQu=G6+bc;XmvDyzXd|9GM-r&AhSwcll-M|uiFL9&qkxl22(Lwd+uGHzXMLL{ zz8M^-;-{HkEYxh98RW9<@4!j?V->?NNLyvF-Zj_&KGC45b@|+Jzz2WS0RMs|OA7ne z5=Fn4ifG13W#~e`itXsm0G4D@ZREGglvgu=Yas+u2xume8CJ2;c>4?Uw^hocn5W=p zCS3J?INsqCdo^*HsX8S*F#8%0(lvhm=PP!Es#o$PD%7B`W&ZX>AIN>FJ5Yh1*miqg zkW_9c(_&xNHFQpvQ#+KqbIZfXdeMUO(d%GkB9w#cwBONpbxkRIY@9ya!%j*2V^mKmaBHtM|Kw$Y zZb?~368a{6ois=liOb0uHo1ONTM^W2UWbXKq@;rHt6Iw&U+a*R}VliJ$j^n{bl!pO*eSb@1tju zT>z1S*J?*PiuqwubZ^Ecuw4qe$EKGs2e#VWjX9a|7ur|2Y3h?Z-E*+Yx! z8-7WTMijeD-)s9#wC7=>L@5h{Q`*?KSB@D!TfM{9_K^3~Kaf=Cp65gs8%izFf?&M~ zVl^{-2L)14#a;ID(;KK7wW_dwY1mL>+xTK(445 zM>LAw?FC0c%<>f+_yFs`?I^L`TxPlP-ui&}d7F%t7Q3j%mTxm$mJ~O6a@y2sG(N*1 z#@S{N)9zcODXnyuqcm1J(-4_fq4jimZzSy^|}$l4L(8TTBpMN-Y+qT=oNd&PHNLe^c{1}$@aKX*;p+ydJq ze7SNf5$wVvS!X^EC(oq*{v8j6e(v z^H)-5of~F-LoIq8k9NGHUV({=tk~LO-Bw$+4oApc74N&kV9$>8ru|9ogkYrloN(H; zsN$F*8QgChfS|rmZPa>~y4*KxIHzf+`!c*F+jtezEch*h-Y{Wvh(whf__SX1r-9B7%nETzzJLs~ z_>$x859R~})I=VM(ebZA^|%tBdm6tRwUhoXv7r;|mnCNQ8dW!RY5Q$J1@jWAIqcKn z?}nAdv|=h*qoeQK1S(ZNEH>G`N{%s(eM4ZQhc|F-&sDgLxaNy9-QoZ2-16fKA2zI) z)_l4?*uoZ^CSbA(S9x2KkzgSb<=6#JWZ1QTpf0)b$9s!S%(tDaw4{=%TFDCt-+Lf1 za8Neum_$7L;0Z39H#b|}3XAD8GJX$0AM4aHXm>#&``2rz=)I!`(W=f%K}@T7D_=y* zlnR2ynnK(m?V7$Bq2F&0^tYn~UY{mQ%2`b*VJ#q^Z`nF4meI~gS9YtrVGZeu9rL}5 zA{>uDRZE*bE=akT;HM`_n|QT2po~PcG)IVS8#P*fwLG)`VRu$#d37{s+S1Z+rah3u5 zP1v@$M-GHh+d2tGieGneQy45fM_v5_3MV zx7dHp>-JII?AQ;k_S(}wRL}QDeO6_AwFsh<%qjUtQgM7-Evy=U+1~w?!7i%q zB^UP$b zFG}E=)(M$XM1c?H&(6_kEkh>?$4+r|T9?lrBVQH*Wwbl?YM)UB4BY>q$HF(!%%Ef+ zS~>?u1|AurWEwgmY3?w3C!+ku883yK4XOE3vhs2$_OLhQaHIFz=f&rgMzTUlk z(IH7f+y^W2(0fzk zcER{5A7yYmPh2$Qv@^f&1r5DQXZ++Cgiey_pmml)(V{$7j{ROdUYB9zAu)-JVF3kf zm3yiB-pvodI<WQeR?76^E=G2GYt*ZC!#*z&=(3=vsUk{5wofq^2!76<>lsZktltg#4A;s=E&Y>K z86hiCFics&wzI3Axj^PlHgXJP{mX2+%;Qp;?g&gNhoi&vsPp3K&IdMd3N*GSj~p)L zAdwoI1>c}n$mI9*4TeM>qv_GCue7h?t=qe5VTv6tbi}O9g>DD+LQX6fUf^%d#h72h zh0u$T_gc~LeU+%94P?%0q|y|)Wj+{Rs+m5?6#r!PO_ooR^Z4!@%^JTk{!B`M(rp9A zy!H+aTxBLyPMyEKb|B%iX@|&&CsRem)^%*bN;B>|97mTUwdeF+VG%ZPt}&s8;XS_x zho-^&>FlZtEAWe#u`6QFYFv-8=UmySip%l2XkEukAg>;4t~e8-IQhITuC|+ZNk>mi zY)GhXfL-Z0<87z{&4lwBS<+CHiQv{rxypZ`ABKr+Y+74L zRu&1ICMQ~iq3{m0$P!ZT?-B_(!rrX(6n;NX?w%g2t-WgJRzB}qEAO`WF?&YnzZl49 z_lU0E&z_k){C>axQg^4YlPe`AH#P;%XRbC_mH{vTwE*L_4tDqo!#WpSveX6cbf$*tBY2gHAb-5 zhU_c*3^5uet#8RGOHQ&TJC zNce>%@u$UpJ7b>Hccb2|H26v+-KzFg@Mc%V`rnS?oHy!w<`yGh|DX-smK{pkaI@RG zt}c3p?(z6Ge&SwpTZpHny^Hj?!>N<4*De!y9E_+$D3Y(VywO*V$1CmF6?`W!$R!++ zD`2xa0##S<`j<0KEaf2nv*z^VkPip$RTve2F#QW4d`;Q>WJwAUnQ2!6NBT)&jpFzq ziiO)dbnMNljk(ZP_p)73;6qG*lv+1?S@k_t3Ru9W$zoSwb@;%%?v(R-x7vbOY~O6W z$#iTDB`r(f8S+$-^Vdp);-j5wN37qUri<)zqq;*epuEN#j=y1CZ?M2)N9W)h>}tcB z8kaKHv!eg!@=UY5|F7klOy56==#}*O7goafef2bTxJxo?0?Bu_wPaoFaV?Mh_+p_Y zVXV-+WMyqP?|LaPM`_;kDc@3tI+luKYO1KBNI4;O?~>{TTtp$byYL5!$v0N1C=LP6 zrc{s|cJ@^_%6kJd8UA>V1Wtz+eEIrRV~Sq9tvC*;z&;9xsOmrYMquXTA2=r=cpHz5+fiQL%QGQ68kh9}bMtf|_QK+)r zmE;`tX5x;*sh<+TU(xLO;9Ia?%5Z+oGtdz3ID=1QX~z-!$odMi2ZU}8APFT^%$aq! z154@FQOnY%2dyc3Bq;1}?P#vA#pdtdmWOo-EPqM1{oJs=W)HCwT(>sy*8BZS`u|Lp z3m;bg)fsER5?3Lgxt7TgZ4V$rgGyR8#J%#yRct3})0ciH^X5u_4n~Gf-qA1^- zIkH{8^043~MpWNA>g!ykb1FGyTMp(qbC`%EQ*M-mS&c7}MN=O#a+y@^$07zf5HSJF~9<^EiUMuzI z^~bVUJ!*nCN&DZO%9XDz`(d8fVdwNrlF{*`fs``TA1^E+M%xi$c6~$aR5mMuA_+X% z(1AC;dkg} zR`bhXVcqOGJybnrIWgQY74jctNt!w)O*QT^v$)QoGhX3Tw?~ZS$(zsjx33S>iw;v; z6R+@R`R?{&y;dMO6_R-=tnJJ90E@)>kF8uVyo@ilcc=$Y&L7xR# z7%E!kd^}wooRvp0zLAWh(z*|Q05&Bjje2|v`y{C3iZ0JRe@ueXjfQQQjT~<6UD+Oy zJ8@(QyxjX;(}Zq%@G(V3F1qLai*Mjw8yen*80PV9GUBwqE*$Wy`T5S5tbjVn8B>R} zvwy~}`$#wHV5IuK2t!{rK^N{rltjeJ_8bKruPYKhg4ho+tl zORP0OP?csmXB2pEnYUnxs&95%!=yDm;E|#qB4bFLG*49)NbfJtLTb!p69sbQ``o5f zf__lgEj!%{MSa{|{E45NmXXw%MN}vWSL)a=!Cov7lB~>^f(+42yD@(_`E2b>j#YKJ zKD7&7sv?2#RJ+TJrngA8v)|JV@Ve!v^*q&C-S#n|CzDHepAl2n?KsKSO)=oph5)0Db-7cUljBUKZNsK-$H!AU0DK>s)`-w;X!T{d>p6CWXoI62 zOS>T<87J@a=Ed@DK7B-^jIyXoTQcrgG@adRgA~*dSfSa+c19W(kHJSb8+G+_IQl`+ z^3~P$pQnvKr3ji{3o^yu^K#aIuVWL?J|5~vt2PjWvsraU=X!;e@hkXUIDjO2fX!v< zbHxzDnV&PI@HqPHaqZjmS+sPvN6$I2vzX5b7U73=d{Wn)6Kk}-bN0xC$xpJH?mBG& zRtK!Tva0grn+*vDKnn5hvFQ`s=74b>3@9>kynLiWln|RjdAlY7zb6z!L)3jEMUuS@}2 zwOd#ux%ttleB)OS7w16lAwO;v>F%lU^0(j(1aO_HIG-z(9YI$WGJSfgAJ{AId{q{8 zpWDkFdVJBdITdNev!N$DAFy6L;}e-f%cwIKSW(6$+7GW~H&RBkM&&?RePo={KauX* zOvt)FhpZfOC-MoONkv(TjjwUixgJKgJLhxu;X5S_&!3x@1dMu^$)i65FAJrZo5gru z)w8cJTFl;@*27FxOFRxI(1nLx8z{-?#-sfz$>)K?N9}H26)PZ8g{6HLl0nrxa45O| zBeF*6^w;gLj2g7$mY``n7+K`R8%zy4_OS+08S|9Jon|sL@F1S};67Hvn9eg6d=aK> zJ)|;hn+)xCj1=0%Xs*Tn=*oRHIy}`xSTeULXjv$hoB0-GJ8)qVy-!oyfjotYBap>W z>lBe8uj&NUUq*C2Up!-mzeLsPyT3kt-|dU6B%8@R?49 z?L(A&s|smsx^fT<)P~p0nZ>w)xq%}`dgH_PXar_P9#tl`nSftHbpT6_-HBqq!-;VR zEw-F>?rJh?sZ?%rT9W_~_i&t_&cxY!;$}DqcmCFp!AWW8w|;uS_d$-3MfLEC`hlNX zaDgczPHtJu52XHP0aVgIF@K9;(ELjI*`}4IsUYsrNJ{e7&Ds(1>%93!G>X7j){K-h zID2zK>L}o-TJer9rk1B!`lX~;0kKpu58q9eg%5I(#wM1n4at|QB87qz-_RleAr!A0 zgHA($XW&rnXV;S+f8XWRd_}G7)901=?|6mnf5$6MA$t_}-=K^0(*hBUyndVJyS&J( z_%w5i+4bQr@=D8v$%`oAD+n~-{IiZ%EAoEfO5@f7MfN1vT}I5#Q1`*U(S>(yy~AwV zsKAUPi6mK)rO+f2`*IU9l)^0&@$Es?hK$nRo;E35z2&zfL($Q=7;>}BZ8)4uT}g&r zsYvs%L{4usbAb||u~Uc~6q{Jj%J=|X?8uM?g)hVnv!2d?{{W6Clcz-N?+IyQ+*2+N zG3fHED4Gc3zmw;dVl35evY7rJpfD_OWh#O9UsdC%$L7rF&v6$A;$bUyGU~fA=Vvy5 z3&m+9*n*1!>wX%wFy=BVbQ1{OM)C!U#8XRQZmn!?qq;M94px$l)hW+XZvj;06qNnM zph%!*I6}UI2eE$|be+T5=*}|;tSxG357E`4h zYN_izzbj`}K&aPC4k**|*kWN1%ZtwDr4G>tmkkmivM^{TW=XqE-7nyCAPLtsJU|8~ z{mfLnc3`w63Ozw%JGZ>I3^ggElK_k#iJbXYjNT~HjXs6+&yMA3;e6GpB;{AHPgBe& zf;aw_o@GHT(}@>IH=cIdbukyr%#-|j6V#$!9zQ9G8>A-pP43EPyGq|qN@2N9(R59( zv4XwILs?cf;XZ!&TY|QK)%4hmXs{MKOULDb{mictsqwaP=y6A&jCQ=(8M;6}=Bd_w zDj&Sw^V?>^p*S!M03B$mTFtJfz8@ra{dpG`ar<4e+k|@lUtECLUEMYHk=w`%AOTQ%Xo(*6Q!16d`S|f7UDxJ#;L)ydqnn$Mcxm;2g zdsgOROf|gLtCwdoH|qFh)K*M?mz^nlMLg!yzkXO3mNWP9in}@e5BP@(mshf>c}+<6 zbTV);>ijBz*6EGyB5xJWQJ2i>9>)*3e9AAS_6%`LKRR)m!bAX#geBU}EP72k? z?Vhg(IZ6Yzw!VZ?P_O1M8+Jx{KZJwX(ndnO@+}vheF!Bg)J9j%(x=(Q{X=T9n*c%c zk0odKDqn%aPKt`&B@c2b4w>%xe7>Ss-uJWnNJ^S6-b}mCEEeF)n2&LYC-SYPFx~=> z%guFbm23-r?`3{HhyS0If694SCIVGXyy`xOUO)%a{3-)|CJ()s0#v$}?lNgK!pAZd zpCHHIuX@LKf$C zcZI5SMb{FVCY<1PBj}E3v!7i4JjAJaWjPH+Jz@5Hd9=HV?FkHe@9*?ARrJZ9eBEg1 zH5TL)R~FiC9nF3mnH0iFV!zpFN%DhV zmJeV5w1W1?+o8k77XQRBu9HFICa%~2tG(}vimKVx1^q!q5d8&}tdc=Mas~m(Ip?4x z$r2lApixAWAd+*AP0krwM9D!y)8qzea%fW1WbSI*dyjqZJ^PIFcpq*(FnX}osx{}V zS#wr>^;NCwRvo<-^G745v5)v}!1B=ZR!3o#t#VcT`c!qaqAyUNgZ-BMq6TM~-4D#D z=eru(=qHSGdE2`D8>_15ChH@!HfnC$99-HFk|xSH7MJf_p5Cn|RnO8Nq&av53wiU@ zQ23SDhFk5zug}+Kj@|k9jR5x=%@B(JE*$as=YIl^@}oBiYH#X{=n zNtyntEGbYFSm~9 z9OJVW{6g1XQ<<)cX@;P!(SL#Ns3mrv^%1P{UQ#tRPK*rNQb~mwX?9zDv)BsN*EK#o zN&kZW7Y!j7$^`%csLO;uYn@iu3wjinc1V3wKzNujFVlcg?4k5O*Y1e|{WxnAYwhSI z>z};`2E*0k=Q1ggV68q*QH!490c0L{t@zmtCg7~H#335fC%F{jEBhoPubo`x^vJos60jku2djm{t;tQryRKlZ=j8wRg} z5ee11<_Fxhn^gc@GelLouElmh^sqbyrps?W5Z_|F{tE1_=PcK?r|CGiXDi+GFCZ%P zMpu3HPRo5d$V{w$71eWt>3uI)J(RL0;b#}^&is*AfP`t{9GzfhY$^Y-$(+USv3mz4 z(P=FA&t1Yp8J_U~Y?j6ff@f|Cxu>z_!h)3&dOz+yxEImR_ONc8kXY{+3g2=lI}T7H z=N+^=09X_LvdO%;PQsfd?h9JwqLQi`si-Wyhs5fZ+>;=DsxAb@I5c_^%>(Zo>-rI^F?brRIg{u8UC#~3q7O=7 z())Abb_Qb)Qr?&E>`p}aA@i+@7)^~}>DTX+K7t>TJHFc_U>`2WQq9cNrJwJzt4A1` zWy#bVk?}mj6P=k!yLGq^S?2Yi!?<4l@SkZ+o;)VeBb=8g8xS3?DC8K|BaGP+ZeF>W zpya*p8j}s!UnYX{z*{_H63wR@VDOR*TUuICTXpRjt7guPkS_ySwv{EUv2Q-R%Q8z} z?nRmpIEC2OgVqfAU5JKoTUcyjM$B>Nl0?hxCzPq~?Z3C)SViQ>B=>e3H4>Qn(B-Nx zGO0kdf;ur9Bj1}PYSSD)HQ(!Bsz}+~FbG*wN4fhiQT_AY|{-5@HI)&XSy^Ezm!xz(f|md=&A5 zxc+t8MQg1nIb$!G8d-mDn7@>=w6ycJFL)E8Vrnoj|4j%xI8@YHvHO)~_vhDj^|zX6 z+h-j~N5jZ{XPEEkQjQRQA`wfozoaTD=Jv~^GLxBF;49#v<+uO!y_tKUcnbg6yVynk zffrq?$3`!c;1%2NX@b@7|M}hxrJ`0!#r&@>LKS`n(I(bDkXDoo;M_UlJR8ZP{R! zeY{mu<O9s{mW0gWGL+=dKld>Jn(-k3gDwHT%w{C3^Nn z39?+ru1O$n20(<`;)nW8>uuWDYcE3fXgYTi^hv$YQ(f`1;MHm02QiXKogX9FzQUBi zevv+|j`dv4pe2f}>CWlFwTz zB)PxT;h>`tPg=Sa7N7PbJCNq5ql?>x)(9Bx5Ofa|m~+}* zU+x7=&>0Tov*%Npw1kU;&N%;0yxSl82lh(dV^kUvF&_zv2%`U)!{xrG^;B3$wBx5Uk~N(N_<%Qf7!+=`}Vd#K)C;4rsaFrTBg zn`hT)%hSVw1-|gf>0RZ#mOr=`cMospYRX?pKErY>UK$l~Ie^aEH%>vJt2j zbB*l3t6qnHdBVBA>vxC9$An&ci7LnC{)4!Pr%N+yCkrbjW}k3)Y3JbGp12Lx z%?-8AwDaObT1blT{5a#Yvr)pxChKT_0f(iJ9&C^ZIwt4eO0oAWb?&ma8TJqVo~tQO zjwp$v8mT<+^y@5N@G$r*D?pS&>_{~JhRx5ZmzThh^q+{<%l#d%z5883-I^7T2y)bi zu><2ZDZa7ug(1f0Lp06bFw}=aN%x{$0l2|IP>|PgoExA50ZN9=$;7`EU|Sjx1Dbn& zA&OA&`gtQYEk;Lb6nOJ6)bFNt7uTYP0rlP9L%NTeJsS>($S`_`pUK{+=5DOyCZkZV zLLpM^Bj@p=E0yCGtL_fx4N{4g(&@;_$TioOAXb>Vvjc@l{5 zvwd$`(>8=~hZ`ffc>Ko%!)M6l>_GyJ-ricLgEk*kMY}z7q8dIatDF`-bfzm;Z(x+r z)r&W9j~RV;??ayJT0T^QP^ik0=lX-QSBH;M?A5KYN0-Q% z>)Rig3t6w!#@pX$V5R*RTTO;b@^^do-k}#Rc6*P639K@k9TR!E;9Pfc%m#POtL>UJOO*q%VN4j-ZPbp=vH5>uz2Ga` zlTvrJ5Nd|oodZl6l0x21K2_NHM=A2EBu!t5xzj!ODI>=pId0bJ7H8txGnT7Onw!6tc3wLCVZ zD3|*&xDn}20a7A8OQY;)Q^}Jwc_ijT7U9hGvs8=5O>e#T1678PNCBpr>QGaA6G8Uh2AcZlwNh1C~v4ymHFeUp0_ARq`1&i7&+Mv7aHQt?zF2F5kTn)TOQneQ-}==>G$O-vJ_ zUVE32&*goPG1s#Ajzy!oGPSmF=i@L-`UhOAG8ayZtft@7OyH*#48_dse#uFmgpLoo z>^(}NBIrbXM=dtr@kP8CktmbF1c(B=b1BLmU>9MDpBB)qqKU9muIfHMczQ{k=yTh* z!@rN4!4jP6J-%PdbYk$7(6B~)_h5TVGO;ncz;h>RAX2Qi$8Vx33 znmY4uTYmt!u4U}~ah>Ty0YvhT!$>7t4{L@rF(HZj33ZU?OFtNrr>!iBXL5e;oaO{ULd(cBd zmOfm^k{(;=JL4HI^31b9wD;*%FZ0hpKM1$8eFo}?&&7GJti6}<54`Tbf(=g}T*3_W zt-pVFJ@Df5H< ztdtlf)VCN8beVK{I)U4NvZjt(QMkt)!zkMuS0J6WX(LVpb{3VfK{KL+5lSP*fA~=w z2e--;m4GR~9k(Er*W#>xRX%Hh?DqEteb#qQO=I-25xh3lr~^~p48)nYk(ycBTKwf* zdPrO1ur5&h@z7O-Mdkh76D7M?xM4<0Wh>~W;~0e4DgEn5c{ZOML8adqvrduD!z(hB zz}L^G?|<)q{I6M1-e>n+pTKx4EUETHnin*hsWQrmRAgqOo!?1{E%;M6aoTi{(ib9D zIa1jLP_?8F_Pbhzw&{{pdg^W677of=^zsR04u8G{5MAo#LCb}}G88K!fxrGW_s0xW zb7a$kNvC+0xFmI>wU>XJPcgS@o5_&=EHcN@Nj+4@MJ9oct`_^sKSkA0md-_;h%ZAq za9F`{UV_kb;{y=c+!_ROr$iSGU3b-_p_T7KC?=rvz>b@!>TD3@37s?bS#X`%0FEtr z2a&I{aY7Fx=wjkP@NYTs%Mnz(?Uo1jHNI0lo4^?F-5B0o`v>t#ajIsaw<9o~+wb4m zTW~4fH)dJ)=(bwYR!O)^XeJ(nVB_xxaIHO9v0Wq8UQC!d${mj%lcdXE?#Kx^dxTK( ztZ*%h2$PqT+irP~VSln8Gj$~WPZktz>&+QlbnoKK@|I5q*+aKL!{+VLvJM9WM$ti% zbe79X=K601Q?~y@rd8t_`7{7psz*Y!FGStHeI6|B-Jj0Jq<%)Pu)~PIH|^c^O8XP%|J5EMGzQGH6FXuOXn_xB=m8T3k)j5()p)$VcV1mA$xrJqP6*l(JU|C@w2MfG%Y0mc`hERzw5&{5 z_2Z%^;4gHK-%cwiZBKtY`~r;j2}H7`uqok_nzctz#qb^o?q{k)6gv_PrLyvh~BpDScFKdZoo@twqy!F$-$6J4}WYK5L zl=7lg;W5bcwq>g0>LNAb9nnVj8)S>?Ns3>rnM9PW<-FP-XSbQOIHm~YsoFa!msdFSMt#v>9a#%h{$DR^&Iv z!l&st*-xZ+qGJ=+*dQ6H+^@*(>kuK5=Y>NzbmIo9)alAZO0!}*p{=kK2L0KQOQ{Gb zSV$G4#xj8i-Rhv7gN+Ic(eWJhJk1$h?7Wmc5X$NwU&{B}k6+SjUXbAyo-u z%A4+N=Zfq`iTIZ7IG}Xj2r7_{_cWRf+4%EkN69*jUnDip{wj>@MCutz*u+$Q7kIO_ z@K`l@%(!-zm?x2aqwF&XD%)@4U&*X&_=@V__=1g65}LApl&G6!qu<(Sk=)4-ipdK+ ztT)t(P5jLe)1xdA9X?mfXLF%1a$xf?DHi$zMNFY$w#Q9n_58T#d==qgGpcQG_Q{j_ zehf#`8-boKt7udarBj!ESNcy%{aHi9R~rYzQAWupj)JbPxQeni$zyZn0Gz|M z+e{V=L4@)yBExmD_S?dkJ3bmY4ymJ6wF~oj-GK1DJwepy{kd(%`oRV)} zDAUM`WyUXsN1MPiJ!N#o+>JC9FP%Ahf1f02#h(OnXC|*VWsGbW9;7Y`uIAfzdgy3G zy|=}~)6kJMetQ!S54AR0E>nJTQoU5n=eh~7AV0cSzf0z~Xr_g=CM*lO6i+vMjC{j4 z9edJkI^IwnsvuU*K`&xIjFiwXKcrY22@MP&_jfNCqf{YGQYExjsOtQ=TJlpq;(C8$ z1}~wGHh;p#B~}BWq^q+QT0X#(!?|1yW3Bjdt^5caV03`?b)B*`!oswb>LwYi*`A29 zfUI7>0uIGv#QNs#6`AztR#vVs5-3Hp-7uL;_hOS{R*fU4M#Y}q$}#_1bZVl}-)NQB zh;l671~sZ)O9mk{6eovI_nja?jd^CNBSz=xRQZ`d2gY)oj7g~9HlNh*BD;z7~R5+Zl> z!KUh9g(txcRWM}6S^3XK(A-d$`QAF|cmtno?s1{zS1frKM*nS~;k_<3y@OZFx8#xb-sbysW`FCak~7Aa`ZcD0IVC$#DHTVReC@m{X{5!jqn2g{{Bv@XF}u zU*O}hJgM98J#B=^wOo7#v{vW6p{GAn$GDC-#uu+=l(4OSqMp61?*W=lZdn}x@vYciQ zv{wTRpF!-8JB4Ps8`Ab%da~=}7tYQvP!J9RF*>bx=L;uG?hvPFRCXD!-bD@vXPLi3 zZRqnRF8b=#AfZ)#$N&Q z@^rOKvsGuBgPHo1q_@I7S(E64qxKkmlS{)iF>6gsavNd>A)Z@)%@)`YZHy^pR&4Cb;I5A8E{b6ZN4eX6p0Idscrms zM1!Ax(RG!HsfE6NJ-RQPUF=KZT)Gc)8aZ^5bny40njIadk34L;IAke$U(SeLS>*D; zgru%88#3oamkW8tUVKv0-ZIkFedIHX3=)v!hc0F9RM6|2f{h$a(z&GAR<^RjdRUd3 z$R3y#w{5Pb`J!`3MB>#mz5TH;@7NzhWb)|i0?MJ$TEs>3`dUvo@bDTQT;)E+6)z6Y zi(f7$%Zoll$jYYfQ6%HqYSm?-4Km?iVECn?mhUF_*6_w7>_52x;VOE7DR~m992{Xr zCu_6833Ep2(4C0e@Wy@bfyo5qk9}%FcTZ^bjc1x^8kTk& zOkxuQe20@)#8<#DJ{&^$RE`UBoDx$bxcPyHA#Lh@5i3%z8~HW6+dUpa`%=oc9lIgpN9qAVZXNL@hRuN%MK1SIlP>8 zPZm4{Z>g*3`5kd3i(p7fKY7JB1|ANH9Oa4Bf?sMwK5Kk*oBP@(_)LyAuBce6Q$n@D z^3z9-iPGx$ROm&>A@#6uWG~Sk=Nl`7P(2ljJb@TJd&uj-be{{nz;(?V2C~cq*&YH!Sz>Xrd%9Hy0kRlqTp#s2*;V=ma8~XQ~X(a zBn$ZiV>Mbj$M%~XCpbUo(qoqix=C&vk8p+`802>e6b%6Z%n>$c-=g(@L<-hJ5ZnUNq`Dl`72^tZB@; z8j0mcG3a|H?iIy*RKHpNDvF{VQKd1TD4#1If{#X+61g4_QDXM0o2HL)eEBv?zR{Mm zG;KU5;hgza@O0m4)KsQ7cx`U5<6w+y_j1B{$F9JR7tDH6dP6tM%!MS8E~m0wZ4`A_ zmJGU-@dZN`q-##jec8Z0_lclLInRQ#vO2DoRCVy!*ciyBa3#1L-ef25BR~Tcb{#l4 z53wBkW${%FK#4HPz!Sp60LRg<#kGtP+O8Q>Z@M6 z+3L}hC6OekBjv2h2fpz3aq-htrK*VnD+rRD@fqGC{2anXV`*?wWTUVGOuUP|w=tOt$GRxMOny$lfORKUJ z)Jw0N6#T+r3RX%I39kilS2U-TO6I;f{t%VCEuaWCYyN`KccENJc7qgtq}hc-=#@bG?y-UIv*?;FVqRFwHn z0{Y`mBR9U{`B@h&!yAHjkuKW&&j=RMTV=~nP0;Bsd23ks;5qHqb-Zs8nmZ<>K-MAL zL`)p2uckEgi`Au!flq9W1WGlW~LYKXp2mb zVA4W@kMc5*&+@OiydIwb7A((6XHO4*7soSY`U8E7JMkJR9*ZaL@3)99GH<-VoYzER zfO@zRB8vy;+xsESU9Jy1N3K)_dXkV!d!$u5t@i6-)N%Qxw`-T!v0!S6r(TNHWNrY- z$?CDGk17Y3qAlj6!fd^5{w?ja_Q67s|Crl&8r|CrgcqYx`RPr8z9*_FdyV$0 zetI3nuzG^!EC-t<7W>E)llL{cFch40V9r+- z;Z3;+O^)y9(22Est)owj7Hu7W3G3xv!^30I#D$nlmA9lNIeN8c7Z_K^_;X)}Z8sW) zrVG4-2|+psMLm6S5Gd|xz=$>`MNp65efKY)8+u%DV~6b9jrGMv0*<+z0nR_&wyAnn zO=X>u5iB2fnjgzHN|volxPB;dG0O#cnLpd@1 z!#2n~?LH)OtdX|vPP_>obD_t6y;B4Sh0e{!ypNf-ZHF9w28}n*hTdkb7=>H_rgkq#k}#e5d_z#uA;n z|Mi+&Ko)s*MvpkQg7lExZ}A4@FP8@CWDotEDCGl~$A;(D<#hk4uAR;*IpXi~;|_4~ zVjk-xga#b~DuB8ViIR`xHaq*H!q^8v7_uYn=}UDGcB6dnN$JwGeQf&C;cA{>rR_Q- zYu^)Gkh*c;$n!$n+$4`BMOC0rfW%2$mOTf%8Z~I@RuGf{q=EDE8z}1H9z2Zqa>~s9 zg?4P)+3WITl16P3l7yhDmW{^m$b5t8XWT~Ii;DbCQ>^upEsc!%8s`gG*~mhSa*F5C zhN7E;fT6=E5s}BG1i?i~yaYB;dc8i%B?f<8(jjNi=(c2wGpx1V737f+(w~N$ zO3BZm^MYK4Mib=s&24$)^9A~Sq|~=bhu{C=51l?v|7d+#*sdN>>@JYz5-*?oxV>BAqJTe%;c%hb7;jCam`w zu;k}HZ-TrA?Mlou(o2$H1uUW`HzLx{Vy@99mGd%tvA8XH$4&3#cS5|32;GhS8~0pi ze^07}30xEb@i~s)tMy}~kNF_BAKr6cl&tmDM-ka)n1P%xQQyMyPHj!-=+!pqy+(n!ZHcQT&bU*bM5PHe~u?>1qf$(ew z4+n6FHEnu|U&LruOGCzwCF9qE*`{lcus@^&L}b}l`p4PIv!*IRDO#6jYRZHZ{QJ6Zn9Ap}C$@pJ~T0jnWi3kDf`hS}9Aos{r)$>);;mBdZ-~fgZoANWhNA zws2SzbJp2_S<$3VxP+OISz0gE z64`{j1LRUE>?1rXGM9+I`Hg}y7tIWn>wq?`ajVhvHA08Z+1e%go>DDsRcfT}3Zi^` z+#$TEU&2)-r1~758?T+U-V^rUL1WvX*7GNj-KmC)%%Vf;e6T%OVQ;K7N3Kx)=l4#p zBqf!>uk9#Cx@su^;+l#KP_-2h&s&z0S(qA|&uh;C7pn=oBn@Era^1<#tLz=NyL-fo z>shiCL71{-4|vi(xKr!<_*xEqEgxpmxyVMK+oG(b?Y?~B?Bu{n_NUP?r}%TCS=#b| zoRDHo;T+=S#}U*>WzW>|bXxN)IsW6c$X}Jp%4~d_!qVD=P~(N<9mdCXmX;BU3YyQr*3d0W2n?f7Vu*7nk*>}aRx zQ#i7Yp@6NYPd~2AfSCv8%b5;4tTkF3WP7^XQWw5jC<~d^`vXTMAg1Z|5;8k9*NS|n z;~WxCpw5{obr09~$vsv++%pnc_93Vv(k$@e;LFrkC)t8)NU*(3QL3UiC#UvqEcaML zm~rL^ys?y~BVmDPnU{y@6mX}ZY@eIJZ|s3PqxI$4c>=1p9Vhl&FiqWD0y5DKS!HU` zC9d2e4!fF*?CH#wFZgxc8%4$hy!E4D+_Im01fYIdq`=rN@abbb0=&#bzxriFaoZi! z=E`pTHy0OU)r&Uv?m5i0_QvLLFJ2bWGj@J7jZyf@S00`)0XRbMgT|`O-P+$IB>tD- zW@oGP;v-d6D!pTSw`BN)%Sjt3b<6r79)6SaR6EgWFz&zX?N<@LjZ3xLQVa2SDjp)2 zJ8JFJCATIU6saJyMF7MC?;pw-i_Zg*Pvk%3BI#`92?yED8lJO5a+av>j}>e)l}19L zmosLK-JXW*2jg6)Hc;(bt=tkpf^C4$&Ae54cLUJkuN%6p>kf1-Lr>{Ct{{u2ILJce zT|wPtA*f9>v!+nygnmjM6tSK+@Qpu`Is?|V)o7kK8PX|qr2A%UKadDIZI>U{xbn?AI z0-$-#_sQxO6H}8(TgU>Gv|_!e`@kH7^T`29w$ZaV)P4YOISXv@*jDNEg#)j&954fbc#z!%D zi#wgTuw{H*Sz=*tbK9tT)TFHQC^fFHXV#S=OU?D2^c{;uJ-|K%kj*$GuMP1{owsry zE`+?6Wa6?DCk~{|5$56K?0v}8+)vu^GiYnNNR1yqi?3@KyOj(YiR%uYeiVBN1a<4b z@mYX5gw^i}u#Wh1Tcx*{Z*0E1(2y`cVgOCx&)yauNI7pkWM*QQID4p?cJfj0rD)&4 zwE4v{!xo8X7O`T%;RpNP`g?nVxh#9BdEYD_{;+T^IrY_p7s=kPIeC-)_aF^Co5G#{ z9Pu&<1$`&utlc{`RJ%Ho(liuO`m2O)$bNp_YmYb9&-=a>44A#wIXFny<*Lx!HqC+; z+@@H(|~wTXz;{(^Qr8jyg&CFB-W#fBi0*Pi|9^tdlqXyEI|0>f*B(m1*4H zU?zk@EB59;KQIooabHPX*JQhYy?)!YQibC`+TGi4J>lI}AS(wMC|-?3p%b zMqag~uWklF50um8@d3V|tTy3fHdgHgs)t4HE4#_n$AF@P7=I8o?kcW%K0`{6lS?mbq-%>2hbGzj^o-`{!sY)$-Y|2VK!DX zsyTlt)zen5pJAOuT^41<=>uZ5_PY!~iD@TQuB zj(48Q{MhCk!N)%cf$4lDy1uh2l1ErG_Nk837xV+q6KtK5dJViDHbk3%KA9{s&WUI-5-;OQJ6%oj@h_+N zMsZFFl`s9v33<=7(06aS=#I7-Jlgre0JU2PZpyNF`xJhPY4mNXRL+{p+A^IbBNH&k zh>DlSA#SqmyZ4F5VASe8RDtCRvE=X((cLtR4j4A0*;I#GJh3+{JY=|V@2zj2F{oaN zOu%;P!)v6d8bdrrzp2OYyIxpfIMF&Nf%7o;AhmVlg+hU@x$Gxtdqx_(Xj>Jc5qI>^ z$n{P-ILt}3F@*TneaVDTDmpby(faI*DHEw2vj9C16+|b}CXIYzkz5u;li#i{&Y3h- zv-auQRGp?wj+9pZoiejB;jEBQZ%*8}t;?di^6ovnOb_9D+b<((TROGzL(|P(+#@-(T=foQ-4XE0kS zrr!6(oEs)`l&uvd3)br)HfSxt$@Id3RD;*hZa>Sfl#?pWf7;ATfcA^2GCZ{VsR@}i z+RxZ{D;>>KyRelPy1Mg;sir~fHTEd~vPh|`=|ct}=g&`&FF=@AnJBN^%J?Pdn&jgs z2*n-@)i_Q>Bn_I4Q}ko_Ew}yGMQrNY-f*jT6i=S&SN%rQ5xQIY@8~Z6W-TY{7CEXk zA~wrraiEPU=&!}B?~xLTPw_jCK2@EdE(F201K^ZRwP=6cu&^8poM~|2Lgv^j9K;|< zt38j8_a&5d2e^PM)DLi>@v8hm9&kUuy~0hNuF6{j+${a7{5Q8M(F6_43Z%g208~gL z-=LbScOLZ`%>x+B3wS(Gt7~6Wnq5uF!QD9d70&4lzHG!Xf z^q)`jTD@fg%q&Fv=c32qSGe!+KQHp2P`_XOd(}NZO~;?%Cil(^4qk*f_3nHI#_$^J zLMiNQ?DX2v19N$RR5n)DW?!pQGOlEp!0D$%qmQ=evC*}eG6W}F!+Vhwm6ZG}2IL7& zz{h)0Ne@U6E26d>$|EGa_Ik?h&n;imk{BHH;!Rql|G-jTaBpHuYGG&L<>TvqU-n>!~wNB2WtW@*IJPPU}Ph#}R zucY{l8`;DvIg?YdaxBDJRZleoKn=B-uU5m1-^O$^F@R|N1+-tL&K~h93n14>Ove@u zF1s^eGoWMiUD!vb^^f*XaltV!x;h1>B0(OT{`MQrCiA~W{=TCaEyh+~?al}YLwqI7 zl4f3`*8MLNxZ0_We7{RI>Jvq`_gG!||Glf`?5nmH&HM3Dx$YUxDuEqJU#7W+*y^XQ z1R}->G`2^y$(b^ce|yDi;!5TbS>=+E#i3r&hWb`ze7wvbcX2JikrNi;S5&X@dyV6e zlK=p}Vm;Pvll<7aOJ8eW8T|7ToB`~Y97xB5-Mg#?l&*{_l=@-SiOsyZ{K{f4uNsqo zC~(lt%~jKlI0sObMJ*on);d4G$ZxCp$|8)RxRz?7NJSY#0)Nv(>Og?TLa|5P{Cj2N z27}vi|9029uA`7z{Ow((h-pil)^BebQmn+?ZPgDLV7h7nCF(03d6Rpg(yi&C;uozr zoxVN!L1WHJ3bSa`b$oqgEmxeiQr?>{cE$Q$)QrRcMg`i>*?zo)?5F$%Cya>{h)}>k za9;3DwSBU+su$r{kSLRJ^%iG)Zb$%=e!1Ho@#ayS&wgj=gC~9iSBfCqjY9Kqf0are2lHRHQUb@#ij__1?O3H?dSKvWG@aaP$Q) z9+nZ}l;dZY1;i|8t)0)(3Tt%@& zb&g?A12Pz~O8h8llJlf8 zfN)Ww%fdrbp8%aDRX{efaa}mc|4Qz>Yk->HUOiG>BAYq2 zH0@Uy{=CJ-LqiM1;FsIUd8q0T@)`GZm8JEmW@;c*kOU3bR8KYo+=NhVJ)`h1m(Qig z!zhTH&s$7p&$mqf#=~RmOpeR{l*Stum0n2MD*1J?KB`su8elYBHxy!Uu!;V1DI}fr zaFD$LW0lluKhewpRA#Ct*P^!VZK&rEZ+~#CQ#SYHknO}&^b*}?5@+Qu+*yzSy z>QYKD1P#OIbn)?a%7HFcRvm)q5v|C2-}LP3@Xyh!+U#+D)cYZ}kRfmEYJsUZh0><5NG_8>5%g_(A)0d;*N^4$h{)o zX>)xqn|wAM2S()AcWwfJ-y7lu@&KCVf9R$o2f5``RdW`(?Vq}jpYRDyHuC{tMhO=d zc!uJgG|w_J*u5^bOjXpi8;j}-Uk`{{@7=5d*#Vas*y+t&yI|VVV`@E*bxV-?5Vc8wL`9R0XHKi|; zML$N30gJQRRx6TI-HCGv8s=&8o@fRJA=Egx#Y233P_24v0m-&|WMjz7yJQGWZaFvZ zo~^${FN2SFsRTHc*5Y@MCtl^zL$vV>$2u_GCHsRoeaxH}@D{u-T%Ub`&-t=U_jjd> z=fZ)6wXIe6q*Z)~3yF`O{j+M2>Xn1O#CyRSA4ORjj=HZT3{$tewb0w}l_4mmTC8|X zv(f1Kl6Gr7@!<9$=ly@Iy}Y<*@SBtc)BhkZb*?NnQKrhqMk(54W@c%9fn6UY*_hnd zw~As4sy0*`bmkFi?pd{}a$mv=jJD_-jO7;v#v)-QhQgOaO^Mn4W4yfzVcIsm1d2cc zRiq8zM;X@EiWSuW+fE%s_3z-ln3Td<6!taF*NCF0D=vzxEIfCyS0(h9ta7%a;aZhh zzsBKDV8c|ERo`G82nwvd{kC$88=lmadl(b0#w48Lk6Nc;h*AHfB2f$cda94U3r@HN z`1I8x5^mJ??G?qADeecZ#F7CH|EJsu13Kqb3G8?ZbndG%Ux9P%t0HtYq`La~uUj2N weSxtB{&&TfQaV7^|DQhg|8M<&%mNp5hbBEEZp1SIxb{_)ReM<`ZSnqp0j$qn;Q#;t literal 0 HcmV?d00001 From 932478603465326f1eef30550ee250080d65dbbf Mon Sep 17 00:00:00 2001 From: Mauro Passerino Date: Wed, 27 Apr 2022 15:54:21 +0100 Subject: [PATCH 2/4] Update design: Intra-process between clients/services Signed-off-by: Mauro Passerino --- articles/intraprocess_communication.md | 106 +++++++++++++++--- .../latency-cpu-client-service-ipc.png | Bin 0 -> 20834 bytes 2 files changed, 88 insertions(+), 18 deletions(-) create mode 100644 img/intraprocess_communication/latency-cpu-client-service-ipc.png diff --git a/articles/intraprocess_communication.md b/articles/intraprocess_communication.md index 3b44d2249..f9c855930 100644 --- a/articles/intraprocess_communication.md +++ b/articles/intraprocess_communication.md @@ -515,52 +515,51 @@ This design document presents an implementation for the intra-process communicat ## Motivations for an implementation -Communication between clients and servers can be expensive. If the client request or server response involve the use of big data messages, we incur into a not negligible amount of CPU usage due the need for serialize/de-serialize the data. +Communication between clients and servers can be expensive. If the client request or server response involve the use of big data messages, we incur into a not negligible amount of CPU usage due the need for serialize/deserialize the data. There is also a baseline CPU time needed just to go through all layers from rclcpp to the specific middleware implementation, with the associated bookkeping and data safety checks. -This extra steps not only have an impact on the CPU usage, they also increase the latency in which data is available since it has been produced. +Serializing and deserializing does not only impact the CPU usage, it also increases the latency in which data is available since it has been produced. -All of this extra overhead can be avoided if we take advantage of the shared memory space between clients and servers belonging to the same process. -There is no need to serialize/de-serialize data when we can just pass a pointer to the data (requests, responses) all done directly on the rclcpp layer. +This overhead can be avoided if we take advantage of the shared memory space between clients and servers belonging to the same process, where we can pass pointers to the data (requests, responses) all done directly on the rclcpp layer. -There is work being done using shared memory capabilities from the rmw to communicate data between different processes, but performances are far from the good performances we can obtain performing intra-process communication only in rclcpp layer. +There is work being done using shared memory from the rmw to communicate data between different processes (loaned messages), but performances are far from what we can obtain performing intra-process communication only in rclcpp layer. Many ROS2 features make heavy use of service/client communication. For example, ROS2 action servers and action clients are implemented internally using several clients and services. Other usage case comes from enabling parameters on a node, which will currently create by default six services. -And probably more features will be based on service/client communication. +Probably more features will be based on service/client communication in the future. The new intra-process communication implementation between publishers and subscribers have laid a groundwork which can easily be expanded to support intra-process communication between clients and services, and furthermore to ROS2 actions. -Having implemented intra-process communication between services and clients has the advantage that any "stub" DDS with stubbed DDS apis can stil work with clients and services, since the communication doesn't happen in the rmw. +Having implemented intra-process communication between services and clients has the advantage that any "stub" DDS with stubbed DDS apis can still work with these entities since the communication doesn't happen in the rmw. -All of these reasons plus the need for ROS2 to evolve and be optimized over time as it grows in popularity, decided us to implement intra-process communication between clients and services. +All of these reasons plus the need for ROS2 to evolve and be optimized over time as it grows in popularity, made us to implement intra-process communication between clients and services. ### Incomplete Quality of Service support -Same as what is currently supported between publisher/subscriber intra-process communication, the proposed implementation is limited to communication between clients and services who had set their QoS to "keep last" on history qos policy, have a "QoS depth" different than zero and "volatile" durability. +Same as what is currently supported between publisher/subscriber intra-process communication, the proposed implementation is limited to communication between clients and services who had set their QoS to "keep last" on history policy, have a "QoS depth" different than zero and "volatile" durability. Nevertheless, other QoS settings should not be too difficult to support if needed. ### Problems when both inter and intra-process communication are needed -In the case of communication between publishers and subscriptions, the current implementation of the ROS 2 middleware will try to deliver inter-process messages also to the nodes within the same process of the `Publisher`, even if they should have received an intra-process message. +In the case of communication between publishers and subscribers, if there is at least one subscription in a different process than the publisher the RMW will try to deliver inter-process messages also to the subscriptions within the same process of the `Publisher`, even if they have already received the intra-process message. These messages will be discarded, but they still cause an overhead. -This should not be a problem for communication between clients and services since it happens only between the related entities. -That is, a client sends a request to a unique service, which will reply directly to the same client who created the request. +This issue also affects communication between clients and services. +If we could enforce a single service per topic name, we would solve this issue for this particular case since a client would send a request to a unique service, which will reply directly to the same client who created the request. ## Proposed implementation -WIP: https://github.com/ros2/rclcpp/pull/1847 +The implementation of the presented intra-process communication mechanism is hosted on [GitHub here](https://github.com/ros2/rclcpp/pull/1847). ### Overview -We want to make use of the infrastructure created to support publisher/subscription intra-process communication, which has been designed with performance in mind, so it avoids any communication through the middleware between nodes in the same process. +We want to make use of the infrastructure created to support publisher/subscription intra-process communication which has been designed with performance in mind, since it avoids any communication through the middleware between nodes in the same process. Consider a simple scenario, consisting of `Client`s and `Service`s all in the same process and with the durability QoS set to `volatile`. The proposed implementation creates one buffer per `Client` and `Service`. -When a `Client` makes a request to a `Service`, it pushes the request into the buffer of the `Service` related to that topic and raises a notification, waking up the executor. -The executor can then pop the request from the service's buffer and trigger the callback of the `Service`, which will in turn process the request and send the response to the `Client`'s buffer raiseing a notification, waking up the executor. -The executor can then pop the message from the client's buffer and trigger its callback. +When a `Client` makes a request to a `Service` pushes the request into the buffer of the `Service` related to that topic and raises a notification, waking up the executor. +The executor can then extract the request from the service's buffer and trigger the `Service`'s callback, which will in turn process the request and send the response to the `Client`'s buffer raising a notification, waking up the executor. +The executor can then pop the `Service`'s response from the `Client`'s buffer and trigger its callback. The choice of having independent buffers for each `Client` and `Service` leads to the following advantages: @@ -574,25 +573,96 @@ The `Client` buffer stores `ServiceResponse`s which is just the `Service` respon The buffers have a size equal to the depth of the history and they act as ring buffers (overwriting the oldest data when trying to push while its full). That is, if the service queue is full of requests, a new client request will erase the oldest one and be pushed at the back of the queue. New classes derived from `rclcpp::Waitable` are defined, named `ClientIntraProcessBase` and `ServiceIntraProcessBase`. -Objects of this type are created by each `Client` and `Service` respectively if intra-process communication is set to be enabled, and it is used to notify the `Client`s and `Service`s that new requests/responses has been pushed into their ring buffer and that it needs to be processed. +Objects of this type are created by each `Client` and `Service` respectively if intra-process communication is set to be enabled, and it is used to notify the `Client`s and `Service`s that new requests/responses has been pushed into their ring buffer that need to be processed. The `IntraProcessManager` class stores information about each `Client` and each `Service`, together with pointers to these structures. This allows the system to know which entities can communicate with each other and to have access to methods for pushing data into the buffers. ![IPC Client/Service Diagram](../img/intraprocess_communication/ipc_client_service.png) +The implementation enforces one intra-process service per topic name, so we don't have the issue of double delivery. The decision whether to send inter-process or intra-process `Client`s requests is made every time the `Client::async_send_request()` method is called. If it finds a matching service available in the same process, it will send an intra-process request. If the `Service` got an intra-process request, it will send the response also via intra-process communication. ### Creating a client +1. User calls `Node::create_client(...)` or `rclcpp::create_client(...)`, where a `rclcpp::Client` is created. +2. If intra-process communication is enabled, `Client::create_intra_process_client()` will create the intra-process client which creates a ring buffer of the size specified by the depth from the QoS. +3. Then the `IntraProcessManager` is notified about the existence of the new `Client` through the method `IntraProcessManager::add_intra_process_client(...)`. +4. Intra-process related variables are initialized through the `ClientBase::setup_intra_process(...)` method. +5. `IntraProcessManager::add_intra_process_client(...)` stores a weak pointer from the client `Client` along its unique ID in a `std::map` object. +Then we check the `Client`'s topic name and find services matching it, if they do a pair `` is stored in a map. +The function returns the `client_id`, that is stored within the `Client`. + ### Creating a service +1. User calls `Node::create_service(...)` or `rclcpp::create_service(...)`, where a `rclcpp::Service` is created. +2. If intra-process communication is enabled, `Service::create_intra_process_service()` will create the intra-process Service which creates a ring buffer of the size specified by the depth from the QoS. +3. Then the `IntraProcessManager` is notified about the existence of the new `Service` through the method `IntraProcessManager::add_intra_process_service(...)`. +4. Intra-process related variables are initialized through the `ServiceBase::setup_intra_process(...)` method. +5. `IntraProcessManager::add_intra_process_service(...)` stores a weak pointer from the service `Service` along its unique ID in a `std::map` object. +Then we check the `Service`'s topic name and find clients matching it, if they do a pair `` is stored in a map. +The function returns the `service_id`, that is stored within the `Service`. + ### Client intra-process request +1. User calls `Client::async_send_request()` where we look for an intra-process service matching the topic name. +2. The intra-process manager sends the `SharedRequest` to the matching intra-process service, which stores it into its ring buffer and triggers its guard condition. +3. The executor wakes up and the service processes the `SharedRequest` and creates a `SharedResponse`. ### Service intra-process response +1. The intra-process service processes the `SharedRequest` and creates a `SharedResponse`. +2. The intra-process service uses the `client_id` present in the `SharedRequest` to obtain the intra-process client which will get the response. +3. `Client::store_intra_process_response(...)` is called and the response is stored in the `Client`'s ring buffer, triggering also its guard condition. +4. The executor wakes up and the client processes the `SharedReseponse`. ## Perfomance evaluation +This section contains experimental results obtained after comparing the current inter-process communication against the new intra-process communication for clients and services. + +To compare performances we've used the iRobot ros2-performance benchmark `simple_client_service_main` (source [here](https://github.com/irobot-ros/ros2-performance/blob/master/performance_test_factory/examples/simple_client_service_main.cpp)), which measures CPU ad latency of a ROS2 system formed by clients and services. + +The system we tested is made up of a single `Client` sending requests to a single `Service` five times per second, alternating inter and intra process communication, using different messages sizes for requests and responses: 10 bytes, 10 kilobytes, 1 megabyte, 4 megabytes and 8 megabytes. + +The latency is computed as the time since the `Client` makes a request until it gets the response from the `Server`. + +Command: +``` +./simple_client_service_main --use_ipc <0/1> --msg_type --clients 1 --services 1 -f 5 +``` +Where MSG_TYPE: [stamped10b, stamped10kb, stamped1mb, stamped4mb, stamped8mb]. + +The tests have been validated on multiple machines: + +#### Performance evaluation on embedded system CPU @ 1.4MHz, 1G RAM + +| Msg Size | IPC | Latency [us] | CPU [%] | +| ---------- | ----- | ------------- | --------| +| 10B | ON | 74 | 0.26 | +| 10B | OFF | 294 | 0.27 | +| 10KB | ON | 78 | 0.27 | +| 10KB | OFF | 345 | 0.27 | +| 1MB | ON | 348 | 0.32 | +| 1MB | OFF | 5311 | 0.86 | +| 4MB | ON | 1026 | 0.5 | +| 4MB | OFF | 18777 | 2.5 | +| 8MB | ON | 2070 | 0.72 | +| 8MB | OFF | 36510 | 4.7 | + +![Latency and CPU of Client/Service](../img/intraprocess_communication/latency-cpu-client-service-ipc.png) + +#### Performance evaluation on x86_64 Intel i9-8950HK CPU @ 2.90GHz + +| Msg Size | IPC | Latency [us] | CPU [%] | +| ---------- | ----- | ------------- | --------| +| 10KB | ON | 526 | 0.1 | +| 10KB | OFF | 747 | 0.1 | +| 1MB | ON | 737 | 0.11 | +| 1MB | OFF | 2353 | 0.15 | +| 4MB | ON | 1275 | 0.15 | +| 4MB | OFF | 6487 | 0.33 | +| 8MB | ON | 1873 | 0.22 | +| 8MB | OFF | 13327 | 0.61 | + ## Open Issues +The same issues of intra-process communication between Publishers and Subscriptions apply to Clients and Services. diff --git a/img/intraprocess_communication/latency-cpu-client-service-ipc.png b/img/intraprocess_communication/latency-cpu-client-service-ipc.png new file mode 100644 index 0000000000000000000000000000000000000000..1bc5f59a7c9184b635db347e11da1e842a6897ad GIT binary patch literal 20834 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 l({u||kQXxke+^Fl Date: Wed, 27 Apr 2022 17:37:48 +0100 Subject: [PATCH 3/4] Update design: Intra-process communication for clients/services Signed-off-by: Mauro Passerino --- articles/intraprocess_communication.md | 7 +++++++ .../latency-cpu-client-service-ipc-x86.png | Bin 0 -> 24475 bytes 2 files changed, 7 insertions(+) create mode 100644 img/intraprocess_communication/latency-cpu-client-service-ipc-x86.png diff --git a/articles/intraprocess_communication.md b/articles/intraprocess_communication.md index f9c855930..767463a30 100644 --- a/articles/intraprocess_communication.md +++ b/articles/intraprocess_communication.md @@ -650,6 +650,11 @@ The tests have been validated on multiple machines: ![Latency and CPU of Client/Service](../img/intraprocess_communication/latency-cpu-client-service-ipc.png) +From this simple experiment we can see the great improvement in latency when using the proposed intra-process communication, even for the smallest of the messages tested where latency is four times smaller. +The improvements in CPU are move visible when the bigger the messages get. CPU improvements are clearly visible for messages from 1MB, but seem to have same performances for 10Kb. + +Same conclusions are obtanined after repeating the test on an x86_64 machine: + #### Performance evaluation on x86_64 Intel i9-8950HK CPU @ 2.90GHz | Msg Size | IPC | Latency [us] | CPU [%] | @@ -663,6 +668,8 @@ The tests have been validated on multiple machines: | 8MB | ON | 1873 | 0.22 | | 8MB | OFF | 13327 | 0.61 | +![Latency and CPU of Client/Service x86_64](../img/intraprocess_communication/latency-cpu-client-service-ipc-x86.png) + ## Open Issues The same issues of intra-process communication between Publishers and Subscriptions apply to Clients and Services. diff --git a/img/intraprocess_communication/latency-cpu-client-service-ipc-x86.png b/img/intraprocess_communication/latency-cpu-client-service-ipc-x86.png new file mode 100644 index 0000000000000000000000000000000000000000..3fc50afa9f11ed82c49415fd3b1bbef95738adcb GIT binary patch literal 24475 zcmb?@byQnzw!`{au$j{4cdY4_154s!DI?~TV4`!Vn3Mg>6BvXjZ~XtA6)l`pbD;BLQuWyXwo zbu*s8r^w>|;yh%5PsF~+oWCIt{@xJS`i5En2mTHC&mY7x=-+M-3nG$vH~oKqpljOi zKjpl<6PzsrgLg+K67+G-kvbH>yzq94n_1<#rhEDA+FLc(CqR`xOeS8!cpI*erd4I# zWrkpDntLPv``Dm7CZ&L2eG4xycy$r3vM8bo@EXr`h`pPfDUFpVTC^Wx6n2hI#2f>S zL61_Vy!+VR*(!E>SM5)ihb&1eFaGol?ITsiw*sa>3p5{GsPp^nq)@G)EteW zKRe56?gLSoaZD-!B<71BuO7+Kr7$B@|JEy+ubKO^9V}Yk4Z&78b@DR703nQ zxRo+vsf3gz1T4l@m&{FdR<8-|GOAefX!sMe8`)}ajlq49S&iKc1cMx11@adaKRM0l zNKT-A-hr&#;$6lnNlG&?cMvpG<+=2BLi#HWg`fEag^qTMJ*B8r#-Z?h-r<2r6k%|O z7OHpeFO0a0Jnf?9JV+@s>+^bRyec6Il8=(7;(NXCZCKO|cGpEpN7E~gFP_burcinz z)fKjuYmZVFqq$zvIOgWo)N9yU+qi{~e0oPz<~d98fKR*?)odGz6{z10Kz4j5@9lBt z4U|0by^^DD*wygg>itAzl)M&Ok{$* zmGfm@MD!{;GbXa8%q9|ksJ1deMu3_ormrWS>Sl}Cv|OFma^0J*nxhlB6ww#?_WDS6 zZxfgs;FXzj-+JyTUo_)IClhck@frtzH!m=rV)f+lz|w(7E`R*wuu%KzZB8R_mlee7 zFHTf-yI{oDwiy!V94=`o-Q|7A=y)H;n?H5|TBwYHOB5V3&c0`c9^Yf!!vLwYj@?a- z+&`Qt0Yp-^lHsBG!U}_;M@v&D^b~ax!uO5f)H~ZhsK9}R}n$%?Of7~^lDE=bd zhjsb<;!8%*)@3~evaNO&X#&-I_%3HFu15~4ZGO~$aPT4z3spA^lU*w*Vot4^Yr6PMVh|O*1j@+oL=YDxtf&FC(ef3i$BKN4zuzM~|KO!Y&A%BrDq3;B zb;GbTX+F^D&bYW;$~ob4<~lIB&P$e4dL|Qp;AqF7t%Fqki^reu9qZ+_U(KJ85h zr`TRJD!w}*?_s}^0^ny-5BOpi;@USRr-b9B+C!Z?jK!yNT|zLOOr!Ap4lXh~ab*A1 z1H4&8rDqFXO|UCKI!2HAqB&=g$!p2#2X8w%@Wee%jpL@W-XOBc(3aZ* z`n#b{D_YfL4lKjSiU#mKkCe&8=9`Zma|o8(6lxM%Bej9Bna!TQ=@j9*vc)SLRQA7KdQC|ftws+`q z9`zf>w+P0yJ*kl4?`-Z!Vb^d)8gIr|0LS#gA&J)OD_Oth*nyWwR!?_sd9)rjVe0O{ z!Dh6A!OULnAAOfm(eaz)+YDK`2u@|aMClja+~(^n=_Tkk4Htx5K&9C|X3fZIo>bek zmk^p`y9kvEmZs(j0l=H|j+b#}gJXJ63dE$s=`tIn+^QbUFE$eg2ZwWi?in1R*%|MV zBwMHmv3=M!aA%}o=4b#zYI4$bv=->2ERuP#Z6kBhA*7LkSsP3(O~n1Zb900|TdF=B zxwAejZ&jaNco^$!zCQMI2Evti@p4e79byU!?gS}qr zCMqd4!qk$>U01!c5&WmWk?;hjtR7d6TxlcaY=0X{^QtBOI^LVHqqU|}6Plx`qg^zX z84t#6$g5;ol(qdt;{^Qt(h=GOhhaVS3e)Ao z>)eObz>T3!u@u(cl!fQFR&{!SuPpPtbNe%aS1&(olgy~`EgzKsIG_>@APD|2q;ht8 zj2BvJ**6z3Mnj7UWp$*wJ{!i0g*ARP5HJ76D=xmn1+OBiCo5mnan8>i+|lFu2=peR zNE2iWJ~}ZLiPSS6NGRtQRR>k;G2X?|iVb`efw8s(j-sF04v#bZZZlM(<|4P#?IX-0 z;!Em}q#7yId?kGmgxCwaA0JMkEl-<0Z$9maw)?L zA#d`S?f04W*}wF;_XQIfUmTRGU17JT7Cd&%JfQy(!5i5}!-|F)KNxLKY0I)1NhiYl zp`>kgG#VzwU%5G&&9qa^J!h*dq1(e$=*fL9+XPh1S!qapdcM_x{P>ZdC*0CCeGpnh zJFzXDl)F!kX4(I*&{!M@b=B5y>x>*pt`I}%HnR+ot#trWFOC^qKDit*fG|&!AJupO zOuO2yP-6y%Pj$L?83c4A^Wbq5BNw7wCx@IcyR@l-42C%!N4?TJ zbe8jOZ=T&XIX^txx%zo~h*z60K&;TSMiXE2263ISX7jBGUoDbSdU+YolhQDaN-bR4B+&ncM0yR9JnS&)q~WA@CG&)05QwItGEvlZICC4Wwm%HQ2O zX-W5D;x)(Uv^k_K=70Ignim{;B8Ns(V#cG-0#rfRIdIEye6N1`RIVqRi^;VZhI=(k3Zf$x^%U6HJcoh4_T|6Yi!f%{sXDmC#tVcc%dj@MC^%S0!xapv-)`T4@$>rD$-D zm-;(ZE-m|X8pC5jZ>~p-PpmY~5sy+3m)10eMyFzyy!i6!bz^;RKzRzK>V)JfMpdeS_pyrO0f*D~cR8D13%z>dRiGd9%(YdOkC9QzUtV(Z z>}(1O$zP*$7%z=#uMn(_D3_#45!>r?!?s5mYaI-K7b#Cm&EsATE- zHFv2hc6YcG>2yJCo0;U6;9nHl(FGK46EjlbN&nb6{H>)U2%uf3P@Kl*tVn;_IO?p?Al;- z7ENBnB3@iCSLR1k6!&4b_?dk~ypa1KKqc&!qAYECrPb9zI&~%qi6G zrL3bew9%%zppqxhSKaPN`XVh=r@XhmxCpj+j*>>hXnnJX81%J2CVA{siXM$JYzw84`^1~ zH&=wq5f@MdU;T(o`l=e;CtpP3ZZ&&n88p@}*MzB(<8j(uS!z!i5^K6eY&>6KjinBy ze0WvnD(!9R5OxQ$=C3``)W_H-J#NHzKs3I5PY|nNdq3ji$1*vqLT^@Zr%R>a&C$DM zRy^(v_a)z7nW%BwQhrEY{X=|b!nG^&DqT4|W6M9k!k%gR+bE7xz|l({`4wmkTp#iu zl(x=p8EnlYKW$1YRQr`erU#P6Slh@+NtxtIQR>jfQ*?irfr-rT4{hql4ryxKp;MAI zk$tf)m)E0WUQq)SYLQY?;nxrzlmgc|ErfYJLk^C!RS2z1 zCF(3$Y+pYq30P;Vdw5Bx#fUw#mbEbLoE9msx?hc&wlzu6J(&kRT*?bizB4Wh4;Z+4 zxKU&+F%;&d_>BXM9H~J+YW8dPsBR`28AGjenx{ zB^rDSOD*kKd z3-C$g^Tn!%O3C!C%yX&3)0tUwj^Gko`=q*@CL75(!3f4h9pm`*QwyuWqSFgRl9&=rZM6(zIM_=g)lOF?zp8y-OLH7mx8!9gSILclXjY?m@EY28yPIBJtidsAId@=HE@ zPu(wGIx2_+z67jI$z~-P*Yi4x@-NSI96g%9goalp2b(0I5tT?3y|4bBx# z+1PnJMb?4vP zg*e*T&}Il!%sJqsr=N* z#-H<<bbkUbe<3)s* z1_A-Mm35R)=={2>wcX(}ZYgGksyvJU26;42?o@8m^k=cc}lZ!@RDLbZ*YuiT-?)Eh`B}6XIsHGbU0;vhV(0 zoGp8A*Fd2bltm{SqAr9n6`uOpyXFJ1^oJ|Z7rD)f@ENn2QNPc|kcoFU@|)IQ6YMi0 z!QwpNkC7Z-!Sw{>a^=%2b$F7)lwJrG*!xxr5|;5W=J@{gewof}jz+-7p9_p9w?}9L znnlK&^-I_gq3?Ly$_+q+ksc_PSS{o#zY@8>9X*;cBGTMJK!skLgyPY@t>_-SOSf)G zFca(a!XAy$x4~4&(;G}Zg1b)G918^}6P<9x*>lX#Z?KXM+pb)yfY8P&-BTc6jah5H z%x$hr6>LC#tC=)9oI4h{9D{#JK;xM(P+V_3VQ}S`b>gIYr~pA^#gZ?hDT(>5nETc4 zA-I#(%hM8G$tAavo1N{sJDfXWFk$ROw@;1E8)NAApy3PY{;XW2>!#zy?Wz|FKK|1g zN7cRuHJ+u5(Sv9B5xz*N10L#_l;bH9RT{%k?R`;@77i;L2jhIZ(8HE1OeD~d2pFjs zCwkp?w=gJGtTbx$Yx*p4wK!d+Tv1|2T9(%wOIA2Fxrq0~2}4hg`q*Py;cKeGYCTl} zy#G@XU{z+OGZt^Uw{~bcK6^#hTbj#AN3UUlFcK<}2UTD?)Kz*ga~2)Q@+LD51|yD@ z_=-1*#`2PH?fepc%+#0i#H_T|;nr=*051d*xbRxUMx3(~s;Y{!dWo9Y6S||Tm42xB zP>&yxUT>cKFkj6pR~!ot7uU(iR<~s}@bF0D`p5AZ5nZQzdw-4JQvx_jEL=IOSDFPH z7mhouf@lwJCX5bz99d)2^INOfRB3kKZ!1oeS$nKu-9l}Mb zr7oW3ssouw2QVkgD6%(e1)+*hp=)I^;F_uNe5BRp-Kg7fk7pVXG7o|pX{rR`w950% z+#+yy@+G2BAGOsj`=pDNQsl+I5Xu?6x0;qv7%Pa0r*l>NUF8yKR^itV0W&SM(_IX= z$fxi@T}7dX_c->uiEJI9tw?<6<)C_%o?Hw!KIoekRW54h^o^Rw3=IY>4OX_a83N)U zcSg9Y{V>zDjG}VOY+rFZe_Ht#bNtTOMI+v-IG6S?b-l~trHdTD4K{ou5`a0u$mYNM+nu>R?8LA6wZ0Uz0{zJ9Gg~~@<*k)sO&M?2=42q?eVJN^W5ki!w zJt>lIXl>IpB-H|?$SJA!l>Nj5pnw8rwyx@9%RiE*@hlFBe)T8cQp1=CR?l(soBv7E zXcYUB&FK@I?U-9j95XAQ#?pFQU1W_2!;>!gGOW zN%De`y|j*b1YgLoh6d^xRzBmK_oK**+jm#;#G8l=-|s%c(OVTo{jcGP>1Eb$Z0Jl( zCOgImuXxJ#bAhmM36S>divw@*uU1q30s<(7lq_4b;qF-eGXTcoG>s@vXJ7fPu3KT@ z5mE&C!K#u&SejU}=Maoa#>ByRV)(^%rz&(Ar>LmuCwuCnb)SfvDZsOg!==Oe2nKs& z#H(rQ~R zF4SdRMoTsNf<7`9?_(E(eC6-MK<82qAe8p>bE}8S{7%Um?Uv3;B6ZvCO?K>-2T%0_ zhlNpEAa@j{J#Bz->-QObK4%PCDW5c*Dt?m7*!^PZ9m6aED!(dC1EY8W4rMbDi}ujx zvNz$ahU)YdT$rS!PH|~cPP>u9%rC2*OB%ZMY7XMN#=#|_wkTcf-$;lr-SV#Ln0D7x zN>Q3ZhHme3R*_cY(izwra&wuzgP%U0h=4`J{S&ruJ*b~%7bROQgBectfrZZ@@$!R- zYnz1ZISxl$ne?%GZQ<$>aDj!&Cz&tXU^1(=TehxC78lbI`cD}U8KalpV0m8-GHzNA zQEep2UTObaJ<~8@pJ5Lc#j~0up7l#hr&9-j@r-4IX=g-H>oXNUBeF_+UR`%NJaz?YNcM}Fgtmlw~h&~+)g(hKG`k+#3zan-KZNqVCC z@kO9q^)r74kRtuoM`#qcqy%16bgjl>=(h# zW;C7KerM1}?|8h_+maTIvoo3Ia=0_KqLSRf=(4VHCr52odRhz_`}#Y5Hr>Q|fFwn; z+P`|nZM^9xCV&TbDz*C6Zh1MP^9HF`@5dh+txwKp?ygqNWT~yvuefF&kCiV1?PR+# z`lGud^XG&0B`wp5@Ax2G2NCZ5{IuZ6A7xSM%|6w>-rlj+_|j#*{uzl$sR(%Yt_l=~ zEU=~irn?xG_;;<;K{ZLpIsl@07 zYf)!^+yv!*GGnlLETgL%oGcc>$@gMV?ORo`D(k3}(B0PdauL7)4o|k;R|)gRPhy&P zSj3XtpHJPVNLE5f3BC0G4)%0VM@bXcE$nDhwQaE`*qoaYQMjOffW-pvJesqW+7pXI zL8D@0i|Q73a`11;n_dolfj@abNtQ1gt3%58)gHN6Px6)bI-v&Lj6m>y?b>p#+P^m6 zVzMq*Cit6*&yNXx=OvDT!T=A^wYxEeyC)EwYFgIuRhisT<~=T1CHV==RlG*a;3q{Ca1r}Fz7Z(ktA#o(9D&dvr`Zj@N$p4f`7o%C9} zC(&%Xj@9ZGMxR@IzxtkEJADY_AqxF-fqA(%zz z$+yCx?5Azx5DR4d94|TJSL|@ZFlLo)HF?m)yHl~#0H?o0BUBELzi*^R@4xhZe5!cl zz$*8%-#$WN^PCNsun1*ADheB64i(dAVEw+0SZR6`ky0`fhp8Q*!}_BZv4*B5c|ThP z*^cxVTyx$9U=`;mq*CM(-YUO$VWczYbR~Q2Bh5X{5iS-IgVEl&P=fkx#x>eQJmyp( z!#*!{f_k*cxv?i4c{EJ)e5eqcF$Nf%?dpz}d$oAbUyBd+bEP8Jp#7BSST`-rg9K;~ zM$d_6_8eIiZJji7K^ipiBudkVU08){{f{shll_voucr*=&X?b|jjT&cjy)9TXAPzw zLT;;Vgz4o=kDg}EJR+*>Rb0+ge-e`>W6(M1zcJJuwb|<=bkG~dsxTweh zNtdatkd-I>b#t=N=b7VnRgQ))vB3>`7P);39dNHn1laB8 z?}G}{ZzQWuTzUPvTj6g(6f$}F6C2YmBdr7@k{zLR1`=UruTd9OJ+#(7rS@2}z3q2^ zUABL&my&!K#!r8wp5eCoGrG$C0?uWZBO>8^*FmCIzmqO)*dc=9 zWhuJO0iHXhMl+MpQJQW2R|#wj3a@U4e98TIDJAmWViGmxH4NyZ{;_8MqfN~_DSD#i zKRI0S_bpO*d4wKGo~mDSTZ!yu!NN2XfacN{QZ_VZcfQdRAkuFVRw?~z8TtL+%c5PX z19Y>y%`%lV**`SjCdpiE|B>NX)J1H6enLsbQzox)fI5Ig(CgUAg{Q{p2=X$BPR;7X z8lP^XC3*oeR7m|-VhF07TA!E>-{R{@{=7r6PSDR^gm*DkLq|V|hXMHg<60oK3xB+m zR4?Kamk1Dg=LtV);rXa@(==^(d^H-tj|S!HoFs0>xMMFk?s$#C9BfPF_oa3sh2h5C{_Od zRSS7uG#c{hG@8AB631p4Fxf4ozGycXdk7Ofq4?)QHq)PP*MJWN$B~srm~rFRC9pSH z&l!&BlD5IUxr}HkFMpbqEEUQ>pMN51U-3E4&8y<)Nh^Eg^v=TvueKJ@Qd04Z%a>aj-PA;m*s~_H(W_vFwJs=TPgZ2wn{1s@n~W@aOSh8lv`&wHcJ#hiK`=#9V*~s!{m%cnN!f z`tZl{U%6)Eml8MmOX8d#u9PV3ndFuwc1#<42kHH6N+!c+J*(0y{uM;n?TlAzj>lw3 z4&+Pdr#GCswY852q8KF0ju(7Cl}}3}<=%KYWMUKH`vi^fFa0y#B-gC1HvF1Kb|oa! zZSKCuwEOX4j{ZwQ0|nF|dydDe?XcD>5_@!stC*7{E}gmryb(8iuAZI>z9sx!9b#7J zer*Z2hqdg^@0k)#mDsv+3~|ivFDH-QUox+;Il$s)S(8fhP5r$1f?$)GXC28469lgS zztaxoJ(QnsXG8s< zymV;ia`|`WVkb_8j!7#MDe)fNX*6Z$VkEZ(@M_BGo4H^p-RqCyy6u^(?sVb8uZmLI zF*pc8j%LPitSm@t8Fb!(3TI&7Cef(;LbV6m(%FY6V|)DsXd{@7+JFg209E6*Z8udP zrEsDdTy)k~EO)uqww0qQ^7+;tju~_e53pKrXtdIm!jU1YgOB_&1iU3duk)%9?eqVs z(sZT{<-~$x#f=6MJzR{q#u}{vy0UAR$p%+lyD{%x)>o`v(9tmP7Rbmn5?gTM<4f8^ z8Jtoeq&I{wqt^Mpd|+3w>*Rrk#7=t&hz#i0=KG78cCM=%cSTD058Q|?R)lUVmQ0yb z`Go$a;DGG@vGVu`i^X|z*nHaOSK@IZbpEW4&0V_Ktt06Km+T*^VnFY-eti4;FmB}x z+dl87)06MLv&AFhGTavrDbP50(ZT`J={fuhBsBnqG$fVM-Hm1`)#@F1hHF!y7YeCb zbwz5N0cIQC=y=Z}3qz&h^v#PM317w<93#sU% z^T~mg1D(#lFDyF6buIuh{FTRV%&Yb1Hr0akDQ*v8(%7F4olB>vRthxf^fml@suYH5 ztm)zQ%g3+oUckKJ{qJ&WNiVV|Fw;t8c#oj$K4~3u=$s2qiDkpCz;#Pd!)}&0*rp&i ze&>l)p+~{Q?44N*D)6N&^Yue<+~;yiuOZjm6-md*rt~nyMo307=*WA<=Or9INzb3G zT{(0&S&nRz;*n29W>-8Gq-Y1TQe(nzZp>l1J~gfkK8%HtT}{^^GZtl4jUL-`NlFwa zednexhd4y#vx`36{1j8qVMup+x3=`!aJz%^q?S)5NZBB4GeSkYWE1S@Iva~$g9Q2$ zb3~kK#dLHngze`3<^-lHrtDK9<)62NA+a2#wwK$O=dcVSc5oJ?!)lZL&{kVT(vg%e zROVRe3AG2uGef@Co_s%~xMHBoQ_z`oQ~X*>KDIIPgeggmMqZ5*lC$M|Bo&$j6UR-x zr5o5}&{nj=<|un@q9Yl}wVYK}zF#H|O3jIjC9q*FzL-a<;XDEH0JMnwiWk zZSHx7JqG-O3qhM93X7thh-F{aa53A!#(XHq=&K;^p0t2^Joc z7E`ikrw-mOfDSgMo*s<;lb*^~P`*hUY&X`p?uZ~h08H8?;!p7!0|CkeMy0lj<@8Nu zv`A%u;6n_1_e$4%Pup#C7D|m%*rMb7<{5;cZ1qV??y2E}!MdO#tL1SxPhyq4$wu9V46UD(|j8;;#Freb`pt;~FV%a81s zL9KL^Y1SRqYXi07O-qmbKV6CTKo5lFL#h0$;4l^qwE$ziXb$FlV!JNz6qO-=NY5{2 znpGeyv7qr*Snb0BS8+ht*3%+CV|fflz6xLCocD*1pOBEej%>ro@t9m;hzTbTuUSmT zAv|!|`!k<~aA-`{3wA~}N>KelH`u)3AsBvP`uc4BBwQ`#0Y~ZL9)^Pu58UH-#2QFIc-YWLIC#n@TLYR8Lot~ikAtF~Ld4xugS@Nki?v2-hKum% z({cwsA2gj$2vEW6i|=`@OqrP_P@Nw@!uylA0RhdH)X|V0!OT-(iEEu6nlc(s)Vj^)n{#k2%kR53ec(l#6`Pwsf#^I0~q zWPe_IrISQXe*g~6m%Dh$=?R~@;E2pCN`5+rf4jy*mL2q|&(nOBwveV$ob)6-A^i&w z=3JjDE8AdvZchL5j1i%(jxE7JKQMqSf&!!K#*DdP!4t;XnV(Y}2@$bPMI*S>I~`cO zwiJaaR40hZ>D{55AsB?p$=B}lS8H?|u*}UbX6ow)LY2Ie6%UiR-y{tlOPUUvb=RQJ>dH_Kzjml_L8XWPY)4?M#eT?Y0@@O9(>jWC@uxlYZf?9UzVtukKAtjB&-)1fid!b%gSwXb z6nQ%k`qr-Cw*DVyG#hDTRU+}zKw(wV!np1zafVtMe#IKEBFVw`wzdwPwYpyxq*r>v zmMU{g{&{l50Izpbu%W@L>($)8#K_Mri9@>h_I#Dc(+Uskk9u;EzGbJ9)6>$S^O*5c zsc*g%ypQI=Ek(fFwj5t+AxA{bk-JyN_A@-)qpSPIbIy!~0}^^7%K_44RPb~3Kf|LW z?1Q|`ZKg+5YK3G477@I;*JZ-Z>_pG2s5dmp($M1>brewrf9EF!wuBogWXC>F2v73nJ!K zomqc>0jFQ!vlcG`e%^E%OwB<{*n`gLT6WWkjONA0>1jlJyH{18esI5v`rWr*%4wOX#s4!fYuCC| zeJJr?gT?MmogXc))35R*7Xt$peHL6s++#{UXRM(4WovNJ8)G(ZIvDokN3dj^oLZg_ znRVx>w#PL=Mr-^02F5wX{F#&#W!KckOW>@ z3Hmc0>7ooV;0jZq8H3{d%ut>Eu)F3DKMqF1#<9ZkTKvng>e>}&bC>#thXKMVFk!T_ zi-EbSO6lfG=Tqe2_8XLdV`J})SJhGTL&TD!tpEgF1zU&@cq6(?V|_S;s%-Ok1x-y+ z_sK(yN6v7t>hJE=87)kTEe{%z8zW98ao_{$O~ka$rJ6I~XVv6Y9Hakv#ZbSq===t) z5^hhVRjRN%DD<_b)qGJhmy9&$BjmmokA{2jL@NXDAB<=UhF0FhF_G!6AAl5860L{m zfC{xc+qh|r)eHjBzk|tJO2K=3*eq;yVs#HQx)v5boaFw_qIFOeU#Nd+x>^7|~Xp6K(G_b$Rt0uit{NVao)IWgHgTZz4!*tBP9iDX4AXRNoala@+FdD@+*Wzw=_cM zch5_q-T^Yygt**neuFoZEH;~Y@f zzTEjfgGRdjv^~$Z|J$HjlYGVs{IEwn)20&Ey@1ZA^J&BVkT)`geY|MBbF?n+OCN{& zda$M?{KZ97rvfUPtwwhe?l2XZq&)g>J;0mRE@KI!pjZ@f>`+*Zf)t_c)25v9&Ty^^ z=3mSq$shWkfeM|*kub;Qq&aaM55!qp0weO#QGY>B;pR%|4Wa}BO=8^M1F!BJb$ZK$ zJPOugS{9Ked5{jl{fdiEgQ%;UEvx+Gjt?^f-mzf70K7dqjQ0yoZ1+p$;x18+3!*d6 z$mO|0lm0?KncdJTu|s#6-2zy`5UB zZSQZqE=jv?W~u2ZJNM(6KQzH4bB@b`i-^y0rr$&(h-iX_A>9h@EheU@9~bps!0Y9S z5mcH13I#fFD||NgzUVt`-&M9n%@bqPHd7FLl;c^aUxD*(wvE%|NT z+L3Ov1^L7yEMxP_oNw>@6LFdV*h6G{<+N6#WJ~EiST_%icJx%TE^Kh?a>JPYM?J9y z!S&SAh!g64L&aYMzc`7*8yc`jJ+z5vz=cKJHa3I=Nn7gM6$`lNX+?l5Y8f45=n8|k zcT(0jXxe?ZW>YYlvuVd%i@dS_Z(N9Eik4&`4({(>80J9xp}Ev5mfOJXhNC9lHjg2| z!wWP0hL05el1#jBmuOOK9HZ)$hy`aORnUpMy$1cCU*!unu?h(#Jh|hZATO!-N>9FJ zH>$`%z$EW)m;SK6HVyJg)sQo9z2{8GV zBFlWSAGo5GLs_az(bLNxM87;IN!Ouk8hwgRmU&WxBNpuKX99rNDX#e|C zJ&SI!wBNKtqQhSM9{pV9Mb|YR&VO{YaX73uV1rz97$UHP31Fm{cV z8Jnl#oz=+?!kd_+T+&Uo(3;nnp^^7b*WSdyaK z}$XBIzN-~29CPtEjyY<(-Om} zbm306YTFfNEMAyCpnMhQ1a1#@;@AtQ%BlY;MB_;S^y{K$?=te-&=o>`l|6ywH7ww@ zzH})f@|Zt+yNS2E-a3p?Oie`vWVlP68yFtmJ27#74=)r*Mrdd_W)>=J@ZiVP-_h|d zr1Zx>P+ZcwEA|Ff{jivDd!-W}f&#n@RP;X>*WF07MZ>DM9601j1S_E3SZ_Q1K*MBr z6q6&gEOuP0?bNBX0wMU{zaI=$%Dqjz7e?ShdJW2xSlGD654c{9eOn<6D7@-53QdU` z(;a)7f;?#)=PII{&d+?$I?I)C2#7N_xroYUTu_Ev&9G3{T-ZFhQTZ{N?;#CFtA(XP|yn;7U*o!HVT zSv||3*S}*6Mo)&f%|%i@ErnTs-aS8$V`5^`LVdNx{wkx&TFV&zbGC;dzkf(`U>sEx zfeiq_w$@x%ALK@VM+<6nC0OFojBeGnNJ&0xr(&IFyZTWlM8!gtztK}IL6eyFA5vBC zo#nwx1V;4J{6Z~RSvVlZv_8t6sBEixwk*O!g2WdY=Zl06*r-*r0306nJ4SLMs*A3e zfTgQD%|@9u$66d>KT8|hJZZCKSd1=yCvmJstd$hA=asoohJdtoW7&D4pd2eds#HAa z3%Sk$B~Z@H&P<>_D;5JOlfzESaZ!b5F^d>TX9a`@uLNoac|i| z@wB4op0$nkqI@*N*$l)Q27;s%_U3H)*gjB9WY3{#m(||8*e|HUKApY0e68hqX#pdc zCSAmELGq`?ui>6Vw4`LpA@XI4r`)My&~3iO?z@z}q8qVAJ%M*dqD5oeizcReE?n?2 z?z>oyZZbPvX3K?Kcki7LPSA^&Ld!y&7%R*&(W}XnAraMwM%~fwO^vw+ZyH2nsz|-| zn;^qh20_czQ47Kb3na^locb_I{+e0tm{*!$>>rJ!cn<_x!JIm%g}n~?l$0I&-f!I2 z6fbx)8p)gq`IIc4h%!c21XzxFi41e~HH~mj|Wb@B{8e)excQymJub=bI}owse}2p<148fZJboilo^N z%4L|F+3jLbpC~CMx?cfyI4leFFt(pb>t3vz#c@?{6xqG&%xw z@HjX*QNS|)j3*Zz1_lPqsA9{sRZ`LtyOyF2(MG`i>j&^lZpXpfg5P3yNX*Cgz@FMv zJdUGBT)5(<%nuItxZ`D!1XA_*B$bOk4x?+En?4Z{GF8=1e|^C3=@EgY{24MsHLcm% zS+ECyg@YUVw+BEfkprzM7oigp^e~L`Gq|IofR6``LcY6@gx8ia zrx_6;thcIsNB~S`4+}qOjOeXr$ct9-{Zlc#ZEqalw@t|zr#3xM&}9m@z5nHIc$Ld+ zGUS}0Qy;kWTiX9cWFd1}qJg)kHXZElQ6B|_8vq|p$b}T_;R8d(1AU4!3yGYvqvF}q zH>M5{S(4nYwYB|yN3JerGwYf3Sys4@mV)IEOULHjX!gT87*n2H-q>{A%sMQ#lt!qi zrT47o)n+&77D?p4CR$a(t7q*+^;SZUs;)SHdwM;w)B9ap-pi{0O%x*jj1P=PAoZ`- z+N8Ix0IN6ha#Df7*Eo;lOoRF9h-Hh(@*kVhAlCYzkPuRO`Zx`d_I#H)NNu7sIChM0 zBouAVu?wyB>&w&Q= z6y%OkhjhNqju%{D_!|@SsgL<=29k4FGXzC@}zdU zi%IuPlJ5IvQ1wm5@3lW6$i$TM6pOsBRFsdKK;6PgoRz5OBA1uZi#510-?021Ye?X3 zKw*g<^XF<;b7SaVZ*;Ce#ovIjVug#V;xB_NzdiXT6dz-)05%ELUo@Xn_nFysLGCC@C4W$DeJDj3 zcuJ=DvCtXWtxp>HXy6mo%mLmx=2g;q2S$^d6l%oc58%Du_j$pVQQ?5VqW11#3P zW);=-KYF^6;chQ&DYH&{Gpg$;?jw}{hp-WP^5rJm`FtaS7ZVj#!23N^RmrWu78~NO zR&`04`~8JpB~Y~bEncVw>x=!Kj|bE#+t%zm(Z6)6tNpn(KDKveRLnY@r3o#j1@kLA zbW7+1i3O$e096fP6#T1RP&0FPvir4Q%57u}|Mn|{TRJkn5%mK{u1X>_9y@y|dzlSg zWS>qf-M>h80u>h5smZ#fA0(BI>_GAR=8^=h#u+N6+vP@1noI!r;TsD@xK@s8ViZ|> zlha(AKC{XX$H{4HXo#Tta#X;9;Gg;RlI5?y@?w0x7&OX9m9qi@0yd70p5dD)Bqr5$ zwIfwcDJdzkj%Fr3h)76dRX1t*Sna~R>k#cP%Yg%E2b<1LaI4m^hDV+I?oTt2+I($c zK2`Ct$Rznw4HNtMHYB8^L7|~!8{(fd+K;3;1Kg_Nm1DK@%C6bkG%%C&^D%m^uMPHi zkC8~CkDm0kS{Z>O$*L_UTvY77LA(vWX0T``8_E_9hV;8Hjg&T}7Aj%}R(+96hnJo_ zV5gj7vJ@6k_Y}#zO11m_e`EiNbd)H!dzPo%9ZTPRy7!uAs)6Stz(TvQxcCelGakI72@Y*Mw@lgMh+f`56gGzQPFdYE@fAD?6(&KCA{Iu~?6(fh&VvGR&Nz8%m z&xK3OiB*}8aWp0AXNU@3&0iL^VTsd{vD&YCim0WATEL%0{oatiBy%mp|D}Bgx|u>s z-~L=Wl(prI5Qg|g;wUxKbbmVC>3Z;&@c)|*&`*bIMNKr(X~SAQIsWe|h$1aFd-~(Y zhO?AMa^L<(ZTF0_^NeGV#<_ZP$WWSssn#l7*fy+_md_pFJNpIyc1~pQQlH7`l}T@0 z_0p`fd}*IUTiST2I}^;8ss!6*kZQTs?=Qfft29ylo(DDg`2Gx7pzcdL4nz6>rGyYG zKZd`Rdb8EP!MWcYW{$v!d4sPAvfbHd*s}sT0{Q^db)^_d>!&QhnZ&Cjt<6KqvL4-e zTc!Ukm!!%1dOVJr8lV7GjdlldAz7s=ugtfhq)_CIGF_zEjvnm7lv>TFw)>i$ow@Zz zabq;tjb^5N9|MF&iC;qsg?FvFgGOgw6#*mLl4hdvcc)SC3w+5Evg5HhJ&(vs zUA`rhlf%wb$%^K0Gq19>*W+b3%^2Xr>p93KfvSShsZcBPM*ey9X`+)aA+uuNyBvYuKhK8MH%^jc)UHSq8rD%!;7l z^jmb}>(et!)}MOECKn4eN>@*A*1x7OFJAdZazQ2ZrW%eYkrttmJx&Zf!_iWNCcQNQ z4fhX3&bCi*PjiJ-?+9H|L|>w|>t1Nb;d}!*8o5lJ9cYk%njIH(6p1$WA0+onj^=~; zJ?{ubUcN>mB1FhI=XhI^ebIN98coX3Z^q5rhg_7gOETFfhL8)ABdW}Ji^IbE~BFb(HrIC2pCWYVko zvXFst&7hrq;>KY8{6v1M*&`CE4Z7X54tl;zc8LV1-a{ApBR&k(En|dy&x=z$tpzv{ zubW2XtN8k(kddMUXB?iN#%h*l2>Z_1EruWp&1(76*On9c+pxwSN;T%rj7Y%B9P5S7 zEpD}lKQb^dA@dBrPx@ifXeoef^q#SVo)|0Q4qN2%3i{M+9bFN-`g9nAf1o~&ls>T(T0 zuG?jTp+m-1#xHqSL;0jeh}ptl?53Wi-0hsuF6tzA+g2)D=8Ukcuf_?AN$h|%0y2Vv zOA;@xe0TSrsP&eH%Lhs&+PA!mZ7!&fZbM%mWHzf=tuLFilf|f;hQH!rqMUO3idCY_ zRUprqy+?D)uQW76-S(WWXON&(vzqZ-nZ~-a!;lstAbmNJpxnNCz*1bRtE1 zkq%Nqkt)4+r1#!?=so!#xc9yJ&3pgXw%G{&RF6c_%jjyWzrIz3Prqws+d`V*Wh#jM_;oN4e(B7Uarhnaaji{uN1 zMO_ZjGhNy}P`)ye%<|7%RSFR3bP?PdxmPdueA;`W(w3mg;P}G;oGpcLUGrQmMvZX$ zgqlOJK3Ei_i#jZQlNk9zQe!;zOlkTBf9Q48^pBH}mdXW%s)gZ&ra|$OYro9+{pp1?^zA0$Sxj(63__y7i4#>mjP+mnmQQVpUB@k^ zP461-d49hntx$cM1IulaWMIf>GXJGhAP^l|iTC=ogCNB*3iYvit9NRuhS&t)8)Zyq zfBu}Q@=$LE6bdCnRXMTXXm=b{{VsyEns|tPiQ7sG^sFRGmSdV)Tnn#c$19ruj{b`q zLDjxBm-ORahoa*0(%bex>p3|-BdGnzt&ucZMw4O|vmRb~!Q#hA7%z&I9lh7++g`f( zEZt+z3SBA_V1{FrCnJl_Ry6Zz!O9k@4-99rijaHm9#6TR6Ga0a-w3S(=CBy=I#M=Y z&LLPaMExvT)_rDORY*>0NAM-xD59WuU8ZHGY9^!_&Kurtca+*W&dr*$^w>JB$3dR zQ^7Pix^~bGxH=#}nD4YQZdh35Dr4=H=Mm{_;ECa0Nf60Yxeeqcf|m1G>&+XGfq}vH zcyT)U9Wv)X;u18aZgDiiA3u{~_c`ro^C94+^2Vm7rr{cX7+qOeStf~e;Ifw=zdWCL z>^Y&XBq98jaZheRd7lwsJ(>^3#>UR1y*wU+?eFiWYL@~F>T)Ur8ycPswcW^=O_Qs??op);;cKd_`d7#?^cnO5`kFG70LBL8;tFxxK%wXTx3Y82HiUa9w_4x)zz-Ud+9N?Ek!`45l`#$V^}*Y=*U8QA z>P?LCEnD@M%=br^X?-`z3E{@|NxxzB`ldh|Av{lLozpY9Z$h;AA0R@02mK;# zmk--&4ht-68xFCyOJ5|Ll<3HT z;9lW5-ve^YGME_EwN@<-W+YtKIjz+>KGZMasmR-{vSw5 zS+CKR&aauL3p4wBRIcw21`!v`Z(t+Up1Oj)Ew{9HFM&~r3_bmo2%;3AJ3Z0M{Ccp% z7hY0Qa@Loz)oWXkz^gJE$D!VaeKvyNc)O<`LnM zFSrtGU56WzlfIZgd-j)5WVDCWp}#gEB1v(+v^$V)ro73h4p#5ALaX@d)qMGsEgz2; z{3Z6B7Zwx0Jux96|Bl-sLW+?2r#H9Udx^tpFXx>}vgZ1O{fNj&W%s)Hj9Ztixcp&Z zi^yx+?c5_dpkw8h=DDBy3toUb zo@e#X_|32|Elq)Y^eB|Kn{811yc6V7h!%YjEXwSMu9jy;qIHmdf(n02{px_&=YG`z z0k34OXIxor*&6pwGhMG$)99vTPMsx_m3YxUfOh-rAPP>4!1_i#I&5Y1&ZeQ?g%%`yobMtJYbG*Mou|c}^B} zh?Hdtv2EYvq*(ETu8>aD)PwiiPlPC4%sJG>nEBSYtn~ezd+}Z1l+lX^MAC&(^hMYw z*=w;6fW#pnU<)4n{8}$Pa0>V3ydAa??jPiihUDeSqc(j*9d@nm8n1JFMcd;FD|=tx zxCfy(XIR+>Kd;RgXz@diSUkV!R(eUgk2Wdt@&{zx+(emQCvzNYd3i}>ao#)|VAb&CMfsOhnww%^sQzYW?-sUvEYIiT#^1%pZkYCAHeB zEm70K2={`Vd+OD)cmB!>A${M)vZyefqgwBg9=Ozwa5zIPs3FM6zUODEync<$6rO=q z8piUfz~RN}$rP~PNw`d*P8UZXc$K>LUzr_4RItv>GmSNo zvqB=p4!D=E(fgK&$mnF*c6wHI6NS<3P>T6wAv7vjOv?n zm+iw$SBuu>S=HM%E&GLR+yNFCod}2vx!}6?BbjV8*zZ@UtkwNCc9mEa%W8>oJ?G~= z_waa)jyT7vkaaE2wuO>|gwmhu7vf88i*$9w+1W*?2eNL&$4C`InA~bc!L5QRR2jB zz8pz(nv_v1x17IIUTgn^B=(rbNhR4n-MQ>z`w?}C4 zew08<7Re2Ap!w7LUbx2J>Z*?>`TN>Cy=|)B z-~OejkN0OOIThlnXY%x}IPRZ_ld-WivWu^Py~D7DC9zN2IY(<~RHMoXO@BcfUyKVU zhhH`^SMG^0mKBB{0nPI+YlpXS4Fdx);|}jyhQd;!AX2rzw*Y;PS2VQ~QwzLPBwq-6 zLhUdseusgPQU9cx|1eY<$fyjuIsDGGRN@ZtI#DD|C=!0t{GpRO08Q@++Ax5^s~4ry zb6)wF@4a_^;&_N#RO-Hlty3P{l1)WF=e}2aOUfULF8(ef%O$@)Wd+_@F%d^&fQp5_F-8v%cg=eo;WTn9Sl3#0&~A`GxrZ<7J6Sz2l`3 zE}m}jr0x5wcN6*EC1hTjQccYHtu_7ZvdcQ@;A6Hk*ExJQ$;&`i<64^VK1y}DhoJCy z@;`=zd)}}{n9cuA(XQ#3xDFR432*tyo9^W|vvk8VnZ!i*N1JQa?Vdopniz)rbfKgbKTef8ThVDv(8RRY|8B9Ph$+Cd-;_xo6Hdvs1j9#>Qe$DAXiD z6?u|~!`G;&N1~4Fs$;3cu{%>0q(GH7l1X_}G>Qs-hBD;k<+T_q)Ytb{GX?-CXP7F9 zc?bek#X=r!zTKlWFViX3DaiDioSK5bV6b>W8=VB{vG|Y>LNztDX+bHL4`g~s1Br^> zn^|=eGqY+NFV%yu+JKc69KHzLSdr7@Vp@MZ)QGoEVoG9nLC|H?>En$Vq3;?w?;k7t zZojp8a&Alh*-3t>Fh63G+!mX#4N~)^gbmx5U{i*YG2e!X$iiS`P zrO6TiGxj%MM+)`De0+R1MG3<#RsF3&JaYoD93kuRKLrGLxw*OHh3pK*42M~qrTjJX zMhfNvu=wp}skyl;&Og5{l->Ns2^E-+=f25Tek#(G$YwCzq9K>use?Q`KD9so=0N5q zO$j#e%xu(*0s>`&<{yT}Nnj-DlLMlgE8(8TmzD^eB5#aWkPS8<>&-f|)m?B%p+46B zB2_f)F+JUhkw1muZ8g(jctV+V_-kAh((1(V-yoH{PH~Zu#$660{K1BlBbXhac%ad= z@Ns@&p^$D-RQTzo%4DI3?{)Xf2ZYaf#Ik0TPBYd-YEX@8eivQe*}FqkwX_0SjdC+x zWbghk?T(g_lN)uS{LZ($DXaq4ou&Qoi{MCLH`cR(r4B{31nBuTl&%itn4d3YDAbK= ziDH-MfUx=L!8{b}bX5F0IkOt#3^F3l=z z&f%%%+DiVdVmHh|AKBl2x?Fs`Firl}?D!Aa^toLkI*j5HVPexyBJZ;DiAoDgk%eBW z8_F#dGo45nK`!3WDP$CPq^-HLtjX1(VE-5D9{si>HJxpZ3n}jxQvAb-_e9N@>AT^j zD{rI2r5E`kwXN_uJ(s>hmd&Yk8!AEjztCf55zc#tr!mHzNs_*~R)-42AHPt`ZpMq6 zz!HvF1BUs@Hs7@dqXys}*8`-EglyOB`3Fgu30;?+#wRV#t}$eo%E&)KXr!*khhe9u z*J<{`MHq&#c%_X9t|WFWTIKa2Az#zO(f3lPu}k;5SM4&b_Ea>^n0r_cs$&}ieLKZV zg`(dXCq%Oj>r2%y;{2Z28i*6K#c#UfB2b$|3j%LXI6TCehQ16J%_g3Js^Mtlz=#yF z!jtInS>82j?Dt_3cWOi|unwVSk-~Z0p;*zsed@mb6(u)8zc+Tu83nH=_Nu+S4Bj}y z&96f}F3z9a|2$obpFcSkE#^IivIgy5hy)3Li6EZ%U}BQIIKImrJ6m7%$@)RK<-k^6 zE|>S3l$>B*3T@Ap*rBlJ_FWOvY-lLqDv9;0j~|~l9^d&edZ}MS8`sp#ndGe5c6i}W zIj{j)y*{PHZQTyk?I=b!Z)|uENcY9Zz!T5p`@=8RshQ+1HH6)_2hRcN(g>T|?(a{h zw-~HpHKZ|Ma^B`>Yt>_Uq9^$h1lLJU-n|rR8X8jXhUrD+>BX=OE1Nb-HPF#B`%fPt zz~iM3D8hRU6j&rW;wSi0HkVN#JSM*RxU$4*m$t!&&$pR304PSpCHY^!ztgPN2A^8b z%n;i`i_;QS*)8u}9W59Q9#j;+e?yDo?<|q9r>znfBYjbl9qaay(1A&2!85m6Pq6-B zt9&UXs)J-Y#^tl|B}sTPFM>ElyanZo$Hk!y-=~(<(+5`5ZHoF*4duP#UYpZiVry+_ z`BQ4%Urn6ewqBj@4&3(2Z9Z|j`~LLYiR;s+J@IGVv9CO^IJ{&WgP>2>H4XH5zo2Aa zfKN_r@3T?&`;-})%Za;D$g-1;FaOf#~LbAF4%HOX)% z;w|-zKx7?=(_$cvu@*Mh7mhFv+~kYQSR~l5HuJ*5Z69SW5xBxOvcqpAMSU0ymae@% zcRP*_rYf$q4+BPmU3tIi&cfwBZzL+b1_S5tPk}Tfn_STj@@H*Zr;3my;SSIWE;rCL+izRe;SVK)+UF%vytm$j7`B)cFae(V_ z#nFBC`?hXTICU)29jPd}##2&WVzl!HYNQimAhlH@0uZ;78R(VGb+L_&n)&4rO3Yiq ztrTm&lo139--@*|O$@_%cMi=KjG6VxZ1zXBh243o@)YU)STm0-Z$wVD+pDLKuCIxt zec&foP->Swr_&Ga8973zuvokyPC`t5Q6eXjeYN`h{KO@&k|Mrn8O_q9TL!JUwy4AO zQml9P51pr~sN=zTAL-Vd2wVB|seV9lcY($yZwNZ>1_+R*p$`4&16Nt?5?l zib`uU#??-kGm#nlNcHvWVC6B5Qh*}Y1hn!!nQ;@<{yGH(IX4y9Dt0)NbtWr+%>>QX z#(&b%-5xYz)@(-bnBj_?Hn}{gxpn154p~fB=?@0Yy-%2SglU3zihEn@=FDLW@B#!Pp};|O&kKi!U-Z~-}{ z6vSSq@m6yc=g%Hu<$o24@w@O(i^837&v71}=rQN0f`A6$YZ~qoy3WaDx(HO)4u26= zw5ps}w5)+GSCt5ufz#z%q+JW|MrrGVFTtJedVMr-ApD^i6Sl6Kt2Xxl?UZfFyk>Qh~p}R~cD#o3I3<}>j|4%+&oM`WZ=FYDsE2Vr6kn7u;e zb=pFN>wf}!hj#syZd1Ga<)Gz?UCkY@4K1YC#i7k^VE_+dIx}#>I`SS5r(Qg z$(4T8TT+S1XbPI;5D{>DV9F77E~3xS=+|pMz7DPg$Y%`A)p0NSN?g>3sW;)_=z^(z zd!LbBj~}BFR}zf#&5i6_6#QQmad$M&zl!ec&b)MRyW~Q)O$zT~g9)y9X|y^;zk$y4 zfNO@No*pIM(!(M;rT1E0!nTmwC`a?@KNIOsPD5*wQY7`1bkKt299_oqs6ulGiS7-1 z-dC`bN9rVDhJC&)HQY|IimRGw!XL&Z|>sGbOkG#J*cx_X`Y?c&kCFoA%Ogc?fO}D{|2E|O#b3}Vcb!u zg>*1E=f?HLr!Ws{MU9j=hNQWH7BUB%r^4lu;ROpM58M^+C4YV$X+XHS(?6D1p{M1u zQgS{*OSTEX*tTVDG?mcg$^JhdjNW?O<5R&E-vCAXvV9e{*1f>6)oT5eQt_(gQW|s2YK=@ zRZdz7iOY@3W*W|rCE6Gh_N#m^-`84-e;0^xw<hsl48u1V= zQE4sEL!nNcH;H>{)e}%Sduo0BjmCkhyt=6r0*&-`4h4u#-`lwfpsJtRC7AaJ1mX!j z;d%h7;+;GOWX28bKWyCAwf~zlp4>X<|9R2>`zIHeRy!)wBO^H(;O+WY^0F#2h0ovn F{1-&_i?{#) literal 0 HcmV?d00001 From 1c4157558edad71d93003ec53f0e067d2cdb2f86 Mon Sep 17 00:00:00 2001 From: Mauro Passerino Date: Wed, 27 Apr 2022 18:22:22 +0100 Subject: [PATCH 4/4] Correct unit Signed-off-by: Mauro Passerino --- articles/intraprocess_communication.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/articles/intraprocess_communication.md b/articles/intraprocess_communication.md index 767463a30..6109c1d32 100644 --- a/articles/intraprocess_communication.md +++ b/articles/intraprocess_communication.md @@ -633,7 +633,7 @@ Where MSG_TYPE: [stamped10b, stamped10kb, stamped1mb, stamped4mb, stamped8mb]. The tests have been validated on multiple machines: -#### Performance evaluation on embedded system CPU @ 1.4MHz, 1G RAM +#### Performance evaluation on embedded system CPU @ 1.4GHz, 1G RAM | Msg Size | IPC | Latency [us] | CPU [%] | | ---------- | ----- | ------------- | --------|