From e2e3581b97bf160710571b0c5ae93b799df95604 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Thu, 23 Jul 2020 17:42:24 -0400 Subject: [PATCH 01/19] Add first draft of ADR-008 Signed-off-by: Thane Thomson --- .../adr-008-event-subscription.md | 178 +++++++++++ .../rpc-client-subscription-rels.graphml | 291 ++++++++++++++++++ .../assets/rpc-client-subscription-rels.png | Bin 0 -> 45446 bytes 3 files changed, 469 insertions(+) create mode 100644 docs/architecture/adr-008-event-subscription.md create mode 100644 docs/architecture/assets/rpc-client-subscription-rels.graphml create mode 100644 docs/architecture/assets/rpc-client-subscription-rels.png diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md new file mode 100644 index 000000000..338200eda --- /dev/null +++ b/docs/architecture/adr-008-event-subscription.md @@ -0,0 +1,178 @@ +# ADR 008: RPC Client Event Subscription Mechanism + +## Changelog +* 2020-07-23: Initial draft + +## Context + +The [Tendermint Light Client](../../light-client/) is one of many important +applications that will make use of the [RPC client](../../rpc/) to query +Tendermint full nodes for information relating to the blockchain. + +Tendermint servers (e.g. full nodes) provide an [event +subscription][tm-event-subs] RPC endpoint to allow clients to receive +notifications of specific events as they happen. We need to expose this +subscription mechanism to the RPC client. + +In order to achieve this, we need: + +1. An ergonomic interface for the RPC client that allows developers to subscribe + to events produced by specific queries. Specifically, this interface must: + 1. Offer **subscription** functionality, where: + 1. A single **subscription** takes place to the **events** produced by a + **query** (the [PEG] for which, at the time of this writing, is located + [here][query-peg]). + 2. Callers must be able to create multiple distinct subscriptions. + 3. A subscription must offer an interface to allow for iteration over + incoming events only relevant to that subscription (i.e. it should + produce an **event stream**). + 4. It must be possible to, from outside of the RPC client, receive events + from multiple subscriptions' event streams concurrently without + interfering with/blocking each other. + 5. It must be possible to, from outside of the RPC client, handle + subscriptions' event streams without blocking other RPC operations. + 2. Offer the ability to **unsubscribe** from specific queries (i.e. to + terminate specific subscriptions). +2. A pub/sub architecture (with an appropriate concurrency model) that + facilitates the subscription interface. + +## Decision + +### Assumptions + +* All blocking operations that deal with I/O must be `async` +* We will not be ["de-asyncifying" the RPC][issue-318] and will rather, in a + future ADR, propose a synchronous architecture as well should we need one. + +### Proposed Entities and Relationships + +The entities in the diagram below are described in the following subsections. +The diagram also gives some indication as to the proposed concurrency model for +the architecture and how the entities relate to each other. + +![](assets/rpc-client-subscription-rels.png) + +### Subscription + +A `Subscription` here is envisaged as an entity that implements the +[Stream][futures-stream] trait, allowing its owner to asynchronously iterate +through all of the **relevant** incoming events. Use of such a subscription +should be as simple as: + +```rust +while let Some(result_event) = subscription.next().await { + match result_event { + Ok(event) => { /* handle event */ }, + Err(e) => { /* terminate subscription and report error */ }, + } +} +``` + +Since the underlying events may not be produced at the same cadence as that of +the `Subscription` owner's processing, it is proposed here to make use of an +appropriate type of buffered channel to realize this. The size of this buffer +must be configurable through the RPC Client. + +### RPC Pub/Sub + +The RPC Client must asynchronously spawn a component `PubSub` whose +responsibilities are: + +1. Manage subscriptions (subscribe/unsubscribe operations from the RPC Client). +2. Receive and deserialize incoming `Event`s. +3. Route `Event`s to `Subscription`s whose `Query` matches the `Event`. +4. Manage transport-level concerns (i.e. WebSockets connection: keep-alive + messages, graceful connection closure, etc.). + +Items (3) and (4) could be encapsulated into their own sub-components to allow +for better separation of concerns and therefore easier testing. For example, (3) +could be encapsulated into a `PubSubRouter` component and (4) into a component +that only handles transport-level concerns. + +This is an *internal* component whose interface only matters to the RPC Client. + +### RPC Client Interface Extension + +The following interface is proposed as an extension to the existing [`Client` +structure][client]: + +```rust +impl Client { + /// Initiates a subscription for events produced by the given query. More + /// details as to the query syntax is available from the [Tendermint + /// `/subscribe` RPC endpoint documentation][tm-rpc-subscribe]. + /// + /// [tm-rpc-subscribe]: https://docs.tendermint.com/master/rpc/#/Websocket/subscribe + pub async fn subscribe(&mut self, query: &Query) -> Result { + // ... + } + + /// Terminates the given subscription and consumes it. + pub async fn unsubscribe(&mut self, subs: Subscription) -> Result<(), Error> { + // ... + } +} +``` + +### Query + +Due to the potential complexity of queries, the proposed `Query` entity should +functionally take its lead from the [Go-based `Query` interface][tm-go-query]. +This type of interface allows for simple short-term implementation (e.g. just +querying by way of event type), with eventual full implementation of the [query +PEG][query-peg]. + +`Query` should implement `FromStr`, which should parse queries and emit the +appropriate parsing errors: + +```rust +let query = Query::from_str("tm.event='NewBlock'")?; +``` + +Matching of queries to events should also be simple: + +```rust +if query.matches(event) { + // do something +} +``` + +## Status + +Proposed + +## Consequences + +### Positive + +* Provides relatively intuitive developer ergonomics (`Subscription` iteration + to produce `Event`s). +* Can be easily tested if the WebSockets transport layer is clearly encapsulated + from the perspective of the RPC Pub/Sub component. + +### Negative + +* Requires an additional concurrent, potentially long-running `async` task to be + concerned about. +* Requires careful selection of `Subscription` buffer size to avoid lost events + and terminated subscriptions. + +### Neutral + +None + +## References + +* [\#313](https://github.com/informalsystems/tendermint-rs/issues/313) +* [\#311](https://github.com/informalsystems/tendermint-rs/issues/311) +* [\#458][pr-458] +* [Tendermint RPC subscription endpoint][tm-event-subs] + +[tm-event-subs]: https://docs.tendermint.com/master/rpc/#/Websocket/subscribe +[client]: https://github.com/informalsystems/tendermint-rs/blob/06ed36eaf7a74c0357b86d1d7450a2fec52ed6a0/rpc/src/client.rs#L20 +[query-peg]: https://github.com/tendermint/tendermint/blob/98c595312af02037843b8fe74f0ee0625665448e/libs/pubsub/query/query.peg +[tm-go-query]: https://github.com/tendermint/tendermint/blob/98c595312af02037843b8fe74f0ee0625665448e/libs/pubsub/pubsub.go#L64 +[PEG]: https://en.wikipedia.org/wiki/Parsing_expression_grammar +[futures-stream]: https://docs.rs/futures/*/futures/stream/trait.Stream.html +[pr-458]: https://github.com/informalsystems/tendermint-rs/pull/458 +[issue-318]: https://github.com/informalsystems/tendermint-rs/issues/318 diff --git a/docs/architecture/assets/rpc-client-subscription-rels.graphml b/docs/architecture/assets/rpc-client-subscription-rels.graphml new file mode 100644 index 000000000..d5094bfbf --- /dev/null +++ b/docs/architecture/assets/rpc-client-subscription-rels.graphml @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + Tendermint RPC +Endpoint + + + + + + + + + + + + + + + Client Application + + + + + + + + + + Folder 3 + + + + + + + + + + + + + + + + Client + + + + + + + + + + + + + + + Async Context + + + + + + + + + + Folder 1 + + + + + + + + + + + + + + + + RPC Pub/Sub + + + + + + + + + + + + + + + + + Async Context(s) + + + + + + + + + + Folder 2 + + + + + + + + + + + + + + + + Subscription + + + + + + + + + + + Subscription + + + + + + + + + + + Subscription + + + + + + + + + + + + + + + Interface expansion + + + + + + + + + + + New entity + + + + + + + + + + + Legend + + + + + + + + + + + + Spawns + + + + + + + + + + + + Route +Events/ +Errors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Subscribe/ +Unsubscribe + + + + + + + + + + + + WebSockets +connection + + + + + + + + + diff --git a/docs/architecture/assets/rpc-client-subscription-rels.png b/docs/architecture/assets/rpc-client-subscription-rels.png new file mode 100644 index 0000000000000000000000000000000000000000..db484dfe2fa9d00863b21068d279893c40c35550 GIT binary patch literal 45446 zcmeEuc|4Ts`@iZ?M~O~EWU0=nkdQ5VBz3Z8jj<#d%vg#LV<}Qv&}tbX$ykP&EHjK{ zWGRKoI%7AfjNRB~EYtA2hw5}b-|y@D{r&g*=jV@lG0!~Dec#V@U)TG3U+?R_Yi@dm zk5`nJi;Iiz@3RILTwGg7TwI&Gw()?!lsu&=+tLsjaRa>75l3!w}U;mVO z{HL_cSqlRzbHQg`T!QE2d4+}A4n~T+;rgtna79qhz&uhSa+iVLpJ&Y@e-rv`H}6@C z)~GQNI)py3NQqb*Da~35q>rbKd6s9RKd~q)lxtlWOkP@E+BkJm@Gf}r|Nr@av;tor z^c1^yO|)e;xCe}PE>{Pe#f~h^ej#-^M|dBrm@FDS-Y9K`3vEtPte)&C9vQYNun%ZK zIB9HNAFqHabE?mlHFQUEwb-#D5W4zp8QKshuDWeMv~hZ%VvSzp))bx;M0j=;tGoV% z8z(c7C)K`6L3@ioYD}b5HhCu@*qhcr`VE<;jaXfNE9|_azw^=|$JZBY_=6MsY!+9x ztbe{u`7fgcWzC@Jh3I|t#(D6gbU&8w&kr?-H=>gG0tyJilIvHWY@Ll3tM^I@Dj)~Q z>ufyx#h2}BF+HtSGwZ){)!vZrmx9(+!o5oov){)c?p&tVe7l^|f1iK-BB|E?;F0IV zE8yM-Z$a1pv`x(CwO(_=E`6o-UvKfjkcBx91d!`@kh-;0%Xdk&6Gw9j-FS*#gRqZ4 zvCFOCe_e1*UTgj18w#H|V^XNq0=p3W2o(oon+rEFU+J7-B zN$#JqbSk@^-@9LVeThzPTc2|doK&^6emAbjxb-P+oB!7ZqfXa1K6ZKY-;M2;!QZ^y zR{YE4yvk~L6e0hN<=#tF@K}2mt)O)9-1r&Eu&)SGO`iA1=bBxmT4Fv_;s7yTzWQ6c zZ9-gAg4{ei&L;nY3v;q(cj@5czl=Up?8>fW^c1?@@kOMeZ3>R>K4h#AvBsj3I&&>a zBk2*-ki#iIp9R+CPzR*|(zV_A_o}s3Rv1?Of+S*6(K17yn>y!}Gn2Qd=>Bn^v)zHM ze4>}3B;+t;I{5S5!z@J`UtUgvb3u+WLIAWFumt@GdJ zTUd=n8Hk~cWxut_x$Fb#gMRVKgp3EUn700F9VV)sd4UUgXiU+t)9%qrZ}0V>-sNdq zi&%|XI)5G~qf@}ZQYNs~gUY^x{g{bpS|q;8Z}?nA_}xGL^0M?}uo%p2H+wUc>OueL z;Z-)P&%PIqt)g^kX;!<6tH7R0TcREmsDy(_g;q-@A5oTFki9X1a}HxXb4)m*jP5CA zYI}7nutMj)eqaWNlWOia{<@`7ypTtg(Y^%<=-|TA$>|C@-XvBRti6YT^}G+Z(iZE4 z3Y_YtJvt*X%Ux$_s{WTKa(gdc7%5Nq`q*RM%{KzrL1Gx@Q^D$+2FZxfYhrmlHX>$w zkh{gv64~uqteAsw3bCRpMHIAc%k2Pf%l+LDvy9~=*EmJ@)T_6x8&ClYL~8^lKzTGV zA@^O+fZ2KUm)ExY*7x|y3uh??Cm@HmlSKC!HIZ-G`ORC`qI zJZvN{%h_6vqOn8`(`bA77~(Q5rLAkn-sAN==g9&HTv=M-ejH~I>Ufk!+p3_2Zxw?w zIv=U;|I(HG#Y(@pPYZ(gXse~f!IizV%{sOEtk(ov3$+-Xmc-+X1{)>D%`ID3fKkQO zRZMR@T3^o`hCCCu&ofcpsq#d*SKG_ev;>GxVW!21u)!L$w7RD#R!q&Xskg*)H(xHd zx8~7|9)zTrs@Lll%il?&Jryu=9-a{5Wm0KXP{JY>=Q0^x)?3%_Eg%7$QwmsOusEe* zw^b}~urp+SyPG9?Q9O99YNL_rhK|A+S%-=3mF%AX)C_*ZqLp{ zr+AG=L;2neCuq+%D+O{Leb%(w^h8Z1o7smydR{ioHvM=4Z zfmf3E>;cg{bK-Dsx_+J^iJ2z*3ce!aI{>1-_88nX-kS7Q=mK!va~{F@yd;?4^s#hB z*V_Xa!!>5y8G47K{3CvyrHlQnu2nL>{lWN(324*5HiScYz=VyMs*p$3qkPMNc^WBj z=awD@Vx6 zvdVA+7e;vg;4YHSJ(KDALYRFgHkC5~r{ou69m}tI-fXy9!!6t`odN62aoL#_0UP}XDRAJ8 zi}il%c`@vT!rBoKhBHlG-4~LDhAd8dhcG8S>pbu56rY?RQ_DgaBv&8$f zDqegM`R+J9`|t$=*({wp*smbR=Y_7X9n#nALy{hu#c9%m8KeG+ZQ17|={!~e@>W0aW0+WB8 z*P4$a`&Q20Zov{)WJGO#Ix?cik?FR~J7M|up4dv~>Tn`h-`7=hr|<9SaZ`dezs9{2 zlC@E;2%^U&$lgGQE{wJjTT>@beBCdK3~F!)T7Lvr20%r%FugEj)$0`y2MrT*Dc#%A zuwHRUpR8+LzAzF5axuAdHQzKx)ar+EYCfu`5E}u!^f+e1VGe^zJI1+?0Q@VLCm)m8TT*VKV_%Xw#W8boD z(z2EFh=EJMXluq*7wavEXGhN0Vr=uQr2XFt*)HkN?{!bzHGtvaMF2FEiIvm|E#vET zB5cMZ{SmBiHlxc@W2Z?#)-IgN93Gg%_)Y5X8!s&fytKLjU}$~BMr5Q+AOWl)*4bCp ztNUWgs>35t0a@;`EMFZj=_>Ss9UK4Mq&iUUaH zKS@E`L6R7j5=3B^{*(2I`INcL1GgBqf2-mX;#{Nb{kdbM1=EZl&YqKDBEXi@tpFET zPJ<+LgjY!BXmdsXbkL8i@{MIx2xB(;d0=m;|Hw!7Rgi-cTceUt)TzNL)^Oz;EnWI? z$a8nQ#oiy*F+8^~Z3O?`*?%kquVubUEKc=n+-^Cj-O|2QV&j@O`Br{~nc-#UT@e=(>@j{Dcf3*eSo2^6_t!P~ma$+R z|4-Rza6;pc%Qf!}6SQ06=e6i>j&r+ZjDT+ye82UT3s(cvw#*;hRouLtq~BzXVf+|0 z;?k*&-NVIIe{$m$b8(&BoUsvWxukxt8{qza?T`PK^-aEi<>Viu-?tOj!{5H=zg#E( z_@0|`as4f|k!Nyo{du!>W8Z-b4O`X?<;U%~Zq(}iKe^!*kJ&Hrx}q&&zLjl)@=gxU z*FUFf1sBQD2dgTu4?rx+1~wp_-7lB9{{J`Z+#i3POXA@ZO=8ijsgna0w!;Fd*FL|C zm-ICoj}zBy1}T%TYqVEv79_5Qc}Ft*b&a}wB;Qq~y}zY$ z(A-f7zB$NZ7w1QD5d(5KWzY6MG0VQobHgMMH@yTpG%e@=@*AEVAMGSuxlD5(&Jo)8=n#9q7<27Wb-+0|zd-WTE!%QY_B1A%I*9WtD3|`>07*2EjIOuh#X~>Z?m%yk8(V*v)CboB z5^8Va(&z2|y`I_0$x7}k_(V*eM+JbJp-sD&7dp(&)P=3BvcrbAx=yk>=Z&kox)+nj zybpZJM9LXoCxg`2`(s(Ii zvaq4|A~rpFpOW-hx{~93TttwAXq5RU%||gYF=Owwxpyi0gM_nZ)zL(C^&u=-C=Ys6zT{dbax1Fr37BRQW__(j^6iQ(FxIhr zPn^2L0T+-tEUpN#>=j5}dPc^n=&61F&5E>6OEVQS zZN^hyY9Z{QOOJ-gk@j#MA7IekLxP?Z}m^31-gw?GoGaZBECo7sefUdEbGJm79MZWa!^3ynWEwhmmn2L`j z-hC8G37pNneUCxc-+Pe0gyB7`3noLZrNQ9s_qpD8)UBpwcFu3RwcSwTv_ZY`hmGCP zU)IKx-{(_7vOPpEpEw4=pjwxsp$s?5e3N{&)-h$HXm#JP*pMl21c;hfUF4s&=0m&l zf`MWBq}roaYwa7hzb$rei9-}1FQ#98x0gF%L>P%%yR5Xu)9$%OfLB2&ERt-1Xnmo_ z#O2#xme`@G4!xPS-QAlabqxDF7<~An`9;7Qlunfn zhRBvY_-AsOp25fWMxo&v-tGg4Ws*0N!2%^SnCIGuUzB!{l$OQx- z)WJnTgZgH)bbRNI3lXl`@Ggw^saK_Os8j88htsat-qzO!F~On40hfz}en7C>&PaM2 z#)`T%RWgJ^s~A<#xBS`*55q7>=V-&|pv9$EuqUotzumL$YloAod$zwFN%fCoyWfz2 zV?41?!i%}?#l48hK|~nHc_tAZ$EPewwN)>$o-aB>A#S|Gd7jMh!%imQldNl{+92KW z(Dlf@AtCnAa#@>0o85U_c3%`kGDkwT)B)%j@~u3)Wt6vcDq%P`M>?595pP+*I97xX za}yAYJ`n%$WAYEci~iKbw0eR;ea=nDez_tpd*pCPyy#s7InNqDR*{Cr7Snv0Fr-^J z-EvLvLeb^BcEnIZPpNM@R!fMn`uU57!L^T53bz*D?hNX`fwac|$m}oU zNUAQkEx)-VGX7tek*nJIE(?T)9{vL?p*Uv=574mF&wQk!K7IKo2<}ph2*6(3viG-r z|F{D1w}ZE6Gec=$88|=9aR9>alcOIF7;ahI}jk+yEJ+$obI=#0E&ax8)AH6ACU_2>BEzn({-u&_PEB?CvWBWpQMMcZ{{cw_7Q^NA*%}^(@O@h4h;OYQ`;FpEf z^7x4|bBp34x?j7{04kj+NXKj!KBkPe#WLm0x-R#z0DVL%Y>T(Ty;vZHck91WfMR6_&gQ)$B*_?PAM1hdjW60&s|f}~+S;InOnci zS0mUH&g(3D#vO@!5MsnyxMk7hzp3syN3^aC0IczIV7dfc3a5R`X0yrAS+*}hBMr3A|Tonk7g%=J`$-fn#c$V%C!cs$rWtn+&yfwbzfKclS3x=j#<9$ z45b2&LuRIXq2Jq-4UlfHA3Jk@V9Iy|73-|a>PM?nVkod<;j7CdXHxE0^gVG;55s#) z(6w9Wi&NUZ{bhv!NSgKs_P3aw_dF$XYv(`SlVF`*(`|kuxoi7PP)<|^)cy-=(tVs4 zsCEU4n?%2&k?aG(CQa${tsbakP#|sIsQ?ECeuZkMX$0gs`U2XWNf0)6O>qSaIB-l% z-R~72G9=YQG|PYpvai4}mE6FlSGBpYB*qe_{dOvXhjOC2%LI3kxL*@EJ<@ zw|Gig#r`gM9Hv!N44Jhkn(J4P-MWv(zbOb2LbW%;#%sU(21ZLaA$@dpeu73MFvV`R z4*d+%ily&(HaAzo&J~EZZ8@x%&Y1P67+!BYbIyFC8ue}v-4y#N4u&nbTG%jwk%?M8UKbyJC%%Jz7^XLmdIkzi19gfR}@g|}3BivbM3 zve>1n0KwL(hpCN)x$&iOANX)c(WX9B+`tCH79X=G)iE4MSfR%_D%gZlL(GNv-@VV= z?1v-(kJRDeY3J3QXip2jeXn*)!#0=54G=~9oHhrrND_#rq*5)4HiDT{g;-okI4A+5 zh2idR=T3sCAaVM+u#kZlRUT~z5JW+Xfv&8VFgKy6K~ufMvPLN6MYO72RI)Tz#c-O2 z4JoBEblI=3vqw(;Jpd~W-1fP-MV)sbo5~d$Qauo&p~eT}bZ6^#U!C}i6$VG5GvhQG zC;JIXK4I+Dffn=gIqY|bk8jgjhfYU%!5i@|528ziO_ML?1m~7|eN0sk>;ZMZQ0!u- z2QIJYY9az_E2&Dh@OUT@djZ`m9#myzZ4!$#C~umd2kHa7|MNWO49M*yPe$<7En9hv zxZhZ#ZF<5h#_vq-ERW6&rdKWY9_n7{8&7zfN5zJ>AQyY&T+^UulN~tN_H%}(%e3^V z+dB$LjLMNghnKwg!6Hr_ixxEvcQx6AWSl;yvJ1q(;&`D-73=#ej4a4Rey}O<#iNk4 zbkP%M>2RRuARezbM#D*bJR(P{M4^mR%#}Y}hpd%+qM^PDg_raG##1a!N+GoH@OzC* z$~-PL8<4Y5VNsBw(y`){)LA0Cww%7^3BN_&XWnEb7B+?J>TLkBnBw_cuvfNx2Qm+J z*<)JsYrK@p^N>{OlUTs>?c~Xvg5R?9O<#HZYFV=?3@lwoc(R4$X%ovoAQLatP0X}r z4Jvd^yyrU1bl*lp#WP{|1Xt%Zbxb;5e(`91ant*8PMar(qgiu#vCDt$+q@Z-&ZFoE zWKuO;QCYQVJmfjUfOiXI>QE$V&?30#5DnBzqJJ5@3WRb}UKEseoFi~GjORgvg*Pp5 z^5fb01Xb(%FK$Au;Q2Fox#r3P_fh<9fr3aJ6{K#x0{xZ2{$hbbek!A}JgIFZ$9m&e z%7R&4?_VQ(Uzw%r;MY+iO;<|EB*e3#0Php1i}-$P4#_BW0L!ZO}`U-8$APXU6W z_J>RqsFui_lsQ7>$VWn9jRM|gxY~n;4_=c>s_c6}t-tp;-;T`I{24SVNM_zCdy|VG zl&l3|KNN~2moC2(^DT+G!zZHfMj1{y8gf)Jd?_Pr0GOlC$|Btt9$QremSliwWaD8& zss|D=cciK}Y%BSEaCn1opB7@gGnXm33BWtt+L6{m*h#U)#mFQ~`JjNJ%63Fc=Ah$TKiIKu=HMg+j9=jL6$$l^bq5 zbNi~yrs+lyy;n!&Y;RcmdsLaKv?J4Af#BQbho$I|4q2nZ${WzF`2idv5fF-^eB;aF z>5FfTGnN5oT^g01>&yUZ6i@h@s!y>=zpFG9i0u$iER3#lcWd0TxNY0s@5xbgRd$YN z(dJjQuU2O%#~Heoqt*g8vBe2|`%bh{CiCn{IyFR%N2qJ7rF z*fw!1P4Y?33fJPR;@q4okA zrT^r`@q-0Z)r*6OWr=j27j3fz&eekw_j%MTJt(s|zn86;R8$MsUnApaJX;Km^L6Ao zD5W#p^)p~07C|z6U{98JA6`WTPI&-9wI&DMKMqul4~|(nyUWP}7%QG(Ut`-Oge13I zXcBagwaNFW!!&}DDAEG03cTGjG-$NH@4fuX4Tn`;mNwd8oxG`NN*kA(Jx1QAkS;!Zu`^(OY)9vnPc;hSZMZ-- zp4>ys_GmoB*llwoph@tW?&^{&1R-AG5O$j(suCOMe6ZBJ54x4FTK_aaSNC+*zmxXnf|VWRHC(%PH))Z~MShLAhAoE1 z1DssS`Eb16w(na)%Ze@yvnU8gsvO6s!3UwSp;MSUN$>&l8!;b9WNjl>z?{e}t_=v= zaEg)kIgHR=az11gm{C$GHN3A>;t~ebFcbsULCcqa_@9QTs%$Ob2x*{NQj%!~kAwQ2 zEC3}7Bq!ZCkI}p~Dj+^ z`ZvOHz2del>*2ULnj<&h$l$n57zZU3F5d72In}jgkllM!UkL@dL*R2x?hUT$JI*}- zcFbw#^n9=Sm|cM%q0ta+YT4Dy0UFrBi8CUV^0rR%Uh>M>2(OqPi>~x_7XreEw7&v} zyoo84Xx7dG9uNg&mcJ)10-fQ?H-J-0YCZu1lfm~sEBxJXQ(|fSylh8!2_IR;NIL=K znx@xxtoUVta>KuFJ3W$}^Wg3!fdk(Sho6?_*X0GICRe$_j`cUF*23p)xr z5(B5~E%9D25RinrFgdn@#msgNE0>R2|kJ1r%cj@D#JfZh_*zGTjfN zrfd3(cN$Kq{lY(LB_SFCJ?w(1oI6($d)%!t36uwWAEC+gG9b(eBy5I(0^Zd7&JdHA z7wt3jqc=BwHBlQ797r^5Ow$bVX?Ja1aZd||mf-FBF!nfDZ^P{*x%DlhorIv&scXrBpf+N`=HM6hzY&ORN0KeB<0EE()8pr291K6rR z)phr>z_nj^0z+dvn&<7O85|F!^w*+beZS~_<%6hv*0QwBfELft_oxn7(@Q>N_ttf@ z24ATChon?2T}J}6@w6tF!AYy^{Oa;tuj5Kg=50C$3Q~^bBS`b-E|JK_dNUcMKKj|>} zV3AdYRH~1%=(32iL?*Lt_xl2^*Ko!3@dD124+{LkwbE?Dcm^&$^b|@;!BxIV9bj50 zU7g+volRV8I@&k8Cctm+XjG2+_@M%CpB83HiBkH-XaS#_1i61{VRF-=&SiT%p} zM6$B&;?b$D53T~6fAQUvmpPuttjl+p6e&)Oi^@8dm(W+5UJ=UOJ*!P6q6B_@N#jbR zJWHi_zE%X1Y)KPu~XJ0~{s&>Tyqw0r~#B%&b^io*^YR{=Z*l(edEUW6)19A^&9E zMBim8ZsY!S$#tT96yBHoob<>#tJtl;v;W3Vj{HBTMPYtVv$&6M)7fCC>#vCZd+q*n zSN;3b#d%9BjjKEKBY&B9Uds!y9mflpK<5qmCZ;BmgOM2uzb@Q^wAlZ7D!_U&bVk;`v@&|cn{VTQR8$)Kv*-jAG1TU5@G2pR!P=^_GQdXAK z*SA`VJ=$@se=a-u#Nw8DihK2Pw1|ieKU(-JR?Y4wfd{WeWort+%bv7WHkTF zne;3G=&lCB&OFRB|Cx;SaSnv!)DnH!R_x`GbP}LJN#GK??DmwE=Vdh;CjR?97$*PA z#P!qkvSHuwZ@wLctN_||=<|zk4S+ z$-E~d?~^A1>06LkS}g1GOqa*>CI@LHA`ix6yz(eHu9&i+z~WEE)XauVb{?VJDRW9y zxAb{fEQ_@r2{!NmU^JI?|K3r1>!&q0qj*W>?>KsnV*e4-iLH{M7vq3bpd-&(mb#Lg zC*RUL4U`vQZZ4MeIzFCcn{{i@%BYb>UBCMW%BTg>TxU7b_hugiLwpm$Z&ppzDL3AP zXa0V;uffUV*!h>Q2upc7DE4rb*G213R)iI;L}}YWhiha$8uQWa`OQ9X%OWdJCExiL z)f^j)O-HBJ^q>9{uM1TdV343#aBdp~nenHwHSaR0o55`n3CV87; z*hdtovopo0Ysp0@w-lqvkV33wL2>Q1=exza*$xpS+bUuM6CL64T@c%~E91QrHXX~z zlqr^awxckWe#~RTEgsqN)5|ENgk&tostv|KbUa$6EP*U(bpAW!O*t5MqW0QoYmI7+ zL*?~CPmXBeIgraHbNDhHpPr(u0UyA#H-oIc8T4{B+qpk?;}j-91p^8?dA?{Syl5Ql zS!?;`Keh+5-J$4mZguS?r;}E(^ewxgJ#$v4=Cw1kPd5o&#Ci1=$$NE^U9q}_wSHY` zY%e~%eo12qKOJX+On)ML5n*_0epxs`&8T#(RL)2c$r@CWS?R6j3+_LbGW(HIMgt<- z3U-G3q$}A9fvp(AJPPc|4?tv2Fw3WIdIXQa*Ptndh?c0lxIW;sbAN2h%^7t+tA9{S zdF8eF^fitE7{4i~CX$=>>WS%bK&ux`RDzx&lmU48fS%w~OF*$*6%{;Bqk+s)RRz`= z<73nUXdt*`HM18USkZwpDc)4!K=4~H#Q+_80%4|hy9pplLmU3E8Zdvz$EfhDGZA=R z>{1>4Y0TEUc(Q0%ru&P{CleLrmhiPc4}xI_rRdBWLBT#Hzt>IWF44Qb14>y53)Cim zO^}VaT*Y%_{x3nJ@Jm^62k3^Ox)b<3J1s=U(}PLW zLI*Qrb{#YZxjHF5V%4)r)#saRNhpJCOZ@Wt%R2~@Vttwl`}Pv@a&-|C4w(=2X=vJg zn`Ub3MBh$w5=gMOZK@;y!$Fi0zhxC=miXndlLyoAO~PIM`TMd# z^^-x*0e}Aruv=6~mIr*~=XMiS!y2 zNj2YPG#+I;mI+m|}~+xaSfHId8qQ+0f5dgn9U(J0%42I##du%zr` ztDSL&3ce8MAN`FF#_@cC1)7RMo=k8Xt0{MB6YfqO&VT5L_6Y-tQKKYs4po4&Nq09{ ze%0&FjymmPpJ|8Y$MH;t&`5kJD%*7uul&$9FJrmh&}8cUAioZ)JWM`dLJdD5VOemy zz?yPoun^lZ+oMMeVHUH|0XxVr3HLLjaRXa3dayrt-%zbKQ1`{e=qZDyAGso)+4e7> z;?j*A;c)yToMd#%jRL#kcSIZZQ?jJ}mgwM&U@9>T@5NqW;3NEJD_b)eRz?MS@A9m2 zFM(xH`;Yls=q=XY&JL-mw;y?Rn^vwV@c@&FB0Cvvj&_axv!E^88YK#q^Cc7E3k+UT z-jwz7WAC*FrW?}QG)dG7u z61DDwq&eh@x$KP%bqL4#v^>{T^I5+2`);plnwc)UlX-f&J?p-s*$}7LT} zR%$B2h=H)7UJeS*hd~Q=74PPoRPlcs2!U5#X-X#^m$NMP=JqN*n(X8e?#VcYXm&aq zPd0@!mL-Y9PCaEk^q$41qu1*^0Pg0XL&GSMTf9F@gd&0*@`s~btn-`n;~RaJpUVKd zEHj?$ZqH7NSQ$G^4bihn*ZX0Y*Js|{hL%oVQR(aYFIfryVq0-tKCFP83SqwiC&RBq&KO zgHFoN#wz`&yhU#NEjI~ncfBb2$>J`3j%jd)MF01t2hGDjFy`9sw^D+fM3Kjud^~vY z`j^;1(WJA+CQtsYFm9=KaIqS0XMf|?lUL^O7Pg1_N<3YGqERFa)4&mn#;aUna)Ruc zYJgBuKyS9$wdJftCs_7lpb$;~>cqQtK;7iY3CxKoOuN)Y`yilsLpfE21ZtDk@*fd! zp)BT9;BP)b4-2Jo7C&tyUEi~%jl|*lCtrnIzjKI4p3||HHN(GMXGMnt?H?ZcffX4a zvy~3ql6&3dcnR&z>gP&?kwRC}!xx*7hag zPEFIXilYzxy$~68^U`WQ{U=}`Mtc)B7udfD1?4`~Bj~kaRI;ezrCYgRolBtCzr2eL z)I|E6)3fu}pi`@<2|xqUWR++2A^avq!)bn!qq_ucrG4s1>&!|}&4kqD7lB;8$3A57 zden=-sDC9(J?w9S&kF5!)UIceJT)BIHf6HRc}B5pJni!_BWv8J`N~QSz-ouSu$2TdnY>H~|GrpCIct zXjpH^eC-H2rRT8`?4}?sJ#%`^ci0P>)tlE-jSW&(aa#iD`3VK_hA96{#38`!YGT$n zC@zWfsR3ub_-yOnWEoq~lS{b(EBS2e97f(Dq17F}sbdyI;V;CleGgW)wtv^=Ofv<4 z6WTe@auFkUM7e3x7M||#W>_Q}?6E$#En9b%;M&I9_cMYn1I01E2NVJ#@rx^$GnR{6 zbc$6vVA?Mpl?#<{gyqoYBo~%NMZ+$^z1m_wx3Be1jVsuwhwH_3J@bh4etDLN7e6f( z2O~G`1Bw~d>*MYZS+9dYi!;&ohn{>>K43KW7I+7qnyx{5AoRZJd;-mrGg-Ye7XV4= z-PNY6a1J!Ut=-H(%>n7_2N=F!wK>Fhd?eq04u~KA;v<2*Rm`%l4zF_5@%wtVqdWjE z2F#;C@2y10=zf0ylu{I3-z~+d99gFa7Qg<=BCJk(Ryzqq&8*WRKgZmm?JgO%@W|T` zEea(+_0;sIHQ$At(L1Y0AI*%%hdJOdU4Q5`fdaw4(pAv2N#Y3Ap&wH{BXj_ZjpERP z%ELg*nG8xUM}5Nhwq=SMF?`7$A4Cnt*^AUg@rmyOAz$o20-=W$pv}evXeYgko%kHG z^iY*yd#-V`L8Tey4OvsLczpmd%Q~rpryIHGOD~C{7EXR zTzPwdHtMoKHUIU7XYYa1R=Io-G>m&tohRYGE!xt7NOQo$$_1 zo0h8ZD$&#B;p`PWJ+DznD^8szqB-yokuQ4U9M;;>v9#Hm?W7X@X!AIyHSt}XIQ&#$ zWYXXh;WzV|sthu@Fg0X6mzJBIR@9_CR~(70Ekph(tA!?%4WfCf+RwIx=;mpYufh=g zS~Dlxr#?8u9!N0}@*~F+6b?qAp*;xD;jWwVqe!wnPowJx8vT{$+PXS@DrwtikK~w` z<8-s9^0zL&HgR9@QmN4f&6r+E3klL5GE1ITm$f(aMR};JKwZQv6n;S7VcWuRJ8QX9 z`Z}UU8Gp!rOS5M(l0D7=8k7De?q3TsMO~vkV&CmURKk$x0O#Q0XJx~8JDE5P>gZg8 zbZXw%6|7U0g@)?hzSI>^K`9wtIdf`KRfXpy=mwwk$3~PHzP0K20w$r0AzXh+>zN+m zugm>dA+}@AA2jzvK_Z3cFNGu+b0BF<&+FG+{x0P29F?Jz1BVq+JVImNy~nbMzk_nx z*14~OqcI}G524RL!hOt64~M0w!FxDevp&^qrbmQzi_*svb#Yt;4aj3>C-VNraKuGg z@Np?Q%W7+F+wM;PXtTv72aXEA0)w=waI+Y)QfUqeZIUbP4yZ!)rX5ZXEt)!*(pdPR z`=Ms&(iKSf>|5c!LtoSKth=nv4g#BSn8>xUyLlvV?XJE*#_-YG<~;vto~Un~x~ZK5 zdRWW*G2p0&o(OzSa<#o-C1}FMvu=qg_jAqx*^bZ_ra0hU-vzRxr5B)2CJLs3OGtur zsJrL!*^to0vW7gj@ra3n>_bI)o;JI^ePMYSr|uXwSu5qcfoh&YqJ!UE5M1K;UT^4) zFe_+SvaoT$j@&rPG-(-aK9umGV!FI30i8?0qfy;XG0aX@hwkqd>Z*Ii{Hjo+uy6@6 zq}wFi3d0aY4n*+$$xE{DV(;KF5qF;yv?zq#f(Nnd&a;p8Uo?NnsasD8Pp_J~l6BoW zMGd-=(keJ;0OhYOY`6~eq}BzdmjoWL_2Y-k7X^dt!pDv76Cc3KrAj$k`_~;(xd}{g zEK5npwqPJhLVHG7DWS$5ml$W*vqM$VG2q;Q#NFJM1!y;?_f|_3e-<$Q!QHyxzV zZ^aW088#+`D*|X9Exhqf+bC1d7t-8;z7>VI&%Ceg_w;d&V0covKj_=iEM5yQO$gu0 zI}3Y<8EMg)f8cmV<@SpENiV*V3hfq!P{|p?jtTXs(m+n3?y@8J>H>dY9BdTj+ zcW%U`F;Pq1tJ*O(b-h%QX~ADKn*qyyx8>v<`NC{{bYo|bUDz?k zg|GynOI`VPuGODpPc#q>!=i9$u!BOIOO8IfxH8)ynF7dM2P%?%D%;@^zzY{_nSEwq5AqFfzswN zzA}*8QfV(Ynl5se(xI!RERbqw(WQHFm80xfjr7pSbf@xee$m@*89E1D~vj*LK85tCW43pKSB)>hBg#}IW)ri zz87m4XhINb9FEz1T&L!^DAhm zw(Tp@+fqUR1jZAx@`Qa`iF=|`NG|*E{Z+lziXdMW|5o3xUcMSCW{fAcawQc77FkV6 zZ=F}=o!{s+=Rnq8ul4(5Ii;Rz#8w?wf#aOYjpDX(`V$tw(cYMk$(vswyYuLnmHic4 zd|hg2Fu|VM3+D4)(U-YvFSn5GGdPNpkq~Nc8nU|qvk00PQox~3eTSBifyV5wINzWM zJuCVdmy-p&$}2e99LBB~#Q?Nn7lBZ@+OW>!vO^ z{Hb-!7gMw*urauOuh^?*f>GvgMtfpJtPZO4UQ8kq#_vp%70{AJUFjm*vsugAUxLme zMzsmkA?yh`s0YC*@%DK+cF4TNWFu|Kwe*3CE~ePx3Z{a!{W0t|_889!+v88KSR^Lm z4-aE5_Nfni+wWRA`!XhM3rZk+CaMwBZ z^2R%4usR~5Pou`sEb2ARXQ1~s4S?gikGTapwCUNe7VKlny%i`a%WBsuEJt=ujbFJ` zG4w);!T%fCz;~dWY)i|V=8|jCX-Ms29#Ha})wXJDO(8DIRlBJCJecuXpS4=&{56e6NUjsk;w7qi^Z4-E!aaT966C z8tbHOnRQM`bBV$MT`>dGD;pK_jpqZglHh-NzQ4-7$&5)(4>9fIb2#VF4O7i2K#Ii4AF_%mwWRA{uh-A#g(3P!tksup_V2{sAPY`)5ZaXD~nPVJ49pIv<;??vEM+Y8v&iS5J&VI@nCMb@t}; zjN-j|K0|apHfF>KGGoQYgQkU_P7x7RcdO;WofVyzp$$wcZTapJu>u14!lVb(T|?0UCEiGe^YIqPsSUFi9F# zib*ObH0rHasy~54<2cSVbb0&pPQPf|#d%>UI9lZ(I0HqbgW&J3SsMTtm}U@pnp4&N zz5Km`*r)zp^*MmT{1B^s*}eBSiFJ>Pqt(gc7UbGe{F(w8ZL4-T z^-ARW!C(tx9a9LvV>}&R-*tJ>ChJ{XDkLz9T-=WIAAU(={JKz#&;y}|LQjQ~gi`$( zf1Nn;znX{0SNawp21AiymkLl6m|p>^3l>>`>YiS?Qyj{(%Tmo&&g;OBJ~hQ{7Vy1Z zBcv4f?BR9#EO}ab&{fWsK=F6JU!!!Ex>fl^;{Rdqy~CPHzqZktanx}{5eta4QHli+ z=?Vg)C`cFST|j~X0@8&583#oK0i_d~3WD?!AcPRGPy`YqgdPGa(jkaIB80&A?4VA0 zf7kn-bDi&;KhE{>hc$a=@29M1t$W?;UfZU+uG$@{(hCoS?~&Ox{`4F{p*DqeXiX0q zgUvm^;LY`t!zKB)=LI2%0Ps4U(aK()ya29A37XI+SKE$RlS8Gqk!{07-YOWO={gj3 z`0CL+*9^8lg+EqMOU%3H;}Cw&pDcMqLK%d%oQk1MvTFFFb#b*f^j;2dbU<=Xd^|0dyjmiU;*EYJcogBgMkt*A9R%0&)^eqzLvD2>Rq*Ym4tz$#;al z=JJ-%DO;S}503i=LUl;(jW>w>nh6BX_q(|q%Aw8biL@B*w zsfrmcA(ifKAmDbg5hAJqhpW>HsyAYjfl61WdhfI5U*7?&Nij*%qGqN@C%2*d#8rH&kSTP)TkM+5 zb$@F@rum=h=Uoc@UDOtOMc9{5@5ce~fkhbsDw@l7BxNKO1nkYsLsG&1!ZhD#h$P9Y zG<68nRbKu8YGP6wKs{tR3Da}7!m`4t#%mE|tglZTFuQKPh}ddhQZ!EewZTm|_mHzR zwc0&pZp%$5g*Fi!vyIp}3fAtR^+%8&n`h`1{#oPZyFXDc>4ZzVwi^MYIUy;nw6Ab( zI?i`u@b^Z5=VC%x0VA^8&D_whAQg^Tjc7lkP9wFzz86>1Ct1%SO62-N94ZwmN{aYM zF;peR-Y982e*cD${tEtHYTdncIz&zi5ez>CA$qAjd3Yl}m?@rYY15P_5V=CV!;)TTo9YCh?ka(tr zoqrNLKcg-Hh&uMwgM9S;jy-#6i&20wYqq;9%(?R5?Vmw>)3hWg54(Q`=%0ml^km-z z`29&@PCto0`R$2hDxU=n zkDo3?vT4iojb4=cR<$<;Dvoc?n5a=kS?Xlgsr;gR_ub2x)9YDHzoYzg=u8Qg zSb`mP+xQ`WK7I8lZTFLgi_Z39PJs*Gmt;go1K=_4sieg84-zX2?e5DR^ zo9(Y)sJq078D*;UNbE(wIY^_dLGm9wBTx~m!~psYtp;JEdS?~*n-wPIAg*T;y|wQj zbR5Zt$FEvZs+KW%f6h#_$HPKnh1G)lbFH#3MlWA~D9rTbD_Rwz?Gxn1u8uyy?}}~( z4gp!Bsc!3q&{!Du`gHZ`))LISuux9MU1h-o!}|Ri=Y%NE+}`sB+>YDEA_HO`B4l zr0;$~JKA_M>l~;tbsa=zdjawsOTDD7WWxTVn`V26YqHi#izf@OZZv!Knr~ z&9$)8JyUFmYzuU_0*r2Wv)&&?DY?cpv{cdj11XP+AM+t2tBotFOzyscEv4$ss%-Nd z8q-^r4mPY8-tshw*(0+ADm_aJHC*3h_^|3mH1zYLWR!QGzcdng_O;IZ9( z?1l$oLt0z~d&f&z0g7rU3PnE@R%lfNOS4*8)@@QLvb>^yyrzyhY5%FoD(AIzk2NI+ zgO!AXs?QvD2vF9G6=KJ$`w z5I)ik;;ZA=pBd*60k>dQq-%(If!FPT6|u~FDSavCVEg4zXP3_zu-9p)L4mM??BMK3 zAWG)_IbuEmMWI4Cx&7LKaO197&(VZZYgy&3dQDqQqiqjy zFYQBTk%dgUSWz6mir=%)kC|CaI^7|y;HQ|{t6^rUbs+4T5|G_JGpIcNgvGw6rz{eF z?VaMaW2&>gFJiaV>Fjn=&uq9_7iw4`fNFk359)oQN)ITuWPaqus`?MTT5qPRJro_M z+%sx`0sX;`%?>Unt*c&hJnVPRZ!rSm03j-UpV8S)^=LLk&}NW(PM2*zmEoq1MJ!5( zincf!uv!K!pYbal&!S{ps*m7$N`HS%S1H0=HV=7|_T|+_tI3Dsl@T$i0g*4v?oX{v zwm9UP4>XP?+sryYs?xe8sBrxORQFC;eo1SrX$eyMpKUWt+Ce7@e(^WXRUNt=lEHDAB#i~u$6 z0Vkf&_0-?}vE_cRU>Z>O<4bv*J0i7f^dLOXtErYNROs@vFr#Iydk4j~mmStDs2lpY zP4>2Ti(-Vy++^0f=_m9R+X|;USb`jQSm?(28K{_;YG1NiA8@iMrGLz|I01Sy5o=JF4J0rL6br zzdX*~?{^y6t%0gd;X2%VA?Bfw_b%I7=YZ`SB{j zzfa)7DQLY;`|J~J+S9_{chImp2l;2m-2tYe>&)28Li4x1-l9d;1~y}y%MUvd@}SG_D>xtLuk(^JZN$T|iNNLBb z-;S3DD98}EBMe<2^!4afgPOZF@Sb~ zP0O2*;^R_MvFfOfhOos1WrFin`uCL(Z32zn&N0H`h~hq&^zn(@J19AF*iz#d1Mf;# z9b@1Y3!cK(w`&BoCYWRa%ZXby_H7X#C7SKaK4o-rqlKDZ(^~r4s$<=;MS~F^1Y6#? z=~BASwGojOJYmCHEjTbTKvw<`WkV{Fx0l^%zCoon%DG>0JuK~4thY+)dW-1W!)r2P znWi(PJl?P&L(P6;ze2DuPpS@e=;ER&^A?Vn5R8v(YkT4T`f}k(W!!Q9q@P8QpDP%F zUfs11;SE;4Eb9%!o7exOxxOj#ovqO^(w8%;|8zT4ZLHw_auOc-Ow>@e5|2WSel-H@^icG-TQT2_mN9?4mHZO zMbHIy_RN>4-aY^F+x+U%atzP5CnhDO6?rub7Ju=%LsObx4uX+G843WEQNTE)*`0)k z&0w&^R~V6+oHumv-Vp+b>sqn=QwSMzcB;K-E`ZGFohv$v4WZn!!2CZj7Hvi{ zr@bJ3ZKCa}1wMN()qV>qWx%y1zKr-3s|Guya7_Mg*3CSc>${5l^ldJ?NGp9Ku379) zu6RWI&LV?+0z=tlmq6O~tk97njXq}!mr}kbuVjS0tmlV18-}0sFkln3I^ZCz46PSG z%+4`XBMVRDX=gEqXVC7McWT~NoZQ^=gH2rk<$)3v9>C~}mK7g~F7PUTEw(J+JIv~g zy{*BfYY^lt*bhG^E|wK6u;M)sA8-=9kb%hi&8j>&;B=B;pPmCT>&D;?`?NfFrb>AV zF0_4aEPmWI`K)sto!UbT_D-hFFLOI6hsTOsvqto_&(>06$Cn=Frw2CNJnFk-7-DffEne4v4taDHwPi4%Ra!j>F&pca-D3YOZ!uPPsYzdCA(t>Zo-7(ZjiSBLIjox_ zX1{D7*6K%fJ@F7V`81B`iDW7;-`F_PLp~d@f|qKKPlc7^2d-hH_2)HX6^-hbm62zc zY0@rOPt2LBo~{3rP;v7;6A^>oCGV>t7XyyM@`~e zW6il|%a0pXyBlN%1A$yR#^kwTVTqVkTWxz;?ZU4RCW1kYut_wNdB(J~%ksvD77+;} z=pg)R{#=0nfAS~)AG^zqo#p3^HV{~|#D2GH7aKd?$||QyN)XG-eEAXHCG`GPD`x-H z1XTp3hKW1LwY-wEvvYM>AT>NrrFlth_Gcu|vysDt7NV-l(|yW;WGhe9uw(vi#>9xQ z2GLL`j_&)WrqrJ|9L$py=d9^fN(Rk9q*(R^?)Mr(S!kffp9)aTAu2X?wI!;!bmUnf z`R&Z~>Mq*i&@&wq-?zp`(;qq??bld>Gh#hWjGxp^jY}JJAgKLT^18wPQtVs4pM6D& z*&7C^nq=zS^}fW{SumlVB7Tjd_iMWik6NhdrfS>yrp(PK;xDmW8jW(^=;mSJgoKib zT;I~l)=A$_PbMd|r0fd@+wBR*DJ& zKiXn(pE51f1U7=v&d#K#3Zzqr>%urh>Sm zpUxLV{yn=Q;fdpvxjEd=(1}p_c%`Ks^w@(~u;({Ej zEwug3fs~I)PxE!Zb2s0|B*?kc9jjuGywn)T_J4uxQ7VxiL!T(^6g2p;FRbn@s z6<=F@*8MIm{v#ZBG6QNug!&kG+w zKx3AYK9pFgJXBqiW8yQD>|$fpReZ62$(n+RW3jz^x2y_X#TuXjf?*>p*Wv6ly=PJ~ z5*q$MpjXmz`4ftfKG8PK50O8~B-W)SGztViHsiZlcdXmBJF)({hIq}P7YA<;;pQ>N zGJJ-6(!^Fi*a%n5cV0}i;S8x2XGBl4V`SuAtRI_GOOaPg*;YBn!oyId7FhZ~!z`m9 zAlPM8f;5ZtdykI$$9U>V(R|5+RJ9Y8phk2Ykhhe4$BPLtFqj8RioY%4nCl8wIUUm| za@}-*{M>S5KU*Q5nme^RoUrR!qJl%v1d&)16+b?En^l@W(%ucd`)$I&HUXEt-u$GW zx*9thl-1X4^VYg|mSVCg?EB4m>R5sNm8!2!+QXZ>_;q{6B$S^P@3mpS=`*Swmb9tz zd6?;@wv_QWNrDt^B;w)VuEKC^6*M;_935nK2F1Z*k#C-gk>uXgw%m~GT8lnlKu)fk zH^@0|&10isp>RjVMomJuv2W6wJJ_Yp!HDk`ns+jJ%*Vs3vw8AXxZ#PE=URLzS6J|L z`u1*7Cxxe%B}WSN`J!91WLwg$SNe-kz;K1JcNh6)4zx-q)@c}LZ?8x-(Cy0j%LLcu zTP|14y>*$}Fj6^g5kEYGZB3P~8GggEmD5G%94H5-Y4MdzXolImdq6r}yHpBpp4sUd zw>Fx%HLdPRC?fpOF_(1os#$@-QeyF`WA4c*k`x7ZHfk~q z;56gWWrY5Qtc9WbL{^?mhNt0~#r=yd+FlP7EF3euW8QNjr_*M@FRs6Ao~+=$a46K! z;01-;BM#6AgSe}3{0tqoUbtaVs-M%MV(!9JwFvYmn2?+~sH|Rf3S&^z4?9}kXA~x3 zl80RP$Y#ED!|%na+bCE+*@`qxR%4&NV)9C{%f3&AHp<(6zO@btHE98)o-1itnO_H{ zXIa4dXOAx~%C7Bnhw`rV7e+hgDqd+(*_Hd~^zFi)yG4A=-{|-L)^#HtZ%j%`?cuZs8+Ilk3(@S;*3lkUkZ zkb>KPVVq}qOoSro?%E~(alYvR2x6@2{PmF(y{;jrXx_Yy_w2dXHLL;Mf$wglzc*0r z7(2OEXtIn4*38PPE9Av4?tXGXv=Tc*&#CC6>3ruCrM_Whs{N&1{6TjJ^Im0H+k;rz z<31h+Hr<5YOy-n}_N6B~v9mu1umbRd$a%l_b;}II+;!YA^7$V*bBXhlmeyM>M3ti$tO7 zUNv&?#{{kH>etEf@Df-_gDDn$9cEM&dz<%jyCU3^pm!8s$xI4V^F*c0QERX)rI8Rx z)xu({a|82~2~2c|5GsPuXq|nSRj^Hrlw<=1g@L=i2X>3@HslGKI`ry!4vjrYCB?}7TJ=7oDV3$%ExJJ)Jhi}gR3(ueGM?n=`LZt z`@MRU-$nj7JaNM1yQA9E3~+RE>9Mlo5g?n&Xt#ra1(`(a17^{!wbU{KYEFa}D-c$} zw&K&Zp6a2I&2q%7Ev2Sy{2u1B68&FH(FM|GDimFe`EIC`o>ZwmU!>lsg{U$hr^inB z+c(Zn z17|5|ng2vl>4;_d>IlPre3FeumzY)NSjkzZ>WPw1P(IwdyGz)yV<`+Fu+bl#M&=Q( zs*@JiMOWXjG%bT|y=b)W^yiPpHD$ep{R8tRX<9FH?vQi$&R<6df*lU$v-4uvGB-;5 zyC(uhWwNKga3I3!ePTPz$+4|2?#XFZG9)<)uRexSL;GB4yE=6x{UABSGtX*a?ANk- z6$cRS#mwl}{XIgS15}*xCr<$Q0oCn~=ftUhW+V)@s@+P7U)1>07W;hiCllyybU>4|E`DgcFI->0FE z-S@7x*sjJ*uX0(LH7>l178x`iy>4*NquN0JkHo8Zmn431Qk>L!ci4E;dabL7yO|EE zq|zp@(F2tqrS7%2#NcdS(|J3YQvB{)V(*olE}1lb$mJh30}=06@2sc@0$*}SDgoC( zBNfuy$C@M{?{~%1AqjW%M$?{%$Yr$kUm?3A(GX3mbSV1IfqOMUxlBc|@X0~%o)WIm z)g{@4qeeB%1$g>b3?+tA`xJt_BE?r*PPuhkQ*izwH8u=)MZdH7k?h(kor7Y#{|f4( z6q^PMA5K7>lo|pcV9K-@$LH%^M1Gfrl@0oi2Yf>iz8_8i0G2P6&3LSZ#>~6F=_RyU zQHS=OcKQWCRv9hQY#97t;RrGL{{aN^F9b*Nm;a35K%JvVN>mT$I7svmttUgMYM)SY z*Wh4dA+5m($R_i{Tdv6YK~Rtp2ZK5H?TG#Q7H-QD~;R z;&Rbzr?8lBpqTIDQa&>Xj68pJ*+c5$-{HAhzo{!;HfDuk-@n)oT4&HKKse@t?X#JS zJpyA+5B31093GX+?|kL2<+16!^JrR5TBh8wzR0`i{ulD2_)4PL7oD(Olw=vT2`loq z5`xSMPWybFEf9?_r9XB2eg$pb$aX#c-nsa1LHAd{l$KyKbRzcKB&{`bCP`bWQ`yNj zB6i|Dsa$6vWBj}K_FKfMO<&@EBQNxxUq9Zc0|8PTWGp{e9^gaU{#r`kVbl+%;2Z(V znpdS)9IS-N8uwoS?0r&`8S{Su%;j=?>}>Z>3@$%7=K@!J_Z z-C+Rsvoa*83h-S}j-kB>$n{9-B3#h_wkZVvetqr`Wcx~AzojauL?RK>t{Gr)N zkdyw{%osqB+Md4XE6ZBAgJM5pc{I^S;4P_O=PdB)+I^%0@tQoxR}oM_4=hfNaSG)9 z%CXrq0Fg%kJtQM9q+KY`-6sM4M^A^or?H^ug~$bj$Em{k&_d+PFB}2*+Bo%$Bnp%p zgPvuS0+XW@klgcq{^Rz8Y-1$gYunpKe0^aK{LX=o(T)ip&XC%|AHp`5=ABQFh_OCI z5`n6Z8~~SyHGW_I&8c0WQ&K=T?&J=H8Q}Z1oCRH{82)zClb{?kO$}LtRWlr|RW3Vm zKzkD#u0BRLFSUg?;sK>d31~sfg6w()KhT}QfihYWNUcsb!yE1wjWm_RTCW`A%=9LF z>>ww5Y46{lz^ECZR69_Y74o@_SOX<`VIN;Vgn<$UsOKb9w3{Xub4bYVEf66;83hu= zu8_Vbrc+B`;3K2D&mQ9fG6WR^-mO9;Ku$uOtbO+rrxwN&dNBi#=OOXhcsN4zhs8M5 z+AArL8WA?R#{!J3Yn-kCWe$yQGY=s3Tc}8@RdwyttGWHYhz(H9LIU+Q*CEg62K-Y ztu%1319`BNcfXBO4mcE_0#Y`gKgitHJptATQgyE%$Q!4FP`Ur%@Uu0b!Yglss5Tp) z0O|j3dRd?D^<}o|#|N6kaBlVMkeuv3C-K2_&$8#V2X#Ev zX-Ww6fa6^uBH*tTs7fuJG$_NFA zAcpXJAZnymdg+p{)hjIyN_y10slIMn8yV&|S|+!Aw-S=C=K`8xPQE1S zo8fibp^4=mBIIMk5*m1%Dw7XCWEpk|Z=-o*tK2HFUC91RA)q5<~<4JZHuxwcfr z&qyc%YW#lEQa4tyYrirDgLNW1ur$(T1S~ClLh02^!a6~e~ z`f7V7yg?SUPOtSO>}9d|`aMC}IKwcvhlG>?D1Rr?-@P4R`W?gEv)8MG&#ul z$lL~eVR;)*+*7O_^N72cg^q7ke06vC^lWYr6@eus!gFhji;2TI&pz7hyax z_Bo+~2B1<{o}~e7Ee!OnRDus*OE8e5(sFT6RI08I47g?^HvTN?0}0{AsvUTGdT(SB zOZC9{Wg{q|2o$zWFoD=medh4?w0jtPXO$!4WbUx4oMQymQgvGiNOUxYfIew%cyy!r z%RZ5}i5HkqK0EzUgD7%@;}t7%R&6-H$;d%|SK-8xY3c0PbDjGprU$OH-8cWCr_F|9 zX)>dQ-81vVNk{f+f0U$SGSsw82nTe$idTRL)m$P}WjJ`e6KyYKaJN_O6)3b!gW9PD z8e#Izxtm%r#RBGsX~KH<8slL?MkbX>9`3hfXd}f<<~swb0h{OKZd1E1TVtUUlxGR* zc=dE%8OrO#;ry);ORYaJ1Ep`T&VqOK^nYpoXD8^i$=beMnX$(`hx0VQh8m~N0rIjd z&~X-)zxH|$RRn(PIj|P}3|T0x&J=3;Sn$P%s&*S#rkAxWt)8i{yB}`Q=6CA6L|nK~ zoTht9F*s+c8we@ZFn54r(ZS@YtZU*0Q)TE(w~~h+W^=8Il-$PL#LEOc%5ND&Du!Mu z8g-MEH^BEs^-cFD{Vw^qr^2)s(AZVgLV$vBfb65m#bane}R=1FbGc@g^Lg@ z_&N_|`k=_?pOMG2-tCb^xk-oHcoBL8Lzg;hxJ^cUhrC+{n(8c9e=JU0N{__Ze8cBH z2*b6cF8Y%z%(1Tbc@gFLV1nX~LDD3&+6n9zWK--t#w@tuKoL z{HVM{5F^e(!s@nZaTzu*1T83 zWGIu?SL#`GU_}z$_UD3LnXBwL8L;q5bN891`yv{{P&*^4$g9_v=DlDg_elB|YI%_MR?Nx0@sPb1E_QV

tgoyEWEs;D51V%nMt8dxHjxhds^=2?O*s5wEBD+dQg!%*Uag ztNV@`0@a6-&y3c!OVH5YX%9E`!g+8-iI|hMh$P#1m;tg^UH8&*9U#oX$_NZONEd$q zFt+B9{x6=v@9SQI8W$rE^9#*@MjXpoqs0%=K%wTXuwGj^{aoqnP2HP)HePC~YCaJ4 z`L0mFDM0QjC;RkPfWJF?)=lLRF&RaLnsE(opd8$wepzZ_%kI<9*H6+n^e!zA4DAy< z64A+CAEN?p`3OThxIW2~+Zg2sT3huuXk#3P*cAZ~)2OsT1`4muyd?MmlSJvr5p$1H z9bYS}w9LF`*-5pYm2DE^fPSC|D96>3Z>9%GkR}t^kmG-%Yy#X#jk!Gt-AWy(Y>*;D@R)df=ouql+D729_f7Q0o2FW5-S+Uc)Xi)qG*S-!q1nu+%?6H9+Yf&j(G$z5rpa^_FXxmKHPt&@m7*)cP+8!GS ztTGzpLSVy-kP0gD*CYk^Ce^{LOa%+`yILWD!E?<4oNH@c!@fcj%|%Eb&88c?l;!8Z zA9H4{PJ$g@33O_h)>~hYV zT`BX0&7`HQ)7djbUDWUplPS5?y45P~ zw76n1v(~PQkF@S#5@77DrjiztK|N|H-3T-AoQc14A5wTNY~%ts({Ik|RRh_dF?Cm< z9= zQ@b?e#-enZe>)BtOtT{60cfFXnItLFZnVXVA2^x&6pBuXz`MzqfoiXd6&7z*)GyIcWmx*TNNTLpdZhvq&K-gz20Me;y$dJ%Y%K`cJ&RfDhN zoEgHk_YbiABAXwr9_5&_kHNnwr+`+*P;bE9XFl%1%P~*lXPqLrMLa=l>bVX&p#`&A zOQ@xhmN*WM0Y*Lk-?w-)zCPoyAqRGKB@QI24WJswCr%*VRD^o4rvZV_b6H+w=+xx! zLB=SumwvL>1Zu+J)7c!O4$40At;`~fDR*Q0J0GU z{kx6Ffe70vNCSgW7V{5Z?I0Yiza-@1o>6(TM?5JG7|>%z3HbGKXMo?O4@vEcoZQAO z>>&(Qq=7o|VAjNw|8_+jtA~7899RV;5Y)nyhHpA!Kq*@~fL1t6aG-TMNNqgw)qL}Q zCA|Tb8RWZZp?O9VW^R301d__KefG!_AT(7*5D6x$F%>`?!7KoD1U!}WrEuuFt7<(n zADtiku(|I9!11HL@^Rn1*xkq#Gm~53pqvlgUU9R#eF*XbaG*UL3CI|^CQO3pClx|( zIAX-0v=Yn0A<~P`C+MD?arF?8 zYNi>4S4J4`{loI;0X z%>d{_M1%mJB$uMwxW!>L1MKh?;%zHE;u?3D+)j;kZl_E$spEMJoz~uA8e>P+X+CI; z0++UVcM&Lht0+V=6xcU_av3DgHr%$G$9*1j27y79I3Swy+dIBjE)?!c4FuK|28zjH zP}3C`&w_^^L1@{mE;<;qy}bWtb12&a$~-{C z+mRm?$W+~bw-6hmwe4aY6^K_g=kA>V9SqSxu9%t)I+IKrOvK9&miCS%n%IYbuB?=! zK*1Gz6-0E1GZGHfCFut*#R$6_%d&Z{Ncv*olos{jX%KPLkRyB5fpwDPQ$CvMcjeBE z?rgU=x9Xuui8GNaejgIb(m*|E&_aq)kfHoXE>RLBob}YPFg|y{AHa56eSd5hyzz&S zmATK8hvNX(NY=~nZ(IUJANF(tARoz!3xpRPbnh>J%!gm;1{^$>6%VfXKOs8>T4|m2 zx0{gI)>F{=5mNqxDvfnrh27Fr^#o$*T6Dmr3$LaJpaFU6c;ZI zo0j*}QT{8N_t0#W2cweVn9C3TuR=k8tD#)(^bKeLB4S;kL&;DDaBsn81wZ;(b)~-h z!of!3Jn!Stv~K|(xHiGnz=B*FQy1X(b@af3<3teOPXuVPXt}@L{vSR9%a_p=`e;(sidQBjtCjV*j-05P5c1r(T*VV{A6`!$NQV!+E=9{R_tVPfYuk8{1( zkG??1IrNtUYWiV(=6Prj628WIC(PwFgK=hogeIh4B)@MJc^WW z9^zVx{&Jh&ySZe%m%l7^YthEsoJkrcnf>ZMYF2!aIK8pZ{&{YQx#1!~w044(tqn^S zwGTGPz`?*~QMeSp4{C81Tg11csyQzxT6%7xyD{dFvaEo|&``!r#@KMffgtwB6$U|m zWNlEg1Ir|aw)Xljc3-qln|WYtf%cATxID@fw_?Y7u8mR7kDV)IrkMV1b9@``bSIx^ zb832K;EbDa=$J1Hqjf({W%(=%=N0@h$P3kXI$`|GJo~!#%j_^_Hn{hy0K&=e%mx~w zEEWn4eVfYwxlIp+vlto~4`Buty%RHmP49fD*?X3nA#LxsdiuTJ9HJh0A4jPW9GjRznh%CX`I$Yj7DdnEM2v(KA*@vhFIoQsLQ zC4w>ANtVFP1 zd0)BvhJ^FZS!phQ{OslNo%@ygJ|z~bQx@w_7op20WV4<(^t!s^XtCq*HX_o>B$YyJ zv7@N(%SgRBKcAkQ+dWDN`Z9T_=9~B>9<<5JW<)9t82Y1zy#B5 z^@S{uJLc4--T&TG2C^&9G4oVoQ2o{3D-k{Qv$1GH3Qd-jJb_klxH+1ukK1dBNU!>2 zq%_boGa2S2-f>qD6(RJ(d~b91Ox#l0cqKJ|5Izu-u7Jt5+2K{Hv$&+(KumO3L?H0=Te!5& zYcVI?b(gFxXr6h5bv}HymQT8Z-H2gpfQHfkKwBz6V$DiXIiX%5UvT;>1$?%y8u={# zXwusSqA&WeEAaflE|J>x{dp`+2akLDKii%(I|zE|Ge zFvv^87bBz0jHtWqW&^~>bi0sj#z9PTFEuDzPYa;OKh+c;gNJ>28i$zadNJ~=;A4A7vZa1p@>P-%Oq*lJ1ZqP1ycR%K3a-Go(K zNY^BWci@U#Nl&pqcQx;99iXm{-`8syaE2c)vrQQ9#rsuCA{~PIMj3$v4G1LOYmtPl z%xSl72J2}xB;a8gVEHjEX5>AFeQfaO0|SJ_NDa^lRYrRGoAI}21qb~3XYSg7i7t^e zSu>1tPE57L!Z8?rx#@PII@-GAf{BZ6Y;}B6To6Q1Rt-k2{&X=xN?gc84@K17As-jDk4bl4Otl8^< zEtbp4U3u7?JxCT5pBfl!wI(oguxcmpE~_1kz{1Hz31c>@7I<#oPFk^_pilznUIk6p zy)oeWTmm@@#dwgn*<@32eA|JxgJM5`(EA@7VB1WoR*7P!4bu_t(r6BfY5w0joH?EW z@HD%B{`RPqpt>X;;?8{Dbg$Hf!o|M%fkw*5e|cOg^v#3&j~@XgLy1r#`|B`#o;oP@ z8#wpCe@l)ic&-y+D#R(2dAm?NiXVA=+LSQ1SMFHY5Hvy; zny#UL&A4`{=e>k-( zmy_<{9AL>tt-tN~FU$NKRAKb(jQht&5BT@}$#>0>rXHg>idNy~u_ z-XN)*4N4fF?fB-4-*;Y~jn;DTs9T<%7YCuq=R0vIB|1$N20u#*j6oS-<$ z#N3=${KrWDD;2q^S3K?*raqnaYt;0vr8Dn*-@zPT|3?5=LuW9EzAw*$!YC+=fTtb- zRsB|9@d^8*;^9uMAXx>?Mc(mvSX0K>8PWrJPzKCdah!jFn8#D&|8`n_Z;ApRy}a+6 zC&S+d!iJ|;Io~I7?ef~+7Ra6opMQkwoQeNlX*~1yPn-1ldpi9QdB6tplvGv@?pOWp zJ6uBZ_?nOKaU#z?owi5)-~DjF_mOq|M?}c^mw)7&z8ji76;A)&(qF-zf6dnqJd#*w zHTv%Z8|>R#wsF8EDD3{nr#Yb`09!ey04UL{_#Q)Xo@6=H8%)r%;LJp>D53AM6ZAq* zX6p^88v~~s2sxmC=>>7=e_fa0VZJB9pv8I=*o4hW=zk0!ICTF1KiJ<8B$+e6H+>ER zZCCSvY~?UW)Fh#BJNWmX`L<$eKw1y#{;aoWPenao2r7Z*NsID$WPyBTbbfEDhDbYWppWu+QCY)h=;L2$KVa21b$t@q_;Pm&fc#MY4eCaf zBK6xknhhjhh@jOG2>@^Q<+rWAXF0*DOFQ8$4AKiww{lQ01=?~5=jBXy(ptHHdn8V*z zBJf*L{}_eH$b)gmJ*o4L}O3-*yqQcHqfzH{QR*P3@m`Rz4bjWCGIITn3f?A)`vi zHiv4QH7TzFiId{5Hd3rcg`n|0s8190tpL{+Ka5C7-q zzZ-!QE^$>hIDzOy=`Q-H=g*rT{pB3HN@C6u`{>dc#kn}T*5<$dvFCxpmd!t!p7+;T zjDXMUuyh8QUG@nz=ge1j!?W!z)^7~Tcd4Vz?0Z<$+)&ZE$8ZOIR$tXliYKkUG?^ZeUx?iIRki^A#1)Wp*Km{fR)lcc-wLwrCQCfMA=x_ z(^#r`z4Q$feEyQE?A%5QqriWR)D@P-aDaR1u?FkdI_Muccl?dFP#3*Dw>McRvwH4B zl}0{IY_8mYY!1_|h!zwl^$;|4(Pix?8YSmkXY93GHGVUxQ<6Oj-^RK456fpK;0;pM zHTsky#V$!jGiz#HZg1>vcd^sy=_ZY0o0lU?s1CM?tK!ES0%yZBZ zv@kd5f*ZnWq8NeCXFCt>y5c@>+{=C~UD=)uE&y$?)~Dmg1+KVvVAr0WR#g6L2zkUw z7|QzaLV188DKr*sA5q8mxYa-GKEytT4B@r;)16 zprcR{LBm2x4<9(4qOv*vKSX6I6;xB6RzIoMiitBS$&4*&uKW65VapkrjPUNkDauBY zHS2Z3a{JuZFZm?tsu}oo;J$wN|AXJw3WLH17O6t0>4gqzwHFhjEa-ThFUIU@KeRTY zMD<#n17)h-2CEaR1uCDu6geOQzv#HicoBSCvjq|rm!{7b$Lu%Zg7?5A&k0~dV#$p5+Ef5#}Lqg9yIxbe1& zM!{6gLKTslYd?CaCNoROBXTC$X>P-79}UW+JV9XjX)H2jNbH4bb_ivNNyHB`AejLO zD<3agMcG@)sxaB80kSG`jA?IG03#*lu^>R}4`((~KZj|MnRcw|7`Wd^AGJKl#Jfmm;r$?Yh0Hswv@a%#X zu2RnnNlaF&{9-a6+Wg@wq<+<5M4lfrN;?o3u-!XVHB4B{DE|?^K7;cZs zF(4kFaBy}Y2hD5y&fK>kQs&nw;5+)N`Jr$4{Y?GGygb-Z(xQE~tBU{BHP3Xv^r<>8 z3k*EkzyQm}r)|~a>;KH&-A{%z*E}kEcwt{wUd`3?X@t|21Pr|b9m*0 zkPTy~a$Z|NKJT{RA3bL_-b&{2Z?Csg={eJYpfwPTkK`czz1PxF3e1ij`TZk75 ztc``cs_R$lW@*jqjY}F&8iU5dEehE}g)EIEtU&`w@a_B$n9de~G`m1*kA8^96WTg4 z-gOoUBb=68ObZ57255x-mulz(gH=a+7nMNec}k%YQq02QClDQyRkf9hSnP$wwu5H`+hQzI8n@z+@D z(hkT*PLzCV4`yhz3;MkLMB5Y5U=Gx`H<47Q}Azoo#C! zlBkZ1a>G*endQF>qzM4wfva;=n#0yRBU5YL)F5_=Ugxr|fi_<{HK6rU14H4Mi zE2#G6diolj>g(X!u?5?I+l-o|@1Vdq;@dlk(GRcO1_PCObF8F2o(*H;0e;qFx~Bg1 zMJ;w_2wG{+oW{&kE5?NSc4pgJqeuDsZA$lg=L>_AK5?tLK07m7FRwo;5rdF(pv_;V zZA`frIbd2<*7{$OTu}AI*-ivE>kK3>f}0vRS9|?7`|Ot3gAYv9{LNa| z#b@1arwr}K8+V;u`XGR~GEl1{pZ=gwN);Z)$k|ZD`wdeSs8>bhCz%uIQF6T)jj_w1 zQS@$qCK;2B(FqcoZ5s}InjaY%h+)J?&93@V3arp3Rj+i-v;;}4&kZ3YG<$Kb*N z^m34tpe0kQh-(>YYRH$G`)1dnQue&H*-lq#?m~}Q87zK0Yzr&xfJ15dm`d_qBSP4U zkqouTB--xcd>{GH@g8^ahry@-oL2aD;WOofbvcNKxY@D`rYu39?!$}`cQ1UeXIwli zMn!vGZ6j*2FRW(8q-YIV_yi!?QggP>%c||O>`@`-tgw|SADzW9Wm``N_ij~{*u8!T zHdPj_s~iY=vo8WAN@sM8#H0}>HcJwqolqeR#j*Tq7!L!X5NkR=v-Rb zGGm0aRr&1I4p*s_c3YsD;EO^NiiCF|#0_ zNDG)S(IZv$HI$bnodS$=7buk&dp0N$2l74veqZik*T;JtXx=#&zO>xU?x>#tmFMyX z=u$5Skj?6V)D`j{&s68Rcu|6n&M%5xWM|Dd?S@v@Z{aCJ-QB>~)t*p8AMcxVa{)CA zTYA^gA42+N?3Evw1QRB(5zq?41_-1A=AVffh|@q`<0HXY^%;u6g*0uc;{ zg_Hw%niIPN8p9grQi8k^6=ZHMrm(_A((p64FOG7CK+aVxmImu z_U?mKc~-8fD>&|179`ywK~(i0q;LuOhM!^Fm(8*KVp z8hx!eH%(WVX>drIQ8Nw-co{T3kU#kO`bRUy+(@4w@Ns*3g%Ht1mknPT)joO->yPDm z(B;zutF434O3Gon?YE#V;Z2uSO_`{|i_f31vd2uKvn!b=W;RZ%!eiHEcpI^&F=dQS zCFxpoJIE{<_Ux9y9S;EEL;l&u_ThQ_LS8zg7bpsggyix=G4 zm0EgytzKr{zMo-bf<||}->RLxnR>Ch{6^;6H(lFgcU8<+^<0-NjVOXcoupLzL{;OY zYIC>MZ9a2;*0VJ(W>H%!@7O**1Kd_V-&4(`HKIQu=;od4&u--cSCE|BQ~x@5`#GJk zrPUp#O4577Jy(Wpy_R)beNI`^U3cz;%qO8wXPewVa<5zF?)B)`J316Is042v*_-BQBY8UntW<}rk7T_E4bQc8)~a&8_%B| znYVCN%-sLSYCgY-KA%>1tz+%Hl`?tU-e24`4fbh0o=KQ*UJN-km=QIMa2I9pthHs^&B5foW>{o9m0}>LCr< z4Hk30{fY;l4;H=c*1)&j>$~rH!q)9RklX6x)C2tB=*4X}f@(_vrlV-)3`eo>l=m*>mr^MoWaA8(H1i!1K8F&%X=Y z7TI5Sd5P!b=a(LqEd*Hw9M4#Hce6W0F2C-}{Cp|%%&^xItU&7;E-kAA?zM}5y`%d0 zejA(T5BD1b=jfi^uCM!@-D_Z;d#fbT>RcQskxp0sDs7hc>DIa3Z@*5DPT%vX9Jq0B z-< Date: Fri, 24 Jul 2020 08:06:23 -0400 Subject: [PATCH 02/19] Add comment about WebSockets connection Signed-off-by: Thane Thomson --- docs/architecture/adr-008-event-subscription.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index 338200eda..c44fe721e 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -11,8 +11,8 @@ Tendermint full nodes for information relating to the blockchain. Tendermint servers (e.g. full nodes) provide an [event subscription][tm-event-subs] RPC endpoint to allow clients to receive -notifications of specific events as they happen. We need to expose this -subscription mechanism to the RPC client. +notifications of specific events as they happen (currently via a WebSockets +connection). We need to expose this subscription mechanism to the RPC client. In order to achieve this, we need: From 16eb48fffe4a2e7d65e05f46d81a5bbe60ee770f Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Mon, 27 Jul 2020 09:21:35 -0400 Subject: [PATCH 03/19] Rename to "RPC Client" for greater clarity Signed-off-by: Thane Thomson --- .../rpc-client-subscription-rels.graphml | 2 +- .../assets/rpc-client-subscription-rels.png | Bin 45446 -> 45742 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/assets/rpc-client-subscription-rels.graphml b/docs/architecture/assets/rpc-client-subscription-rels.graphml index d5094bfbf..0c2634295 100644 --- a/docs/architecture/assets/rpc-client-subscription-rels.graphml +++ b/docs/architecture/assets/rpc-client-subscription-rels.graphml @@ -62,7 +62,7 @@ Endpoint - Client + RPC Client diff --git a/docs/architecture/assets/rpc-client-subscription-rels.png b/docs/architecture/assets/rpc-client-subscription-rels.png index db484dfe2fa9d00863b21068d279893c40c35550..37f7672805b26c5f918362ec9662dd76815db838 100644 GIT binary patch delta 22744 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⪙>NF{;C~1LQ7W>>s)# z5vco0*n##V=Cp3MJ`E~(YRjI$f6&Okl9mv)WkU}^j{YkZ4qYwQk+Wquz-B%J_wV&+ zMp5Fxmi7K$y>S6#86fTXQIdc2-S#idfFlSTf3=^uap?&co+;cJDpZ;X=ayMyZ@%lp z6zybbtEyv}e}pYiU4Uy-YY?Z%n~c*Ar3o(6%A&#KJE!p0wb zxAi+-m_^9Vd{=(@hOrShp<&u|<2d{zWjJ(H?1L5&(a`i~A=hK?-sA`i6 zhmE^q3IkecHO*B#QeN0ux}%%J6>f61!2qHqylGU zpj8tdhOTzVK&Vc!ACJ&dYJB#}v#*;ryrjR>Sl!~Qp+RpMkTFi& zQ$Wz{X6D(sa}4v?R}#hXSDz#Egp(yT!2>p4>BXTN;0X|V&ZIjKggr2WzLCe#`RDyF z>H7xXxlx`oxc;0hO15Vl!zYVJJzX7cGBTI}q2wb0~-Nd2%$~irYqlB-vQO z%l%3aJ7nuUe*fd8p23+)@>$QO(&@4rc?vdCp9quLZFIN8x(ec6kpHM_40u1#P(F+4;`l8s$LxP!LY zE)igbMvptcvY_M{$XN4*zJX%(P^t1lMEr((ja>uNx_TT#koyH%-TzncgC^{Gwl8yH zSy=&<>SzvBj+OFYXF(1fq|igyb1S}+9ZvuU{o!+GuD=;~>*Iwp`U9Ur%$n8mdJ8T- zZX?3d9RyKD46f*B-_{PJJ4bV%Ctr(FT@UQ6Ahv9*+rNoOF;QnyR!aP8?WQ^$WR7Zi zET=Vb`IZlew1w6$A;|7u?;+L=_G*`W`9_G&lIW_t+PHb$Cm?wjU5&v;hioH*NHL3| z#?2G#JPj=~rn7l;?Zx@9g`}^0wfj5Ac01&nMe|5+Iw>JR)ZBzf>F7dxz0r>9! zP*DFzd%8LDQ-$<76B%H@M&w4~%Ab>agL*1Uq3;(!-_%(GKVg8ReK6nBR+rI%#-%P` z1P}6=lV`IUR+(F^o*f%~HWrU%f|yzCrCu9u1h%{!EG#4TLdyHo08#8-5#EH0Rj1E_ z!`S_YpD3GVrOco08=j05h07uUg;^Dfnlz2yAnVnJ#b8z%qb$ZIY>x!nryV>GOoljw z7Up)=e5yJss0>%%g8-1Ya->Up0VTZs!z($9)aW>wnhK`X$0S~(N}na8ti*jDnY3GT z({g?|iHE*hpb8&Xr7YT#F?bAhHX)Xsl*1ItYH}1oab8)ie7fpoHx3qb?|Syj)}0B+ z$+g0eTvfPQ*2(vCgTFAq9nC24_&Sw9lua!FAa1z4yso(yTH?Fzcc)Z_mDJtrKhIwr z1P_(_l7>izoUn#;yp0DUWMQIJ+P-GAe1iEq&k#gcIP?s^<&$B1j@cKlLrYUg84sodKv0( zGQ8IX^1Tx}lv69_)o%hUV70s6VxcnjJmY8I6;T-#pI_6uXBtzwXRLB)kt>6?W?Q%DjWbyDzW$vTG!~ffmW9Jpz4W0tGgWkhUyccb=D? z?NnI)$=dae!;n5+@Y(yA+JV%b9!fh*~E678c4F{;b6I`oziN^WO?oMi7#>x;ZsL{UlVc}J#+JIQ zj3&e>nY4WNOU+$*Bvk&YVwff@4Cw8wPdXds?v^+`WG<|3rqDQ*KZ*y%XuDMAMsadS zk9@y_D1)7Xlsd0sEO^ z%{%?YJSz{YHNPp+OP|}&GJU0@p=&>*&1lMOfA&5P4vMM5pkz%P^^h=Bdf+>o=C(kYt||Ex`7G8!KK92z{D% z&z8pWGW%9sto3*skxFKwEldKRcGI9j>9KWdnk)F}2zr%zmbELac`+}n?7me~z4eGU zM}%5v+L1yNvAl(h0oP*YbL zw;fl?w$whXjv!{+0_tu7TOr6Jx@r|cg3kyA4NxJxgMx%&NUo(69|%a0S14o<3nd9e z2}w#IWL%(%B+%f-gj^tt5zvH$rXh(CN%jP))4z6RXJ@DX-E-$Y&iT%F&iP)ypMo45 z_||Eb?PA2* z!PSDwvVG;*P}`=j`u+|Z;B*$grr`Ks6vs>0+(B=LQh~1lk>T@d#Q@&#U)Nu&Apt8} zuMv(RUfja-m*6FduNyps)~ zt8>)tfR|9WCTnb?D(un_QU2l2&h^?#PeuU##v4lOb4Cp*T=3NF8%p(^?|N3~0@r6a zImiS1}9mPAaX#2l_M<8WOd>(u+gH2)^F!|aI2Qv8YVk+)O-BNfBCoph%K&}`W0 zQxXaz5~HQ(3^hK=uBWbD*2{6iD@d_mDQ0i(Nt&KLg5` zjoIt$UNYs5Rg==WacmLMDeL4%E@DU#q_4k%>n%o#+}?NI%M9M0Jf0u1UY_u9I(%?e zC?>%19*hxGpSrBrggHk4qSY5RU1_dM;z?FVs&l1_Vrm9%ZhwhR)5@Ivm6=9FVMEyo z-o(Tj63dY{@9(oM@`g|9d+kXvsHjlO$z@qdub&+sWEMoi$w}Pzpd8Y@B&7q5{4<_0 z+F22sSoML^Mi%`$1;0l`1;$uE{)SI!_k7c5gBz@Rp*Bq()!cV-&`U@vbe&)(WY!|J z;&FrQ#%S}=@}?$>)d5$Tt;pI9t7?~CB+4F?L}N$t6#X)|?-UE*yUmBpfwRv=T%PFE zWNVR0>UKr}O*0vI!>(Y;DH~+>XjUCrpYgo<-GdS$8uxvC`cPKZgRm17j3R7w zd_74uDk2)?>Y4`q)eqj2@+J;i2x^uh%Z@F zI&KIk9eL$B#ahA9G@dP7|MDYuAD^9OKuA?{P#hO8_{RT9LD|IOt>4@0+ii4*$bG%E z7(+KtC%gHj*r{iep5pS!+s6BUMdO>GVDz@H39>C{0D#T2kAD?*8BGjY{y;^SD~Ikb z?=WC8R$5gbzk1|VbL#?O?`P6WFP0C%HM`~ z7*J;O4yPz@#;o=r^!O)Tl%zk38x8E!xnL z)T!lwnwDSK_To5ksnw9K@({laQ}9}pKb})X1c30w@Y-SMdB$7PpYj%_X%jCFphW0e zViAxK>En6yXP*i){7rgN3+ALL*IK^cp@^Me{?c;Bg zm0^~-6VKvzUglu#+^Rm7CPi-i@W7`93)ha?yL{0mMD295U%fML<7~NB*3h{===Ce| WlE0K~ZV0yD57{67dE4ID{C@-9g8RJy delta 22413 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.$0jH_T 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 Date: Tue, 4 Aug 2020 11:31:36 -0400 Subject: [PATCH 04/19] Update docs/architecture/adr-008-event-subscription.md Co-authored-by: Alexander Simmerl --- docs/architecture/adr-008-event-subscription.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index c44fe721e..708f2b451 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -12,7 +12,7 @@ Tendermint full nodes for information relating to the blockchain. Tendermint servers (e.g. full nodes) provide an [event subscription][tm-event-subs] RPC endpoint to allow clients to receive notifications of specific events as they happen (currently via a WebSockets -connection). We need to expose this subscription mechanism to the RPC client. +connection). We need to expose this subscription mechanism through the RPC client. In order to achieve this, we need: From e0dcae99470aefa75ef73e2850078e08f40470e6 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Tue, 18 Aug 2020 20:13:39 -0400 Subject: [PATCH 05/19] Update to reflect work on #516 Signed-off-by: Thane Thomson --- .../adr-008-event-subscription.md | 362 +++++++++++++++--- .../rpc-client-subscription-rels.graphml | 106 +++-- .../assets/rpc-client-subscription-rels.png | Bin 45742 -> 48079 bytes 3 files changed, 364 insertions(+), 104 deletions(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index 708f2b451..b4beb1c5a 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -1,6 +1,7 @@ # ADR 008: RPC Client Event Subscription Mechanism ## Changelog + * 2020-07-23: Initial draft ## Context @@ -33,8 +34,9 @@ In order to achieve this, we need: subscriptions' event streams without blocking other RPC operations. 2. Offer the ability to **unsubscribe** from specific queries (i.e. to terminate specific subscriptions). -2. A pub/sub architecture (with an appropriate concurrency model) that - facilitates the subscription interface. +2. An appropriate concurrency model for drivers of the transport layer that + allows the transport layer to operate independently of consumers of + subscriptions. ## Decision @@ -56,8 +58,8 @@ the architecture and how the entities relate to each other. A `Subscription` here is envisaged as an entity that implements the [Stream][futures-stream] trait, allowing its owner to asynchronously iterate -through all of the **relevant** incoming events. Use of such a subscription -should be as simple as: +through all of the relevant incoming events. Use of such a subscription should +be as simple as: ```rust while let Some(result_event) = subscription.next().await { @@ -68,72 +70,330 @@ while let Some(result_event) = subscription.next().await { } ``` -Since the underlying events may not be produced at the same cadence as that of -the `Subscription` owner's processing, it is proposed here to make use of an -appropriate type of buffered channel to realize this. The size of this buffer -must be configurable through the RPC Client. +### Client Model -### RPC Pub/Sub +In certain cases, consumers of the Tendermint RPC client library may not want to +make use of subscription functionality. Since such functionality comes with +additional overhead in terms of resource usage and asynchronous task management, +it would be optimal to define two different kinds of clients: -The RPC Client must asynchronously spawn a component `PubSub` whose -responsibilities are: +1. A **minimal client**, that allows for interaction with all RPC endpoints + except those pertaining to subscription management. In our current + implementation, this client would only interact via the HTTP RPC endpoints. +2. A **full client**, that provides access to *all* RPC endpoints, including + subscription functionality. In our current implementation, this client would + interact via the HTTP RPC endpoints for all types of requests except for + subscription, where it will use a WebSocket connection instead. -1. Manage subscriptions (subscribe/unsubscribe operations from the RPC Client). -2. Receive and deserialize incoming `Event`s. -3. Route `Event`s to `Subscription`s whose `Query` matches the `Event`. -4. Manage transport-level concerns (i.e. WebSockets connection: keep-alive - messages, graceful connection closure, etc.). +The interfaces of the two types of clients are envisaged as follows. -Items (3) and (4) could be encapsulated into their own sub-components to allow -for better separation of concerns and therefore easier testing. For example, (3) -could be encapsulated into a `PubSubRouter` component and (4) into a component -that only handles transport-level concerns. +#### Minimal Client -This is an *internal* component whose interface only matters to the RPC Client. +```rust +pub type Result = std::result::Result; + +/// The primary methods to be implemented are just the `perform` and `close` +/// methods. All other methods are just convenience interfaces to `perform`. +pub trait MinimalClient { + /// `/abci_info`: get information about the ABCI application. + async fn abci_info(&self) -> Result { + Ok(self.perform(abci_info::Request).await?.response) + } -### RPC Client Interface Extension + /// `/abci_query`: query the ABCI application + async fn abci_query( + &self, + path: Option, + data: V, + height: Option, + prove: bool, + ) -> Result + where + V: Into> + Send, + { + Ok(self + .perform(abci_query::Request::new(path, data, height, prove)) + .await? + .response) + } -The following interface is proposed as an extension to the existing [`Client` -structure][client]: + /// `/block`: get block at a given height. + async fn block(&self, height: H) -> Result + where + H: Into + Send, + { + self.perform(block::Request::new(height.into())).await + } -```rust -impl Client { - /// Initiates a subscription for events produced by the given query. More - /// details as to the query syntax is available from the [Tendermint - /// `/subscribe` RPC endpoint documentation][tm-rpc-subscribe]. - /// - /// [tm-rpc-subscribe]: https://docs.tendermint.com/master/rpc/#/Websocket/subscribe - pub async fn subscribe(&mut self, query: &Query) -> Result { - // ... + /// `/block`: get the latest block. + async fn latest_block(&self) -> Result { + self.perform(block::Request::default()).await + } + + /// `/block_results`: get ABCI results for a block at a particular height. + async fn block_results(&self, height: H) -> Result + where + H: Into + Send, + { + self.perform(block_results::Request::new(height.into())) + .await + } + + /// `/block_results`: get ABCI results for the latest block. + async fn latest_block_results(&self) -> Result { + self.perform(block_results::Request::default()).await + } + + /// `/blockchain`: get block headers for `min` <= `height` <= `max`. + /// + /// Block headers are returned in descending order (highest first). + /// + /// Returns at most 20 items. + async fn blockchain(&self, min: H, max: H) -> Result + where + H: Into + Send, + { + // TODO(tarcieri): return errors for invalid params before making request? + self.perform(blockchain::Request::new(min.into(), max.into())) + .await + } + + /// `/broadcast_tx_async`: broadcast a transaction, returning immediately. + async fn broadcast_tx_async(&self, tx: Transaction) -> Result { + self.perform(broadcast::tx_async::Request::new(tx)).await + } + + /// `/broadcast_tx_sync`: broadcast a transaction, returning the response + /// from `CheckTx`. + async fn broadcast_tx_sync(&self, tx: Transaction) -> Result { + self.perform(broadcast::tx_sync::Request::new(tx)).await + } + + /// `/broadcast_tx_sync`: broadcast a transaction, returning the response + /// from `CheckTx`. + async fn broadcast_tx_commit(&self, tx: Transaction) -> Result { + self.perform(broadcast::tx_commit::Request::new(tx)).await + } + + /// `/commit`: get block commit at a given height. + async fn commit(&self, height: H) -> Result + where + H: Into + Send, + { + self.perform(commit::Request::new(height.into())).await + } + + /// `/validators`: get validators a given height. + async fn validators(&self, height: H) -> Result + where + H: Into + Send, + { + self.perform(validators::Request::new(height.into())).await + } + + /// `/commit`: get the latest block commit + async fn latest_commit(&self) -> Result { + self.perform(commit::Request::default()).await + } + + /// `/health`: get node health. + /// + /// Returns empty result (200 OK) on success, no response in case of an error. + async fn health(&self) -> Result<()> { + self.perform(health::Request).await?; + Ok(()) + } + + /// `/genesis`: get genesis file. + async fn genesis(&self) -> Result { + Ok(self.perform(genesis::Request).await?.genesis) + } + + /// `/net_info`: obtain information about P2P and other network connections. + async fn net_info(&self) -> Result { + self.perform(net_info::Request).await + } + + /// `/status`: get Tendermint status including node info, pubkey, latest + /// block hash, app hash, block height and time. + async fn status(&self) -> Result { + self.perform(status::Request).await + } + + /// `/broadcast_evidence`: broadcast an evidence. + async fn broadcast_evidence(&self, e: Evidence) -> Result { + self.perform(evidence::Request::new(e)).await } - /// Terminates the given subscription and consumes it. - pub async fn unsubscribe(&mut self, subs: Subscription) -> Result<(), Error> { - // ... + /// Perform a request against the RPC endpoint + async fn perform(&self, request: R) -> Result + where + R: Request; + + /// Gracefully terminate the underlying connection (if relevant - depends + /// on the underlying transport). + async fn close(self) -> Result<()>; +} +``` + +#### Full Client + +```rust +pub trait FullClient: MinimalClient { + /// `/subscribe`: subscribe to receive events produced by the given query, + /// but specify how many event results can be buffered in the resulting + /// subscription. + async fn subscribe_with_buf_size( + &mut self, + query: String, + buf_size: usize, + ) -> Result; + + /// `/subscribe`: subscribe to receive events produced by the given query. + async fn subscribe(&mut self, query: String) -> Result { + self.subscribe_with_buf_size(query, DEFAULT_SUBSCRIPTION_BUF_SIZE) + .await } + + /// `/unsubscribe`: unsubscribe from receiving events for the given + /// subscription. + /// + /// This terminates the given subscription and consumes it, since it is no + /// longer usable. + async fn unsubscribe(&mut self, subscription: Subscription) -> Result<()>; } ``` -### Query +### Transport Driver + +Depending on the underlying transport, a client may need a **transport driver** +running in an asynchronous context. As in the example of a WebSocket connection, +the rate at which one interacts with the WebSocket connection may differ to the +rate at which one interacts with `Event`s being produced by a `Subscription`, so +they necessarily need to run concurrently in different contexts. + +Implementation of such a transport driver is transport-specific. Short-lived +request/response interactions (such as HTTP) would not require such a transport +driver, whereas a WebSocket connection would. -Due to the potential complexity of queries, the proposed `Query` entity should -functionally take its lead from the [Go-based `Query` interface][tm-go-query]. -This type of interface allows for simple short-term implementation (e.g. just -querying by way of event type), with eventual full implementation of the [query -PEG][query-peg]. +### Inter-Task Communication -`Query` should implement `FromStr`, which should parse queries and emit the -appropriate parsing errors: +Wherever there are asynchronous tasks communicating with each other, it is +recommended to make use of [Tokio's synchronization primitives][tokio-sync]. +These come with the downside that, once one has selected a buffer size for a +fixed-sized channel, one cannot alter that buffer size, and so buffer size +selection becomes a challenge. + +Unfortunately, since the difference in the event processing rate (by the client) +and event receive rate (from the remote node) is application-specific, tuning +this parameter also becomes an application-specific concern. + +### Query Interface + +It is proposed that, using a *builder pattern*, we implement a subscription +`Query` interface that implements the full [query PEG][query-peg] provided by +the Go implementation of the RPC client. This would allow for compile-time +validation of queries. + +The desired interface for constructing a query would look as follows: ```rust -let query = Query::from_str("tm.event='NewBlock'")?; +// tm.event='NewBlock' +let query = Query::from(EventType::NewBlock); + +// tm.event='Tx' AND tx.hash='XYZ' +let query = Query::from(EventType::Tx).and_eq("tx.hash", "XYZ"); + +// tm.event='Tx' AND tx.height=5 +let query = Query::from(EventType::Tx).and_eq("tx.height", 5); ``` -Matching of queries to events should also be simple: +This interface could be implemented along the following lines. ```rust -if query.matches(event) { - // do something +// Query would only have constructors that either specified an event type +// (corresponding to a `tm.event='eventtype'` query) or a condition. There must +// be no constructor that allows for construction of an empty query. +pub struct Query { + // A query can only match zero or one type of event. + event_type: Option, + // A query can contain zero or more conditions. + conditions: Vec, +} + +impl From for Query { + fn from(event_type: EventType) -> Self { + Self { + event_type: Some(event_type), + conditions: Vec::new(), + } + } +} + +impl Query { + // An example of a constructor for `Operation::Eq`. + pub fn eq(key: &str, value: impl Into) -> Self { + Self { + event_type: None, + conditions: vec![Condition::new(key, Operation::Eq(value.into()))], + } + } + + // ... + + // Allows for a simple builder pattern. + pub fn and_eq(mut self, key: &str, value: impl Into) -> Self { + self.conditions.push(Condition::new(key, Operation::Eq(value.into()))); + self + } + + // ... +} + +// Derived from https://github.com/tendermint/tendermint/blob/master/types/events.go +pub enum EventType { + NewBlock, + NewBlockHeader, + NewEvidence, + Tx, + ValidatorSetUpdates, + CompleteProposal, + Lock, + NewRound, + NewRoundStep, + Polka, + Relock, + TimeoutPropose, + TimeoutWait, + Unlock, + ValidBlock, + Vote, +} + +pub struct Condition { + key: String, + op: Operation, +} + +pub enum Operation { + Eq(Operand), + Lt(Operand), + Lte(Operand), + Gt(Operand), + Gte(Operand), + Contains(Operand), + Exists, +} + +// According to https://docs.tendermint.com/master/rpc/#/Websocket/subscribe, +// an operand can be a string, number, date or time. We differentiate here +// between integer and floating point numbers. +pub enum Operand { + String(String), + Integer(i64), + Float(f64), + Date(chrono::Date), + DateTime(chrono::DateTime), } ``` @@ -147,8 +407,8 @@ Proposed * Provides relatively intuitive developer ergonomics (`Subscription` iteration to produce `Event`s). -* Can be easily tested if the WebSockets transport layer is clearly encapsulated - from the perspective of the RPC Pub/Sub component. +* `MinimalClient` and `FullClient` traits allow for relatively easy swapping of + transports. ### Negative @@ -176,3 +436,5 @@ None [futures-stream]: https://docs.rs/futures/*/futures/stream/trait.Stream.html [pr-458]: https://github.com/informalsystems/tendermint-rs/pull/458 [issue-318]: https://github.com/informalsystems/tendermint-rs/issues/318 +[tokio-sync]: https://docs.rs/tokio/*/tokio/sync/index.html + diff --git a/docs/architecture/assets/rpc-client-subscription-rels.graphml b/docs/architecture/assets/rpc-client-subscription-rels.graphml index 0c2634295..78f31bbc9 100644 --- a/docs/architecture/assets/rpc-client-subscription-rels.graphml +++ b/docs/architecture/assets/rpc-client-subscription-rels.graphml @@ -13,14 +13,14 @@ - + - + - Tendermint RPC + Tendermint RPC Endpoint @@ -28,19 +28,18 @@ Endpoint - - + - Client Application + Client Application - + @@ -60,16 +59,17 @@ Endpoint - + - RPC Client + HTTP/WebSocket +Client +(Full Client) - @@ -103,7 +103,8 @@ Endpoint - RPC Pub/Sub + WebSocket Transport +Driver @@ -112,7 +113,6 @@ Endpoint - @@ -175,43 +175,21 @@ Endpoint + + + + + + + HTTP Client +(Minimal Client) + + + + - - - - - - - Interface expansion - - - - - - - - - - - New entity - - - - - - - - - - - Legend - - - - - @@ -223,7 +201,6 @@ Endpoint - @@ -237,7 +214,6 @@ Errors - @@ -248,7 +224,6 @@ Errors - @@ -259,31 +234,54 @@ Errors - - Subscribe/ -Unsubscribe + Subscribe - - WebSockets + WebSocket connection + + + + + + + + HTTP Request/ +Response + + + + + + + + + + + + HTTP Request/ +Response + + + + diff --git a/docs/architecture/assets/rpc-client-subscription-rels.png b/docs/architecture/assets/rpc-client-subscription-rels.png index 37f7672805b26c5f918362ec9662dd76815db838..924c9d996c07a370f68ba3ef296534189ddb77da 100644 GIT binary patch literal 48079 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 ML*57P?GH}-8#1w(aR2}S From 12f008fb9cd9740ed2bb4e7347aa1a5a6b32549e Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Tue, 18 Aug 2020 20:19:11 -0400 Subject: [PATCH 06/19] Leave out implementation details (ADR) Signed-off-by: Thane Thomson --- .../adr-008-event-subscription.md | 93 +++++-------------- 1 file changed, 22 insertions(+), 71 deletions(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index b4beb1c5a..0edf902a9 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -89,16 +89,17 @@ The interfaces of the two types of clients are envisaged as follows. #### Minimal Client +**Note**: All `async` traits are facilitated by the use of [async-trait]. + ```rust pub type Result = std::result::Result; /// The primary methods to be implemented are just the `perform` and `close` /// methods. All other methods are just convenience interfaces to `perform`. +#[async_trait] pub trait MinimalClient { /// `/abci_info`: get information about the ABCI application. - async fn abci_info(&self) -> Result { - Ok(self.perform(abci_info::Request).await?.response) - } + async fn abci_info(&self) -> Result; /// `/abci_query`: query the ABCI application async fn abci_query( @@ -109,121 +110,70 @@ pub trait MinimalClient { prove: bool, ) -> Result where - V: Into> + Send, - { - Ok(self - .perform(abci_query::Request::new(path, data, height, prove)) - .await? - .response) - } + V: Into> + Send; /// `/block`: get block at a given height. async fn block(&self, height: H) -> Result where - H: Into + Send, - { - self.perform(block::Request::new(height.into())).await - } + H: Into + Send; /// `/block`: get the latest block. - async fn latest_block(&self) -> Result { - self.perform(block::Request::default()).await - } + async fn latest_block(&self) -> Result; /// `/block_results`: get ABCI results for a block at a particular height. async fn block_results(&self, height: H) -> Result where - H: Into + Send, - { - self.perform(block_results::Request::new(height.into())) - .await - } + H: Into + Send; /// `/block_results`: get ABCI results for the latest block. - async fn latest_block_results(&self) -> Result { - self.perform(block_results::Request::default()).await - } + async fn latest_block_results(&self) -> Result; /// `/blockchain`: get block headers for `min` <= `height` <= `max`. - /// - /// Block headers are returned in descending order (highest first). - /// - /// Returns at most 20 items. async fn blockchain(&self, min: H, max: H) -> Result where - H: Into + Send, - { - // TODO(tarcieri): return errors for invalid params before making request? - self.perform(blockchain::Request::new(min.into(), max.into())) - .await - } + H: Into + Send; /// `/broadcast_tx_async`: broadcast a transaction, returning immediately. - async fn broadcast_tx_async(&self, tx: Transaction) -> Result { - self.perform(broadcast::tx_async::Request::new(tx)).await - } + async fn broadcast_tx_async(&self, tx: Transaction) -> Result; /// `/broadcast_tx_sync`: broadcast a transaction, returning the response /// from `CheckTx`. - async fn broadcast_tx_sync(&self, tx: Transaction) -> Result { - self.perform(broadcast::tx_sync::Request::new(tx)).await - } + async fn broadcast_tx_sync(&self, tx: Transaction) -> Result; /// `/broadcast_tx_sync`: broadcast a transaction, returning the response /// from `CheckTx`. - async fn broadcast_tx_commit(&self, tx: Transaction) -> Result { - self.perform(broadcast::tx_commit::Request::new(tx)).await - } + async fn broadcast_tx_commit(&self, tx: Transaction) -> Result; /// `/commit`: get block commit at a given height. async fn commit(&self, height: H) -> Result where - H: Into + Send, - { - self.perform(commit::Request::new(height.into())).await - } + H: Into + Send; /// `/validators`: get validators a given height. async fn validators(&self, height: H) -> Result where - H: Into + Send, - { - self.perform(validators::Request::new(height.into())).await - } + H: Into + Send; /// `/commit`: get the latest block commit - async fn latest_commit(&self) -> Result { - self.perform(commit::Request::default()).await - } + async fn latest_commit(&self) -> Result; /// `/health`: get node health. /// /// Returns empty result (200 OK) on success, no response in case of an error. - async fn health(&self) -> Result<()> { - self.perform(health::Request).await?; - Ok(()) - } + async fn health(&self) -> Result<()>; /// `/genesis`: get genesis file. - async fn genesis(&self) -> Result { - Ok(self.perform(genesis::Request).await?.genesis) - } + async fn genesis(&self) -> Result; /// `/net_info`: obtain information about P2P and other network connections. - async fn net_info(&self) -> Result { - self.perform(net_info::Request).await - } + async fn net_info(&self) -> Result; /// `/status`: get Tendermint status including node info, pubkey, latest /// block hash, app hash, block height and time. - async fn status(&self) -> Result { - self.perform(status::Request).await - } + async fn status(&self) -> Result; /// `/broadcast_evidence`: broadcast an evidence. - async fn broadcast_evidence(&self, e: Evidence) -> Result { - self.perform(evidence::Request::new(e)).await - } + async fn broadcast_evidence(&self, e: Evidence) -> Result; /// Perform a request against the RPC endpoint async fn perform(&self, request: R) -> Result @@ -437,4 +387,5 @@ None [pr-458]: https://github.com/informalsystems/tendermint-rs/pull/458 [issue-318]: https://github.com/informalsystems/tendermint-rs/issues/318 [tokio-sync]: https://docs.rs/tokio/*/tokio/sync/index.html +[async-trait]: https://docs.rs/async-trait/*/async_trait/index.html From f47d461ed8279fb7e9777fba4c699a0ac90c5fd6 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Tue, 18 Aug 2020 20:22:43 -0400 Subject: [PATCH 07/19] Clarify handle/driver concurrency model Signed-off-by: Thane Thomson --- .../adr-008-event-subscription.md | 6 +++++- .../rpc-client-subscription-rels.graphml | 11 +++++++++++ .../assets/rpc-client-subscription-rels.png | Bin 48079 -> 49513 bytes 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index 0edf902a9..a8b8beb6f 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -214,7 +214,7 @@ pub trait FullClient: MinimalClient { } ``` -### Transport Driver +### Handle/Driver Concurrency Model Depending on the underlying transport, a client may need a **transport driver** running in an asynchronous context. As in the example of a WebSocket connection, @@ -226,6 +226,10 @@ Implementation of such a transport driver is transport-specific. Short-lived request/response interactions (such as HTTP) would not require such a transport driver, whereas a WebSocket connection would. +In cases where a driver is necessary, the client implementation would have to +become a **handle** to the driver, facilitating communication with it across +asynchronous tasks. + ### Inter-Task Communication Wherever there are asynchronous tasks communicating with each other, it is diff --git a/docs/architecture/assets/rpc-client-subscription-rels.graphml b/docs/architecture/assets/rpc-client-subscription-rels.graphml index 78f31bbc9..5d9727917 100644 --- a/docs/architecture/assets/rpc-client-subscription-rels.graphml +++ b/docs/architecture/assets/rpc-client-subscription-rels.graphml @@ -187,6 +187,17 @@ Driver + + + + + + + (Handle to driver) + + + + diff --git a/docs/architecture/assets/rpc-client-subscription-rels.png b/docs/architecture/assets/rpc-client-subscription-rels.png index 924c9d996c07a370f68ba3ef296534189ddb77da..03b9aa865361895dcaf9ab4758ba94e5da28fc11 100644 GIT binary patch delta 28188 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 Ko_X@B&;J7iFr~Qw delta 26760 zcmaHTby!u~+pTn$bV;`~0@6r>G=fq}3DPA>E?U?iEurKF36(}9q#GnQEl3F{4bsh> zn{&=DzVF`a;~ze_S!>Su)_BJ|=3Wg(8$3cSV={pDYTi~~UAesGRO9?P{3cE@Jn2!} z9d=W9%?VF8f=Gv3?z;K0&I=0GHQo0)nO9Sp6>RE$a>on3y0^SXFViF&;9~1Pon@6V zu$n$#{yW{@N0wn*CDwo3*w?P~zuYPc6;zp*MK(9H`xes9 zMhdhmBFRP(*rU`W!OpZC!AW@BQ@9FGZ5PtAKDidNe)T!PCFAu@yPv7~PE>wteWKKc zbXAmt4xhaE;i5w`vfIV!28l zua0~y+SJz1j;N*0OZASv6n^p!#t_ewFk-6MWG3F}s@Q1FHxtTsmQ^7*VpE?TR3^#| zId9+o@zq;6(wL3UdG>3q+oG}rxkcbZAEmtE;BrFZ@v?PHT|~g6TNT42AG5xS-XqO0 zgM3c6%^S`>nbszhSQQJnFLg6O=ep4_3IxsdGBj=l3xu1AMZgZ%C)&;GpKotXLuWnj zYR={Iykyqk?(Yh(2>p*{UT9}Z

imnY8aV-qw2- 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 a-5@D>Mjw2~<1Y&g{8PqWIGw6!;Qk+l+#4hS From 42e7fad710f96300e32402ee137908e1ae55cded Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Wed, 19 Aug 2020 18:04:29 -0400 Subject: [PATCH 08/19] Update with latest architecture inspired by #516 Signed-off-by: Thane Thomson --- .../adr-008-event-subscription.md | 236 +++++++-- .../assets/rpc-client-erd.graphml | 486 ++++++++++++++++++ docs/architecture/assets/rpc-client-erd.png | Bin 0 -> 50744 bytes .../rpc-client-subscription-rels.graphml | 300 ----------- .../assets/rpc-client-subscription-rels.png | Bin 49513 -> 0 bytes 5 files changed, 666 insertions(+), 356 deletions(-) create mode 100644 docs/architecture/assets/rpc-client-erd.graphml create mode 100644 docs/architecture/assets/rpc-client-erd.png delete mode 100644 docs/architecture/assets/rpc-client-subscription-rels.graphml delete mode 100644 docs/architecture/assets/rpc-client-subscription-rels.png diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index a8b8beb6f..9036f1131 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -36,25 +36,53 @@ In order to achieve this, we need: terminate specific subscriptions). 2. An appropriate concurrency model for drivers of the transport layer that allows the transport layer to operate independently of consumers of - subscriptions. + subscriptions. This is so that consumers don't block transport layer + activities and vice-versa. ## Decision ### Assumptions -* All blocking operations that deal with I/O must be `async` +* All blocking operations that deal with I/O must be `async`. * We will not be ["de-asyncifying" the RPC][issue-318] and will rather, in a future ADR, propose a synchronous architecture as well should we need one. ### Proposed Entities and Relationships The entities in the diagram below are described in the following subsections. -The diagram also gives some indication as to the proposed concurrency model for -the architecture and how the entities relate to each other. -![](assets/rpc-client-subscription-rels.png) +![](assets/rpc-client-erd.png) -### Subscription +### `Event` + +In terms of the subscription interface, this is ultimately what the end user is +most interested in obtaining. The `Event` type's structure is dictated by the +Tendermint RPC: + +```rust +pub struct Event { + /// The query that produced the event. + pub query: String, + /// The data associated with the event (determines its `EventType`). + pub data: EventData, + /// Event type and attributes map. + pub events: Option>>, +} + +pub enum EventData { + NewBlock { + block: Option, + result_begin_block: Option, + result_end_block: Option, + }, + Tx { + tx_result: TxResult, + }, + // ... +} +``` + +### `Subscription` A `Subscription` here is envisaged as an entity that implements the [Stream][futures-stream] trait, allowing its owner to asynchronously iterate @@ -70,34 +98,46 @@ while let Some(result_event) = subscription.next().await { } ``` -### Client Model +For efficient routing of events to `Subscription`s, each `Subscription` should +have some kind of unique identifier associated with it (a `SubscriptionId`). +Each `Subscription` relates only to a single [`Query`](#query). Therefore, its +publicly accessible fields may resemble the following: -In certain cases, consumers of the Tendermint RPC client library may not want to -make use of subscription functionality. Since such functionality comes with -additional overhead in terms of resource usage and asynchronous task management, -it would be optimal to define two different kinds of clients: +```rust +pub struct Subscription { + pub id: SubscriptionId, + pub query: Query, + // ... other fields to help facilitate inter-task comms ... +} +``` -1. A **minimal client**, that allows for interaction with all RPC endpoints - except those pertaining to subscription management. In our current - implementation, this client would only interact via the HTTP RPC endpoints. -2. A **full client**, that provides access to *all* RPC endpoints, including - subscription functionality. In our current implementation, this client would - interact via the HTTP RPC endpoints for all types of requests except for - subscription, where it will use a WebSocket connection instead. +`Subscription`s are created by a client - described in the following sub-section. + +### Client Model + +Users of the Tendermint RPC library may or may not want access to subscription +functionality. Since such functionality comes with additional overhead in terms +of resource usage and asynchronous task management, it would be optimal to +provide two separate client traits: one that only implements non-subscription +functionality, and one that only implements subscription functionality (where +clients could either implement one or both traits). The interfaces of the two types of clients are envisaged as follows. -#### Minimal Client +#### `Client` + +This type of client would allow for interaction with all RPC endpoints except +those pertaining to subscription management. In our current implementation, this +client would only interact via the HTTP RPC endpoints (the `HttpClient` in the +entity diagram above). **Note**: All `async` traits are facilitated by the use of [async-trait]. ```rust pub type Result = std::result::Result; -/// The primary methods to be implemented are just the `perform` and `close` -/// methods. All other methods are just convenience interfaces to `perform`. #[async_trait] -pub trait MinimalClient { +pub trait Client { /// `/abci_info`: get information about the ABCI application. async fn abci_info(&self) -> Result; @@ -179,20 +219,25 @@ pub trait MinimalClient { async fn perform(&self, request: R) -> Result where R: Request; - - /// Gracefully terminate the underlying connection (if relevant - depends - /// on the underlying transport). - async fn close(self) -> Result<()>; } ``` -#### Full Client +#### `SubscriptionClient` + +A `SubscriptionClient` would be one that only provides access to subscription +functionality. In our current implementation, this client would interact with a +WebSocket connection to provide subscription functionality (the +`WebSocketSubscriptionClient` in the entity diagram above). ```rust -pub trait FullClient: MinimalClient { +#[async_trait] +pub trait SubscriptionClient { /// `/subscribe`: subscribe to receive events produced by the given query, /// but specify how many event results can be buffered in the resulting /// subscription. + /// + /// Specifying a `buf_size` of zero should indicate to the transport that an + /// **unbounded** channel should be used. async fn subscribe_with_buf_size( &mut self, query: String, @@ -201,7 +246,8 @@ pub trait FullClient: MinimalClient { /// `/subscribe`: subscribe to receive events produced by the given query. async fn subscribe(&mut self, query: String) -> Result { - self.subscribe_with_buf_size(query, DEFAULT_SUBSCRIPTION_BUF_SIZE) + // Use an unbounded channel by default + self.subscribe_with_buf_size(query, 0) .await } @@ -214,7 +260,17 @@ pub trait FullClient: MinimalClient { } ``` -### Handle/Driver Concurrency Model +### Client Implementations + +We envisage 3 distinct client implementations at this point: + +* `HttpClient`, which only implements [`Client`](#client) (over HTTP). +* `WebSocketSubscriptionClient`, which only implements + [`SubscriptionClient`](#subscriptionclient) (over a WebSocket connection). +* `HttpWebSocketClient`, which implements both [`Client`](#client) (over HTTP) + and [`SubscriptionClient`](#subscriptionclient) (over a WebSocket connection). + +#### Handle-Driver Concurrency Model Depending on the underlying transport, a client may need a **transport driver** running in an asynchronous context. As in the example of a WebSocket connection, @@ -230,19 +286,92 @@ In cases where a driver is necessary, the client implementation would have to become a **handle** to the driver, facilitating communication with it across asynchronous tasks. -### Inter-Task Communication +### `SubscriptionRouter` + +All possible [`SubscriptionClient`](#subscriptionclient) implementations would +need some form of subscription management and event/result routing. A +`SubscriptionRouter` is proposed whose interface facilitates: -Wherever there are asynchronous tasks communicating with each other, it is -recommended to make use of [Tokio's synchronization primitives][tokio-sync]. -These come with the downside that, once one has selected a buffer size for a -fixed-sized channel, one cannot alter that buffer size, and so buffer size -selection becomes a challenge. +1. Immediate subscribe/unsubscribe request fulfilment. +2. Two-stage subscribe/unsubscribe request management (where a + subscription/unsubscribe request can first be created in a "pending" state, + and then either confirmed or cancelled). +3. Routing of incoming events to specific subscribers. -Unfortunately, since the difference in the event processing rate (by the client) -and event receive rate (from the remote node) is application-specific, tuning -this parameter also becomes an application-specific concern. +The interface for such an entity could resemble the following: + +```rust +pub struct SubscriptionRouter { + // ... +} + +impl SubscriptionRouter { + // Publish the given event to all subscribers matching the query associated + // with the event. + pub async fn publish(&self, ev: Event) { + // ... + } + + // Add a subscription with the specified parameters. The `event_tx` + // parameter provides a way to transmit events to a `Subscription`. + // + // Once added with this method, the subscription is instantly created + // (without first pending). + pub fn add(&mut self, id: SubscriptionId, query: Query, event_tx: EventTx) { + // ... + } + + // Similar to `add`, but first creates a pending subscription. The + // `result_tx` parameter provides the `SubscriptionRouter` with a way to + // communicate to an async task about the result of the subscription + // (whether it was confirmed or cancelled). + pub fn add_pending( + &mut self, + id: SubscriptionId, + query: Query, + event_tx: EventTx, + result_tx: ResultTx, + ) { + // ... + } + + // Confirm a pending subscription. + pub fn confirm_add(&mut self, id: &SubscriptionId) -> Result<()> { + // ... + } + + // Cancel a pending subscription, returning `err` through the `result_tx` + // handle provided when calling `add_pending`. + pub fn cancel_add(&mut self, id: &SubscriptionId, err: Error) -> Result<()> { + // ... + } + + // Remove the given subscription from the router. + pub fn remove(&mut self, subs: Subscription) { + // ... + } + + // Initiate a pending subscription removal from the router. The `result_tx` + // handle will be used to return confirmation or cancellation of the pending + // removal. + pub fn remove_pending(&mut self, subs: Subscription, result_tx: ResultTx) { + // ... + } + + // Confirm the removal of the subscription with the given ID. + pub fn confirm_remove(&mut self, id: &SubscriptionId) -> Result<()> { + // ... + } + + // Cancel the pending removal, returning the given error through the + // `result_tx` interface provided when initially calling `remove_pending`. + pub fn cancel_remove(&mut self, id: &SubscriptionId, err: Error) -> Result<()> { + // ... + } +} +``` -### Query Interface +### `Query` It is proposed that, using a *builder pattern*, we implement a subscription `Query` interface that implements the full [query PEG][query-peg] provided by @@ -311,17 +440,6 @@ pub enum EventType { NewEvidence, Tx, ValidatorSetUpdates, - CompleteProposal, - Lock, - NewRound, - NewRoundStep, - Polka, - Relock, - TimeoutPropose, - TimeoutWait, - Unlock, - ValidBlock, - Vote, } pub struct Condition { @@ -342,6 +460,9 @@ pub enum Operation { // According to https://docs.tendermint.com/master/rpc/#/Websocket/subscribe, // an operand can be a string, number, date or time. We differentiate here // between integer and floating point numbers. +// +// It would be most useful to implement `From` traits for each of the different +// operand types to the `Operand` enum, as this would improve ergonomics. pub enum Operand { String(String), Integer(i64), @@ -361,15 +482,18 @@ Proposed * Provides relatively intuitive developer ergonomics (`Subscription` iteration to produce `Event`s). -* `MinimalClient` and `FullClient` traits allow for relatively easy swapping of - transports. +* Mocking client functionality is relatively easy, allowing for a greater + variety of testing (including simulating transport-level failures). ### Negative * Requires an additional concurrent, potentially long-running `async` task to be - concerned about. -* Requires careful selection of `Subscription` buffer size to avoid lost events - and terminated subscriptions. + concerned about (partially mitigated by the [handle-driver concurrency + model](#handle-driver-concurrency-model)). +* Requires some knowledge of the use of unbounded and bounded channels for + inter-task communication - or at least an understanding of what these choices + mean for clients and how buffer size selection could impact cases where + bounded channels are used. ### Neutral diff --git a/docs/architecture/assets/rpc-client-erd.graphml b/docs/architecture/assets/rpc-client-erd.graphml new file mode 100644 index 000000000..7e4ea3b7c --- /dev/null +++ b/docs/architecture/assets/rpc-client-erd.graphml @@ -0,0 +1,486 @@ + + + + + + + + + + + + + + + + + + + + + + + Client + + + + + + + + + + + SubscriptionClient + + + + + + + + + + + HttpClient + + + + + + + + + + + WebSocketSubscriptionClient + + + + + + + + + + + futures::stream::Stream + + + + + + + + + + + Subscription + + + + + + + + + + + Event + + + + + + + + + + + SubscriptionRouter + + + + + + + + + + + WebSocketSubscriptionDriver + + + + + + + + + + + HttpWebSocketClient + + + + + + + + + + + + + + + Legend + + + + + + + + + + Folder 1 + + + + + + + + + + + + + + + + Concrete Type + + + + + + + + + + + Trait + + + + + + + + + + + + + Query + + + + + + + + + + + EventType + + + + + + + + + + + Condition + + + + + + + + + + + Operation + + + + + + + + + + + Operand + + + + + + + + + + + SubscriptionId + + + + + + + + + + + + Implements + + + + + + + + + + + + Implements + + + + + + + + + + + + Implements + + + + + + + + + + + + + + + + Produces + + + + + + + + + + + + Produces + + + + + + + + + + + + + + Has/ +Uses + + + + + + + + + + + + Has/ +Uses + + + + + + + + + + + + Implements + + + + + + + + + + + + Implements + + + + + + + + + + + + Has/ +Uses + + + + + + + + + + + + + + + + + + + + + + + + + Uses + + + + + + + + + + + + Has + + + + + + + + + + + + + + + + Has + + + + + + + + + + + + + + + Has + + + + + + + + + + + + Has + + + + + + + + + + + + Has + + + + + + + + + + + + + + Has + + + + + + + + + diff --git a/docs/architecture/assets/rpc-client-erd.png b/docs/architecture/assets/rpc-client-erd.png new file mode 100644 index 0000000000000000000000000000000000000000..395e017c990540aec02fddce2d52146e4db58952 GIT binary patch literal 50744 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

VV2^3Qx)$4-X4A$u)W~Xm6G8~b( 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 K>V+Qm-hTnh4EmJ- literal 0 HcmV?d00001 diff --git a/docs/architecture/assets/rpc-client-subscription-rels.graphml b/docs/architecture/assets/rpc-client-subscription-rels.graphml deleted file mode 100644 index 5d9727917..000000000 --- a/docs/architecture/assets/rpc-client-subscription-rels.graphml +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Tendermint RPC -Endpoint - - - - - - - - - - - - - - Client Application - - - - - - - - - - Folder 3 - - - - - - - - - - - - - - - - HTTP/WebSocket -Client -(Full Client) - - - - - - - - - - - - - - Async Context - - - - - - - - - - Folder 1 - - - - - - - - - - - - - - - - WebSocket Transport -Driver - - - - - - - - - - - - - - - - Async Context(s) - - - - - - - - - - Folder 2 - - - - - - - - - - - - - - - - Subscription - - - - - - - - - - - Subscription - - - - - - - - - - - Subscription - - - - - - - - - - - - - HTTP Client -(Minimal Client) - - - - - - - - - - - (Handle to driver) - - - - - - - - - - - - - Spawns - - - - - - - - - - - Route -Events/ -Errors - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Subscribe - - - - - - - - - - - WebSocket -connection - - - - - - - - - - - - HTTP Request/ -Response - - - - - - - - - - - - HTTP Request/ -Response - - - - - - - - - diff --git a/docs/architecture/assets/rpc-client-subscription-rels.png b/docs/architecture/assets/rpc-client-subscription-rels.png deleted file mode 100644 index 03b9aa865361895dcaf9ab4758ba94e5da28fc11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49513 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 SvJ+P#?AFoKPTy`7@c#hC5m4L! From 1884297499ce9198834d92e147a93a7c83d78d36 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Thu, 27 Aug 2020 17:33:47 -0400 Subject: [PATCH 09/19] Condense Client trait example for readability Signed-off-by: Thane Thomson --- .../adr-008-event-subscription.md | 65 +------------------ 1 file changed, 2 insertions(+), 63 deletions(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index 9036f1131..37c1821dd 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -152,70 +152,9 @@ pub trait Client { where V: Into> + Send; - /// `/block`: get block at a given height. - async fn block(&self, height: H) -> Result - where - H: Into + Send; - - /// `/block`: get the latest block. - async fn latest_block(&self) -> Result; - - /// `/block_results`: get ABCI results for a block at a particular height. - async fn block_results(&self, height: H) -> Result - where - H: Into + Send; - - /// `/block_results`: get ABCI results for the latest block. - async fn latest_block_results(&self) -> Result; - - /// `/blockchain`: get block headers for `min` <= `height` <= `max`. - async fn blockchain(&self, min: H, max: H) -> Result - where - H: Into + Send; - - /// `/broadcast_tx_async`: broadcast a transaction, returning immediately. - async fn broadcast_tx_async(&self, tx: Transaction) -> Result; - - /// `/broadcast_tx_sync`: broadcast a transaction, returning the response - /// from `CheckTx`. - async fn broadcast_tx_sync(&self, tx: Transaction) -> Result; - - /// `/broadcast_tx_sync`: broadcast a transaction, returning the response - /// from `CheckTx`. - async fn broadcast_tx_commit(&self, tx: Transaction) -> Result; - - /// `/commit`: get block commit at a given height. - async fn commit(&self, height: H) -> Result - where - H: Into + Send; - - /// `/validators`: get validators a given height. - async fn validators(&self, height: H) -> Result - where - H: Into + Send; - - /// `/commit`: get the latest block commit - async fn latest_commit(&self) -> Result; - - /// `/health`: get node health. - /// - /// Returns empty result (200 OK) on success, no response in case of an error. - async fn health(&self) -> Result<()>; - - /// `/genesis`: get genesis file. - async fn genesis(&self) -> Result; - - /// `/net_info`: obtain information about P2P and other network connections. - async fn net_info(&self) -> Result; - - /// `/status`: get Tendermint status including node info, pubkey, latest - /// block hash, app hash, block height and time. - async fn status(&self) -> Result; - - /// `/broadcast_evidence`: broadcast an evidence. - async fn broadcast_evidence(&self, e: Evidence) -> Result; + /// ... - /// Perform a request against the RPC endpoint + /// Perform a general request against the RPC endpoint async fn perform(&self, request: R) -> Result where R: Request; From 80be41cc556ebd991d4d243701bc6cb0d717c12e Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Thu, 27 Aug 2020 17:41:50 -0400 Subject: [PATCH 10/19] Reduce complexity of subscription interface Signed-off-by: Thane Thomson --- .../adr-008-event-subscription.md | 36 +++++++------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index 37c1821dd..d90104c3f 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -96,8 +96,18 @@ while let Some(result_event) = subscription.next().await { Err(e) => { /* terminate subscription and report error */ }, } } + +// Terminate the subscription (i.e. unsubscribe and consume it). +// Since a `Subscription` could be moved to and consumed in any asynchronous +// context (and a distinct context to the original client entity that created +// it), it would make sense that **unsubscribing** should be accessible from +// that same context. +subscription.terminate().await.unwrap(); ``` +Once [asynchronous destructors][async-drop] are available in Rust, the +`terminate` method should no longer be necessary. + For efficient routing of events to `Subscription`s, each `Subscription` should have some kind of unique identifier associated with it (a `SubscriptionId`). Each `Subscription` relates only to a single [`Query`](#query). Therefore, its @@ -171,31 +181,8 @@ WebSocket connection to provide subscription functionality (the ```rust #[async_trait] pub trait SubscriptionClient { - /// `/subscribe`: subscribe to receive events produced by the given query, - /// but specify how many event results can be buffered in the resulting - /// subscription. - /// - /// Specifying a `buf_size` of zero should indicate to the transport that an - /// **unbounded** channel should be used. - async fn subscribe_with_buf_size( - &mut self, - query: String, - buf_size: usize, - ) -> Result; - /// `/subscribe`: subscribe to receive events produced by the given query. - async fn subscribe(&mut self, query: String) -> Result { - // Use an unbounded channel by default - self.subscribe_with_buf_size(query, 0) - .await - } - - /// `/unsubscribe`: unsubscribe from receiving events for the given - /// subscription. - /// - /// This terminates the given subscription and consumes it, since it is no - /// longer usable. - async fn unsubscribe(&mut self, subscription: Subscription) -> Result<()>; + async fn subscribe(&mut self, query: String) -> Result; } ``` @@ -455,4 +442,5 @@ None [issue-318]: https://github.com/informalsystems/tendermint-rs/issues/318 [tokio-sync]: https://docs.rs/tokio/*/tokio/sync/index.html [async-trait]: https://docs.rs/async-trait/*/async_trait/index.html +[async-drop]: https://internals.rust-lang.org/t/asynchronous-destructors/11127/49 From 4faedc68c6bcd96f7f1be63e732bcb0f298615fa Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Thu, 27 Aug 2020 17:46:25 -0400 Subject: [PATCH 11/19] Introduce ClosableClient trait Signed-off-by: Thane Thomson --- .../adr-008-event-subscription.md | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index d90104c3f..c4a15fbd4 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -147,7 +147,7 @@ entity diagram above). pub type Result = std::result::Result; #[async_trait] -pub trait Client { +pub trait Client: ClosableClient { /// `/abci_info`: get information about the ABCI application. async fn abci_info(&self) -> Result; @@ -180,12 +180,29 @@ WebSocket connection to provide subscription functionality (the ```rust #[async_trait] -pub trait SubscriptionClient { +pub trait SubscriptionClient: ClosableClient { /// `/subscribe`: subscribe to receive events produced by the given query. async fn subscribe(&mut self, query: String) -> Result; } ``` +#### `ClosableClient` + +This is not really a client in and of itself, but a trait that both the `Client` +and `SubscriptionClient` need to implement. The reason for this common trait is +that, depending on the transport layer, both types of clients may need a `close` +method to gracefully terminate the client. An example of this would be when we +implement a `WebSocketClient` that implements both the `Client` and +`SubscriptionClient` traits simultaneously. + +```rust +#[async_trait] +pub trait ClosableClient { + /// Attempt to gracefully terminate the client. + async fn close(self) -> Result<()>; +} +``` + ### Client Implementations We envisage 3 distinct client implementations at this point: From 18c7f842968d58473288c68589e907b374a28f63 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Thu, 27 Aug 2020 17:47:22 -0400 Subject: [PATCH 12/19] Reduce number of client implementations Signed-off-by: Thane Thomson --- docs/architecture/adr-008-event-subscription.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index c4a15fbd4..4daf06a84 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -205,13 +205,11 @@ pub trait ClosableClient { ### Client Implementations -We envisage 3 distinct client implementations at this point: +We envisage 2 distinct client implementations at this point: * `HttpClient`, which only implements [`Client`](#client) (over HTTP). * `WebSocketSubscriptionClient`, which only implements [`SubscriptionClient`](#subscriptionclient) (over a WebSocket connection). -* `HttpWebSocketClient`, which implements both [`Client`](#client) (over HTTP) - and [`SubscriptionClient`](#subscriptionclient) (over a WebSocket connection). #### Handle-Driver Concurrency Model From c465ce860084ee82402c7788c3eb0a96167b25f7 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Thu, 27 Aug 2020 17:48:39 -0400 Subject: [PATCH 13/19] Remove SubscriptionRouter from ADR discussion (it is an implementation detail) Signed-off-by: Thane Thomson --- .../adr-008-event-subscription.md | 85 ------------------- 1 file changed, 85 deletions(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index 4daf06a84..4f927c6b7 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -227,91 +227,6 @@ In cases where a driver is necessary, the client implementation would have to become a **handle** to the driver, facilitating communication with it across asynchronous tasks. -### `SubscriptionRouter` - -All possible [`SubscriptionClient`](#subscriptionclient) implementations would -need some form of subscription management and event/result routing. A -`SubscriptionRouter` is proposed whose interface facilitates: - -1. Immediate subscribe/unsubscribe request fulfilment. -2. Two-stage subscribe/unsubscribe request management (where a - subscription/unsubscribe request can first be created in a "pending" state, - and then either confirmed or cancelled). -3. Routing of incoming events to specific subscribers. - -The interface for such an entity could resemble the following: - -```rust -pub struct SubscriptionRouter { - // ... -} - -impl SubscriptionRouter { - // Publish the given event to all subscribers matching the query associated - // with the event. - pub async fn publish(&self, ev: Event) { - // ... - } - - // Add a subscription with the specified parameters. The `event_tx` - // parameter provides a way to transmit events to a `Subscription`. - // - // Once added with this method, the subscription is instantly created - // (without first pending). - pub fn add(&mut self, id: SubscriptionId, query: Query, event_tx: EventTx) { - // ... - } - - // Similar to `add`, but first creates a pending subscription. The - // `result_tx` parameter provides the `SubscriptionRouter` with a way to - // communicate to an async task about the result of the subscription - // (whether it was confirmed or cancelled). - pub fn add_pending( - &mut self, - id: SubscriptionId, - query: Query, - event_tx: EventTx, - result_tx: ResultTx, - ) { - // ... - } - - // Confirm a pending subscription. - pub fn confirm_add(&mut self, id: &SubscriptionId) -> Result<()> { - // ... - } - - // Cancel a pending subscription, returning `err` through the `result_tx` - // handle provided when calling `add_pending`. - pub fn cancel_add(&mut self, id: &SubscriptionId, err: Error) -> Result<()> { - // ... - } - - // Remove the given subscription from the router. - pub fn remove(&mut self, subs: Subscription) { - // ... - } - - // Initiate a pending subscription removal from the router. The `result_tx` - // handle will be used to return confirmation or cancellation of the pending - // removal. - pub fn remove_pending(&mut self, subs: Subscription, result_tx: ResultTx) { - // ... - } - - // Confirm the removal of the subscription with the given ID. - pub fn confirm_remove(&mut self, id: &SubscriptionId) -> Result<()> { - // ... - } - - // Cancel the pending removal, returning the given error through the - // `result_tx` interface provided when initially calling `remove_pending`. - pub fn cancel_remove(&mut self, id: &SubscriptionId, err: Error) -> Result<()> { - // ... - } -} -``` - ### `Query` It is proposed that, using a *builder pattern*, we implement a subscription From 097938061ec03fa8f1be9c40d70dbeb8873cb014 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Thu, 27 Aug 2020 18:02:11 -0400 Subject: [PATCH 14/19] Update ERD to reflect current architecture Signed-off-by: Thane Thomson --- .../assets/rpc-client-erd.graphml | 195 +++++++----------- docs/architecture/assets/rpc-client-erd.png | Bin 50744 -> 51977 bytes 2 files changed, 72 insertions(+), 123 deletions(-) diff --git a/docs/architecture/assets/rpc-client-erd.graphml b/docs/architecture/assets/rpc-client-erd.graphml index 7e4ea3b7c..699dc8d42 100644 --- a/docs/architecture/assets/rpc-client-erd.graphml +++ b/docs/architecture/assets/rpc-client-erd.graphml @@ -13,13 +13,13 @@ - + - + - + Client @@ -30,7 +30,7 @@ - + SubscriptionClient @@ -39,9 +39,9 @@ - + - + HttpClient @@ -52,7 +52,7 @@ - + WebSocketSubscriptionClient @@ -74,7 +74,7 @@ - + Subscription @@ -85,7 +85,7 @@ - + Event @@ -94,9 +94,9 @@ - + - + SubscriptionRouter @@ -107,38 +107,26 @@ - + WebSocketSubscriptionDriver - - - - - - - HttpWebSocketClient - - - - - + - - + - Legend + Legend - + @@ -153,11 +141,11 @@ - - + + - + Concrete Type @@ -165,10 +153,10 @@ - + - + Trait @@ -176,76 +164,100 @@ + + + + + + + Exposed through +tendermint-rpc +crate public API + + + + + + + + + + + Implementation +detail + + + + - + - + - + Query - + - + EventType - + - + Condition - + - + Operation - + - + Operand - + - + SubscriptionId - @@ -257,7 +269,6 @@ - @@ -269,7 +280,6 @@ - @@ -281,7 +291,6 @@ - @@ -297,7 +306,6 @@ - @@ -309,22 +317,20 @@ - - + - Has/ + Has/ Uses - @@ -336,70 +342,18 @@ Uses - - - - - - - - Implements - - - - - - - - - - - - Implements - - - - - - - - - - - - Has/ -Uses - - - - - - - - - - - - - - - - - - - + - Uses + Uses - - + @@ -410,28 +364,26 @@ Uses - - + - + - Has + Has - - + - + @@ -441,8 +393,7 @@ Uses - - + @@ -453,8 +404,7 @@ Uses - - + @@ -465,8 +415,7 @@ Uses - - + diff --git a/docs/architecture/assets/rpc-client-erd.png b/docs/architecture/assets/rpc-client-erd.png index 395e017c990540aec02fddce2d52146e4db58952..1bb29ddc3bdfcd71a13dd0885365e545f35be410 100644 GIT binary patch literal 51977 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

IvR!J$RYBF}aYxi>r%T015cGHs>s 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 HN96wi!mJrD literal 50744 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

VV2^3Qx)$4-X4A$u)W~Xm6G8~b( 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 K>V+Qm-hTnh4EmJ- From 7008c076f7ed2256adadaf7b0d2d4992545970da Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Thu, 27 Aug 2020 18:21:07 -0400 Subject: [PATCH 15/19] Add note on bounded vs unbounded channels in subscriptions Signed-off-by: Thane Thomson --- docs/architecture/adr-008-event-subscription.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index 4f927c6b7..0349c9cc1 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -121,6 +121,14 @@ pub struct Subscription { } ``` +Under the hood, a `Subscription` is envisaged to make use of some kind of +**unbounded channel** to buffer incoming `Event`s, such as that provided by +[Tokio's `mpsc`][tokio-mpsc]. We don't propose the use of bounded channels yet +since they complicate the concurrency model significantly: we would need to +cater for cases where we encounter full channels and provide for conventional or +application-specific ways of dealing with those full channels (e.g. back-off, or +back-pressure). + `Subscription`s are created by a client - described in the following sub-section. ### Client Model @@ -346,10 +354,6 @@ Proposed * Requires an additional concurrent, potentially long-running `async` task to be concerned about (partially mitigated by the [handle-driver concurrency model](#handle-driver-concurrency-model)). -* Requires some knowledge of the use of unbounded and bounded channels for - inter-task communication - or at least an understanding of what these choices - mean for clients and how buffer size selection could impact cases where - bounded channels are used. ### Neutral @@ -373,4 +377,5 @@ None [tokio-sync]: https://docs.rs/tokio/*/tokio/sync/index.html [async-trait]: https://docs.rs/async-trait/*/async_trait/index.html [async-drop]: https://internals.rust-lang.org/t/asynchronous-destructors/11127/49 +[tokio-mpsc]: https://docs.rs/tokio/*/tokio/sync/mpsc/index.html From 330473651feb7d3b3cdd49c631641ccca9e66e56 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Thu, 27 Aug 2020 18:24:31 -0400 Subject: [PATCH 16/19] Fix link for async drop discussion Signed-off-by: Thane Thomson --- docs/architecture/adr-008-event-subscription.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index 0349c9cc1..6a2642dc0 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -376,6 +376,6 @@ None [issue-318]: https://github.com/informalsystems/tendermint-rs/issues/318 [tokio-sync]: https://docs.rs/tokio/*/tokio/sync/index.html [async-trait]: https://docs.rs/async-trait/*/async_trait/index.html -[async-drop]: https://internals.rust-lang.org/t/asynchronous-destructors/11127/49 +[async-drop]: https://internals.rust-lang.org/t/asynchronous-destructors/11127 [tokio-mpsc]: https://docs.rs/tokio/*/tokio/sync/mpsc/index.html From b598a1ae354564c82c6295a57e30a9a849f72c84 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Thu, 27 Aug 2020 18:27:19 -0400 Subject: [PATCH 17/19] Add more structure and explanation to the Subscription section Signed-off-by: Thane Thomson --- docs/architecture/adr-008-event-subscription.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index 6a2642dc0..b1aa4d27a 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -121,6 +121,12 @@ pub struct Subscription { } ``` +#### Buffering of Events + +Since the rate at which events could be produced by the remote RPC endpoint may +differ from the rate at which the client process them, we need to buffer +incoming events in a `Subscription`. + Under the hood, a `Subscription` is envisaged to make use of some kind of **unbounded channel** to buffer incoming `Event`s, such as that provided by [Tokio's `mpsc`][tokio-mpsc]. We don't propose the use of bounded channels yet @@ -129,8 +135,6 @@ cater for cases where we encounter full channels and provide for conventional or application-specific ways of dealing with those full channels (e.g. back-off, or back-pressure). -`Subscription`s are created by a client - described in the following sub-section. - ### Client Model Users of the Tendermint RPC library may or may not want access to subscription From 0b074582fd5933205c76df53291e9ac1acd515a2 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Thu, 27 Aug 2020 18:35:39 -0400 Subject: [PATCH 18/19] Add Subscription section on leveraging futures::stream utils Signed-off-by: Thane Thomson --- .../adr-008-event-subscription.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/architecture/adr-008-event-subscription.md b/docs/architecture/adr-008-event-subscription.md index b1aa4d27a..40e391d3d 100644 --- a/docs/architecture/adr-008-event-subscription.md +++ b/docs/architecture/adr-008-event-subscription.md @@ -135,6 +135,30 @@ cater for cases where we encounter full channels and provide for conventional or application-specific ways of dealing with those full channels (e.g. back-off, or back-pressure). +#### Managing Multiple Simultaneous Subscriptions + +There may come instances where clients would want to initiate multiple +subscriptions to different event types and consume them all from the same +context. Since the `Subscription` struct implements the +[`Stream`][futures-stream] trait, all of the [stream-related +functionality][futures-stream-mod] should enhance the ergonomics of working with +`Subscription`s. + +For example, if you wanted to iterate through two subscriptions at the same +time, processing events in the order in which they are received by the client: + +```rust +use futures::stream::select_all; + +// `subs1` and `subs2` are `Subscription`s: +while let Some(res) = select_all(vec![subs1, subs2]).next().await { + match res { + Ok(event) => { /* handle event */ }, + Err(e) => { /* handle error */ }, + } +} +``` + ### Client Model Users of the Tendermint RPC library may or may not want access to subscription @@ -382,4 +406,5 @@ None [async-trait]: https://docs.rs/async-trait/*/async_trait/index.html [async-drop]: https://internals.rust-lang.org/t/asynchronous-destructors/11127 [tokio-mpsc]: https://docs.rs/tokio/*/tokio/sync/mpsc/index.html +[futures-stream-mod]: https://docs.rs/futures/*/futures/stream/index.html From d4ba7aaa7f922edee2f05024d88e578df0882247 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Fri, 28 Aug 2020 12:57:33 -0400 Subject: [PATCH 19/19] Clarify ERD by using colours instead of line thickness Signed-off-by: Thane Thomson --- .../assets/rpc-client-erd.graphml | 51 +++++++----------- docs/architecture/assets/rpc-client-erd.png | Bin 51977 -> 53462 bytes 2 files changed, 20 insertions(+), 31 deletions(-) diff --git a/docs/architecture/assets/rpc-client-erd.graphml b/docs/architecture/assets/rpc-client-erd.graphml index 699dc8d42..b136cd350 100644 --- a/docs/architecture/assets/rpc-client-erd.graphml +++ b/docs/architecture/assets/rpc-client-erd.graphml @@ -19,7 +19,7 @@ - + Client @@ -30,7 +30,7 @@ - + SubscriptionClient @@ -41,7 +41,7 @@ - + HttpClient @@ -52,7 +52,7 @@ - + WebSocketSubscriptionClient @@ -74,7 +74,7 @@ - + Subscription @@ -85,7 +85,7 @@ - + Event @@ -95,7 +95,7 @@ - + SubscriptionRouter @@ -106,7 +106,7 @@ - + WebSocketSubscriptionDriver @@ -148,7 +148,8 @@ - Concrete Type + Public Concrete +Type @@ -168,23 +169,11 @@ - - - Exposed through -tendermint-rpc -crate public API - - - - - - - - - + - Implementation -detail + Private Concrete +Type (Implementation +Detail) @@ -196,7 +185,7 @@ detail - + Query @@ -207,7 +196,7 @@ detail - + EventType @@ -218,7 +207,7 @@ detail - + Condition @@ -229,7 +218,7 @@ detail - + Operation @@ -240,7 +229,7 @@ detail - + Operand @@ -251,7 +240,7 @@ detail - + SubscriptionId diff --git a/docs/architecture/assets/rpc-client-erd.png b/docs/architecture/assets/rpc-client-erd.png index 1bb29ddc3bdfcd71a13dd0885365e545f35be410..3bfb5b8c57c8ff81e04257b7308272885192bb7c 100644 GIT binary patch literal 53462 zcmeFZcTm&Y`ZpRyL`A@cNEa25E+8Ns=^X{67m+4iLJ2+CK#^Vr1Vno8LI?yEr56Qh zN$9|?|(HEc?VM2U9{pOVy_p}qri=Ul(_CZnM-uL&n4eS+uPaHT@c zEc{W2OTrYLxTLbEfwo#0&P)hdC=1qvKfq7lEoxd|4^qk>mm!{9Tet#cpL{{n z$?NZ`@M{5SX&Fz7GIMG5jCc3Og-?d#j*h{X+&tM9ljz|#}ECYxUtbmv= zevc*2_jf);*xXGR{pDz+KjkfQKs-K%$-??)P^#kN4NMS-R6`opO%Lo%=hK}N5J;0p zG?JXO#rV^iD}jJm)M3y*v%3gVy<_9&Adsu$_i-YeU|o)fbcC~rwHOByPjWvb{(pbb zwn?1-F`~0vkZ0|82!{yA=WF5A4N<;bAKC-nmf@{ktZX0c2GLKYTq_xwzdmIl8i2qG zR6XL9CW@Py-!pMS7a zAhh=;C3m>*mP&8_DDfMyp0qktiuxffd#CSc?6_C!K?tJ_URLM;C!^sO<~ZcII_6}d zTNE0Sqn#GJaL-^p&_mq+ECtx*+2a=5R&1n&PMM&l^CvhlZY;O03*9?W)n11gt1$Vg4%*&o zt)<2kxVU#{ct8Of8FdKJOTHh=sh|GD0bQ7VRayZ5Cz+C$2t1lr8vsZ=P63W@MM!8|D3L4E3LXMc7)U0ZiCZb8)1oN=% zWTAEwT0*q$Hm7x=817SxF>IAY-)1Q~)N!craSmoOKnJJHoX=c?bbW)R7c@tJ&0q}! zUK~Oz^-3NYezafd-{!H2D`?Pxusxz9Xz!7z)#4WmW#`pv>sP6^UHfcuj8nXQ^UKTU zzN>`RnB{F!l=~TkQAl9&VvrXlca*&!PR9ju#2~{Y54{S-gt!Mi*wq zB7-kqH3XXn?`mD%6@hftS}IoUx5RQ`;`yzEldi@CI*b!RJZ_QG4qws)N_y@Fw`epH zZI?>{n~4`N6kH^QA}QWp<(DBu$K+y#HQV5d4Y0J8-q^WN`zJ}8J2DA3$b*x#!Sm|6+C&(rxoYmlGrlHT@>6D zBU&W7)846HYE{rT#(OYofUv_q$qDs6sj^2(G~7#A`(-Z7PBL5dC9<4xVjjXLW|T>Z zuqI7uJDdL2^T|$XIPlBp1;vHFiM>fO88~er;@&Tx;WJR*8*P14d%X&3L4`O{SURr8Z#1iPMvX3~AQz z%NM+4T-V$+x8_33&HDl-d2YeRd8T~q0zBm$9gl?{SC&y?q6ELcD-GNe*hM=RL{rM< zCR;jiCRY^+PHKvB=hIUnGVu8)v8w%hiokPAh2H~CCt7C$ay;vH)gNRhIH?RuVgFBT zWZb{EP%mvGM}GB*@^h7cuX4{Ig6Pz{t`W`uFFxwR1)6H;lBY|LY(MXWcFSpjWOInk zQv&|^WRYDKckdutTogY-c)?1HP4FXXAQs?30uY z`F#TCAeu@xIcFdzm0eyPseZV!vdROZ-2Z78-3NkxK++@sy0jG0 z$+J&#uH1R@-kA#WaO?;X`V0I&xx)X!!~OqD|FbmZW<4jNXfdyJz+_eiU*Y{=gn%-z zLEdTnS)}IJBqWCJ;m8>!_BSz3TZ+dh&$THzIXOyBz2XOXIwTYfKWRwL zUb&a48h=eLXnhg0HP@53OLVM1?$5&46QzT5Uqrio68Q1shXKNSW$fGX@-k2t2W-^} zY7ZAhXJb_7=lk?Hac_a4kaLc{2@{IpB6 zCn`mV-?ZvUDr{*8gfyh5PqS%fhwI=>P(BE?M8SbFYYI}*`L2vs@NR?Tcrnj!-7Fy@ zA)jbZ)Q!!B)>m;s{8|S4`}?s77bkSNk}{Upyy5X=;eK>|AVta@=SRKy`sdG|zsREc zo$=Hs)RC=t$Q8$J926Yv${a-t?R)Di4xYdy6VMd$;>C+Jg)p65?Hq#&TXe68+ngf8 zd$NUc=k;~@;6MNWV0WY2);I(!U}Y4x;|Vfg-d-6G zqZ8JwdNTU``}h5wwZ44)HSpOXj?~}bD8l+A-CJau!euDf3Dw0Zr}6So7Mj#n19H50 zaRTAHI??Ph-NDRqsJ0YJFA8MBzU|~g!=o^=IH(T4n+IT4az&v$jb#)sEo2}1>yg*c zA06!SU5g^r8tfsvxhr>?b>u_U9YuN^CQc%b+=9HRM9pX zYn#taZ*0!=>&nka9`2hjyst`bjpNy(6#1?o^C4J9?PMl&h&6z7cpSFNGT|}VO_O)-HeDAx__V{`1cw@-(5jR=|zPOhh zmc7X6{&>5pQm&v$1jr6w@_3uW{&$-nFd<{U$wbD%!?$p^6A=<6whbL5I6JoM>to;E zG)SBows4^FTspY_Lyd(CT?2gM*3;G(i_+@v-bo0*hO#f}*((-!TVG20K9uVA1(}xk z6IBOTZFUv#CnbQKf$2?gie#OwNy_=nGs3SmSI8M|w|Ru}m%MOk7`|}VLc8fyOtVg= zk-5-Ir{{qo!TFf}8V}}wh3X}fwc8D+L{iN^xF0lJS3nnCJPD%gWt;m8xjc{Hd_`@i zL>nU6hP63O2MEu!7TxHt9Sh!}k~>Fzp*7Q~;2tWnB=Jk-A2|TecIDqry_G{3L6h{I zm)Bu-YOZIo?=%qz$+y>Si=IviP@8pc@2usK!0?u0jq!S+3&I|6B+Qcf5A~%LL(dU* z%9NT~sZEj-@#S-kKaFM8gf^)CKL?diO4p*-Uu zgO^av=LC85PVWVD1!1qvydWnPb^juDQ=I3e_NQanBy^X*1x4RV9#;* z(-2S@Lhk!%`pfPMFP`4>GC7muPjrvs4rla~Xk(i9MIBPSjPmK2fch_?x;I5q!AsJu zbIP3nuswmy9SeNfh#6-^Qi~Y8KcF;=7(7qMK~AwPZOoC*8o>f@}A*|-pzJc zsKORY{^j6%M@x!s!vEt@67d6OskeuP83q%J4Q@%t+_Sj@9&$MQ*CXIX9vg+6|45#( z)3Gu$^rGk4`P>)E^=4*`cnwxpz5bGmC#7dS0XQZ9)M`pjikkX*k?^>i1&UJtxV0xM zjUgRp{`IqEMos1H+jN(eIiPRe|NRWh0<6hLYaWJc5>5(ms^N*G?_hEDE2lE1Gs4f@ zfo%8#M2m6}s}?e=7?DhmK01ZR%MX8l+W$30{L5jZ z25^G)?2E270Hf*rd05>3H+W!zhw5z~CPW=0I(a3LE`%T>(K?HR`r#p)hx;Zc4>!xIF1YP~3-JD=;ThOizWS7H4jT3$%d#KbI&(k%Q z*SR-4oh#EoH(VsbD!Hq$B{`+`^hMXPZO?0LZ$1T@jl@ss3Hs(q81(s6EoD{cwh0@g zPi3Xw**^@tbk^R$M)fZ_Co57>ljmIp7r6&k`rfmVg6Q_vXd2JB-*)4>5$ZP|ldlND z26Gv?6NEB2W0!8I#y$MSc%DAf2-p}T}_jv5&8jH9W%*SQu zh1)Tfy`V_B)@nQlrxV`U*E*iRh<1171kXOa{k4jvpesZ-s2WypKrvav6lXFO;~HWT8`U!zV|_xUqF)i+vuTW`oj_BBIWB2*Y|rrBq!bLp7_B%)fO$c zXF}B2P$*DoC}|{Ea}v>&aWOQd4xhQ4zN3#Pt7Wnt@(~grNUIZ83p>x4A3YIPCu}to zUHbN;4{~9-z|-`t&}=HKMk=yazFmYO_NGf9qIRn|N7!YOx02-gpDe_ajBJMRo0`S4 zF{=V~yEEa~ST}gw$HOS&cKSnvuvS>PvG`Jm=wWlZnzs(#VJJQDX9kZO_2q}9Md8rO z&$V1AQ#bWDZZ4Y&3Ifdu0`tAh@V8M1fqr72Ne|bO4huS>N^#=Z)3Tl;z?MIT(e`=D z;-)A#-q)(%Je+E$*I7!onj*0s%}dF8*z{JW0=uyQ%_SL`f1Q5kICTK}7)j(TM>^Iw ze}{kf@#3&=jdl&i&@lR4d_qd(*zzHx=B+0gDj5+|Op}ham&3TWcVAg^4y?op^IJx+ za>5%A$#?Bbl~=SH=iFB#6QABHo0cfT`hicKI_GLDVOy`wp2 z?D{;UdQlHJu!CEOAChpt2eGrIm}VzGqdYGn{hXqdJ(r(JZevzB0}+QeSdaM)3Oj97 zkre*b+m-n-eM-HNEnc^{|1#0iB_js%fdB zJ%gW^N2|OHn4Z~@Av*h;m5ZS}CiB_QJz#FSPGbaTC#rQIMLzIAZ0t4mp+=>3bmsv@ zyoVD#+YsjFGAAr!S~t%_V=2^WSL8w`_w+QxXG5<@L$>ww=G(>o>MV(ect&I>wl2*uh(tHvG1B7r?@cD~H1xjJ-` z%fM|$4w0z*2QbhLnmhIyqw=67RseI6E7=?Vl~4bYmt&XC#GB#4{J|K?RPErEKAp~i zQp>opRLgo+OJfeZcKTL)i>FMXV2CLB?15uDdxguysR6`(G^h3TGnd#+vdb?~mR^cg zP~P#SczNN4=DsR3;%=1%ZeY z;+{@ePkq%mb}!^Yu}0SC)$BkTF$VaeLx_Hp)6pdW9m@KyJ zl&s?M8cZz8TJjXrJdJfz&>q5?8KXBNDyqcn*u-u$F4Ju=(s*pAEbTkFC0~Lq89JgW z?k@&THn2tsHmi?G^cxpTnF)XETD2-tQsUx=?TEZK+4HO!W*V=!?nzJVg+PuSENVIo z`RW>b<`-RGS%CVHf6@)x*pTfqYa?G2mup?$XkFod*glCXoi$|k{K>)ZLmwt~*YhW; zhiWY9P{bfK3o~A{vrCZ5YQBLhs?55}93c;1bFE>r#!Y&6 zD2HkjrwY4NcyB&n6Kff!ju&;(18HVPIDTV6SUSDK+0?r(+jVtH!_|(E`KJMyf0o7C zfErqmB(xZ8&|H2CFaK5_dLZd5V%Ch|uxgJj7#Qy)k4I_S8rKraI#389A&um4vx$hb z9PDc`j!((Z>VeOko@LN9td2U&)ZKlMrXaHJa4%THr-hQ~Wfy6<2(G>er7b5MEd zlbp&Rx2VtVx4Wy^UR(@oJ#K@bTBf}XRpg^%@XAGMk3?$x7EJ$3aM#5Iime`Gmj32~ zaAam{zJ8ugmG|oVuyQrLZl}5Fn;&S)cn;XG2cE01!mWTaA;l*fV_mk{!e>BZDQRF; z5ws=tbL6x`%+AO`LB&=yO>9Sz1iz*VZV!6}fpqM^dxXKDbIoWzui0`g189o6%mi*q zBh>b^IC`rO&FF-;k9fvhj)5+FLWlJVT`gZ@g5u&V3oTH4Q>>-U^FtC>Vq9}>N&0q< zM|jCVhp2Cv+8vrsr>-Vq@v}~n6nEXg_+ z;U9(-4coGleLdGz3ykM95u)7( zwU-JD?cfhMUOKKdrX&KBsBCHzZEVv_nLA`$^ljV#VTin+*CWYNC61@l#khdVh+T7M zji55FA%9?cbH>99+W9$ZvSH%e@Z)BBuR1oE0(@q($87_uD|+K#5N*kh{kIkK*Y@L` z1z$a*y6ZZd7sFBQF5K}dSWkXWN`xuLx2Bvp7_jU)A?<(nh|+n+9+kTm^y!J;Rx zLM4NVf&0r z%`kPc`I#@1Fw|OIkEbTKR-u-!KE}xZ0h{Ss1c|6(>$aausbxD$k8$d&N9abKBNK$^ zWg7QAOI<{tV^$E@mL^4OgpQmk=#%_O<4dnpQz=O$#OUAUAH({gHk|e+@4P+^NJOv~ z^XyuE4Y{5RVsCQ)c_e2ix^JbagY@!EY^JkB)OL-cI;r;Vu*Ylwz5m*=%Ts5mZepjb910tm2&+H_Ky`~khK;M`Fl87+ z1jnQ+uExyZGbhtzUilVv#5#$o39`@xC()l7b-NG?yKCpP*VY=1%t`+Pf(^8qmWuh} zU!#(j0{7>}>q}3-M^LdVnNZza;?AD3k9T6jPatUdy?S;LlC4ARF$F9z%N+LBm8lIh zW#~=E?Nl_o*5O!4b8k__0XeKFsHH|B-UK4W75s@+<=a@9UFVktA>vUU~Jd*(Odv$9a zq74!jW^D6AE6t_?H##eqT+Bd37zta-rHDvXTXly(ROpSNwALN!vRon^M-uNguUMoBTo`?*;6YzJ1%+)N zW-6^xl}PT0ByXo*tJA<2ANSTtiaDtHaZunfT-T#bt{K-7bfVBT|900cpM$>?HTAKQ zTf2HTHa$!>U9o4TpZ03ZGiAKexj*Bk4wP04XZ6Z;=7px_M{k@!=hm&x!R1Mm?+$gs|JO99&ZkHcm4=X&$Lv=*AvyxKpBi62D_euStfFT4&E%pt+9S;sG)Y#$0<@#O)L5#q!G_ zlw}f@wk*LcuJjo(%rD4SF#1(LpfFW=;83}nXN@+L@~w^6$CTmC%1R&L{5F0tWk7ZJ zCWhKm=r*b=_0x1ceRo$F8q*f<`rS7`MqleJ_x9Wh;?FTsYBXK4Q#WESOC1Q4#9yJN z-uXmCK_?9TTGbwD#5Ol%aEZqU6XLn5^g0iI0``&*ru1e(Yft-zDeDhANya`{Z0lC| z3OXX)$|YX@sZK)S&XZvf7Adj~;YX?V>6B^|;@0@BVookp_Y-voas!mS!6{pdhn9cn zoA(!pMq*;|`oL{1($AtoS@CF&Hh}U0%1hjQ_VLIeuni;gzEbWhU%xV%h3zrn@CJx6 zf1uQcr`?V5)?I^4pWUS7?;qz?KyQW|!tVU+_tOgP23(SspVGs`Xh|tK=s{IhB!FXQ z@w0(BfXrg8gCMl*LL)a+c8mJoR!G(eyWOu88tS4M4#UJ;zoA{NjI=g&^ZeOR!SHyX z^neuKYP>jU1cNdqlv^`8S@mw_!==jYW02R)BX#Z`Y4^w3$n_q`E|Zezq$4}quhf_k zTQ13FzKG$S4<1kV&ug9JA!xTV<3gB?FmvU%oX9kNZDsrah5cbVM zDp?K@au%uqv0O>c;VyGKhIBb5&yboQA~41?QFYw|d7)raGJIIbsSjD-|oQb7@|)h507Q z79C&@2?A0Rdb|MJBN4yzBh&cCT>~HB8h~iHKu})!eXQ3OXKz_ehnQwr?(R-*Qx|LE zl)nI1b7Mkr!l(I%EppXO3_VCdHb{`6_=(#+f~dQP6l_iGf=q1x(TS230vbq>PtMX>pUEy^pCAN?KOp!pnS|!$?av*J& zbp?IXCiqYl`J6r2eC{VEU8XG6pa7X#JnZe5&Dm5jy?f`>e*)V?nsNZ+6*Z18o8 zeOHhYs3KIi0PnA;WK<BEMhga$TOnO+l*FNGK1|OXQRY`pW0;{cV z0-^|&W$3SRu+H&FS&}pfjfV=wL?_2dvyVUuqkD-;k8|r*m(C}2eQU8Xef8nnn#Ov} z>$aF0okFpnTmwbpje|qW=iY{oDI$8-s)hF`@@wgQVOm`Jy*XTSl9>k)L*IwA zq@gdWBkPvR59)ao({8j5?p#ED_xpOt^I&*K(@+G2zF{9RL6&)iAV7}oo{gZgJY5J6 z&AZXaTBn$CFq_8V`MIDrt*h9}Z*ky0!ez3@vGp@8svOj-C?l~4&3(R$?ejp!7!cw% zBhSPTPCprL)}2{=OV-ItJi016yfaKw#bx+0n#UCXLxEA;b2Z&LF{VlrT{|A75iV8( zqLW!JG-feT-kgsEN1QOuFekb#P)*57n4|hJVFjOkZ1prqJZM-N`%u;hcZ!lzQ#ZYbX z>c&wjhPbZllzh_%)1?>Hpq~e=vpDXvixM#Ggqx4m74mmj7PB57IPC9l0I-@mH;7Jd)vi*R4|fa$5e+iRRIhj1nk~}0NOUA?Ub(s8 zz$sL8N2WMEGOi88XmgV5FOn}VJQ*ndo#`G?mJ@%^WoS-T*= z3Xz5t94wP`YE(o_?$w;0FXuV_Lk3rEj*6?O@T5piX5rbnOp`YTIbdTe%LMPrHpD7cdrt&dm|H+`=n#_$U zxSI!PI;wBH*S@>oSW;qFQB>0Qz^3yL^~q&8QpM}-8lxIkNClhD z(~yr>udGzosqI^IXCc)Sg@}3nlz~(X^t#%g%9GTd$Y*vG(5pQau&qY{u1*T_Rt#k}5+{?m2HDB3`F;VRaG9HQEmpt@D*vbAL-<%&VTF2IVlg*d?`e^Q zg#A$T>H0&TX}Dd>J5VoeW=-KV{J1dHo*07ROCYMQyndZOY~W$=U6NM&n1FFYfL-SH z1sn|Yf4xPnP_408zaUh+{;(cw_(z&w5=P+w@(Tz^;J3%05tD8%4Ig%8s5CfG2NJUO z&xB6Wvz0xd38naZq2*sm{-;DFG>KguCFYF@w{0|Qy*6sSw`eLY&k;%&ptRxtk7bpS zu`t>sN@~0St5%je83jekEwe8`3_>tn^n^moHo?LZY965X=kndZR%E2aM~aKT^u60( z@7CDDx@dqE{SG#C$3L#i5eh@pct*|5|GBI}N+?`XFiMDtiTP|U3^X{*z9JkpAJlCG zk4jHXl**_7u^>bG(E;=ELB3vz+k7vp`ny|>DpZ7$m08YtTVFy2?C(_iReXsf=QgS7 z&(cT%b=V@kk}p+U+k^_x7u)MU#|V`o_k}}O>A;tNVvdh%0ignrLb8^-Q(IV9c`s!XY_Dr3+sFBTJ4d zU2ov+&7hp>RJ+lO^4(*(apOuQ@v;An($_rr-%{P-&rWz3r`+MLH%34$*Jpl=j*jwMcieVVAwA+_(fNeYf9A)p z|8-n*$6@s|lw)GK3>hT-uvJ`cM=OS2zfE-i9}A7!GX{jxrZxTP)2EASR+UqwU&eA9 z+hSwS94**=KH>g9FX+RYLlA(n1fIJ6QqTaBB;qFGG8OD>81x-f=w22mJl;+F$Aa2f z4~PCR9K6kr?@MNhw@b|m9j0X%emDro6v?dONa!?CBPf~ne)*;{XxJbWdtbf?D8zaX z)ja%DMSJp8>O~RO-UUfU+j>x#1byLIqIuW~SM=qz(%@qAg%Ht{CmkL^ivTTKz9gmc zo6U&B?@Tj}3sMqJwz3xy)!=w$_>W$+wS<^r^QN5Wi?(8ovAU_s8%nOySzl|a+I#Xa z|0>W~Sp@XuFh%WuPnDt9nYZ=ZnT!KH(8@{6Yn_s`gpDP!EXoC4T0!GDQru;{5zxt# zWHb}NQQ4OY(hJx|pB)Vk4?o0*no<1PSGiOCUDk3@64x*Dgfx=5pH2HBGCg5EzVFJ(o=nZ6>^&(DZ~tAC6Qc&J$&di>P8 z%`P0Ur5;bIs9z}!;i5afJHp8fc+3u_m%sD#czWb1;-n{YCWLFP( zn=wgU)Y_ma(Bc*7)&VxSz++`B1&&8J(>{}$6*+TNYS(m;obFC|-H6=DN0F7H8T{Fx zDX>Wj@Q_n8z3B}P3j9HCTriz2WB#T;WVUF=RwkIrBjWzQ&&Su>9L0($x6uNcT3}d7 zQ^~Y=(^%oyi7#uDMh>r5j`Q%H`F%Qn%C8L#L(o<(nLu*4W!*VTPQqiQJW#QD6uc%Q zasdy2@1gh=_>I8h?^oH`Z4dDW4GxL|gx}8d)r9~3x6!XJvIYbOY9xydR2_Rtee0pW z$~Vv(8-j$KgVg6$affBF^DJLG@Z6N@kN8Cpy>?)(ZGUF3j6A1c5cm37MaGr^xH6Km z!)(;aWHof=1nuu#HfB-<(SMaM> zdc_Z)I@4;(0@{9(T$`^9V6sw&JPZ2GF$)7=e*-`QXL+=8*bk}DvH^NR-8SZW8hUT9 zE>;dJ?;LE8haGP8nKn4wODAk-xGCZ~8P5<+z+3wmy3Wg2vwu@wDs!?9ne$_wC%tsD*m1C$n%`=oIm)^|fGkqbrYl{6(f4Q7@YQewU3QZk?~GjmN12Dwg=r9N z-ml>$Gf&;KTu)MJ9=qDz)iOvUU@L2?m8;EGfED-K-+m|Tav^FstS?6^D?z}n;p^9l zmKeKlL6pD^fOdUh*O_p8hyLPGkZ2=Al0||Jv-y=qMjqWlETE$uHUL79x$H-;n9P3= z{h@h)KGW@O1iU|!sy1C4!e0fRt8-r=CJm$29R%yS9}y)^j{-@Q%h%FjYT zq9G5?@>+0uz5hf1o67g2kum{iBWS_FH4Xph_AAX%PZH6@nINFde06cu5XA1k`EG%B5jQL6ELpuw=h*>LK}P6sgs z1j|vB|6v;Aqf(%-PyWX=xi7P6rh{MW7MaAvlFTFH-Z3w3JT%CxJ-U9j#x>gskh&9kGJKvK>MM=rr zJO#MoKvs9KX;@~}4xCA~btl94M^&YNkV{t6Nk>&xRnYgSldl&M9$swO8VgJ**kb3l}Ol9tOC7+Pyf5krNRP>-St@j>HvU^?J?F}SASQjf3s5u^zQ?!K$z)D5`{Sey%2^@yaiplK#k{r=3IBnkA4*q z5uv%sX5?qKiAWO`9|?LwoS(LhH0c$g#*v}2NeKeo3$ zWDp$FLd1;S#uc^?W?BDf^6%mqyrjuc>quc6e%zuV5&2v4xF?xj4`fZ zI@wztnqKno^D___FUMH<9`3Jof>E>^3Ml&lzHz~tHv?p6ySKSW#bff*klU!L7$6wXm+Wo9%pmG+ z4|Hj|Go{b4CUf8mP$@8;HvkYZ5N=FWJ7V8Rp#rMw$3#^4IyAJm#d!7#kRf2#&{fXk zzFUK=!mlMH;=H@kmBJ);v&}lCrbew_9h>$4Z9T(JCkeY`f>0KO2D_jWHv~i1(&?tn z0kiv=ecm@@-wMo|fo^0MfL2xUhvYjUJ^A`tj@}1GIIxwDB+;!p(UW}V|9T#ORlC`) zjF)F9y(VLH`RWay92hAa)Wq)qa)JoE17u@X$g`L4GtY+(;{ke8PJ@*_=w<3X-A7z%O7 z8+AcoD(r-u$7ByirC28ZN-h7d6HCc47Yad_yyhNtrSP+q`RxCxv70QV)pw!4#Ajz! zX{yfq1Rvvn?CUWw4t(wl{h-Z$YZyLU)s6>xnf$B0+hnmb5#T6K92Oxf3g;F&cY}@L zkyOI_f1v}&r*2^Om#XIrFLN2}gE+Lo!TlfXr2k#uZii96guoaWVcN=pSc2KkeR#H{ zZ8>#Ck>m5sQ$>wmt`t%POo=uKHOT2j-bwhPtJ(v6j1_>0YYdb-4vN%T_7|I>8F2sv zo4o=`%B>R1S!jo=S?f4`k;Q|>s1J+g%u=)G}xQSN2g`Ehhbi zhW+6{>24ZTJppJRWF;PBtr)?BKvEiXYeutaWhzEo1MVEe1i9s4EP;uSuN3GhK*GKF znt^vj7SblIgCM2#7*+&^D#k;ELIGx6n`&1}xJ`Zg@jYNiGko#;JAByHsdh~E{p*Y7 zqmm$UQ;uPOkfWIatd;=+U@Sa@)k8 zs4V3VYB=-^3=$x!1KB3pO8w-b`Ro*^5DSaE4(2Zd8-Nx%<&W<#3VZ;-u9XN_NT;SB zTSOM@CauQC0Jni~A;Xvh268GKl>h)g0Opqq4%E1-ux^e6%yZ3VVHbhnwXjI#DuNuaNCr6#)R4)Ovw*S*M2Nfd$se4A{cB`Rq-1h3DX$FJHXi1hZdG zvmj6_FsPUa(B5!Bmp6kzPft$|kilXHgxv}Q8nG7WYbL$l1Kz=5WELy|8M!(*;9*=$ zO95O_u#1BV!SVa(MW9GxdkbagMG&JY`4RFKZgc4s`KEP4Mg)_t!2z2r;bW+fC#&a= z(qfN&c=r#rVFtWQx@9H}!1>P{tq@FpF2GYz`WSc!ZRCUOduAXS*c}9{0^;+)k?zmX zR7Y0!h1mR1t@p6!bP}9Z6d(@(x>1LCZ<&s|Jz|0o6yht9B4A*%dX{C;9VqgK=o3^d$8o3bAGX-qj)RrP;~Cv)l#Fz|R^W_P~ViOuVVzj-|al=U=z#f2kh{a{{r5 zWscWEKkvBU8z93uo3>&59F-x77cYvs&1q-fW72m>`LhoWC`<UbuI+Hc+pg9XeSAsP#pd8QbtAw z41|~htTx^lrZVo*Db8xsbyLF!#4{!?{;EyI+C4+>?73kXRkb@)i4_>YNZ*;%z#D2o zLqJV|6}dat#iEv=r~@@19~0|ZArNUZjpG=F}QtX%TJ zLk}yf0ESbT`@b-AdILytx5jeqO+;xVi@3E^aiujsss_|JG@UiM&Sg>;CL0O|jz56M zu=>g9mtO-s3j;Ta*MKSAs5`NlKx82Zh6XhVVOF6rGCi}$5JUt{4EMSo;knB}a_pc} z@^IbW%)`on4fnM8)E~rR2R5k?bk5;? z@btFAZvZBh@Cppp$MK}37XS3!=+SK;IWe%ghyer)X^c=sTjs4CgJ^!vDAgwJqWc|u zKx`%h8U4Q39sfE40H%-?$pCO;Dg4&zc^j#Zr=N} z=Csz;2;$bGH9~SAnvH*3;W2Q40cg$X4Hf@q1wiHk>ccOaU+~v<`P*|vfE6C9@g$?n z1ZiWzhJ}$mfC3$BH*^lJOnfZA5(P<5P_fK8lP>%lUqHHgyEP;W;^LB_Q*H4~raG6X zsNw|dbc7*0x{kC$M2e)`F&XUPQ@;adh@xQ%$Y;anvGCeM{9eO?>kpt$JF|pblmG28 zP5oReK`?C>J>2=190hUCzXKO3bT!Z+Ae-WOM#h8HZXpA+V<2(8h^dSN_5zX~aa5Lg zqUPgMGY=;A0sM8UJ8%!Xlpd>+q4$jVC_B{-BIi9a22byd+yR#tS7KR;iG`h^yAwBB za&9LZL)<@!olP7&?rI$Dh*a@q-TD_G%_aClg9;Ik<@e=huiSbM0xXb!o5fTvfeOZk z!e@#&<&qPmngrQ>-CXu$qIOF`PAIJ$+)HP zyw&vQa+W3x2*|1LSf8wd0#I%MHtOr^6+&n#oW~pXa7Ya(7-KViFZC2eX6Nl7g06zp}*B{-XO?;TWiN$n+Ke3SNqf`GkHOc$(w{)zzXagX%$-U{FaXE7X%w>7}9CwaHeh3l~6t zCKDTs#}tJHvb8W!7Wnd|+ice)cz1|9h5Bu%*a;V&z(Rgsc=FJpt^NhkGtzL~U`JND zAW;PHqk@8hFdX*3B`bhO`1<1XMf~7-pWiMkK*Z~Q=hUCN5WQn-w?>0U zj$1U$xa+0oMW&b+{^JfYSLN;kk!lGEJI1_mlMHFalgx=6olYGu6f z5NuIpAm^#uO^`7CDa-Px@ujBev4_Oq#QfmI)M*&A^TFzVz}W!Q4+=6(i+|5gP@;&( ze_jr+UayPUipE56o~A0BRHf)M#Y%E|q?^&Byj3&wr<*hx;nuvX$I=}r!zoWt%0=i%U9M*s}su5jUlvDG&H+T@$*a|#ED{2N_KEzHV|?bWqMSxG@zkft z<60C`D^$4@rby7dN5ocK^V~kD zG6wB2;QE?))QH+H|&QlDc+>_Kb-zRqufWDVNqm;d_zTbwd^+I;M2e^MQ4mpak}AK z(H)So1cr!?ipu&i$@{NIS3{_^eSh6=XVDs4`ykLHnaejoBkuXT60b0<Eh!x)=2y~*LuLa9Y>U$V^f_>CQpnSqt8cOTnj@c*D$xxP{P*BozcD!sZgdQ z83JRU-A)Nya`=Ajwl%l!KyLeoAMKdg)1aj&nxiuW)ms5>8e!XEguArW*nqwZp_f$A z1*=7Ed7f*7>lR`7soRH4^9BPlZD_`}#F~I<)jThVU$V-XYvJ=R{mP%-*gKPGQd0$q z&)AtEzoo4Zg!%ZKIqA7N`H9zrODfdbs$Tc&Zu7v_UQ8}+*D)O(;zzl0A86OW3ysx+ zX5=Pged7m(`l1So*$Zl>yquVWtruY^BXD!h-wr{zY-P{KdbAHch^F`$i!|FIeaxS_ zp9nhjwOzH=h$@!L=0a|2elUumL3=+*H}Fe$VQi-3w+<2R*2s=UCi54}fw?$twpUVx zRJ%V;MlNvJd##Kew}_oe6a93Lp3MK-f@;krl3);z|XXvQ@<>L zigQ&v44+)d%7f2To;dh*1(6QutpWt)!a}i0H4@?PVl}qFEjHk85-=Yi2=46h{kA+> zeXzO=x~7_X!Hr0Q;F6r)4;jkQi189f--}nnHAQJL&+h&nq^a*NqB7wTPga=sbY9tQU2$_RS^D;dG+aL+ z3@7!aQ!xUQ`<$8hx?HYZE!>Nq4R^R%e~BV?o#Nk&c+T=jl4%krzL7}byQC#<@Dctw z#t64bv+AfgLl)si+Zw#!X_)xl<;4q$AGO0#;=6%UZOks&3$~zf(g=0P)4lI^D?Y#V zKZiOd&?Bf#hD1*N(%bM4hTZPQmhQ0vf#u!|&pi*RDV2SR{V7kFGoWT;4ei9gYdWfK z&!`L>uE&Uy%3ksVBNbh%U*5k~;%eqlDOyVw%xSUbl!G1wCWk9&#J)v4stlR%+I_SK z7tgpit!I?__rkHIgYeeU3UKw2H$@7Iq#Vlx7|Bqv9d?_VG6eZe9fMpu{izm5=DR$w zEYJ?y`yD3V6A|bwexcGPbHfdSmSFW;jd9o2!N@7cx*buz^+N&c#G@ZG5#-{-@3eCo zd{@W8ojKj}KWwQ;cT!&l4fjsQM4&gMhs#F0#y!h-zkTcDY3%#<4MoKRtkOl@bMmmO zqju?4lq4!G@-2jE68x-NdetF@LQ71qOLAsHD*Pt6kml#t;KWzHFWbtvo%U%@%g;8PX%p+Z*esA&_%MA!Ppy~#F?lZYElA%0GsJr_hasX=llRBrenmHE%p3}2p{ z?L8f*Oh5yLSKI1K<=afJN;@`TnO_!S!!Kk@S9nhZaB5VjT`-xhJr;FYalAFn+BT$A zItIxI)`sZcBleS+~T`G=9*D{!YFR;%~}rxFn3kYZdDVVHog9>;ErDT zP_~FBmf>KyPtnomKl}&?Y{IOf~k_wJZ zmu&ECj!ql_pqs8Gq`^T{a$OsC8lirp9RZsDFUWV|RlVQSX>=HQo^5=XbmUgAURhf{ zl&_gqHqnaB(;Np);wr6n;}UHNT#1}|;1Va*!+!RnwINcXC=MY>seoJS@`v>u$@tJk%l1rL!#x5$^1mp3 z8tWsM?H!D9V0IP`cCk(vbXH$ zSb%xA4u&vWlljHCG_v=9vG?ZTRJLv3@Itdh8VHdo$vhL{ie#1{WX>2urk0sXNyt2h z#3IRZWSvXq*Os>H)}BSyl|M4%YuL8N!umg%#w=~#<7lv<&H@`A5g=_fK$~jPQUVx19?2=*{zDCw?y+FXl=JE6Nr5tYuv~s%Rcelj_;%*XwNaHB2el_S50?yjttsT1JJp zmY(E@4E!U>tC@s>2dlJdofo(+$|Oe)&MCHgYz44hrB z+ca0!SNB~zH(i|{u8VfIc-*!J%^bFg#pthFUm}XolNeU0mbQ&;)Ln+N$AZ3fSZ?cZ z9Mut0Of@DbChCt{3KGPwK`MlMfL{2TX`z#=Zr>Nt9kqREeCP% z0QW4&Y_e|m?j5%fkJ`klo_^BKDZ6_l%}7H&Lqvonb%BmM{M!O8E2UBC9AVA6o+#yLo* ziGv6sT)l_v#!TnrqOQBy$@c9H4=*TF=l}|Ej`!sD(db*+Xt$2{*Il*a)|i=9jy4@n zcb88aY^21VG~i}g;lFE01W zjY0#{bOU#XU>3CAT*2g`CWFpp#19ue;vsJGzUXSb{v+MRZ!IP;tokYM z$1;KMk8jy+$8WW)O3h)&(MyH%VV5;zEXl6RMRrw4)W_{;1+7gMWsYGo_J(WXA2We0 zqa&l|;yiRz>4U}`K)qW#H_%HXXD3?Fq3WTrfszA{Cy}W{_{^+fx(&0drL%l2S~CyO zoyUf^?R~euC4eTX)*g|N{S5(|)ZOA&n|D|Jo^1DziV<6j-D!ya0?>TEZ+O6^|`CW+cE3E z>A#0N@6PsjycY{)?#-r&Ca&Y?L!!{9KCC15YmnyTTJw*^e(Vi)Y6V+m(6AP|)I}7a z<>bz;Viy>o%i=Tnh5T#BR`H5cIr|0}@S_8|NQiIpb!v@AW$^i9Mrrz*xg?qt14w56 zwjr*ZOuaS5ljf{?@%Vn=O2tWR_Tg)%(Ft~OQ-5opfYW~lbR8#8Eka5I@q07$F8${( z;Od6UtG=jViKs?ub#&}~>*GSlq`m!z?IOL^d{mf*bm*_k3SrM1I&|Ac3O?tarZXBe z44O(A^tBbf!lW{6*UJ3;+1j?iY`$1&{@PqlZ+!XMdykQ}<;B~}Kg{OMTC{MJO9HNI zNSu?RchPX}xyn1#eaMBMQ$IOa|GXpPHf{Ywa%9UZl*@nWKZDW4`+A`H<7v@jgh6ML zwBM8R*F(vFfGNR^o1XsT4$3R&!wGiJfA?X!`T)s7AU-Z-QN_|6B2jr(ZGvg7O0h~rz9T6cb(^b%j|K1XOG&b4dR5hD{I98UoXUA{omm|v2&l~Uzz_JwHB&wB zq8`B~vi&-bz5X|ksJOt?aqtHw@6jdRRqm6P8exV9y-slwtFByP6<7DSZh1aG90`lbRUcq(k%bY>m8*Wlj@8O4!+}ol0I;UUgSYo ziTd3c6S|(vOEt$(Oa{~`Q_7lN@5qN@&OD-W@iX#fam@HPQ++^aM9> z8t>h{yS3jHdT15?JD)~)7&UBj84@ue&#qfz25&Bl9{PF@wky#w!kgm$)^W%FI5EdO z{&GzP8L1!|tK)Z;tv_#eV`fPq-OjmE;o8|^Tf6PCi;Wp!lol0rsFwlGQ6WVzFkY#` zLohJcOTWMT$5SjJM_K!;KOT2?s}Yk14GI>!+ntJj^6)^7i2s2a{L^QXggZ`--6sx| zZ8hgWHciR%&g%zIQ{IfIXUtE@Up*8&Vf=sY&y7QDZ`;|~$wsnUW#)ed&~vl8pL0m+<#SBZ?cXkKLP8(J}3g1#XF~{U}Ou29t;4D$foGq zQg_y_duHh~i7wmyVT)Nkn@ely*j z)`bujm;pcEUHC|hQP~Qae+?zYx)&vI(;sn|mvQqd!4*)jYG$7?P!4($T@ekje~ zfl3OudE?@Sh~0f4Ng_;}6Tsdr049vKb@6zQw$18ROAVC8*`Oc~>?4y_AR9RX@OZ5< zCcnJw+2ZNwqVZQC9w=q<;6Z_!si`T{uL_{zFx#7j6c=+0YmC3|%?aS4HUf@Bq8@V$ z5sA8L_dX&a{G(5UaPc%Qzp9V~kY`h1G`>4{|C#hta&6YCZ*=GCxnBQTV!Ew~@5#vw zqZ)!x53Q&TplqrJblRjd?40U^p^%{aR-W44?!2dxoLp!`MX}RhkuC7n`1geGLqWPT zOTL;`ucdzvSYCGc%*@QV%{I?uZWfj%CzBCjtFeQAr4hdVRdk9b_blSfxzT zZ`W5^YBY3gpD1?$6b{v1$~vfyM4r1j@f`}GlziM6V65E-a$-fXX1|>N!6m09`FIhb zPwBS@Y=%m1DZT>eS?WFU)eUh|y{r)(H>ilYVvCuCgo-77NrCTh1-i~UNKqs=VMkVr z4H0o66A4rcu73>Av!qE2HTl0TyYy9__E`ZkjW;)|-vk%uDkWU4&9PyRFqLWnV$S&5 zkAcEA0WxAJ004JEY+T6p`zIJQP?e~@e||Ry#eq>z{GQ?sAdUf*VH0>LP@v~fEofeq zl0%7$pJc~7gmV!1^utP*F!>^kC#EkW>+BkHk3(cWs`Vrs9lwKuFI9dSj}MnW6l+>H zxXzcOLDvwf_K zc6b^+P+$e6UYm~BPnv6BBuYw3ZT0n>TKK5fWX>g)T7>GrQ@cmYsqmvmgK+z_5!(XW z0hNzhUY|akCA=?)dD*4+^DId3jVPns38>(4h}-8A(p1q9#}@eblC$o+Qi{U&&og*-E+QW+jR;d zg4&He+q{GFdJ-V#rPP;yVaa!h=|d_x;X_z~7k7F|2!-F3og_Y$P(Sd#=26oZz95c= zh(*=CK27)3w7F(N3+1KyrRcy$_F2@`2Si*?&yd`BKr|-zYX1}}mpn_f0#*W)Pye?c zM4{rc51_beNCK?xP{r!LSXWua%0z8zK;s3_Wf5V-}tIF5J_lh!nhDY(2`G-;c ztEc|o{PQ;$@V^)e;+9aq{e1VW4bK~>`)m=Y3n}D=UWfkrdl)+%N}P!mPh6hs6N>1Q z?S=gyiv+32dqA z_m9n){{w&i+(#rZ`1R}kQR%30!1!cHRq$eKGl(; zKAo00-X8MXkXYOsZw#NFo}SPWTY8hn)r*fJrTH~jx!-5$Z4S_Upe4>0yw}9xCFyeH zX~d|1^~plBJ-uR}V>+-JbcNBrkmuJhn)JVp9DbbCe(4ZmVg>F&;&=qkjFA z*q=XD?p1k(bd5|Ag`)T!x=8&FUGm8m9^-xVczFROPVnn(TmB5d))Zd~D(4!@Yzjyc zp~U5Sj*e&%d=0sMI4u8=IKJ}l-xlE9agPtL+sKnLMJR(39-uZP7C4P@t_ru0~EpBhUa)(wB zb)WLrhUWisLyLBHbtO1`Ke|Ukg(@QX^ioAs}>sNuVR2#^=(=#sb$Vi_ca; zFGDOUu1FuS8y#C~P;jt6&O=Opve+08`p}xe;b)bvX-QpDlWEpL4>_JYcg`j7mB zP%(ac{xdQjS1;jt8toJOYA_omlR1zqb4uzGdw`8UuMM{L;0fRBzu&P2=($=2_spqd zq~+~c#-GN_=U{97V}pis%lRI^W-tuaW)|pn3v{d#IZkx93>84m_2}gDsUc|CId!qf z`k{p3pDSn!m3lK1ljs`^q@jbd#fcNH?@DJgZFt=mFIs+={4<@Hec?<_(e8v-f-RXP zPkg5L;K73=sZ8y!L7KnUOf4CMS!|`Us{ff3l*lQ_jfyt+pDqqh!}{HsxN}#0^x!2v zzHk_axro#&qTlPWI#HhIEJzp3T=SfIOuN8TA?yM6O^rs(mIQolI+8$T_nR$N7Pdd%wa$)H6 zyCR;aE%fK4#Y;};NnQH!dY1el|9A4&KeJC?%NxwTw{6Xi$KK!$@^Uy|=6|#A zdM_8g)h8~=@cmSewD*O|yQzl`8t=cilJf@|U%;Eb;&d)C+b`4TK>stNXP5UAK8DQm z7|jlX=}gm_IIert4dVEnjtkt^?vUx$9mzXcM{;XF?UT_Fmd$y6xKp>~xv){6NXWwj z$+KTgyg#s)yf}H6{srw@#H(?H7Ci_vyiS~48gm9+o9)a%a8$aty6MOhU5E4Z?NU?{ zYCp48+qp|HY0_vumj9Ws|Hgz3A4vGr3(DirXZP)+Pa6;=fjTE;Vr^}$uHFOL1#t9? zsCL$5VpL&+F<6(xZgyw@9_r%I_bKQ7`|-a1s<@v^>uU-mRBqxx3ceX=HyEn)tla!I z0*crJz)=6l@24~N-hGVi@tvWgfAm&cZXXH1)Y#n2+e>!@GhOrT?<+V=F8_T~qTn>b z!hGolZFlUIJ9a`ro|Dbd^u!surRo)7PmFHNH~ zeeXx5`e-uND4nh6EQAb6N=9(U#~+YK5A1!b4(rat^NhD1D+D>u z?%g!5ki~-1?UR;9h2bPz_ZUi`(;&oiyl?0J2ibP#zEnt#fg-dGoX&A4APhq~!+r6N zeW~9)B{Y5XT)=J7kcjGRtoIqig^RqdH|_!*n<1h(zj8dt;Qj}5?O_g&upeNpsE znHG0wWBrqplYyJqS7`@nDR6=zk%)+HBa-Vmb<{k= z$LX_Fp|1v5hBEKDO&SLsx)gw;7PJLPZ^JC~EqFk~(Vi~D0b~I`U`p*Z=GcS69MEm4 z@~av1Mfx+~e}Z_6QuIcJ=I425wgY1Z%XWuq7enTl`q6XFCgT*JE%x>Tcb`^N&dX2S z(3cqv?i#jsvZr)bF#nRKEjD5~ylH?_kHhjfjxCUKK6O-ZAo3L?-j=ptn#B2t?Nn>f zFI&OZ1yb}XaDJMoN-aKLPV(q}qYUlxf(~3m=lSpT-O|v#1-$gM9moX&__=8dp*au| zC2*GrtusJ2I^9GoB4Z9Z8^w(4gOJ+>hBfq@q4@}D&bjC5{(cu|;$vT-DYop}Q%Ym? zdB7cjsC#0wWhPK$>6wi#3HM~7#b?=)(xpb0@kC&LAJ!(*MAMzTzhF^Sd-8Hed`!$` z0qBd0uRipQgPhuJq1uZ`e$n%iboTjU+^_UprZI5RWb?LZw6(YDjK@Tg%R5X7oYjGE zZ7dIb@X7X?Y|n2`$YS`dv;ZaWp>~n3NW*O=;DTw}%be|vHV%uVlXUs%rjj)jf06#X zrO$UHZ4=-zZRX@Z3jv+xh}uP0`Y#M;IP`SX$)Z)JH7(#+uoO669qR zv~x%GJFmJjDZP7e89z<7cy?e*H z*#q2e(NVcCPt~*ZcH3(lG~(^rMAru$dv&?jWwGc>^Jo`BGIj(d3OvV?0!&M84Iq)} z7L>sjPglV-K08Uz;2zHOf<|mOYI6JxbgW%5X*@l0&!#Ll`PANLU+-gPY99B%VA=>?7@k#qGQj}JAx#}0m{MFB?HZ(NQ z-*_S7!1ZH%x>Fv1STMpk7skttW#AxkQm?hmp03I4@*5kxm;84>-+#q-G8RmJleyRj${fyV zZqOA+5sl$E9#E#E_Milek2a9xe^g>r^cwFD0+0&I09{d&Hl=g?qwX~+4(q^?=cB+) zD|v=+fOA7neSe3=mF7#$0J=e%lylE>yh&i#>Eo%px&}kO-Z#1q)*HAImfDJ ze7>M&$##2HhssEWWt%X~4-Sk>`irIUspxs#4Rmd3MQ_^8)wdDnOB?@4S6si9sod1< zx9sO8jFoX9ia+quCxaj4y8r?LY^q6ereVPH(7-!NnQ25QWDDu@jLfRodb{{|Ff1%g zJwpqQiaijvqeT#=V?ALb|B9g)8Ts-KT)Yv$p)j3kBU}o?3Zvn~2W8PFO8U?fW8}$d z{5i-6`h~w9&128TN`6S1#vjXZ^zIMGZhaTi%sxnU6YrpETf4IWnJge+w@HC7ZTZu96tB1luxxO_}=LHTV$H=O4>%lZPs93 zxzZ`O7mnxwGLF4GfWDy$}bl4~_CHkSr5R7MrIu3Ic!x&B-?qI`Me zx?iNzf^TrosrydBHmPdyKt6BUJum8#H%TYN|9MJzUZ%>q?}kbvAby*b4GW=4S7j6x ztp^G+%-^%0%JM9k9Z-=YXsbzffZelX(W~d0(OvJ&>N*I)NjZR~Wcu5<%?amGIn|PF zXvU;ih5ADXhgnOEfC|HGvUC$1z34+I&+>fIBW?-xAhu)pWg3Ep$$*TLlb+xvRo1=e6*H^^^>%MZkLD|N_HMP5}%)!r1)zewD z?yjdoIi_?6``U_jNA#Cpf4* zN@8#7!Nn;;IA{Xf(16xP3^?anVvP}}QKF<==yuwh#+ErR`)`57fz#436RUIDVyuVZ z=eM`g($ctz*XIU$MR-Y{QAypk`h`%et)ORT`iPL`iBJuD?mBA zE^i#aH88SwF|->DNoYt&jDU^DrS{mytALS$P2q!bi?FaObXIXY>q4~Q!@8V>D;Ryw zl34`RQ!AWgh1)C0>J}KZN?0)KL4;y|ymiz~n$+{K!M+^|8FyKd*DsTy)-9N=1K&A2 z(q}jGTB$_L{aY_#fP;Yj=(oIUPbi1on*15{{o~?vSKp3kl$N|$RK5j!A#5g}eTUe+ z#gbC9^nu4>O}1;u@PRlVB52ur3pe0IbDNm9zT5=esWNEWK;js;8{qVJpo0?H4xOO( z0%&c$^u^sS-Dsak*4uR2ZO~jjbpIofikR!#kFl{a5VmNvlx@^{C64#y3GnJwQr00V zYCK@QgP&1mH|0D9w zIYEN>Q%!0GvI~J3^xcuzLzEYM*bhOegA$*gv&J*qfKc#NvYrKlF0Y4Bk6`>&cbBS& ziYWi=I`gg+8Jq2*xl!=6!@!Y$3nK3w@Vm0vy@=UiTBFb!WGg)0UO394X`v zBsynh`kebN+@9s@)fpw67}>?5?cV$QKx?m=WbQoyMBxO2leCutHu2r$G>>K)VnYLH zsu~N5px;r-RR$k=*o=1!p$XndRaI5gdEO2Q8Zey#ZItC3rmpluR_(7IE;fP-;WFKp zATx86i4BO58izp1Kd@?XjIn{nW8=;<$8RLFih{ouD9>)Zv7+rVp`iGQ&4UtEhf+4g zPBZj9BDyr{PENW}#y*Rz~kyz}W0ve+~s(C1Q z(Nm@8J@^B8j)Ir*B15OJgZIWd9R3D-AjaypwKaBozLG=r8(1xKk7h%tR&mEcOMdfu zHA7;92xUXlm4JOS6$RV=^LATBf$6-yUR!jj#rh0EC2QZpIzRdWk4K;Y)4XU~R+gB7 zdrz*en4<2=^gE1pK%n6X&8@(gm+D2&<}sw{2mJ4phYowk`w&STD}nYPXtL~HX@}GZ znssd6^14CeE;QS7xgQVbZG|LwPbW3dtr)V75t_E+wbE!Pa$ZWklia?C-#VkR*(y9Q zotn~hY@}eJl?bWT`#s$eN#;97ebO#G+}zE?pZWl5yf9hdvFoDW0;pVO z@dQQX#mHyQeeBWE(MVT3^zJniU(okHUv~8Qe?YUSC_nZ%tV5+I>sES%eyH3hk>jF* z4;G|+|MPcfJBPrVL0A2INQ6Ni0^mG-jOl1?0HD{< zvf+P#o9b%sXFH(5kN`*$yajR_XIa$cNryma<}9=VLsAA6G)M@MLTz$Re)PO!luzQ} zI_SaT`VUB#krBjf!q8q1m&bvG+;`}DiWRUy3eC`Vq5*njqm%n$7G~!`gtxzW{Yvx4 z_QyttZNkX^1IU)cwF7m#ousJVkg3Uo9(LLCr{bQ4y<^(LHen zH3MjsO~GIQ5_t=mA0klE2x3aIlxffty#xR65#Rov`QN?AWZgm~Zg(Dnzyu-tS`B-^ z0-)6#5me3!Uk5V^zqHZ}o)UJ9`tx z!T+H)#R$j9_Y~tvzd>1aE$1>PXUVT=+)TMuT$V0G>-V#CGDP*U`J=R? zwWinDwgpfwK&d$-F0Q3CCUFLWO%PI82lr1P%7uR`AQsm zN?YSaEj?Ii&Wku@J5dX9iXFOuFAKU*DE8BJ`6>uvkGdx4vEu~MQ2;Iux`54Eh$q2E zZ!(IC4ha$o1#!UDz}`uDFYr-cui5IbAjOAc7rY@S8j|L|uAS9MB6o&8pds;~kSr<1Hj0 z3Atf%{vfLA$@e04q;PRsTpa22hkoMSP5AI%H3M%IF`YLkypOb~(4`^MLSf~BJ@UEi||JPr8)Bt=9#%M69q7QyV73=yVGYxq3UMj7=ET;IpR}lQr6vlU6 zfASFOg6w9t`k^GG=z^+#Ddt%LF<=G5d+~?((6PxU&`1VKI;(L{e=g1F(c%}-g)duM zWD^F08J^%;CZuSAwv-R31+W)Tq&KGWxl<6H1*{w3RAKD8{e62^*ZPbme3tzfhM}vR zPcaG5;U!G*L9hGQvXVe>E9?+p^lJc~E`Qe0SAc451^BSkV%_`6r6?~+GM5a0W~8Kr zf5Zx;g1L9#{?ld9Ka8bmx`6|t2dMclo6#Mfs6$C!Sh-@6Tndt)d=(<#pG+ck*CH!- zOaNa3bk_-6JZaIJ$+ikQE^vbLpObM61MC1QL2@lXPSS%^0KBE>;-^zmC8glt0b-@d zqUX4zB=7<=KJT$!3Yw4WKfZKDL2ue%RD3);A81K!0s@+B3h*(=qP$Z}>x53})qhXiFPP7syktCRiOtrhB1R!2?wA=&`&LJudf}@8mRz^^Ki8>tP~*r zE|4}cTJm)cL1K~xiDYdPLY{#a8ZJxNm6eNrmz$dl8i8Dpiv5gaG*w0b07sy0nb3<% zxe)B!2HYMd-tP>{#fEI$IeZj}Wnyn*6heVy4!V!rizH7&Q^JmUzNgxYy2e- z9;xE~xUT|QN-1QQ+)X(R$&Tx|)7PqpL=?Q7{Rk>B<1V&}SjZ#6*c0TO7vQkJ(E%_a z&%6sLXZz95jUq(KOCy%oJf!Rc_+2n0rEmdnR^?v*U1F5@-jQ;w@kQO!xsRb@o1hn~rGGR;FgU}WT@Opsu&eE~BG(R-6N9L8)d$fc z69Y^DzvZ`yh&FW00`u0eNEC z_drIJonZ;*o|DD|V`ZD*{L7kXY4wArG<4&(2NqU93>3FCh z;vZTpKM7^9`RNc1qjyyG{3{Uar$Jl^n|D0%ub=cTx`1-SKLHN<>#1KpSNucH9;a%q z@TgBTGKzFC@FHzqcm&7D*mpn_=sIo!E;c1o#cN}5D6!mqW07?}L7j-rBEMMd z4G;55|2-`~UvJ;)d|bdoUC8^#c$p_(9u2xreiew)XMYDk`;Xl>oF`y{z1sgdtbGe{ z2i}}S>mM%_X5V^1TJSh5>ovcB%$r?nH0r1ij7j|Np8*pqvYf3#r!IWsgy}iL_B%B4 z#=y306f(nSpn3``koY^2`TxyJh@emxsFs(a^?wE^zvl_|Srxl%sSbpvf36Pv?Z@l9 zrdtrl{Ljab?fO3x@;^J|zj+p(_brOkPn1$JferfWY&|=VaXlpYAw3%9>QouuoEIC zxe^v!V@`Jz<$mK$cQCfL1^AMn$;1ai1c24Z9T(95CKu2h8;iUL>NI?$4r=&}??Gv| zJWbCcIX+<#`9I=e(&*77=sIY-y8W)0Kd`$g3CYFa)sJ-!ZM*>v18AtVc-DW{&afU+HIk9e;r6vlS>z?nRt+; z6PJf^5P72a*UHexLE!g0!O)#Ws5doUY!?4qC3sjXqR|cI1{w7D2ykvb?{FeN^ECv1 z|4Xt=sM~ZV(%^^uO^38|$mz=cui{W>0>Rfy)0wucxR}2tCt#6(0x6>BB$p2RiA|5Q zwIJUj5$zl*T2!(QaL{<+EXRZVsSkMvHyb1V3SOv#irSbXkN3I+gMNq`h$5U9z?{7N$l_cQJA{ri5ru#QFmyCC$BRmP@-QXm}FUhYlU^CoR^o z>lo`S<}@&l(vhgTR6@eptH%-gUcO_(@@+n@{0+1LL374luQ7C5sX$g^hLfF1OO4-> z%WP|Hz3Q^^#+d?N=i`}aEXQOkUs;ZGsQUR7j^R9LkP|xGrcB3bS3LH*0aKc0PPop% zxfGW&B3Y#)yLixFM_l8e|8Wxh3DV~r2FB0#YWVQzD*#IXu}_F0q2&Zb(1&pN;?0Ag zga?2*$Z2!6NqPwvL7=&%BjwVx))RM@ammgoeGL*gPW{^o0p|oBdimzo9}H`{TagrpwV6vm+(QjHb)b)W7RWTl+-R!D@%KjWof1?7Vo`t6Raz;UmxS8kV*Ato2 z=-F;dgkL**$dA-Hn6U5F9s1?)&)tr_r#LJJ#9gXgGn^B#%1W0 zx1j!@yrV)@@<~qRNJ6~OnFz0wpoJ)cOs?6n3yZ*VDg*UXckw*!AavP8j3q$c?Qm-joWH*Hn^3L-79EgWRzW_q87?0$ z7_bIZ;7)cblnGLywgDGcj#vXk0*TjW0N6ixAFYV&hlClZm%4zufxIF#JADxw5(U9> z=ZpA*)n^6>_eXJ0>L|JPF+2(7%h;pj9MkNtvJ9qygkS|_Jz#BsZmwp70p<&$k-7@# zivl#jA$&+k^G1Lk1xzDuv9g5^gw^r6AVIAZuWeKA2yJ&r8y1xf+$G|a2G9heh_`el zM6AhvoL0ZYGX5#5_kPXVqn0;pHJ&_M0O&MCa!+nqaC37Tv#+^Fw;%a6pgp`KQDPWT znio(780Cz+p|sGqVF#TAAz{!;tMMXLA@(A13z!e5yMV96mpKUZsRBy?awI8tMa36x zLV)v)$N^l`;dB=yj;Sjh3bpbrCZdnrKdf<&qtCxzWk(`1DStLjtJ$v@*d5pCvAbP3f04A8?Ts4l4vf_&L@lkSt?XAfXt zAV3Sh$)hzfF+nkHot+AKJff4j1_haw@jL*cfL*fYKC=zQ3-F7u(u_-nEqX5NSkal+ z0Ct`G(iF{O1`S^{W;=tP%_=0 zGN5Hanp^Sm0VKqBWpM4nXd>v;Zc}gRcj^{Jv0O_)Hb_kQAn*e+*ny4mG#Cq)>bSw> z4|eyV6AOfed4Uh~0-y;EP|Jr*98_{1fYvagW;>6edghgbktF4$ko1f6%1JA-V5wC? zU_be*T?K@ls|fHsl-!507d;sMSsa)(wQ4Il#JrP=hc% z0r(N&|EhW|xfEH`vaol_ptb4-b;R-F;PCE&U#yAVi2^5 z$d5LItp{K+9{3Hw=v$fjJPTT!6--x1@Qmbq84P%zo#ntYQnmf8-u!VMiyu?+BezN9 zER_EAfPoCW<^T?p&!N}b*TcXNLBIR;8I#YmU8#YShWwNZ2;vvX0mr~pq}PdO8LX#2 z2b3QX@N1MA$^+qJU)F=_6zo~Qww+0wzr$m3V=>{2~~-I2;Ma5U-94T4e|P6>4s2bHR!HdKFAT3y_^J$ov?=?V2X<>KT!0TrGV_7lofNZF^3%|SQa5c z*R^-e9YD;1%PtZZ?*fB~;h_)+jJmkE02_PW_k?6sp9^7qc&l2P^-OWJDl+(2CY7nWOTwmyUz>8Rgs>{^5HU5YTs%|Y zyQk0{IdS&E*Lm!Re4U(f1LQQj@c`yt3AIze*xuVAD*jNSbYAvIMZ;Ny`Q$2mK#e@| zP8Ea8{#lXr#!G_62GpK$c~fJf7DQ?D9Hd`bZ~a`NHe}%Oz9F!6NjOhqzQ=nlE;Tfx zmg3SUG^-MR9SPA>jIeWP4KB&nh~m*J;)(CseWoJZu)jX_{#-t0idXps1z)4ixDPyJ z>NMxxyJ`uTL2y%(+4tDAA8b8@>0FzpE!xVcXN(#xIbLEK-WBDs$}+T99A}xb zqSfErZ)nO2BG}Y;@VY1Btx0>)?I(VxLmz8I=x6ve;^;+bx zJsL0l+$JTrP?O_btq3FzOJoq8W{y9fdr}_T@nU^dQBekH$gMz19dB};UDNF?x-Dzb zKloW+i<0Hc$VIy^*o2Ff%gSr5o=vtnq?i&h(H^yPk%mM5iZQ%tP!}YM@%8tO5i4IUDRf?2oYZ9HyCjM%$_y0F$}FP zoT^OIiFGxa9jGe{VXU)pb9y6_ej+lwtn5d4IBucd%cRtUH{Ma9ytb`;N3VQk0@D~~ zd0*Aie8SZlqQfSQw;o+=Xa^7DS2@0J?z?#ALasG0q!b2#rrD(70^G%lM!BgPcSLY!yGJ?LyH1D2a=XXQVwe(wy6&AbM{mx{7 zfj(s6&Fx8-qXhKKc8bj#`eT5}Ufo^kg78nl2Uo^SWO zbG|QOj}}d1!}g-zJsOtYH+*+@Sct_ob!08HW`*~n>=#8bKxLom&d{&hc4@M{)oGNb zUotBesjr-P^V@6m)jr&MuRw9omA$o=W`ep_c?FiR;avAxOBVO=x8;4e++sVx?djUq zJVD!T&q9a`hQ`zNTU^t6`GK(_;qAD)Veiqit$vpQ>qxJFCsi;Ih))Uxp8`L`I$%r8(Qwc&6Rfm=~Dxd(ul5j%rS zooDUrcEyh6yAhADn&GdDfiLfb@-X6^AQ!3rPTMDMVw0n%8Q=^ic#PxsISz>J0K*Zc z5nE`Tuu98JP}>}I!_3&-+KqWzdUGj5se+$Bc!-+jPB(hTD8VlLt?pgiun>6QQ^pHKd_!H8Q22Uv#Ul2cFsTKRW~x-2U27TY27MhYo9u{UPMl}93} zx;%V)UrcwClZNQ8#=P!XjgE)gG$5-p=XC9?dLr{{A(Qj?K-( ztokovOLr0j;_xtnA?V%TbS+pJvS9E+SbAJC5BdFjIjrh9Q2VMkr#5vLBazdP*|I3#b zs!y>}KWb51J3IU2bCfg9F%;LtuNb$`mgh3FPg#Eu+2poH#rx^lv9NB~%Y|jT!?K^V z);?2Gc9HS)o{Ozd^SjD7<9d~6xQ~_JviA$l$GoD&WXeGU*$zyP95g63^#JFzYC?#0J&yzG9l&R<{x+3E3Yaf4{5zc&b69d-S?vV|h z8SCb?{=)fw)wSTjfR|w}Um7Z)5&zpXFz;^GB~T&zS?|Z?3g3{xx6jMSZDcaKzSaWs zSjoEmnYqoa@|kt>Cw}Atz4e+F-4)iY+rl^6bks88CTl)Vj@4*N;?y&j2Nx!^8Lri~ zwnn6?m6j;B)&#!g4ms=0EEM6%$PZ06K|$U18z?h4!}D}ZpKja|nnR=Q?-5bs>Kl$y z|Kol4E!FJEX9ArMkn0WzB<)J=U;W_p@gYfuoooJtmQ>}=SLP_VRvUs~P>^eeeoKBhv0vvla#dLg!@@pjEnZgIm( zYEwcoII^0fnGJZlwi%M+6!~sqw|KbEHkkSQSo9Qo^yFIAO3IUP7B`8 ze7q2oV^o|?u?(HnOfjiB+En{tGxSM@s!Eb{1b?`y({W{o3`8` zbwB;nGQO3z8`_#~iOrkg1S|{JhD~9(8BEDkIA5!N-rBmKwUPJYfd)t5G<5#2jqvxt zD)T0O{~LG!???sxBgKuxkN|Wr8|>VEydULLaN=Fx>>7Ibu@+N!&!+rom?W!$b|KPf zwn;r;48lTy74uFiNy|fvrtd{H9lkpJJ)M(VNGgVnzVtWz$40L?s_^w?Xzmw8pf|o` z2194Y?e}nFXw-a;!c0#_YIj|0;jdZ{P)xFo79|$e^xwlIMtN z>sey$FEZrby;k!p_B|*}0KfE)k3;IcG(c)1;tdVz(RZ&ssVpVzwF7i1?jc)^Xsq(z z#w1rFw`t|eO??d--sS%`v1SHxwr!F!kR%-;f39MyROOVkXKZ>+@ja=+iBlBNs{Z<~ zH{JjJf4=GJ$PnWgFH6T5XJRnc;$qBA+uzw3Pd28=>@|bIJ>~<)ucs9;8Iq1^E*pyt@^K7VhC2nL;JPA4+-?SpHg_U@GHj6-X8*w?BCu^2F+Z_ zrd%rl<&zlL3(Z|5Unw9O{uiH&i@{dpx^1u2#QJj^HIRV{!#%4}{j)Z^dl-S<%F22F zG`;vsSwYb01ZfWQVL9|}-PWLi$#DN51diJ$To;QYN1FQA9_K%dU~F_c0@46H9p1-& zB+l zFFW zvC60?Lh5KNmVIEiYYct0ad^{a);>Rt}MA)z(uy$kO4rrmIfdoQ1LL`V!jdNs1A zHiso-3=MHW{?!!57^;g#c5+Vwz+z3=Kja(^$BVty|9KDr9dj z%U1H0y9z?&_x83fmix$Sx_>3Zy%_7jmytn>?tHSj+&eMcx3$KVW!$hxNkeVX`Szm; zBS&QD&PRFz23mo5My54r0+8YOD^vVK6%ENgV*uo6+7(Hqu2=Jow|&=iUG;7kOXbH@ z;*2U2YqfL7ne8ZkC5=laRs1=Z{@3#W&FxQi&ojtQ(UEbov9-9F@P)@nRY_`(;ir^b zH0V4M^`_~GmyDxamD71BuHYQd-yh|7Dkq4QBc@X*s$@zvNzbkZqR7_bDC}9*D7S&3 zA#lwKq}OGH?eWW_Z|8P3WxctX*fcSUvCA+^}t8{~$mTy^9sYcK9LG`gdvG2#>yl5a1njO5O=Q z+nt%9m*?cmE_!GP*Ov`ZEkv9lOed&>dH6DJLJedoL*^+}wgRgxuaNxRpJz)NNi>h_ zf=~!UdcNbsL`glphG77zkwS*r*{wie{duejuGcM7o=E-+Yu%u_*U3-^m z7>$j%bSp*iF(pPi^HMp4CL+s8S=Ula+jhopCGA1OE%ahe{K!cuCD;?uJ>f=}Q&uru zSMTmqeu-!zW5DbRW72VQ9trBW;ML;Aar(!5Kw4jI=&hYaySjNRk1PhdH{N>tAkqC5 z*8jc5&#qi(zm6FFraH_^;oxZ@Z)ex|oedW|x^6l_Vs(!re(F2z0pjUQJ+O%Y1P(Ty zNlf6n^FbkFK%0zQ*4w0|+P*Mvmh;Ys1MrSvZmDe6v<9y)+u`Y+;p7(Y(PZC$KZmE5 z__ecN9SWhP>B``MoGc{Pa*xc$5)!+H3dMvix+_;ETsG|n2giFH3RMd|01)CSfB2>H zcwC;imaOZngvynnk;1!+q_y)a6FNIN?{_TA_VkA}jk-a=T+yYt{pwA0?d^d0MQg?3 zN#zFH?M%^mx9rNWiy2oMBY7g+f=45h6`S4n?cOlfpmoN#a1b-xHJ z;bz?u-*u|D;qGE>`Z;O3+b`I(@`8TWv*y(*M)>EhRFt@Nz16{&N~|9b@w*t=`UH>u zqvRpKCR?hT7W;9Q5z4p3a>1$&}*4lomd4?h_kwpY5WTD(4O2sH-gb z5Q8m%?8xp+x|aSI4TgZQ2noHH^ZJ{uDK?Phm#)&VD+##pHbTm`qd$T+6iqm1lU#~d zx*Qk2AB<8J&g}%baa7O|+3j==A!~#fci(s{a_b>W5U^>ZV-MxR1*+y{mc8uD1V>q7 zZgTD8q;x~86LUB8oxVK*{|+r8E+kyPN{|*zGmHl8XYim3X=_#G^t$hTeB-*q`Zz{A zxvsJ--pI`v+A(*!hWvYn1!lI1JR3sSpBh`1xQ--AhG*M5Y23A>6fC;TLBgKOoN-VYAWuv2EYY5uxq{$SdD+k_2RM}wQ~QluEqXag;wma| zm|>IL*@?kcF$-Y+1q)E38{uODNF=oyZk`Nd2{VaTT)4-O-}*M7{2sS|p4~nn4qp78gvSCiZwuF~dfY9X|_;+=0AdPJ{Mkh40 znj6Oom)@Sm4EC-oh1{oTm^ zmaEZjHI-b+!0Z=)y6b+Fbv;-&GZS8N$kMYogqCkN6`cEjD!b0GCX=qM%Ob0&SSf;l ziVG@5q)As%)KI0jkd-QgVn7lg5U`*$L6IUT1e7iWqy|H=P$V>^N=QHxic&%|Kxp|U zxPrdd{`vARnRD(_=Nv||h=2rC5W6gtcYmU8?}eRvlf>V2K(V0hWYc_+V-qi} z2?U1lAd&{U5Z8dFaG-JFQ3cQ#jrC4s)escr1a1(unfFIPD)K|f8#oqZ5+>1;EOd#5=Ss`!J8c&uJ^)D?BK0)D6{yT#?9`0T=o7 zD#~vRj;UJ+qIKA?{wfn>j@vHai*9jpgOHgINVx`1tAyJiYc`T!)(&K&{#$xs5WwXK zHb_HCDjzui*d~OhtAwOuZJIHaM|Xof3sM~5h&wF!q<-r2>>2ea)LbDC z$Ga%ebH1Yd4zgEz9WIKxz1ekgS4`nwXU+J^3jgAtRt^q6BTC%<#~*el#qJc=a~l3d zIOEWCx;0T?xaGa#n|o1}^Vm+qto*|}(qiDR#+H;>kG#j`CUPN*DH;sbxZIg>JRyMT z6&PG84{m&ghK7o#_@1*pOi$X4x@xTp))rgj)tofaia>SE?QJrumQPrnvPH+&F+bmO zZh)@nH-UJ_l4&)#cMV#B=73G9h03K6xcd$RMoo>4v+q_zMG+K6J5l78Q1gM4JY@#T zc`aOgLUW-6&>Fl552DNN5AkU8`hr8R6+=PBiG<_OV}-V48ofar=cYc#lQYuL`e4A$ zz1z=SmNu?8`_ED=dvZN09drnCyn+!{xpCv5En=};suLbe`-etC?oXlMm}5}p=DjHdc4ap z_ePT<)ZumOtfrzXuTiE=$keB>+YP$2jM>TdplrXr9wug|BH_Y&QIi)zWhdbC%q#`% zC2xQb7Pba64Q?O-PpIOJS9~XoL-5>vcB35NoTg8gJW!LNOY1O=c(ZD%&XVNfJ!0pG z?iWk(g7Y(Dq{k19dEZkf=LVahak)J4;fddq3JPGvhb&poIw%ox7tvyd=-HX4yPqoU z7LmiVDcI;KMWL1gWujjCXFA`JSGjYc8`ooaz=|9vmbb$qB}pn`c0f-=1rslyazAuT zPR#ariI#z7zzFT#a6VqgvhgHtH%dJ+F6SIM#9fxL85Acb%ED9bfmU?(nQ_wA8jQiN zQ$xqM`^jGINyaZ>x;fon$4GHGAm+lO7kLC_?n|%SL+*&~hPTj**9HV9wd=nJG!+of z$eR4{a%Q#)>Wrj>5x~NFw$xV14?JYGHBZa&>Dbqm9kF7~bdHDamT~D>dF8@B_aCFZ z^#)v03)0Sha7h}%eDup*z4YRxX>Hs8#! zDxoj8HryM*LGq1j5R}x5El;jLFFGw^BTDz@KVe+Apz!CXEeMcim60b@JnUykRv^QU zJGH~xm66?j?2$#>SJRKcZeJ9EB_egvF7+`ykOZj$Mo(VfnMqW~#z-L}^tWXjY;}Z6 zhn~O;Q-h5%%7vHim1Wmae6Y48-_Lym6OFRl^;LZW8{==E03|g1=v=e8=n5^pMSe z{GE+P7s(9#FR!>x#cZ^p;u_)rKKy~`d1vvzyk85AJ`pkdhLeiB_wtl!Bup#VeHX|i zT%#>vL=TNf4Y+<2KXw(+@$V4!`=C2ufj{#rczwv3{u9D9Lsf%dxrGii>MFmNJ5X(pc=p*b&$#n12SC7$Hy~T1xc92$l z`oYu$YgFl zpQtROS>OCb2{cS}T3ub;i9f{rJV<-Q^AQqUA)>nrjXlRYRqaFY1>0?iy#H7Zps^po2WX7LaO1_M zPw(3lF0f8$t?ae_eCvHZzkOrRu_64%5c88kghiyC*FZ{JsVk$F6r$=?yz03;WY^+rlWwu93skpSg16=l-+NBwZ;pPd@8!qTX10bswlJ zr}+C5)8if>-=sMw%xmBj=Jgp_(e?kGCP4w~n}R&E`&e1S&d{GT$7SOQG|Ho#6Fl%z zsc-Kqpykc>>0U^T42S;YLKZWFnw{q}k{}jv@(AW?du6_OM?n&ouTdkH>+i36{0gGn zKaR9hd_U1N^6PGA{l_ukLtQO88gd11eDop{XWvjIy@Spkt?<7zAX}9GI@l=gxY@(I z%ewlya?z6A$HzUak5Q%fom^+foETmd+K1oQ>0*irk~owhr?j}ZxZ|6kCqGhgb~xUV zOW&D%5{!KrgK=3107ENCxTRyUtXt;&Rrq;v%Vw*fLt^;k8rbWUQsv<{b><-y_Y)V$ zA%AR8MFgV!+GMjNqTFC)BpK~$5}57N)Y^U;&+K!$f381qHcfKpxUyP_{Wd>Rgja*^oIKWw@>g+VEStClRZsIAOc}R)8E~}My*K>)jR|NG z_VR2QQP>P;!T83T?C`kyTrXE6u0JWK~ZMwD-@iD!VNCE_LQu1`)G4Nt$vOzlTa4w9wWmj#1R% zj2Bk-4Hr8jU|fKFcW2?kBfAl>(=9>-i!IIAl2flW3$?CA57Z&9A1z2n5U*TbFAiRs)GumL%1lry5C%^JV$3GI45o z`NpKQ782ZjrRLV7y&Voy?TLb=tBr_RvHcY_W`kc@RfqdOOnvsJo&rd4<5O%v*e*#P|Hm4dZ`ma za*uFa4!&u(vBOsSqZ(Cc?_yd8W znR{@qZ!42Er8<4;?gM4gETgd?pFu&O3QsG%=tkI@(%aTI5isVqbrr~K9{;3lG`qz9 zZ3CcOA${hH@6CWD{nKG+8k9yKN9Z`{E{@t;)od3QV9uEL6{vbnyA8JtEWfe>EIEQ= zrJ^7hTW-&k&>Xh(s%;D^X1oA_hCM+z;3K&*o+&cA^YqQ z6Vm%WugmlbG&wF8mi17w4EP46T=}MnZR4>`F?*^iE0Yx6awu=`kc?5VAsMXKnVMU+ z#JYCmHkG9xX$*7OF{-%JA0OuTT*uiX)-*&B&hoH(CH86SJ0~<64Ht}QJ_e5(m0NUJ z>;lO04fQ};f==Z3^St*#xah(}?q}vBGZmJRG%}}<;GPjmFnqnC5kpMKaUVXF>%>-Q zDzUbnDS9Eu7ZmfNfs%oR%ea(>S*h7qmHA@kc@Djq5Mmxs-yLr!6EDHaIqx<@vRk$BPlz zL8HfB;U>mPXO)iV*?gG&R$5#@VNAtIl)@C~aX1l(jlk-kCyS3`XTJs@(p`cU3 z_jrxM)CoH37Sm*?#0J4rd!ao&bf;?6ai5{9-Y(^a(ot3_-n6ii6P9DGlQ!O@W!JP( zGS0f_MV6e$W7zRSamBMsL6cvS;b9T!ks>Dzx33FN%SvRA4>{ksxEg7E^mdL+rHimz z6-JdYf7V9?NTDp}bJ)1MerM8%%(6zJt6lR`w8s?@d%TvR_ zYcQu)ayuim_Bv=`J@DyLDSbXoYM<;54$M&sh%Em)xX9(cKpJi}6v~$ot^CB#yQzrd z0(vzOj!N6KuF&OL&~Uag(Y{c{80hkfMfb(%denmR{5o^D2n@gj1bAxy33d&GPvJC0JmA z-V15KxM6e_wN)Vt>(PIudq5){jU+k>7=J(l#|0Gi8DmDL-e-$2q~lbFlu96waP0$S zrskfWldd&63L5_Ll1^gSuLJJcl8Rehh4*S`IFHQVl?87s27ezg8T-BIfQnjgF@T$y zix1v7BM0}F?C)Vq?hT!h5m8IQkNmy3#2HY!@~XtZnf%ujkC4LGIJTU!PiI39?U{4@ zHc6?E`de&BsHOjqT(f__D(9ZuMbd(gAf&~hdVCJ9XMpa zjf4|Mag%PMab$)d;C!)Jo^681rb|0IuC{9iwL_T3?>!F@#NOcbTNW9vO1hyi`C~|2 zLBT-t%ZMHJ--Dbqp7wvBUSxWAGl2N73#Ph1c4l?g5I*oF(q#^);ii>A{yX`&OMup6&R!^wD z`+KyeY91HSTOp)-FtuD(+IPBl_n*{`Cd~egd!P;EpyCJ*j_tw9Df$S{ymLS;oEVilt4lsJ&gY zkjwUQWt;ZASh35NHw9#->mx>9W%!H>(&Ayd&sTq6<-O|PB>wFcIl!=&W?z= z%Rmo|;UYsX{ISbj}9GhY_lMz~8NywaBURBK{QFFluMa$fl zx=G~<$k%_m{1k057m|B|P7f8Fa%x?0Bs~L~6?8SDTPEy#$k_r{cP+Alr+GAibKKk7+Okqev;VP3Chqk0K#3fY6F4It(z>IsS#sLU9s@|Eo8TT=!;12X})=CBwlL{88-8lX9M8A%Z5j#O6O*@)!(!dv?* zhQAXljse#HczEolUeNaK5?z_53GSCK#_a77)83*^uB{CFtZi_K*hS*mg=*>RqIsNE zz1|i#Fd~?I`&t~N>z#_WQmt889r7%GGdMr2ZcP%i zKj(m{h%2S2I3gb}0c=Ljb+FBeB-~xn0k|ZdT-+el#asHR_gSNHQ~*$(oW-yoY^@aG z#=WP8N>_no`?}JqVE0*PG5MLwojE+bF!sEP|J1&G^}>A(2(JlIXN!f?BeJY8f{tcFE6|gx zt1*iUZ5r==Uhe0sD$xR$z_C_FDiUZ|Z&}B6&#(GdmQosnaRHU8DGj zK}_G=AZ>9+;`UN!_o#$~gw=tXc^IzzMUOfvHTC$o;1G|O;%sL3s>8~KUfKNQWG^N# zC}#OblrZ=ktSmuLT?W-R)xN?Oc>FbYH}#3KJmGp!XOze| zi2}D2D=R$!O~H%qEy!KJwJu~P781ser6?DW|+ zy?2?Dw{nJ_5m+wbDP)Dy4f(SBkr>AklX(vn5x;p>Jb(KX&-gBogX!r6*@QDL##E7Z z?4|PQg(r`VjVXDLQ^|xCx#Anb*B-KTc`*J20~W2;{iQKwm?F{mzZQDW#9C;ez(7By<~2|z>vujDy+7sgk>eFl zhYl5vGbXEVm?q!_;JqcKWB9(jEAQ1OZ=1INH=Rmrk=5fDqgnogFJ0r{5cC}WXq4)F z9H1A{{ZQ#YECSPP3Itj@{HB-`%{zaVcWjaO7ds7X_UQ7q!YRZWhP7FtY!3kI;qW9x zj~GA4c9MYY{||A1L)THz-H8YNtP_GN)R_x)Rhr840IL1}1*p0e!J3aGKuiW1Fu4M8 zB~3BS{?nag*xQH^AbZziBDEB1Hm$Gvgmq>mGO4EuI0%2yS;O(xLU9Z2quCnITUL(N z{BHAv5@Nk~|N1o1j_gwaywCHJY@_2>uPN|-NR+cpkqv%g`^*MfAsRJHTxfWFy zzb%ZnjlT0MU&Ydj-0Tdq@E5_ErLF?ZY|QU5Gbq!;^yUcb=!)hJ2yOI$Hstm<8*8DCPUyB`q!5XNOY57^E%Wbkiapz{v!y${qhZjO7_v#&0pXhmT=nOZ{Qsc z2X@rI4)(Q2*LNN-C%36?eF}i)n^PaJ?+gfL{PH6(v48o-o@2vZ%Jw}sZ`is4fq?~3 zf|J?-&S2^x*y*!p&(?b$el5Hf&@lxyyTDCo0iH{nQ+aXDD zA*i(sIwv}U7as>Su<5nTKcGM!xcm2gZVpL4#Fg1DvS-h;`46Dl?RV>M(c$6#;JPH} zA9#<&F%H0neM^4o4BL|qZp(AA{^7IS*C|KE9&t-~lM+z`=IK hgO70N|9gm378h#}E7f_YsEIwo;21^nG^f$v-f9z&gYz050xHVyg+^d0)bqVmAR(^ zft=ZcKu+zPI|cs77ILW_0`Y;!-n;wQRc{H2pP+!kG^{=C$-6(8n0i%KwrGL*)d=SY z$=6O#6}{>A)WRk0v>z>IMEc&0v4fIIy$bivLr7jlmCMTI=Z#{llj|*o%*{GWN_afF zd6Ksm_t)bDXJdKHf4C*BIM$iL1|6~EfIy~Qb19Dh;vn9xi~Wnwvzss+>|gLcjNxMc zBzp-Z#r|nP`~T7x9>^#wD=RA6j+QS6IdII2&EK1svtBvXdOi{Xx)J2!;KuIg%5#*Hud)PWjSADplUa-kqAz~4zJZPD=RBo+G;$z>zg3k4||~n zBs9T6SLUUd*XM0*ZP^l2j=HBM zg&u9DJLQyR;53tcm20B#uZVZ?5Io3k70guq+ zB#{UosfTE=qBFPJb(_Ek4(G6D^P!ZkvVHWmm2mozkrx=Ow$3<~Y68(R^(^Jui!@bRodVE^ElYzZWX-D$U=6Wwr7jSS} zwuNj(hc&;gvR>+;Uprb)+-k`W^g-o+Zt~+NvhEbZPV+}5l)uR4eu!d(hw!kr86CA} zE@rhYxjhIvt8d~JtdQtYZvc;6JT{CO71p$lT2-Sv!FN`;Cgy2)1`q7)WBqQ1Kdd=~ z1&{hl#Fi1`g*r^ z%5~tQ$gUBWO=RuHGrOR;GHSjRQfoa_yS&u}V+NuB!lC)JM8@! z+0G9q%Z;U+mA2&yF->8MPKBzk+x4pb#-rk5x9rC~X$p4Kq7b$;Uh1~>wOvhVY>&70 z4sVrkEuqlXH1K8NboUQmOVqQW71I$?YViTd-jC2qPfEGJo!=3^zcihTLN^hLAM~p# z?=Bz2+r-ok=0S>mPxc#F=Slqtvn=ubqiuR!$Pf9P|lYy4~h7 zZ0!Ysh!0v4CrGP;$a(LDcDwFotks5#D0H?h#+-!-USQuBEuA8m5AtmK zI!zuwa9q3p7tQ6hIX$&vY6<%^p&W6K-uh`Ozw-~=sTz--Ok zcC`mRdZ@A}L}HR0%j3#S{*8cSM^rZw1edyi9O%#yN@bab=H@8PGDhE71I)%sKP4#> zc*y`UuJE&jpps~WCl61k>5=MuE^izN;k4wGYG^Y$vx0q9)=}W2oI7GobwgMBG!E~0 z9OCS|$U80ae~@UD?0te%L!na{#p^0;_I>YDa0Hbp(c(QFgl=Dj!$@0Mu|5Lff9g>c zU%NK0A&ghUou}Z3A2&Yqsp6{!dSq1i)<+hYvZ;5={%RAUzC$B!vHVfgsAoQYLX;P) z-@C6@!Oy=+R4vkQ)go?zO-;^c&EZ^NKMmq4(^W1(R7djCG8LI&Gy+mAVa;mE3zCKe z@5AF{B=OTikufM8H1HA+uR-lx4@|7s;XDQP@clShrAk)Zc|ZypvLa38OCjI6wT zV8rVRxhU2_#g?%A$V+8g+&)VZ$CebEpPvW71wf!O5@oY6d9_8R7cu~`tXFaVGQGpi zJb5)p;g@zgazy~ge9l?wW}ou$Q@`}p0t?*k$t2`8D5+z| zg^v_+2h&&~Pb^SG$F3mZTgs`1(;&$fV1e}&2z{z^)&&TOmf*b< z7VuA^bnnAGH>aN~6BF*|AcbqkaHb*l|NI-e|L+a=|KIih8~%}954^F>SR+phH5wis zu9Bz4SI-3L%=pu#HY=PL)#a;%o#wvCb5=DMoQG^!{^?VPew?rjr9`a)z1rKR?WGo9 zjYi9Dt&Hov53|+twBAeliFxfMh`9A`OF+~u`@OlQ zmMbO(s~>NYP6fniBkca!X&gQ?`@q!!Y)8PA9Kf+cq4R@p2HN%;esWDIubi1@Q;v85% zXp{d%Fb=54M4eZ_B`Tq)UEx~m!CWw%fHFSF&~dfpqk3?(zY@i&wqD?TZTKc4HxGyQ z1|hb*fly8*d7z8btIbXCdY%Ety~EwFre*v4N>WXbFyk zy+brG5wFD;iGgaU6k1CgB0+XyW&!cTpQ=R)(57la$j6f`_jhcr{i?&qqgg?IuUc8? zQFZSKg7Y%ri!ZKrG`{BdtMGlHGp%76`-D}i;T`KUZKJbMuv+b4eyhQ~l?lf7W*26A zWxJz>PkdIg%w{GgPdxb1RAQc$Lw$#=dJhNI({Vj`hP$_HChFz_rU^y&N;|*QAMJGr zNnBRZ($Xq1>&hL9p7x#=m2W##N)LnEpb*hzC)JrV)9QSY9stBevBDU|=JS>*u0o=*UA?EYg*_Hz2sQ+ zJZZ(nTla}T;f^Vrf2%q1Z9?IrE?r`#yK42oNZ+LvT3!|%p>s|5s_@SYOlNs-y^*No zC9x4Jw^|glruke{v%9{=u;=TDwa)JPY{ezjGhqn{x%rB_GF?8QN{?$-fGj>E|zaP!!&aFNF@%v;@Q`PNJ)uK8Ek3 zR^EJGWlA792zb1c$xDFGuTD-N3BCy|qZI=O$^P_1LNXGq-ELO``;V551Q%(d{0+ai z$i290@uc!8k-x0B$I(7Gkn^dQafNo7&50TDTg9i^{fua*u# z7I>4>Tusl#9j8LRD++Lw=F3b`{`cVY?ReRDc$kl{=6j9_z3@MCcm*Xr_Zm!KvL|8Z zcmhXKte%g_fj!wS;=Kp6y-UW_u1kA!0jEilZQ}ZIZ##rp{~A6g20N&C)VJ76*Av%{ zJG)N)KZcJOoB|-|7UWOc|KD0-XF==l9^bzIp3-}Zee8+lt#cRg`7eFEWy!&bU7*zf z*^Bsjp5`L{{NGCr{QX1ZnhG6^(;8`c*~bLVHKmqS0$fGV@LAvg{+zgDZ-Kt}B2x<1 zFZ>3t$tL`FoA=f`f&lv=HW_4z+zTRGYb4#^KQy&Bcom|7_Ht{VQoch~w$d)yxw|z9 zs%BAZr1w6jhXr4G^IJD-R8bw-%ApsC3<Sh|<@tt*1KZ(D>tr zAbYR%?e&Gg?UST7!xzCiTCqBzOln<4>OG_DZj}exlL^o72S!!a?>lap z9fhrLiCAL3V_ZgIrgSszlEGW;{XNSF&$UV8!vN(Y-p-cB4K%v*zT?xVuJK(ekYEh6UhhBD(($zUBGmI8Vh=J-O_{0zmc z=G)s_p=<<#AAObihhew`7`hCPQ;m8u(F_TenMwi)(T!6H&;5Ej`}kVjJ(GHoTS-?sQRXOz_5Tpzpbk^Dm!MR zVw?PSwZVJ(t>s~A>?T^D)0qU-8NpzmlSB-I`@yd3yRw&!Dp!KQKDb5JLU(?PrUNM~pq(S&{Psq`e z*8v|s$?529WWS%D&3@2^dpIz}C~sH$v)vt#iiHLn+?seZg*~-4%Yf z9^H4~nF#xj?x$-7>6mgO5wJ0g{X|D(<;p})E54iY;A?|f)$KiPt@4$5Ypx3W%0p`V zP#E7wS#o>FTUWSqc#B0%-nF+D*$bwru@o)~yM>%DZ;05z)e!59ZPeTZimHLN;{=xFar$9`Nni8H?~p)I2rCPxqr! zvp0|q@w}^iV7vI-SbVL<8FpH%-_b`TdyUGr#@zchvqruSU}oy`R+tjYP+X6;#E zs88*d9bvQHu$z-#pVxX~Ho~IP-SbjE-Y3>_nPVK9TF*8$jJOj$H0RN~%HULoUppkC zNj=Ue7nKL!(1jW|pVe=@+tR76UF_sGZ#29<=M$Du(Wy(EOME)m(Y}?1*nt)|0k;kc z`&qzL|ymh2M<|h`>N$v3|6dsBl?NW!Lk))@qV}rMNUjclT4F%F4An=q5gWZe0qqR zzvEBxW*qCcFPnQ&2$k<0ENxDefcI2+ChyUXJohVmne66Ro37;p;n!%2B@D zeQRL5KmW_{Zd*)C&T_ak3eC_%pdqVTE~8@SGQlwYqacQtg90UxZ5lK(#9KEl78Qpg zmpoL+V&sE)LNl!nR{OZxk>>;NxF342whUE%Zg>PW?*EC&YFTy{<${6aqswQpKUZS4 zzidm*sr$aTnuA#%uy$(M1Cg0dhR&K4siyTqVxhV?A$Od{5`4HOFrFr&5qG>W!uM_M zF*_1&%;I`$IVe6eIuW{)-L$?Mjf-$?>xD}B`(6d8o>RhF$2o5-)Ec*p?Flm;KpGyA*Rlt?J%&pv=BJfwfbY1$vq(AeF)-$Ub0;BrcfSY7X>4w>5r5%WVh zH~VD#Mz64*a_D($E|~a^dkk;%Sv=w7m~q{k{CIVOx_8<==qs>nWg&JyExalbBzyH% zjeM9I2M*Ja4jz=jFJfJ5>f|Oq4uVS)Px!_6+jX7g>XHZZwWj63GPpUNpf37@rc@g5 zh@+*}ES2+_1p$weoqfBz!7)fydA*2f(HQnPVnZ&fBc2NmFg!KYt@YXhm)3kUTZG(H zi6>66T-V_PuS~R-N(om;jxyB$P5ku5$T-GLQqH(Zgi_SwoGbZOv_te(h{xo0oovip zPkWk_MUQ~JxVh4?ExWy(bk*M-5(56cNqL9u2PPSI=7+1Lw!9W-m|n8T5@J{UCPpGbz1L8FN$SK;_fuF5d~&@G80QN% z8I<=iHC>Th@NoH6IOD`TV2xEccFfJAJQ-7;jZq1CqlE+cJHBS?scWOwD=t#3lcH_mfyQrMdYXs``Es0(W8lh@&oryCRNf`!c8dLf>z8< z@~5sf_tX)(h(Qsi0ea^@$#-j2=m&3rvy0lsiGg#>Sr2Ak-{}5S+1uK3ZVQ3XOAI41 zQu{C#6#I=p5{5Fzv{dg7YhX{W{8kty`fLy6rZWApRnf0RA)>j5Y9VFjTus=0rl%j7 z^@apNK{EUEMar0-@Kd)Cz zjslbwqjJ!Fw%SjCxL_g_pWD2QX$jyLmhU7jIV7Pr9M z`yw%9yOWu$Yjm?UkvU|q;l?)v`S%;B6|_IsohWHu`g>IrN7#7s2;HJ!gZCb>UII5p z9xSoJw4L`tFf45@$I*my6tiKk8;uZm>5ZY+DP zf89JyUHgqrup2`6f0P|&B~pUA+KA^IGAg;pUGbXH++Mq`AhFxKTqBjWqy4JKg5aPH zg#N!4tBg97Ks!xKvFG|VuH5t^+SjiKLqs@UDWIkRO38bIy0S9A;BSY z7NpkhiJuxE5j-}oQnKyOE!$%Zr9S-t)uG=IvAeCb;`uJ#Cb9*(jbcg8%6PcTyIIS~ z$~Oc;fsoArxkhkOtz4PqS2VZmTHVU|$d>U=%o(-%y}34pxdmny_Tj2NRTjSsq-qtY z84h@<yg=wui9{5FSbTpxepg!$ z)PE0g-5Pk-jvQP41fKaY-1&z8sxcv|5ZsNIVFeId&6eX&b_ZVhAOz@xc>JNdsHc?yB;ZM6hrW zO4MTLeY6_?GmM5K9+X~Q8j&X~(+M@ioq6^HRb9W$#I=CSLKA-D@wkB`9NCYvR4VL{ zfYUWW&O-1A>=_u6W^KxQ?!Nd`+)Haj1blqTfhaC98TmKQ5sE6vcUB@uKCqNr3s zXsctpbPSvMt&eu5LqMR#04D!vZ?Pb69~y_#G}`)dR*)h{&>~wPm$&m0;18Y(oa^fD z`GaO^U8iAUOgO2V!gj!+Xh$T=#+YLdm9R@^HP`GdK&9OO`Qx42RAKKe;s4-g)?y4V z@AV{LPq3<4_Ls(M5wa0X8v0(F{ue27_o3&o9G8V|ShL_iIl8~7qWUq5Co?<=#Jgk4q)5M(SaOT zmZ)_N6AHcj&+h)91V7B~tW8S=TvAj}@Z3hi^7f5hVi~rCRT>q$yZ^()RUh>I&HsHZ zw;IUq;6&t_c0_w@qs!2N=ds;6^b{Ij>eCU?Sv8BNZ8O$iY{a@}1=&2}eRBT2om zbmRBZ>kB6TL&W7B11Csb^&pmT{B1w> zhef4u%#q9Th_35*KX3|Cf(|4<{^1gVGwpx>kOqF8+@>m}?Bc1VpAh{3j9mi^IjQIEak^hcZk| zOqXcH4w_#P4|)v;9Iph1My30IRszeCe>mnIb-PEZovp$74EY_KO54#pi*+_1u^g}6 zE+Gr^yZ_-3b&s$dkc6lKIFCh8!ls&E#pt=SaC1LB*jWSJJ;Qc4#wX=S^54|z3GaKU z2$+&Bzj7)cfgUL_4{_Ev!P1`}gLrr|{%3B#kk~J3Q}BVbbc?F8s2W&8AP3aizJF{^ z9U&>lGymP8xPlcJsc^AlYi{O_R^t{|QLZ2cMp=@IYs~ZK=}F(F+P{>b~usaOyuY zyMn$je{Ucjd!+7i3-7(`_udmyIFrpvSI}w?vn2b>!MIZsJ~^pB$mx;-&iTM8*3m2G zq@BfrmwJR?i$7)`gL*#L6FWIUD19`PZfxdd4Cgry^K<&Jpg6B?tt?FT;!CQ-{0TkZ zkIz-}W$wr5GH6+s{hQ~~kMu4OGt{hU5Pb#pMtcE$05BR$|s!LK!w3yOmu zorwWTfqcdI3M(F$?h9gij+TGQ4@+NgpX)lucTT&~k;orQd@p<}GQLQ0r)GXIecH^c z%%OwZBbZi)Xad9cR8K2HSPL9eO}2(H42rpwoF`_w!Nept;6BxSezEQrhQCJ3Kyx^z3~je>053*0jm1Ma93H*`(L8c z0;h*yGFoURMn<QeE+Kb7#ebw>FqUx?((ejgDaSpwI;gd2nLcBfKKAJ5+u8 z<+bpdQOnJDKouduZfaukb9uBvA@+7(x?%}hiq|qP1@f`NW7{sv8Ju%7V%lvN?P!@~ z*6lI|USMSwMHQaA>)C2KVmp&B_P19m&{9qo*q;pXL|`t`ZvFj5!Kp9rrF0Q4qL_mX z@%<&9MX`I&z))xv7E*L~D?p&D8y%FE_!%~XRLVKa2ed@cFTi_PA7_3kG4Dxv5TdnB zr+qw_nf-ejiriw8_m$|{5Q*x9R$!7dx!~-!48(QmAaXX1{8F^k)>o|uIKEAoX&t^# zJ3gd>em7QJv_vz3wqx>41hX=yT6X_r$!LBGd6HCS#tdZQv=tE|0(k&!VCxRkeIHyY%Y z6_Bl+t($|Xga_;47!W4vF-QA@UaeR1oUck)Z1vc4sCJG+Ub6mP=a<^r6?SEj2#`K& zXTs$V;u3V1N6JXqpBNzH6zg_>P_WdmAXe%o;22~zVO;6pBgp&O)sOhmgrFsbEjbDd zhs5LG3nejjK^Lu*C{(6b>u%Z}Y5DcTCooVY(<2p&fowH4uz(rL$-v}E?FY~-Utixh zZwMwX7bCwn1t4H6dRZ!r1w+=zvsA#W5M2fC8FuM+zr69KcJ|ovSe0Wv4>_MzYC94* z0kCe}&Qzd2$WzWky3DrVq+O-hr0r86X$S>>zDyWBNU>371+`lv0A5>*+Fg~&W4l(+ zU#oHm+(+cUyU0_`P)gweVfsTmQq*HhA&z(c@sFNq=eaNM?U2>PObR!_6u>ZeZr|?h z?Jc*T;Pi-yh{#ZgH4?Om#Gcp#^q~)Y4{NtYG2gpjpS}xZ@lW`4&gqw9JY{Ppz(F%5BImlU6$TD(@6FL zx1KY4O=r%1>eogA_CMB2Xvz%(L?as|Z1e3F3#`IsxELI1*LrL#B?vsa&<&W-9S zEfn?#`wm6L)Pkud!^gpgXK65w>;h2`ibacmfI;{Fs`LiX&hFlJW)#K6GKO05Ru+M$bL3Gcx+ z{PO9lRJYNY>R&;I3=05(hvYtd{}F_y-2G75e@}C59)#P7=4#h9qlsubDgR9UG3SCF zvHc|=%2*jGTLh!a-JeRr24PZF0>Qw`bHBpUR7C9V4|cK-XF3^_gyG9_sry49I&01#LfHYCP^u0Xk0d~PKrX|g4Fo=Mk&%zn6=I_~ zw2#(1xUy?&V;vRZ?8!AY&48T{YO>T4uzZZJ%i?g`(s< zcaa>kjvD7Ao=RmD-bgZ(Sa0ngI}@wuyM5< z_1$u?SxmlLS0}@dcF{YL8;80J14;Srf<0qF?7Z4f2DK zlLb%@r3FV_;bvixZBN2pN$F1XXnc;_n+sbRSK*}wHQsoqyVESV1JVW5U*o_#_2GvD z)m)c+pF9A?sTB(>4PLU!hb*%mihgQ@ywDs#q)PA-=Z{be3KN^L%A&o?sDs^&?YXZ~ zcfgvJfZUFI;p$Dj8do51-(DJKprCP^xopWm0jf(Lzyca{C9D8wHTdea6nNyx@QF+rN=ICfAS$S_-kwV2yB0*f#(8N z1X#0<<3TVbb|xU79cU$vfDi`ELP#UFG3J-Vd#sdEUVlkLmrh1>`i;b|B<~~e6O^4U zAl?JvslMl$pL6ni$=sCev6IX&llTaQP7?KCQjBwA-M|RXP~~7HahG;#$ADZ`HCrVMrNYvnZVV5POTxUvtE>qQ3up+saqvz9?6%^{r?BG zTsCM7c&Tpg6K>1h?aR-0i2vD~4-}*l00zL=umGmI=MdlxIDiXdg@!NoHh+L^22_Z1 zk@5906feWsmAPrPZ~c|}Ad~js?u~|?8;S}xwgxJVC)-uA|K8Y;z&CH+03Br{hqlY! z&-p>Gd@RWNaxI93gixP6Wa&!K<(E%-PXOPUQjj=7RZ|F{>M@>md~dKgXJ3EFgdpM4 zTN=G>(n_=$h=6=Fk2N~kuraf502B)%TG;* z7U49n0@8kuIA*N6$M$(%$`%v`s)q&ZSRCJ;+n;WDv_^w$4z zk%%u>*xQ;oPJ%wapda0{wrWt@h|N`4~{JM6sx* z16Z&y6u)fiBXG5FOt;h`tQwoX9eYH#(_-}Y0Lv85YkAwC!DnG0r(%nhhmTC>2yry#|3R2fE#-EUu`er2aYVbbHf)t)<&{Khk!SrEf*kU=fwM zMW?k3ZxB{|Ik9HK01#`U*4K(VI5#lXqUb9&R2Ltif5}pdtwBz?|N3ee+x$tYd6=IE zFzA=cr_=763&W!aUKX@TXV_upU2%;3;2zt9H)M3MpV#oVvcNU}q zeUIfb@q^VD&dD!;GV;mbqs{4Hl7A;fuPQn%huQ#a8*yR9 z%GvF@Zn>Qg${rcIw+QALoxhZNQVV{80#PRbnjroLQ;UvN_hePOEVC|V9#|v8vOr}9 zE^_@u)-L8FgkWfPexUdL8=)2fkh`AkvAF<}W!~x7El`76eEqOex8L3SV`ci(+6{xM z#eJkM4GT;@^5%QH?fJgX+kusA>bU~5363VOk)9h}RviG*qS#=j(5xU97MAQWuZ64( zPmX#}FSJE4^N3C-s280%`)iwNUcEEpXAQ8DP~P z=IaPnjfer^cB*Uy(9QDOjR_26{|SECUbg;DeCjF2{Uk}wR7i%%lc0eoG)OB~=2 zd5Xoa&vrunpxfYZk`;gi5Z;wdj~t*-=z5I4w`QtLnA^sWw2TaXps$TW09*vU84D|3 z19Xu(D&LCbGX`XFPQ+3%kamL|^^bvf0kREmD9F;9fFw8t@;JCt2Pztmt);M_5Rvtlyb(d`9|4m|QFxIk zfITLAAs}KIm4CHjHW8Lo?FE)nc%?=)PWG!dsIWjVk<%SXl_eey=eHk^x39x0vwPVY z7^LL%hu?;V(o(2Zv2mLvQgkubTbKG9!!VOPk*g?j9X0g8}&nm zE!rblqDOj}CuwkAmxJ!Kl%&d^P~g0L`(Re(TC2-%R0A~Rd-Vajbesvf)|D(S4m=2Y zYQ12r9E}%B_3vMBfHU}HXY@o%FqO3}6)`9h!p&pgdBPAAVlY>$n&EQW_!@C+G_sYI zmCaJmi_<5*_xhKqAItvd#b$@o5$g`Xjb9w%z5^P2ZSBwZQlx|0qdC|xS}=zd*u*nkE|Zp=z+q(Qpe~(Ux5zVQ&ia-pJB6RmW;eSC|+ZowVD!B+0vx) zya*bGJ3E>#lJo8iT_4hi*E;hnG@rT}>Q*A0Wa<_g@E;d4iqrJ#y|JO`cd0e+aaHmQ zYxJZ9mQ>;u6-{KfA)Eigj#**w`NlxlM8+;b(rE`yUPE)B6@b6}3!H*5ANTex2uWO6 zsvV%Z#8S;-6WO+KMp7<45xcQU`unc|!tHk#IP*d6*90uBtg_>3yR^%$3!8sBP<#L+ z^Thf1^8(mw;3sS^-sIyM!;b@vr>>qV8GZB86Wb{$?Sr~ARnlIw!T@mRvFyE3RRoSZ zz&TYvxUulj_q^YQYjMIbJ85ZYEv*p{aPtDBXth3Fp_IX5mU7Dtj4G@%*M6xl{*Qa# zkPLc4V!Si>4<$P7BIv{KQvcU&4;3`ExOWY(7Km|*GBR`hS$zQhV8n=?_x&~)V67E( zk3N6>TT%{Dx=+nSaE|1i&s!wZ{TnYtjuGw*h@9XgLm_(%WFgrq1b{N2s$W7Pu!jI3 zC{c48HBX$Cbof2+Y&W*0k~jzB9ije_K1jlA5rwyx*(F>$?V9L2j@$e<-Yw1nZL6S@ z1fJ4^yurwbS~*Q8@H?%^Hv8X?Cg%1@kfdhnJV!z+Y*t|yhPrEqK_FE6vg;B18$IIK z!ySusa68~C`xA!-9~@A$b3J?~u{QN-aWD@7>Y{o=-^tR~i~^xp+K=%v1&O9oGX#3U z?d>gwCq7GWk^c81@peI$;5TOsY`)A>?=kGPQ*cKgpM;l3hspjy9W zC|w8{=0;q^$E%94ye98Ji^Usq^mo{0ntc{S1J3h2$88NBwtaG|HBsTu?(fp$=>+^? z+DY1ELB}5;0*k?qJTXBpMgQ#Ue#1S2hPFS(%KqYD^?MTl*qbJxveN)uGzNfB_$8d? z;NL0whEdbU@Rv9OG=JO34@0XDq6@&R*;cyA0CRioFINmc^?CbyA4cA@d9uT71j(29 zd*YR#xFyc7#j`U?(V`#OH4;CLIoF~BJ{cA+5YjRFxu z0Knf|zI;W%hQkjxH5Pp&c-@@-T*x|bN0IkmTcZx!bLwhBF)pjXB45K+Fx%pd}>!tAj!U z=n>K7(4eWzF)F_4c%bIlm{@-_!d2jPu!+@PQv_TmCb9K2Yo2+KbRDaX2a3`3JKduW zPc8|Ad+b0hc@xNqM(yG67LQG=&%3_*ZFdpqGZztTyNbnQ9v$WTM;G4jt$0QqctKDZhlih%lp z#}=X~3KR~=6<{T9ulEaN>bG`696n=})Y**Ae^@ng&AGp4Ql`uk z_W5%fs!%p?i9^cQu4*ya(pj0d*}6^Aw?uEJ`%Xejq zf)(G~UYWApu^%$tsuowHkbNJ{fuiKBE!LYI=K{x-o%Lf;XY^9G_z1-Y#V2E3F|n3X z2@RFIi;R!zH`_3na}`$)pd;fv8mn7F^lJxmA!$Fjv~rt2@fDB@dD|71L_NP7d@z=? zqOXRL78IRuzw9u-Ca#V7#0XSUHcy|abBiK#xZ}r zojiT3BZ9G|k@oBd=DK#IwY|-qojlFDO7P5pTGjrycS9Sb0?hONqc<4#C)Cdi=^vf4 zMQqlBiyz>!MmQyFz{2*(*`!HKj3vhHmh9laUb!%}T}|4(9uICV@>!2=ZVe_f3U}}Y z*ldfR-CuLOfer8XSO{Zos+Avg!P8vSZl#hXD&O&}kv`zFh@j5+Nv*hkX z)9HZbywD3s6 zcpbWDLk>jvdC9DN)NPGRY!^LIXdvQ2kyoqN`meA0m`|0Nju~YDd^X&8p(HP z{B&aP^|kie;wNKJ7=pT|UcIE-dEE)bF_KlA0V6tPE%ZU4km%-fEiTUoIyKQjkpFJlEx zV~K?p(?G~A?#0mB(=l8?W+EF(ft6JASzvY=0I%v*Go>-`ZaJkVd%2>*t^%0}t zuNV2Mbw^rBs-|kdrHr1sy(F6zZih&l>)>sa1-jo#aLzE4zm8tcGPvB(w-dbIKd`lt zBCd2Z>?Y}#g}!(nbNcJw_Ing4md;4(H;(ED>ICO>a#5hxYlpo;-o)37O%7*&`q0S1 zLE@SG9Yf*Y7)?Dfyhnc4!|^!>C#UXlkmf}+y)xkWlq0CwZ_%H~qF290W0UTB*kTyX zEdS=k-AngEnDg6_;3mR0dWxfNZl{?@8N9&5wOl90qlmtAoj*f);YJl5OYaf;xP%4) z*iZU)V=l^{g=yxP=oXvj6NINJ1}4*Bq}gZNcdxQPZiZgEbp8tWq|l@GCXB3`ysoM` z;zM^A2TeGKa{Yl4TEuPUdD-JCxjG<~e!ES*4Bwlc0QaLF+v+71KVejxXcRwSIvfsD zP4gDZFfbfuOiR%@1617aI2{@N6}4vC4m^uBNAtsPfxDPL;C2gE+PW{dsm17;V`cER z@Y+kah|hW9+QT^(rn7*aZ3tXp`HI6Zv2PWybkViks%TDpL25<3{vq?XUgP@bgj+w( zXzS=yyB0x)?_0VA&}_v{iE39_$FiRue;e%=I|Y=`;J+?DMlUEulbwA*`I1^$CkoN% z4I82;9*g?;#Fl3F>+Ps_rbXKcb?RwyWqzOoq>hKJeMjPC*hel>tqwKT6Zv^-HFUXiTn#^ZMj4oT0KKbrx1z2skUA;? zp<{bgsgOYfPZ+_{W=AQVQUes1D`d0&c||=*)nWHk7qm1xW+0kFg+RuTXw}9m(2xIN zm9@V6lE!M|c!EJ-pgbuT2`%Dg7rI3H<*_Nu6WKN2vgiQ=C9{l6pz_fsub$p&eKrRk zMMx?e+w@w0Cw4Ij>@pBCcp^=>T_qV-1agayfC1m9{5X! zOc!p$n@>i6>@Z(Dntn@;qrlceeUP_qi|&g_GOt51f?bAbc~H!al}EP#d9+yKV{zoq zsb*Yg%7it|!L%l;?vsMA%Xx^OTRUDEIX9%Mgm(jNtq?1xszDq?Zce5ES1I1h>5G=< z^9I`f=ZUXO3<~tq!RspP62qI|mP1()$hQXtlgkCD-LEt-udQokPr;qR-F4E?jB~E# z?>lt&|K&6GE&;(rJooJ^6r(@m)h7L?#}K0OSpm0oED9dbz}>UUQP4`;L)m*3mtz)b zqB!B+;Cfv4=dHt)tHaLsdpBQ9#4&2FH&P$Y^k#$iWL!@lihP?%)5cFwUCrL(4~kps zddJPvQ$N?+PCB%j)b4}sny53kBU;IJ+nFQ%CvC9EA~$Fd2o%=9PDu` zUB{-@kmxLV6AYW{zV-EgsHw?>yz>)kt~TKG+;PHsoTvGsH6^$KR8(2{bj=8-IBR&yu81fe%~x2@3tkl zmg9O`E$=C6ZaBx2aAj|a&F^(Wj*IL*)3!^vX+!+(11gh_4plK#L98;kcnw4wuOP;+ zInz(VZ89=cE?ncxwgW<6;^+4WDwTe&7vA7))5SWL?W5#fnd>%|W^EoU_Hg=&0-#5> zPuaWK62ChH%YK}bRUY`7R9zJ=)f&I68M^1Jqx>T+Z^fL{gMc!M3y!1wgXRePKo+<~ z3f?^e7Y(+}j_eG-8Zkarv=b+GK7&!9m^z~+zFw+x)8lr*P=V!GDM-6D83mK4>!Ww$ zkFtj{Us=JG0N9HwQ?KW=5Z9hC`Yu{RnYl^-t#?{j8`FX_kw6sKF&|KA`^$`C)&QUA zCANi^#ZGO;vo`{p?lZ}EK0l87-tEYemU;UIAk4*-x2Hx#AMA`5FV|V$#=Ncgz6#Xx zjGOz^Wc1h(_QA-XQcecz}n3)ibugj%^&f zLc!PF1TMWu`+Vh?3@Fg#@dL9XMA>DMiS73JPB8-Me}tDt&2e4Kv+h8NCm+IiT$<~Z zm|ehz^mbkP+!q`?8L<&t%Ujf@dPpkTHor8}p3-mi~jB!F@s5()Z_pZWuK<|IrZH%&jE#uGreY%=0fd z30V6*5Fi~Is7VAbEP1ID|1H-%A@F<*a4x(YwpF>+dYSO|4@OHZQ_|7cha8yie9!;= z0>eM(GBCik-!tIl<5N>a{(6K7L*55+AR6(NAWRs73Bk5kjqKFM_N>uwd4{`CH$;u*+WUq&EeOD8k%p-gDSEiwRU*(k_7-99?Cu;*5`ekl%AexZ`TBiu9ik!(1Z$49=-EbS6Po2Xr$kPs_tI&e5SwTssQl)Fs-v0u;1tRqVk zn1c9Id=?$+z(z7k6bdi*gPJcwAN&DthgNv3&ZAvslP;2@PQKs?N4<4Yq`Tie7o0dbT@@*!H1q3Qf3%cg=m?z(k4dUJvCNkO+MYXeZ|+QcyOi-X-%K z<7Uc)&2t#+`k$;U@RIW#cIu#?%G0 zO00F^KkRLw4a+6Y-tI9?7Q!%Qr=C;g@HQ=acMM^iuQ}? z;v%5Y&nQ2Ha}R88tQmcs|K8dj=pkx$dJo4xum(Lx=7~^5NJ}^I)(e!C?+6V=~vkZn*?s^a5hz0D>JYUf{I=H zWP;>l+1(*JI#81;l2kH}6>>q?3H5JV^kUi7nG{l>3hN{AykZ0JRs1fP9of%47Q0M> zT#!Eh7mTSF<|L@SEDeleGu%$%hBj+jJnqZWH^}bDPMmuBW7Mm9jX1sSe0blMzS%*` z75#{o@y81EnTxrTx{kRG%!aljwV@#8cv&_H?YL^C2^DVpCZr&SErq%saM>fXoDhgj-$tMnKwh$2yNRL}Kkm^rU&f+JP?A=ClvG$>QGz?!ohI)yQ>C&018 zH?8PZ$$<|?I(C$jA?x7xq4qA+c5^^cWm$BQu&eG7o5i5B={IXNBH~M8no<&b4oW0P z9z8-NX=F!qDexfiu1i!B2d-Q=tYX`2_DuDFB(Zv-Sy-5);j6<@9(hDZqYv&{p)zS! z+f7|5R~0XxWgq036r@tIy45HgU6&cI!swvijyn_6mUhsUt8%VUusuIo*yzIP(J#D> z0*OF}hRSlwwZ_!bq<-po~TUquBSX*Gh1qvn6 z&+0yk^P5nVT$s5#AU*)-3XrWQGKo;9Xv=qLBWG8J z3GP{*JgN#&Wsc=&<((^3rdC>snYpGF4+GQf@+uCa2Gz**c5vvBp&l!X`x_9S3H>7_zOq%)t*O1J%C|qC3WrUrrdCwPw=s4tZU)q=GderGOK(0T+AaM>tm9V) z5}}xeem+&~(4PG5$M|(T-izWP2}hmGp@G9KNZ?t~h3rr5>VLZlaF?4TC^V1^^hEwM9%47PnDtl@PG3Smm9@U)11G$-}Ki^+ivn-O`G0& ziW=1Z)tk*3=$Pbx+Y$f6pu&v$&)?AeB?!tm4m_F98`zH;^!WMZQl#J7ey)ala0FT* z^RDA$zS`<%Z6Z|v`=1lx%&&=H{xUi`8o1VO76%}Wn#e|>roR3h{GeY`itjV<$6(iA zfGX%`b*g8M$X~Lf{?*fphlnS#i5aqXplD83yNFb?p(LpcXeBj>Uw!=DSzXl|qc?}Q zf_9;3ynhaw(66b`?tFjqyL6kV0MTE+9f$v=MSOF^G=J^t?c@pxj? zjihEuPg62)qsHU$Nz^OppMA{)8N-i(7BSe^JTAIx56ZLVXAkfD)x%?y zV^znu)&{m_#cff8{69bX?)Mzo1R~^Zpv6rizZU=bYvaFueb!^u-sRxRDFM{@%j{@VDEo#vwNQcn9`yG*{5 z&S-HEz6c>7a|7wPt*s69LL4)a@R;kEsHf0?=KdwJUsJCWoEFc$Kj%+-U4MgG5N%0^ zp_yh;-jmx_b}j0H74Txz)YSC!`su`chy4wo4l4lXIo){(^Q#Sfyu8Y~3Bcn5yTukL z*>=5WDHkJ;rWHXy95bymD55vB(?q+AcM_VoG^;E}KOK(Sxa!O`{Hk^+_};fs+7Y3B z+_N>rz|2)dI4GiaVy&QRLPKom=1OG!dq8ncTLZ&LV7GXQBscJ0+S3$TwY9(t;h{AJ zM?4N`NgV7aML+axG-#}u<|^P8qt>-oR8tGvK<|8>Ur@kZF|YKurvZO5Ge@C3?gr}5 zMmDUK?e?LS5FOPOQzm(jkHUyn{x-P^;B z=Za3?i{EpI`w?pfvS(c_*mrB%@-*!@tM3tcAL^PWv?YC$cPfpLGpo}ORW^z6GiRBr zipWu8^xTN%p2_hc4QQ;x7KtTNIO{yE zM5t!fqI5ku6BLnv?C^Ex>v?uJU8v5B#h4CBIGhCS2N@Cw z&>$(a1GYlOS#EA_c6JLOpg@Llovf-Nxc2v~tKB%eRnbKMymGMdAm#gybz%5sa*-cX z)(uEj+QULZ#tjkt{m!?5jl9@iRRo$4U|BPomn5*Sc2#~8t{Ez$eERxc=L|+Y-*j_* zWl_y1-of=Y`p+r3KsYa#LglqN7l(IX)yyA0Y7%{lY<6m*tH7uon1!eL@t5;~60PaH z(5^n|#C6wgs-p98IK%H*jIk@PnESR+(sz1Av)uVnYm-o>hO8`5=ga2lf`XTBnVRTJ zDq@yl*FAUneE_|UJ}g*em`hX6pe1Kh&*50%*s4QgFW)C!>a`1~P<{p^f4z%dv$f2N zhf_0HOxzsQxMiDcO9>KcA+N_3iLTW50fAJNZW<`W#kqUG1R2`aSW5_0lo~AA6Wjl> zfZK7cS-^lq^YJ+VjS9peVNpO-{Yj+qJItPC_8#a|13<%9UejL$<|qYluKLGZe=m^X z5mUFC>~yp5_vj)s#(LiNRE|3gXrw#mR?aLoH&*(6KxdKm!Gr3m@-6izf4&untE3>7 z22GxaWKcF!Y8t;@PEFD z*&jPW=9N^F2Z8U++R{EXMDiwU19^ILK2;R1ACc`e^ReY0` zm46Z2)X_iEt(~-yTs0L)KFV)-Zf%k?!(%W)hO?(HEsWawVsDOiTtQ=wawcI4N8vm@ z8FOW{Y6)vkCyXzWd#-ybfK^yo(H|OLzvGWF01Fo=6eXa`Gh!P z>MDjF9M3v}9&jY|uDqqz*Qs>JMk7**l;h_tD3o@M8Av`gd{ z0x2d>(3Qc0AY{bdGHSCxUP;=&VB&JpcOC*uX<${YydQ5 zG*rtRS3Z$nKb+MM0*r<6&MA_MnFGK^?QppC0bK>LUp}^=@uHj>pkJK54tK`oRfcxw z647!vG4`~!v4xic#m^y$w#JG*kCu@;UL^zY^7bhIEZhKeT~+f z=LGV+MB{Eu?&`vLeMC1x1`amcdPAvj9+Fd_%|qZ3!o2WabW`zx7#!v8)7InI-Wmc2?Jw0*lW%$f(rX?MPTzuTx02lb!j}ZXPRmvt^yDf^hAc zoPOzw_V>67{D9eaM%)5U)Sh1Fcs$zDHa=5Bp-UvTA`ygGfSy<3!?cY7aw@o*Da_6; z7c}>ge?W!b=oli}hC$ZF%E1mp==IcpYVg&q!=tNFgg8&X2Dlo zGF8$sjp$MTV|=o8>e#P9P|j(bo81do8Mrs+I~1!2aNyrS?ut;HUCu{RA|ni%Q~8Bn z<>}a$4Xz;KJxw71;t*_SQK#No7~n*9gZk0w=a zk8%y8cKlA+ZbV{%b(@~;F0v4J+dXP{u!Kc5+5XvC#zfV3Dvu5^N(InWj2d>=_a#Re zKGX`knGb@YbA%)=PW#+8Olj+5Wt@75huw8ClRwVx?8m_#0%bj*ipL*z0hDl(ozzEO zaF~jf46|G11OYcCf_`uH`Q;^t(lr836^NmI7Hw(qVHL|Hk-}2HPV(XIN`gR}r#_Zk}W1N53#|u z2XbJk{TPHWzyZ_yC5pmo778)>54FMm0zs;>KC#u0dF88ggMw5eEcpm09AxOx=)~0z z>4@*T8)*-F5iMap|9yNPdtD`(Z_B}?CcFY`hG*;PWI3*>e z*t&0Z$d`WeTVjCWWZc%eiHlg|gV^3ik})As$b=kP)d*UxU4Y7_U+GuYz_Qz|f`~SK zCGT10gRJM^82_{Lv#u7WmM#(NXcDwm=()N`Ph7uG+S#h6Ak~+U6%;i4dJp{sh=_xk zt|grA@)3NVOE^Rg`Mfj@9jnn9*2a0`NQ7L zXG44F-LEG|JOUiNn`s>LWj~iwHfxdn-e?Y4Ku9?Q9O30LIkFB z>_+{TZEbPtOQK}Lp^WC(V%KwHM?l4*5%0Y(2Uh)5iySx70%itAe2i0ndf4gkkc0Bv zZnWJM%KatElz;2#@h^t-PYK}rzX*^rh|RnJhE_|A#}fpu1d;3&q(C}?+7P2 zbw;iU{&Du_*|rX04$J3iZ{1udY9PZ@vFYcvTyr81KenJ?l^Yy(^l^ur@#ezY!x>vE z`?;0zgjZ*o`}Kp0GCW)ztxGCvQn>5(uNU{mgce9@PW&8UjTlqkQ4F z72F5nF#Nr!F1vF_s~ukAy-E$)?ZwigE)2Oo$YiduQlvXmD!ho{ul{ZnAdYjYTXQtu zaq*8_X{^sIY*mmFtsuNMQGf|LCgf}@D=Q1VwnViUpAYi8Tu@?z*F;leBdAV`qstp1 zS{6PvIxuMV9-=eA$*;Vx3gqtptA{^+TDn6yb+R4zt;N@*9BtBdAsw@mIHhtSFH5(4 zK^jihC!5V<--+qxkGXznB2&c*dQJAv2PJcvIpPcN$N5Kv>dy5JbY29ZOGd^ZMm@o? zf^th-f2sOie3YZhu2CK@+&BpcLbKt>g?JA%bDOYe%QqH#K#(h%pzLNM#>o~2e8TEijUpk3v9`-@T4>ET zobr+9B+F{6Fw|WJF415@G|^p@$--##O)uTXnB2+rw)qm&Q)nFqXsQ0T3KSFy;4s#O zYK0h4q+PFl>$R~|awKr(`)YnyIHXNI8N%scGVaP6!zch&Lr!3u)l%%q5u=y|j~jw_&<_Cn>i zqV15_S0x*ApUTjNsEL-@)UX`@Ez1fWa|$T>)$=bBEX!jV_$w6va|mp#_&I-cEP8Z+9imQ_%}<^&bHEIO>`#_E`5)#$LM zZk=(vG9TEV$a)aVzjz_N30oH3P}xi0ae0aOdz~~$idE1g(zBYAe;Ll-7ltgqLS5UP zvK~2?Jf`xr`d=D|#|vlov3xlKCvs$9VEi#7u|6>SP|6tqd@LTHW2w$re^P0S`EZ%K zIlB7$+rYkH+@6HVsC$1~W#+ok6E&Ys&(6;Fd#+ib4_gmZ_EmDdft`2Qz8K6I#vjWt z1kYJ2(sii*wU9RQ+&l9|)jd}`snr`ai>+1&aUL&|fqc!J6D%HDdQfo>}PB4}a3_ zc$zjxaLDI)`R=^}T7+(&<0sY5`HbJ7{Be}B6`J@&`@fVtde7Vi(7e}PE^g)!@b|uS z)B0Pq?{9X5H~(k-5$Cze3KC`zpQ+VDq7cPru?S)&C$IvNcytIfOjTc>3RXgB3fq3I zCQjpy*c~X1`Zy|6+(afgK%xIh2ZfK?f-D*&Ocs6Rpa6xIu63EjfxdTYJh#dd0v>SQ zIcL_A1YRlU&D*}=c0ldG6C|jhAU@W8P52>_IsiHvPSFo{f&P2cQ75(r%p!8svb!NU zo|~H+{TKy4V;3P@0(S|JoN$LyY{){ZSa@ zdUc$28xiHAFVB1Nzks);LcUedLl>;N(*jshlaoO*Bz*0uZB38l!CGjA~E8Hi=JTg z3WEZddQzy##rI{UZUe;5H>YEd{TI#s6OH`;1RzHW4P5eoG~@?JJ3pb7a5#^D*&R@b z&7##So-;L_lyGJrKDmnag`vhZRH7i{#N+W@al9|gAm0W9y2be&y}v77j$o3Z8wX*B zC4I>Bu|F#pLKdHx! zbsMFA?P(UYEoOQ6WJV&ZZ@XvGM&QN%2#`XL^mTSI&6$waci#8&6UR)&f z_2lT{z{uzGpEVL!u&zL&139XOlY3OiGdHB89@Ac+K<{%7Nxz3&nq}RUkB3rEWK7J* z)aUUQ@WK${S`1WfAkucMp#t}-Yro5oA3lCGN-^4p4#9{`zW;1L(>MfB$kt4NS78a0 z&c=>KwXe@=9tMMQpK(}yiJZog&xG~^2$HB*JH@)oTrPds#YYp-}nz=#r&^NiO`p$Zu~AClAgQ^t~{#QTB;jU6QEw4%%sEva#;7_!*$##GE8g# zPOc|8zN*HjTds3kv4e@OX_%Xc3o#Ida)K4KMK@DAk5OfZx#s&#s>NA)@*J5wGjnCCZZ-PheCW59S?2W+AGJ{itfPZ#q|qP}A{e^w^QY*kLgNgqn0X5)?xswu9c# z10M6AuE3>_f9rv7>1eP*s~~~$xb&-{bF@GDx)B2K7KmCiKX9mJeFl2eM9iU^;4ji) zy%%dXMRfAH*qd=vPtQvK+ZG{w=53~M!`-6%K|sLbp{@yR5LEf;*`jkf+Z+h7U2sYX z0!Gq4j{x5Jx$;!3)3zX#%$`Hm5X8EG$5ONb- zIoDrLGz1H+XG7}XS4Ho+{JN6s&L)7WYH8OmElR+=Ls4BC9#3O)8gLms;V=hB6ne6- zb#t||$`fqh;HdNhqX+KN!5wB^P%9Y+10m2GgR_JyF!x$!K}&wYwD|>Sn2|aMn-ioX z2xPn<|VG0U?HPk2bqoSVc;5JC#_SPUD3khnEHYEX8_@|2pQG1WL zET>_dz%?e{7B&XJRnzZO-F!=`DFAH(FQ0M%njt+zWX%vNsq5T+3o70+Kpg>I?z{c| z1d{A!sD|QfDp!mlU2Lo2(s=m-n);rse=Rf?lV4X?m!X{62x90(I9oGRSXn*5Fs>iS zW$<5Jjar6^83dVjBMq$D#aUD}uif^d#L6Wr)!v0}uanpUa2nLct^w_=6Of^_$2Ely z^mVW%3aF+>Lhj(4l&+Lq2Zw92ZYU0dfOHPTFAgBbj4ddJCH1*>s$Y%ZIdvH;2>lGb z*Io*%62MEL#m~1);yj97$(-OMm^Fp!|Lk7GCJZ=b*46}SefRj)ov3Ftfw`f#w>c=@ zqY_+BU~m=+t%fb32#f&`L$KS-BD86I>tE`G-F7(34-dfw;!u6y%6;XvwWi!_*oDKIN?)K0 z|A^%b!|$%`L>;jCqdjRDaLlW`C2tP9J)0A_6KFvk#2oAVWn*ao3JTcO27?KD^0s51 zxAC#UL_*B7(|H?{Ig)jKz+u(pgxLLF2mO~E{i;gHb-@P*JC>2DQV%7*Y`CI0lq~}> z=*{Q_tD4gGIdEizkiW9G1aQ-V!vgNhFD+eRgG2&CP=D(?4-vcU>dSqw8+B6ZZw*`m z^B@ZkC9rl=!MXuG4`QF%Y9NsTkFO7$Ss;0Rw>cC@bsi?J>>C-0ODba7L)7YoF3MMS z3>0w*AvjoZ2JlvDIXW)ogEh5)RCsJ{EWtXB3J$h|*?NRi3(W83`DU*}tRDVuu2E1S z6qk`IvbAIRI{HJ+6%PS4 zjN+F?f8NIH^{``(BlebkN#C-;Js8fyWG*YP?Nms4stQPSeql z7=i1XQP~Q>I?|znx4%e4a(hC>?`JDj3q`UIUD# zeRLnV%0K9s2L zj8*Nc)2K(i@X+WSE=T5BFpcHL=<+!|as%eblodGxR<|#s|Yc zpP7;TDbOZ!w@_;H&`uPJHMAnd7(L z&&KuEI`V$<2GFiS_P>AS_O^)p;(+Gg8@#=wXrMuY#k#UD}2_T1|&V1}vYtz2k~h2vWy`RB0$KLc)0SSAEn z|NS%Moc(Wy{C9@@r)yz`()-fH6@Hn&t*wKiTJQIV`lMN&_=AAj5_?&h2`j(qh zyO2gUU%^J5hY%}MBkv2ClXm3lZ-Jj;ZB;%8XN&a|>Gq#UV54Xu1qiKkgxI~<(Jauh z|0~i5-ZY8?rYrE&2Nd+yHk>CX^E>)~eBu&(0%%S0*48-{Mc#$=T5dpn28#V2yfr2% zH5Dwj-}GyVbsJ@a4gmi5;vR+{?d-JO-Cy8FGxTzgF7oq->~(#^gHe&lNS(}KaSDDg z(6{}?%kjO}QUF3+1c48v;djKuHbag2JGTes%5?%$7m{RxyChtQH~_MR_R3?(<7{Q& z5gfd{t>8V|^~aA8kOxrV)ro?pq+Zqf+1v_BOwehVS{T%a-X zQQIAO>q9xz1_jAXC5w}t zot>b=m|>jZCEs%I*>m0cn&N>xd8Z9tyj3STy*ZTxK8UGFNxSYMmWthAj!4@pEeHv% zXWe91R~KTc8utJ-z*E&L>^yyvSMkb+`ft8YH>7D&pYb$*3HDJ$ynDe5tN#2v6pPk? zjkigG`Z5xxZ4JP!fa`qP#?@WR_g3)M#>Oen<@%b7)(Yf0xO-ge-`R*@yhS7Q2>{QlT}yKA#D|FMU0gU;_t?zK_Y9QpTCZ7eGdVXVy=-z$wp!p2@jE5QA6H#n9;Rn@Q-qWg&| zFCkxU8T<)ROEkt~8jJKs5d|XlbJ=&@GybP9RUgnYkfZquFii?uVXtnfZM^>~ASmfk zh@3A0xpyaD$f%A=bD^4yJ53cp5=FdqDGst_00A>RVE8e1;Beg`ehs)w*{+b|-K+0| z=1r*!xEUNt8F0HctE@0!U-6tEE|sjtQ|9+%QhMl&T{iJQ(}hecc}721cSCR zJ0l#P0~xqxV;fv<Unvt{QAsQrZE7#0A5C#>T819tu-d`gp00c)6bE_nbAFpx4&=Ta zu&V~%Rv;dr1@O~%1*{Bkiu#WqHvnq8OCE@O#`9F-AmzL9E=;t~Z5B(CTSEPP#8(;d z1Y&BP>CZMYPh8&}H9=e!!MPiaMk5xJI+Wmd#=QY!5grzX(0m#Z7x#upSU_cLPRUO> z=eZ!yQxI8^pp(r>0xxclnYYyV$`IVE+jY7L4-KOHrIsznp!5S2!)LHUKA=lrx@CB; zz#v2YK?_JlP{|qqC=Ed+9j=s|GN66Lz~tXqfEOV7dL5Z}M4OJ(JZ)yFF-P_WMn&OZ z-+_vBW)!A9`0)#ea6naJ>>AN6TlaEcrYbC^|3m4EXOtQK2){CS(QiN{(@%-MgWOscn7x5zSI(#H5K1i#7gu3@s`x=Yx}AqSpCd1*P+5$F<14(|e$wq@kZ4Wa=3j0Pve{JMsA} z`U*Jg4hG3_DOzlUH8&8~O)vw8y+GT^{y6NSEH|s2g|(js^N`=?H1NNIB@?Ut`0<*Y z+&J7+0J0cBEo@S`D|otT=xhE zX8=@q4zsISwj|Xew>}7#?T1}}>a0O|Ea!U}8sF+Lo_C48#5azD)wj+psfai2vrGd= z$KncK%H=-YP@IqAvavCWL<&nb@N*~G zjPwuUdAf^4-1NTJA*tFu-ft3m@7qMitzMNnK~lq%2zy~3e~bhiEDsp3@@UV(V(@uQ zqMQb7>d&bOr~?WixM|KgWl{OyPryxi5^=t2>mf6J?2K{8JDbab(U;2?KW)n7Rxy*w z6?=&;WCu`NZ7584Up`KG{lbz9i_d}X++waVXzX1tlLzvKv zbi|;v+N{Lh@vHb7G|@cwgE;aPB#BPOGBmiO3ZRuw6{M1VzO~)*j^=BT3(K&57ny%@ ztM2Og!c^;hE|$jWEk;H|k&Miq;_EiK>$+iX#*UEx422m_Xots#E|k2Bdy^uz*{Q?rLq{rq|@%ZN11XRdi{|9 zK;M0v`!Vy!Yi4RqeWTXGq^}*n=(z~Y*x`|0RY7j^76v{}kH*=__?V*V=Mr4~i+xF* z1NHs0Hkw@8l{a(azd}<2E;Aa_yJfKulCT0JH7TUEl~$;C38 zEGka*0cST;lho?{Xl2vtEFJ7DNWg%jQ*!sXuB7o!D7i2RmZd(+RGp2E@t3`=&B2IY?IEmO`zq+-W!idsf>$$ty=7qOyj9<3 zA*qRq$oRx@Yx+Xx@q-SzbH^{ZIKPY9&#R@DrII`o*DcLIUU^O1DNQSJF)pXPcy97u z`R9t9+EYiZ_+qQoZc_9Z&I6em0a#y%0eA=ZmCW|2_e~yB zCNydmUnAE~)n4uC?$L33Tv-1pGOS3Rykn-yrq zn$$nIyj2GSN0#i-n`Md4%0GGK<@;BGUX>>HuIVjGS+c%(oLAWkMX5*(9yd>isnT{I{Z~xV{F0kC0x}mpy<9F^H+nED z_#M@xL9ZCK_m5ZRDLpGM+T2q4)beGlvEJ!~_OrFn5Ps!>RgDF(;XBINo_`$k&h;qJ zO5j|G+)Dmn1BHDE1ZUu&FQUI^_^mT{0I3jX6DR3*Xz}kPVReeR7HekXK`Ri6ZlU3F zsm6hCVROkox zC^hs@h*u+l1Qv^3?AX!5Wsx0q$0r2W$kZg>Iv_MNRokF>km(LG8>Te4}2 zIpu+_+O!Z_Or`T+E%n{w`diEOhtkc2cR#gkpGi4Z)Kt*j{$?I_?6xzrKxoZa6j>6@ zVS3D&L!ezZe$I#W*CC8qzYQ!+FvaH_g$VttbhXgAIZl^CMTM%H7E`yESj^%I+;JHi zdRiNi=3cI^_h9CRj@md@dc5Q)oa~*;;40BPRRmUS?Im1QMMLAQY|*Dqtu(`=pw?SW z-HW&WVmIQ)5RT&t3<`qlXAiD@PxLNKO-bpVI`AglhlJcD*rd9*WG6GPiRALHIsd>R zp}1=G!IwT=6v+`F6zRh;)xp7Lf7gLD&$-7bRXsl|jQ9suygADA z2(PxfeV+zL!D%SednSMUg!s-&aq5gD~YDxiPw z@n4PNsAp?u#$cnCqx1Bna@`}ktfmMTql8+iW1Oct*_>(^6-wRrI;CKEvck_U7x8I$ zSM?D;(1jMn{T}Ha)v_(<1KZ~rDz0OrNFJKbwWoquMInx&}C!eV!C>lt=*y{ zW6jMhuFBEIwN@$oJWlDHA#8IT!9r;)eO@>-yowEb&PnOx(o^HlQwDr+$od0 zlMot%NiXx3fh)$_O~t%@pXgk6yp*D!Qn5id!Lxikr(q zE-6L#wk}0`&Z$~R&kYs8$qSF` z@~P%Y3n!|zXM4>wyglBYflOt*#)6iE>RPYU?C=P%f7$ENE~0vEN%zN2qHSSUKNHxd zV2C|sVoCCKlb!+7!_S*(%jR--dshB&h#~Rz$-IfwQ?K~9Un{lNv@un*p|0y3r$yfv ztAQ>xBdc|$xuPPVy;is{Da1SNd%`b*UY@^8k#!e+ewgUifULjbH^cLQCqd00@_I7s zc^|PI^?iqltM<=}>7kyABR0Ye_us=_oRu3v`h>c_ zkI_lJ9&YBu!(491wAiII`)C3dg52=}f;eLSGT%%v)AW18tWf&UHN}sS^cu}QNZqA* zJe{a34?DKl_&X~|c^rZOk`n5EWSKWfbny$*rq$pRUjoiXkU)feW!S32d`qo5g#1BG z(ECIZyE-HY((s9-xN!mERn1__4(4}p}YV(Kp{QtPb^H941ihGEC2}p z>-*8~K>iWd>#j9}#Z;42p46w|N z95l*H@OPB_LCrb04Zf}3WaQ~noSKvNYNiRpa#F!{kF{~u4qbGg_5 zD>Uw{2t~UD)2rJI;;EVml|?%8qx+Y`oL<@V8uVc#k>a1Iaa49k7?#k?WohOc@xC8 z*m_{__jW-$FtBG)`a2NG7>2eG!ROpY21;!E)fxY7cFG`dGu?n8@!!8uUXwVV zBH`GPyf&Ud_d&^fzOM+1vgvlQw({AV9K*MyY=~p6y(T=JBe)Zx98# zc$;3?)X?=-!C

IvR!J$RYBF}aYxi>r%T015cGHs>s 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 HN96wi!mJrD