From 5d4ced1da09ca9a042abf7ac998bee641a12eb72 Mon Sep 17 00:00:00 2001 From: Diogo Ferreira Date: Tue, 14 May 2024 19:12:17 +0200 Subject: [PATCH] Add contract-testing post (#23) --- ...024-04-12-should-i-use-virtual-threads.md} | 0 ...ontract-testing-for-your-microsservices.md | 283 ++++++++++++++++++ assets/img/contract-testing/consumer_test.gif | Bin 0 -> 707074 bytes .../contract-testing/integration_tests.gif | Bin 0 -> 100336 bytes assets/img/contract-testing/provider_test.gif | Bin 0 -> 285502 bytes .../img/contract-testing/testing_pyramid.png | Bin 0 -> 121804 bytes assets/img/contract-testing/train.jpg | Bin 0 -> 5076873 bytes assets/img/contract-testing/unit_tests.gif | Bin 0 -> 389294 bytes 8 files changed, 283 insertions(+) rename _posts/{2024-04-15-should-i-use-virtual-threads.md => 2024-04-12-should-i-use-virtual-threads.md} (100%) create mode 100644 _posts/2024-05-14-using-contract-testing-for-your-microsservices.md create mode 100644 assets/img/contract-testing/consumer_test.gif create mode 100644 assets/img/contract-testing/integration_tests.gif create mode 100644 assets/img/contract-testing/provider_test.gif create mode 100644 assets/img/contract-testing/testing_pyramid.png create mode 100644 assets/img/contract-testing/train.jpg create mode 100644 assets/img/contract-testing/unit_tests.gif diff --git a/_posts/2024-04-15-should-i-use-virtual-threads.md b/_posts/2024-04-12-should-i-use-virtual-threads.md similarity index 100% rename from _posts/2024-04-15-should-i-use-virtual-threads.md rename to _posts/2024-04-12-should-i-use-virtual-threads.md diff --git a/_posts/2024-05-14-using-contract-testing-for-your-microsservices.md b/_posts/2024-05-14-using-contract-testing-for-your-microsservices.md new file mode 100644 index 0000000..2e8ae2b --- /dev/null +++ b/_posts/2024-05-14-using-contract-testing-for-your-microsservices.md @@ -0,0 +1,283 @@ +--- +layout: post +title: "Using contract testing for your microsservices" +date: 2024-04-14 +excerpt: "How to use contract testing to deploy faster, easier and more often" +tags: [python, testing, software development, backend development] +comments: true +--- + +
+ +
Photo by Norbert Clausen on Flickr
+
+ +Hi there! Contract testing is a great tool for building microservices architectures, enabling the fast development of interacting components while maintaining confidence in the integrity of the system as a whole. By defining and verifying contracts between services, teams can iterate rapidly without the fear of inadvertently breaking downstream dependencies. In this blog post, we'll explore the fundamentals of contract testing, its benefits, and practical tips for implementation. Let's get started! + +--- + +Contract testing is a way to define and test an **interface between two services that need to communicate**. It can be between a web server and a front-end client, but it can also be between a consumer and a provider of a message broker. + +Many times, two teams agree on an interface for two services to communicate, only to discover in integration testing (or worse, in production) that there was some misconception about how the services should interact. This often results in frustrating delays, costly rework, and a lot of finger-pointing. + +Contract testing aims to address this issue head-on by providing a mechanism for teams to validate their assumptions about service contracts early and continuously throughout the development lifecycle. By detecting discrepancies in expectations upfront, teams can preemptively resolve issues and ensure smoother integrations down the line. + +The goal of contract testing is not to replace integration testing. However, it's to reduce the amount of integration testing needed, by testing the contract earlier in the development cycle, allowing for faster feedback loops to speed up software delivery. + +
+ +
Source: Consumer-Driven Contract Tests for Microservices: A Case Study, Lehvä, J., Mäkitalo, N., Mikkonen, T. (2019)
+
+ + +--- + +Let's look at an example to understand how it works. + +Every contract needs at least one consumer and one producer. We will implement in Python (using Flask) a simple client-server interaction. The server has an endpoint for requesting the stock ticker of a company. For example, when performing a GET request to `/ticker/Amazon`, it should answer with `AMZN`. + +```python +from flask import Flask + +app = Flask(__name__) + +ticker = { + "ASML": "ASML", + "Amazon": "AMZN", + "Microsoft": "MSFT" +} + +@app.route('/ticker/') +def get_company_ticker(company): + return ticker[company] if company in ticker else "" + +if __name__ == '__main__': + app.run(debug=True, port=5000) +``` + +The client has the goal of discovering in which stock exchange the company is listed. Amazon, for example, is listed in NASDAQ stock exchange. + +```python +import requests + +class StockExchange(object): + def __init__(self, base_uri): + self.base_uri = base_uri + + def get_company_stock_exchange(self, company): + stock_exchange = { + "AMZN": "NASDAQ", + "MSFT": "NASDAQ", + "ASML": "NASDAQ" + } + uri = self.base_uri + '/ticker/' + company + response = requests.get(uri) + if response.status_code == 404: + return None + return stock_exchange[response.text] if response.text in stock_exchange else "" +``` + +As you can see, the StockExchange class requests the ticker of a company to the previous service. +How can we test this interaction? We have three options. + +## Integration Testing + +
+ +
Source: PactFlow
+
+ +We start an instance of the server everytime we want to test the client. This scenario would be the closest to the production environment. However, it would also be the most costly option in terms of time and resources. Setting up and tearing down the server for each test can slow down the testing process and make it less efficient, especially as the application grows in complexity. We should rely on integration tests as little as possible. + +## Unit testing + +
+
Source: PactFlow
+
+ +With unit tesing, we can simulate the behaviour of the server without actually starting it. This means that we do not need to start in instance of it everytime we want to run a test in the client. However, it's also more error prone, since the expected implementation of the server can actually diverge from the actual implementation. This means that we may actually be setting up our mock with wrong data and having wrong expectations in tests, and we may never find until the error comes up in integration testing or in a live environment. + +## Contract testing + +
+
Source: PactFlow
+
+ +Contract testing solves the problem of diverging the expectations from the actual implementation without the need to start the server. From the client (or consumer) side, setting up a contract test is very similar to setting up a mock. However, after the test is run, a contract is generated, that can then be tested against the actual server. If the implementation diverges from what is specified in the contract, the test will fail. In this way, we can also test the integration between both parties without the need for a dedicated test environment and removing the need for release coordination, because we have static knowledge about system compatibility. + +
+
Source: PactFlow
+
+ +--- + +To implement contract tests we will be using pytest and Pact, the most popular tool for designing contract tests. +Let's start by implementing the tests on the client side. First, let's set up pact. + +```python +import pytest +import os + +from client import StockExchange +from pact import Consumer, Provider + +PACT_MOCK_HOST = 'localhost' +PACT_MOCK_PORT = 1234 +PACT_DIR = os.path.dirname(os.path.realpath(__file__)) + +@pytest.fixture +def client(): + return StockExchange( + 'http://{host}:{port}' + .format(host=PACT_MOCK_HOST, port=PACT_MOCK_PORT) + ) + +@pytest.fixture(scope='session') +def pact(request): + pact = Consumer('StockExchange').has_pact_with( + Provider('TickerService'), host_name=PACT_MOCK_HOST, port=PACT_MOCK_PORT, + pact_dir=PACT_DIR) + pact.start_service() + yield pact + pact.stop_service() +``` + +Now we only need to implement the tests just as we would do with a mock. + +```python +def test_get_ASML_stock_exchange(pact, client): + (pact + .given('Stock exchange') + .upon_receiving('company ticker ASML') + .with_request('get', '/ticker/ASML') + .will_respond_with(200, body="ASML")) + + with pact: + result = client.get_company_stock_exchange("ASML") + + assert result == "AMS" + +def test_get_AMZN_stock_exchange(pact, client): + (pact + .given('Stock exchange') + .upon_receiving('company ticker Amazon') + .with_request('get', '/ticker/Amazon') + .will_respond_with(200, body="AMZN")) + + with pact: + result = client.get_company_stock_exchange("Amazon") + + assert result == "NASDAQ" +``` + +And it's done! We can run the tests with the following command: + +``` +$ pytest +... +======================== 2 passed, 16 warnings in 2.15s ======================== +``` + +After the tests have run, pact generates a contract that states what the client expects from the server. This is called "provider contract". + +```json +{ + "consumer": { + "name": "StockExchange" + }, + "provider": { + "name": "TickerService" + }, + "interactions": [ + { + "description": "company ticker ASML", + "providerState": "Stock exchange", + "request": { + "method": "get", + "path": "/ticker/ASML" + }, + "response": { + "status": 200, + "headers": { + }, + "body": "ASML" + } + }, + { + "description": "company ticker Amazon", + "providerState": "Stock exchange", + "request": { + "method": "get", + "path": "/ticker/Amazon" + }, + "response": { + "status": 200, + "headers": { + }, + "body": "AMZN" + } + } + ], + "metadata": { + "pactSpecification": { + "version": "2.0.0" + } + } +} +``` + +In this case, given a get request `/ticker/ASML`, the server should answer with `ASML`, and given a get request `/ticker/Amazon`, the server should answer with `AMZN`. + + +With the contract, we can now run the server and test if the expectations apply. + +```bash +$ python server.py +... +$ pact-verifier --provider-base-url=http://localhost:5000 --pact-url=stockexchange-tickerservice.json +... +2 interactions, 0 failures +``` + +Let's introduce an error in the server and run again. + +```python +... +ticker = { + "ASML": "ASML", + "Amazon": "ERROR", + "Microsoft": "MSFT" +} +... +``` + +```bash +$ python server.py +... +$ pact-verifier --provider-base-url=http://localhost:5000 --pact-url=stockexchange-tickerservice.json +... + Matching keys and values are not shown + + -"AMZN" + +"ERROR" + + + Description of differences + -------------------------------------- + * Expected "AMZN" but got "ERROR" at $ + +2 interactions, 1 failure +``` + +As we can see, using only mocks we would not have catched the error. + + +A common mistake of many developers when making contract testing is to test the contract itself. +In this case, it would be to test that the server returns `ASML` or `AMZN`. +However, the goal of contract testing is to be able to test the client funcionality and not the contract itself. When using contract testing, **be sure to not test the mock and test the funcionality instead**. + +Pact is not the only implementation available, but it's the most widely used. It's also possible to integrate your OpenAPI schema with Pact and have more extensive testing. It's also possible to use a Pact Broker to share contracts across clients and producers, which can be very useful in a large organization. + +If you want to find out more, check out this great article on Contract Testing by Martin Fowler, or check this Pact page on why to use contract testing. + +Thanks for reading! diff --git a/assets/img/contract-testing/consumer_test.gif b/assets/img/contract-testing/consumer_test.gif new file mode 100644 index 0000000000000000000000000000000000000000..f4f4f47278f67ae6d04c3641c99e2044f195d9d1 GIT binary patch literal 707074 zcmaI7Wn5Iz*FQSN%m6bmbj#2ULpKiH9RdOl-6<#_>d@UGATe|!r6M2>-O@829^O?N7s=uB~mOYwGH<);1M`QuHl60NUP;Q?pb1 z$CbVPfY#5Ci;JBXSDj~nt59)ch@bSwH$9VU(w{~U3x92}B8a727ap_^jp#vjkjjb^~eG#?eKWgeS znkU|$eEj_Rvz)r!qrO+)K7F!$wmh=?EvUTPMkT=0G1X`92*0pmSo?0Ydy4tSLmLe51^`@`5n?N70syDx#tb9 zO3TV(2R;biD?2(rm*vww+5hxxW#sGU^ZOdAxE9j;-FH`4S4{Q0FNTCH+MaT8aew}O zS=qO7`Qryz`KG?KQ%wJcw%c7Bqe$-%Rhkf$Tf-;rjf*G8`#*pG&~Wg{=zZ%rHv9Sf zTr$zt-qDp))FicaHlcsxNLKmP#@pY&e>*oW?(gr@Iz{j9?q+A@&CSi}`8~87n~Le# zupSzfxEUyCzxw^3V}F15VEgczmSgtQHA`MckA}7C%1X!4seex3x}vl-HbZMUhdTc| zt6UEca(4A~4@JAUdwK_`a)0i9#f|oMQ{}!PYm6}t(scLo){6{rw~REga*gzLRdnON zu7*|#R|@wJ@^=q)Mu+?R1>9B&SLJqg3v_W;`q%%@v;;T$zeqxTRk_vwa{>JynVNwi z?r2$YIWbpB83nYwqPV1-3`SZ`6fK33RFuFdNJvVHVI-9>a!RuD=>OBW|49pR^H8$T z()mBK{*6?*y+T8Slq4kX-n}b+S6VzU#8X02QSl#!l!TO&*gp!f+Ytew&f#JKw|V{> zLCgKNYlwGHsCQrh`ag)yE`ed8s@(rH{l87{5BeY2fZO8#WsbOOpua@8bC86jIOabl z{Wqbp@&7-mzyJSG-ww5K|9|xT{{+5m6%phvVc~u|Ff7E?{U15ce?$c-X@T;!pIGn@`X^b-J;eKtyPHl(pg;P*Y*zCA-*wUYU-AAAuiO8si?;Uv$}90t8HxX_ z?Eh<}|9k3R`245)KXLnS@IR679`G;RL;l4z@apfM%iq6#Ui|p}?d$oMv(wL?KAs#O z9Ukm|c)z#1vrT&Uc58EEeQov4%JS0U!u;Iq>zV1P$%*l?(UIYy!2#l{{+E5dJukYS zKYQBM+0owiq_w5Fsj;EHuC}JSs}$>=IY{%yXEBQaMRw-_J)nMm8FHb znW>4fk)eUUp019zmZpX}_PUy?in5ZTg1nrpjI@*_MnYUnR76-vP=KG0mxr4R&3TQ3 zosE@+nTe5so{p9VMNNf7P*RY?VNfy%7z6|WxPC&&ztu<3 zXYI^mh1*A)6PG@*0S+DXm_&I@OkT2Z}|Dq*3|PS?_S}-l-G>9+qQ?2=tP{RyW4li zvUm*3j9zrSpDL90eLMZ4bAOhgnR?B*r|WRB-m=MQrswJLn>N>}GUMK7A2+&hAHSXH zeg63!F_x0kq_6vIcRW|**6Y3(=lgS2hUF$Nd%hj7cKW`1{j&GRXVOsW6{l%`-_P@d z#im=c{V#w2INhBpH+|Lr=l8|=@w?equdc2DP(czN!stbchV$2xVi0l%q*#=W;C39n zjn{TO^Dp@U2+JM4Ifw)*D?0I-2L{Ts6*SJ3%;<4C2In?8RhJjl>8`vko*}6NWnm}8 z(#x-OlVB`gV|FPeM4b~@c+v<12^zwyQ!rTH=|8BxQ(dG)+SwS;L$6{W>4pEeMwU72 zvZ1_EsJ9N3b%~To#S=vU19_|>YW>-K&>)}?YZ1SNk{9-Up{-By0Px{uJs+h?Bm8k1 z-%fd?%k{avj?R%Dj?0 zlLxdgUb7k&v(_&Il;lfiW6V6Fk~$!zD8hQ{))HZ?Wwnf?4p;b2k(VkPB^eD(yUfPQ zYn2I&a2lpzMu99*X0cRrxHfMu_7&W4O|e_*$7g+!Q;RT*3+Yy>mtVu<^0R5NczRfK zOmwLS+V|9pEnzP06?-{>9CJ-2;t5g47+0M(|Jqvz>Dt}Hm03}|Jqu4`$Kt)%zIRMg zUc0+_Hb$-@Bsih;O#_gPdrd`ev-g%|;Lg17u zXIorSQ(KC<#9UXTTv5r#M)eidK>r`&+$i$zCM>9{w&6NiQON-~m&?yD!mzpSwFK?2 zG|^jG?~dZGaRU^;yv4L*e&jkGVV=;d`?hI8J-mo99%m^*{(H?EjY%}%>ZG5>(k=sx9((xSRxO1v5weJQ3Fqmfo3taCUd_)(yEPz9FVtQLhSD+CkygcW7<^;=DP1!z z2Hs549ZgV|GRBk5p|R5iVSu|4rjnd`*vl(hJ*`Y2j~9I&m%f)Co|ztE0m)lrb|O(D z^V%?U_#qw-^I`FI18Q=?n29{w9P()Z3_>KT>-}iv>mxd)OzdzZ%)xNs^Qn;v_6Qff z(Udt1Fi2z^DS#Qoa)039XC7q#O&n3CohK)vu{5o#W9fx7=?OC9&CI)L)QIiely1~TLeU`x_(uy}Zb*#Kv}q-P zY}IH_)ca==@&H(}-Nm3d^Yh9`O+m7h#aSI0bi;UpD3$Gq)n-?THg+i{QSpasfzKmE zP^Y=&Iu5Z&^V@?l)T~=x+Kl5S(?+CXa-@(j z9+l|lCY`-*<;KY$sq3iJS#uesW#q1uo#Ek8h+g*A+o}MSL-PwXS1XzB4p`WtpO!dj z3s`#gy!KLChPaG3SZPv_GZYR&-ed{buuKfX)3%##@ewV?8Yja*3p_6!QUwwTD^EKZ z$Xw9gnlFAPnNLzfL`QrLf1+&rsk8{qm?l2tvo|k@z?OJfKRrjh?Z|>ucDbI%@h4%s zz6U$y1?l6f%x7=XuMQAFJdL7u2`u*W2{H(HQk}kc1afTcqbn@Q&o}#McGX}nhGh>< zSqPC8e*3=j?mL4yY#Pv>D4?~P^d@&bs>&@ zeM|gq1kJ3=+lsR1eM@RHB5RyPo0o`SD6&dq3(-vj_CRHetbq)*Kiqi5?S62V;U~Pu zF{KF-AQnk8jiS0wfP>xJbokpkBrdtM8d)tP7k3a^9!x{bwL}%8RO{pzh2anW63Mc5 zab!l$6y)P4>k40@8)i}+)huY)-z@;=c9@60A2fJ-M!+Q58OHbXi981)#-7tYP)oEr zc`XUZ9*(;L{w+M!!eE}=4f9S(T6Cselrr*nU>W=51q6pjAw|L&ruP}XWR=b%1&t~o zSx)B^w!k#a@ooLr zsxf^VW5kpFb!J(*wO+90g^ThC(D z&lL}`?{&ybc`=b5&a5zS|Cqcx;O2G&pY%l<@24bPl{abFyTcOw07;KuT;i3i8HACx ztnw(IKa0RFgnR)7H5c0@{-1`?fV+Ngu2m6W8NLtFC3Y_>XP%0--TQQ&BrycuZ@rkS z1H=c!?Q*e)xW3%b!fLf+DMS_r4yzvk_S3yZ&B)^Kc230Cv&zvuyU^yxq{V0z|2g@v zByx)*Hud*%?u@VDn57=L}^N?s@1#ta1nEfca#J$bY^Z< z&+k9~ey8FQzU)RMD?tSj%`Pd=)_tYg+$MY`^N~9Ha4HEcGC*p8s7w2xv^UYEd z4|-5*sgJ(n4S)~NK@zm@$jjs3S9`g+d1#ZoD3b1rphBrG@O&6>(5P;4=Yy#)WOp>M z^5;^bofNlX)W~trmuRx(ScdX%=KW92g7b}Ch?LH4Hu+ctJ`37{2MH4_^F2ZDiT;KA z*6%(TrZIw~2_Dy1@2ouvhzR%XPq@p12Rh^c{l0)Ke!vnR0WIpmxJvN;)lkxTK7-v? zGp1TI8?uCK0ELA$xpx-aIg6qJ?^ADfdmWlMR~NB3=CzZMc>f}zM<=*NFQ5Py`pON% zX(m99R+l}6bumiF5_y@i00knS#Hkd>+{a)Wanm-r9zYeNW5JK2w#WKgkU<{d$%9Z9 za!IkXyuc`Y+PzNxCg#-DM{d`MiF?f6{RNQ-Eik$-mezQEo1C}ms2H`>Lg80pF6S8q`Z5%ltG39Xe4!2o0&5clYUDOwT4W2nc z-4JQkE^HG)c-dN7A_2qZP2awB@8KPPaI*2*9LVWL>{@6<@RdTM!Cox$TJHVu;FIsF zbPB*`4S*7fx}igqyp4h-h@TVhsq>SJ6$5%M&tNS_b#cSLTKnNy9#YsWS4lfXAvwae zR;yD3xkSuWdr`0<4-QL=gH-WtnenAv;8X@dFTz8%2r||}3}O>${S464>aaIi$l)8e z`7s5ab+Mg`l!tiAZY(kc5bS4Hv{&m9TBkta%$vrXW=Mo52ui}t_)II+?FMCTfinJv z-?CG@U5_q2%hOxS%1>%2-1=Z`pslloFUbB`n5&pwz*3TRCs=z9r3;W?r4Qf!A}Irsi>`J`w>a3SzCuoG8;SPPCkZNe}=A!pOK& z@|LgF_l5Mx=@e=~8a&v0vO#=W(R{X7g5?XYP{|r#Ij?`QV6D=7DmX@0VKV(igVsK- zOtlTUIS1~}Dm!E;>OL*Zv#Yx<0E+0TUTCZ4@F{`eu~(MhopVqciBGE{NtKt|l$=LC zN1KWdDrnYFpp+udQYK-blM#VHoFazMlvOEZH3mp}3bI|D>@Z;vTU#}$5ztAfelQuV z6m*Y$3}pNaqI?@*p&z5_EG2qJz`s&vDg=)P+EnmDTJ9D^pz0gsvh9N-Yb& z5D08zFh$)V9@->alKG(}inWOX)fA=FYD`i2v@z0ki0@RYOhA%PYX@^H2ry$0a{|c^ zD?!R|)@SrVQl7S1Xh78!=FU_~Y=~e7OUL7GB47yJqR!S;rBrvA+>-tCF|A?y_Ig*x zQN^*Wz$qxnTeD57T^(GlKG4nc60H<}Lqn{ADjM3kCWDmx5&jHEnTmIIV=8+qNC44Q z%(Hfp8$PG>ZRtCFywOv@QVd|+=wfDTMPZxnJ#z}8q}xJEmkT+g&UpnVQ~6|)HRoc) zi9X+c#3zs!)DtMjJjv@%DUwMy{k8f5`?U)PAMk@;GTl^ zPg%;|)jy_L2ZvrMBN~;vhA`A^lyx;Jl#A%1%+Zz&c`|N{)wU8P6J^uOsp^LmH7Ymh z_;UcBw4%3g&@{BHX%6bp%pw+LQDO$K=*|D8YjI8r&mvG>!r*u_@&wtQ&F;?E#Z+^} zZ5>%{%_4*9l)ZJu{ZBW_J{?Eg2LK~|UVWo%jl;Dw8p6*buA3dv&w2~o*by3kChF1V zM&2Hec1O5jVWC9wN<2l1Jk{JmM@uqAGA_aEfIQ4BccZZCw=Wl65Y;M0KaWZmmr=il zZ$BMt#es75=U$LLMe9SuAwz>#eIiJRvv7+`Mk++^Z~Zv(hJf8Wg;GE@E4-l#@G@ldU2xEy|6nDJ``nRA#vQ-5**c*t-`{ zOgnzBGU*ra-SF%ELVg^#q7s)Oey1<-{e$v6ww3rc)H+F=0NGaxjf!5-r-bT-?8Uv>bJEij-!S}nOMbw%T3r4jPc<~P@kq2XxiCY@&zZ$MIyMmED& zl_zK3MlH9BjHYvp+LSH_DIwF`UI`(m9&wC)V{3Z!aq?mcrHiUpJCoA?!p(Y>r8WTP zm-0uk;@r97VfTzT$c&*$D2o;pO!7q-96&Dn0}lGV(e1#c_Pf)@@%e7=d^20ua7z#O z$7Pe=H3qh!UDmM`$5(QF+0QTOdOL(!vEk%d>k`G7VwGWdjb$a_ZCCn$1z9fkX_#l^ zyScG}vXs%RwF%zMcW!BIX=43VX_TsSFq7lS(@oOXlg;Hny>Q8Of3qp2c5Y&aFrfiB z`URHKLvzQ`R`+Bv^8R={>1K6)81|cfCbnk_x>+~1leGpm6C2GETi(9;p-E(Ug@`;- z21rl$8jGwvY^p}J0VyA}?-`VHq|%8jJY}&BkCOpKpTlM+Xy~%2lCS8klZfO;jua8b zu&F-Blt;FF?nVw&zD`tXCaMcT!XF3@%Qhcj?@s2^W{}KVo9FD^q@K07IRrNe%76xN zpKelTY)O{BV?F~$R!ON^NjC+xW?#^>e+>!7!!k`^7H=1$#CDi#k*o#Q@`W>OYJ!j7 zf@kNzdN&(YiAc9=qh@UYJ-}e2^1r(bxp)enZ#ilZZ$e?f3|KOTHnPv+05Gx6TWtL= z0e;U(%CrHfyNHZ&(w@`c-`zrqqM>(BZ*^fdx;`GJWpkxxX zlrqpJ60dY@llajTSGIO0iL9&b>uoG0`qRNjNB^WEm_hpO^=TC~%F)G1q+V9P^QSY` ze-6rk9AL?F=6XO>3xSclP1m+mS^;1z8616n>U1tc{W%W<{u>kulU)D(iI$aDOixI| zQb-H~(wMyWRr}u(y*f31_tnI7BNuZ!Kd}~k{8H}k{Ee0~9%Rcoc3BTinS&))N0Yxj zf%$(T6}BA3VE{67Wb|0z?Z6*hSD%JZWUq-oAOl5~lozhMie|KumWuK*4<4yq0q?hc zot*tT#rbob>Wu3>WkDN!6z>e|e$RH2&dAAEauu~nuDo{5Z#T;y$z}A*huDJ)Lm#BdGln-bLHss2nP zl60%}^TplQmkurK&1+0*>}9tVea7Te*+!R}ZUm@iY#Ss}GJ&sm^aPw&>CDK9JA6>R zH;P~H(xv!nu-N~=6BW!X_#?gGy88i?3 z>8DS3OreYrAEWx_pXh;X(HphZ#&vsF27%&18XZdqOu|vdxDQ(ICx)N8wIzvrep;;e zJ(#aCt#jJ?754Duq}0KBX{+dyj=^h&^56X~J_WN(v&ns4?E=RA{lq7eDuEk}C#SAO z3FJH;Wvr@fm$t>!ckr0tkje`(%&rJ&TV~hf>B}M<0wgs>7(C!F#8OGPY`)mL-e@mj`*9d^?)+PKleoHFhZxL zKKD7hwbL5BNJtJTR`Zyjn)=;$B7*t*W#dWP6`Bo$72a&CN^;^?)__qp9ghsnI$fZ_ zh-H?RK2-O3`vi3~ik|m`cV^dD*A7f+HXpQOlO!U-iXx9z6hVpNQ zv&PiNl|mSj##{qSWm22{CE&rGowv_5ijQrICwP$^&&uk#mAkT&5%w0`U;!qx?#LvrYb@N4d4odgGB^VUmb!Iwgzk+c ztl2z>_`tGhR^e2?_SAsyWz|!gTTOk+H$FwYpUlks-A!%x>T3u%_-}!1XOL%&yAh3c zZN8t>n^BJ4RB{_-(gs9LaNX-60tc?MT!;FQs1*va2*)IHwsCBtE;2^JcW$u%J6}Tt z2E&i_8dwPky-MGe)m5bNaUwSk*QgIq0+46L%v{c=f9XpX51Vq@Y93<cdkzPa%I@A#A6JfwWC50-y&D^LfIwn|eGNx<}U2kO8hmzY@6y$Z|LjGh$UZ&9$ zX^uBV5*h68>*{Z3vmtwF3!2^BZ*=1`+W|~k=V8wGkMG(2`c9Vwn88t`2WztQsK2Op zBT18f4Z$zlAsmHVVDY82L>atbK}j~>?Nbd-4H8!@ZxB1{9t1*Zu3Lf_q+?uSqWD$V zW`0GMBiN*{%=Pl;%+ugeO;=n66=7SW+1ALl|JUnp%~}(8ZG;jncd9QeyCJWKyYGmZ0n8$<4P{@umz*| z_U#~TBX$sKPRg=asF5BE5OyDBjg|l2A}I5b01t6-tam4qAWMf=@qE&T z)T_5OPnPEl3?l1pT;fIg*bTcrh&b?~P{}SvVR?ztbRZ~ei(FV$it%AQeLwHQYx@D>qCl_PZrowvc+;VTLp^f;^;$r9-6^U9X z3INuvk9M0iFW@K}q253h@%2hK@j06seuKOxg>x}e(C>ErHWvH!OUU|9J)zMg?j!dk zW}_xtuLM9(I-D!+LBXH*Ovnsy@Y=$q>aAXcK{VJqDxTcmstBJf5;r4ZoKI?PM>x3j zpsec}6=GZ+%ooHs2ZiVq{lLVf0|wsvD)M%1^7ZX88<uE5T?<~I zrDhxv`Ea}ZO-*##>H-&P08iilD~5~W}h$^W6@M0b<;sBw@>ej)*2WUo@lIBL|XOPgd7H6AgPl@u!^yh%s9ZwHDx z@F;hkWW})E<0||e`&x7mqi{JEy zNWOFso7D-+@AAP8aonLi>=Uis*KKi&F-w5d8s}k`A2Qpa{D=DH+?o787|Z<8KngQB zi&8i3^K9(~7K`7gg87z+)gr3ks8WZJ$)j_o`yX^)Wy7CZCjWJdWNTllQgd&t zTAi$S72wskw3qDNUa4chjB(5aue!!i|4VY8D679-GroFyhu%a7Oj!ur8-XrZnIcjR1BK@CskFT!_ik#pA6+) zHjh_ju&_VIO$rtn51x*M#}u&TT4x;BI3*!vD8%QZQy{D$2o`v&7fp8>r{EQ%AsDZL zYA7VYKy8qXSpJ4idg^NIH}3P3#XI0$H~uC3DlAP7&El?H$aFcR?)uX>0r*+Vowq#`M%HzgPigSJ7x z`$+Im4!X{@e+E;3w*Y@lr4%PtI07rDHo9KHmBgn9|D?!=H@&jZV8<`0G^H>CvN@TJ zD#*j1-j$S=Ngamtma6%X(T79q1(QvgVQPcq_YTtE)yK(%gV_$T)DU%bH#Q0)xg0YY z>;S^(Fs75%yOb-mGG2b2$UcXIJV_C)t4~uiD+QtwjkCyn0psI~W#~;wUK}mgZSAK) zgWhQTuT$P>aLN63715=UU%m2ID_;caBcHzsi5+7}!2IUR0YGUaAu_QUvA2s0z37$n zO80l-FmKY@Rsa);PJGUUaCRR+ZoI?naCd1*~Wie{`Hn zgAzGa0?a82)Wa2&Rsl*Fh$afA9}YEbgZkq8W*4dhET0fq6S@JJ-*UCf?_Ce$VZ5tJ zCs_4Lq~yBj(qOtuPb3dQ%!{tBih^1w2A}#AcNEJ#-qVP0!eF2(f{;90XcQcrtI^Gc zjV>G}HwMPZ5Q>q!Wh(GzD!a914s1e6F*fy8vU<^ITdgXiN$yiv?N@%LMIc8|79SBG zpob?9PO4YXkvNUH%EQFv%^9?Q)xF-9(ALN6Ae8!rl)sn9AQqAN3Rq%?pd)M3{@FV& z+Bf*RY070BVlk=ruoA#97t>T3vzkV+kc@OG9<_B9S1YwF(+<#H+SxiN}Gw+W5-B1+!+G0joC!dgSyQ! z58^w&fOdFa?@Uj&oJ<-Mx>{GCb<91!R?l#%&{54={>84tnfSy-P^ouQ`*WPUh!((- zZFbJLh5y$pm#=VY8Ul@eDapd9sZdEWYp8%1q=JF&;Kaq-2){-% zPN%ar-&rzHLM65%g!?2_I!Vx;HmK3Yi-B#*{E63p=AQKQjrV??cPP1TxuFM`qK0I# z$R8xsV)CSNkR$`m<0RmqD36k09DrHqE*4LnOJ9bHRlq4&c|}Y8p(p#MY7}bOl?@_n zVuJKQN+09M@6YJu^^%hoZMG2)Pa9b;05-NDFZhjRLAgdEg(k*a*LZ#%6KA}dV9=D4 zp)cXYRaD(m_a(y6yKUsMQLhhS8^N|vDFSsj@8RiajLvDPNs3N3peN;6bZ8Vy6@#zf zL7hl22=`~!4~s{pf%AFUWEq-O(8iwm%nJ9--h*I#r_q}Ai&cKQ|5Dvrj{(y4KoD~@ zYdsK&i?c&N+EiM4r;COZ>4GbWcHh6Z+j}o)SI8Dir(GS!YDr0gL%u5spyfBm5=Ly{_B_L+JjgC zz`L?Yb_1Z%=TtW5DKtHknwy6VrH1rP~-on)2Gt+s0K?iN9pu6rl7^ z%p4|`3C?rWO_##(T3g$EH*Kl?q}hNnGs61%oB<$Av&bYD+Vn@pLe&~n@E!og&GL|z zjtp%$T&+cJnyBP00$bm7QsHAwb5B7sq0HT11P}Qd->_MTm&@(!3R>&dOaIODfsdc3<*DN%48qr5}3Q zp77o;-4PmoGBU99>8rin-&-QnI}SEVWC@5Qao5;WzAKzm72MTzraRX)PBs^iAXrnf z5nSpq+T^*yM02ictCv9c?1RWeLUZC5OA!uTvw{MnR`v6wusHv&D!^ze5)eYe5+gw zY#b3@$!TwFnVzdkCzo10RLB$f2yWi3fzUtBewLjhbyx=14e>ZUK)Ds+4{=#Qp75A# zr`X4LX2|^qYC_Zf?BcJZ@l1vB;0wA$J-p)uozS?L3u9-khfjU2XT6*`y_du(HYSV3 zFzv7z$5QZJgp=65F5z&{{z;|%`+E3I#|U4qt9ynE6bkh+)vJnv$ug0?jdNZv{!&rAL5wisZJwb8<@84dx!IKo>1{J%X2#Hlo-m}H>(iI zAtGuAZyX(4{@g;sWWOmMkG7d*3s$)p!1frYfqMt8PDuKDu((`$`oe&tw*(y0_}%WO zPdW?=9DB$tATuiF>=}@26)#%PqlJUIn|(eiTO1lWWGpGCpTs*U_;8RA!4W_up`-vb zz?iYhgx^I%zSC6vwe}w^-s5)t9L1|*p6j7=`+UKf3;99p%c)qBx#-)E4$be8`z}w) z-bMsk3QEfi-BjHUo_dE8wPkd&@=>ApNXevbWRFJGd{HYa+M^13_~Jn!vs= zkW6SbH2HjXRsiHe z0X<%mJ2Hp43GS8P>>gR~T`4i(hflnjlwvAi@61uXcDf~kDNKlf z-_hBER{3;I{*wC+%KSnJlEt(2zza+m~=3vo60EwcDYpf3c=E9Y_g4>>K4D z8_3`b`daDRpEA5cRegdbaWrfdiMKAuHSrYaADP}w;%vH24o+I*|Ks=p~ULqCA zK}nA?l7UiaEx+YppT}r0q7ZhSx#*j6QIyMb)1wt(Ms?Gvtv(O;vWG(rIa15=(~!t-=;oi4@EQh*r`2ea-V8 zb6d0=JVv&SMoSRT^Q4N=Z>~vV0T2dzs{+qqzp6Y5o>q>^ls6cSq<_uv?^&)Y}IOuqZEsuk25~yAkshuH%c+ zb{+g`Y~Pzs%(i)I6GSeAL z&r~m(sQt83C(}kha&R`5WMZ)Hng(vcG-dfmQE%eHc2N9uL!a!@*GHdHsaIVKF{at z6`gZ6;@72U=1~O7tGH>w(nkP8nF}Rj=w%DD2O#?5%U1GWg&zW;Y?q2yniYmH6Q!lo z#ZsiIvq&wD1SSSEPHR89N0dzm20DhMn#C@PHhsuyA)4qhsdR z3o)mO1FxZ5X{&8jP|?dC@!pR;zDr6*20C__M|QaAJgaNbHJ%z-z7T<=IK?&x-?Sa9 zU)RJ3Jm6-1!%|?{5*AM-A(Ow~tMy(;Hxz%z$gv~QLmt4vMsPL`A1V~MR=xex{AxZD zBuOgM_+U4Ly#pyxN`0s*g37^Dtgt2g&CAZOaNL}tIbD_E;EkErVtVATKxSWt*cR(n1$m3};6DmRLoGcoT(k_feq@op@$nLD!aFG}(VjZU1i|F8YHiD(@zHv%j39PH)C~8vq=q00Pbl@hM!Dd`n@cXg^v)L%vw0o0C1X6P<_)!KZ za4`s<#!0tL2-00(-+8@ht;MQCo>1n6%ApgFP*C&5RR9MgcLSG>k9!U)R6Y{dS13uO z?&!9=Q>ZIk{->EzNoX`WBS96)CB_eFycVlfNe7AgBw(g#fVdoHX8m4aYjvneqZP{g zbB0>_e(yrmKxB9rRK)=jyQYbMFU1?P&P?R$e{ z6@Z9@)#l2fVqg}4K}>WNvuZGyp*|~C-~vaprDrg{$LtL;x!3Ej`fAS9TyA5n`s-KTI zl6@ua-{#fgF{tK~o#4>P8lVww=r(kb%4O=KvY9+4$O(qdEY-q3NXh0B zzfsz=oRT!jD2DMFb2)4(a5L1D4jyg0{j&l%{6){@id3iiBf^yaOgb|g?Paf$U8VJ% zj~Yvn^FjxQy*3bCMyo37lBuBpGoTG-eJ`jh=^AgWVN$Ju(b6|AF5opAfLUQG*dRgB zq1SCpIKuneAzt|?oVH}I8@4)}^;&4s5Gr965@quYRZuiW4dT*Mf`nxM)zf5MnoerK za=)|*qe-*+eFUn^-G23lS^9Y8WmlcFIr{^TA1^U_rr!2rT z16;<^B_)nKl|%2%_5OW@%<#PIND@e}k`!8qC7JL5$HRm}O!<(6cHzfM_r#3@N{*~G z-|(r{nz4vfGZgB?`zn0Xg?H7;HjZ~TA4kHHCvWQBcT!{v9v|Jj;3oEwHB86vJx*8@ z{rF0ZQS8$y!2ObKf82$i8q(TauznSkw17v!849BTRKZDWJyE;+EBg&T2El98@9hfqX`b%ZdX^KpK>9 zY3j5kvX9bKqD^*P4 z5x$w?i|^WG>}fjS)y-ZUM{}krmaUrjxW7E7Hw_+LV!S(CjJW=dvElhlb4aE-^#b{j zE0UhEFX)YDMl}6i*3-}5D+1&0{7@nVC62y3?+f93%r%iVUUbYyUA(XIckNr@A2ofr zEj;MZf8#J-<0t}(@FFK33=;d^l8JKk&dfm^(vPvQgr^MIUqRwYnw)t?Z)!AyfaNIU zyU%DK?L{<-fq^Ink#|cOP^4xM+SCip9nxn1VYDp2yfx%MyX9P>__35L)WN!o(I}Y+ z4c%-#TUROC?A^=zwS2|!hXCIj$y7}q5Ma-F5yb-dsHb?U{x@v9*NV+PeBiOUg`$=| z;BN^TPMwW@)iVf%V2&1SAEhHYEw&g+*v?d}(N0*G(q7Xki^Fq;tA8Q@Uo+3v$gujI zQ4zV+;pl-X)f6~4&4cDrOGQ(37YCy=b@b}LnirRE?lhqAS(B2*@9{)-z>t+6b~!W_ z$uQO0lE18PRaX6uLt%SYtgLgK8iGOnMh?is@5U|z}ghw-^ zy=D2!L?&yZM!yPO!(y6=^A%*^L8snBeMA(1rm?_!^H%mH*910E0TIh#1UYMleL>OC ziUQ~h3A}`>*g9;AXfr9Of?}|OqQQBdUv85LX>1+gVt7JY#A(K}SDX;2QBrFwSq@=e zD@d4%-}BkOYaTJ{fpI@wwul;1C_MczUYn7}fL7-njWPT#2?c`bg*tANqC|X_BKm%nq zcx{jIv>8XOm))ResjCIzr`kiT+afBiMnQs4N-9q0G=lByY^3`lkWR@5!zyZXFET_fz_$r1p--&Ba*cO?rj2P6970)-F@_Ge`lHn z9-4z_#+r(Q7sa;Z7}yL&%U@o` zJs1>D^UU%Pc14-|`vKkX8StJWhrkvy5=Up_K;(*tX{WbfQ+00Vv5{H^@sTN|2v+FWD)R zKPK1aknj~x-E55qbRVQH#QaN@KdIoIT%&Oevy;NRIh`ccm;k(dt{Pvmj^>2=xZX*C zg#+rTN=pX-@WLavg*~LLy7W4L#mGBfjSzC7IsV@4jf&l)U$KzMrGkZwkL=*0m@Tcs zh6qA~6jvO462uf|a7RVsA@Am-4#ou>aFd7@Z7&rAAc8ww`*hqQx=heS)HwWFVbeTA8}%2@nIl^{y~7pkQ4rd zOUF{rkt%vRvzUSYBH8F0kn?DvkT!eO?)_&otw;bLQCKzYt8Lj(mMDE95#qDo3likK-%(QTYM~$SqeR;ker(zE$#QJs|!u z21Lb9#K`3Y5Hs`C-#+IBGj(7eR<>R-jud}<#MI{O-X~6;g@rUbySw{e)ANwI<~P{W zxGE?5&?BjB^=SCn=Q1w4p5TUs;)t|uF)Zv?fD-hIQkrI4bo{}0ZK+HAb==XF zQ?SLJh@rhJn-1W_#($;pno)uC8wvsg`t^OOX7IDe&B7!9sw~C5gK~n~jJN`oWR5J7 zysH>;{fZ7xlhIa{Z7H(rQ*N;JhAnzU(;qp3_Kp7+VQ2l;WZ?e$jg4*eMvfk%5$QJA z=#Uy6!U!qpl4f+n=vG=vq(f0hhoGQHi8>TXMLXiTVk%A zmq0QV52SV;cr5h|)0+B%qq)DX*~lv={rnoO8!{8Lv%o*#-Cb@9%VLdv*Li2?7#qQCh9KLe?+;G$LiK?Snr4)Zq}kWF)(OQ^-`#^i0Nb zmQo-RM_|k%!DKWLxx>hwAT7n@&{v3eUtq8kPx{6EOV7I4>k_1T+TlVnz&jH(>s`=I zIiUZ1m2YkW1R<8_w&?VCVQRz7VnUyYusa`Yp&}A@kG3jtQ#|$Fj7q6b@%W zAbds!r`*dg;^@ad1PAktkr}0FA3>%T13W)9I6+l^O4y$O|Lp-OjfV`8fYHMhQ#68y z@Yv7#%0#`Kj7`xbn1<-dCH0gm)zoOQI*;`rsmDT_0FbsWrb)w#+Xnb_s_Y<$2(C+x z9eGcGrpbLftEQpYkYZrY^YBJGMq4C>PjrVyr}nm^9insga7Q6FWGB`~D=3fholQIF zZ0V-j!{C-)`J}7Zvz<0>w)i}Uc1AKl5HGOIw3j_q zJK2{SrM2mapT=-&k$}JVfsF6^KPToF%Tj;sr6=?_je1kxzJbVcHLMFM(W!pBB)iW3 zaNV621~I>$LWbv6ML`Sr#TJy!FWDB~GG&os{IzSQ-lZ&Sgo=KV)HHl&;XAwn8z_YF zaU}sIfe;%XD&*Ey45{ItQb5Ul`4y~P9Tj?(%0c~v7TK@uZ|VUU1#%D5^f)6^6GFB_ z3l4f2=)b$;nnA^1xnCD9n-0*~N*W4Em;Uoq23sEmWJGco9CChurBZmc-F~PD2FXhX zon7Y`=RLsCN?7l9{ICQJ?r|-99)cG!REzPJw?og7vW$gH+Z*A@1>5CS5PR;@)B=q5 zw;-7wV0r=J%hUP_LF4AGv*Gt;BR@7*`rh(8+T_+nm?7~JM)LP7|0H$)X!7+Svk zXl~pv1vD&K|K61rTXjX*fujS_MtTzokp%eMqW8IlZhMyG8>ZY=os3Bq_BY79Q!D6S zGbJ0w^D**-B(hV7j%^FCB$M(|W88kwJwpXJ=B*1KRKGyI^P;@DF%TR&M}l1SOYL|= z-Gv#C#!9y(FjnWNy8#}&eKcHGw&$%Pqrx5~@pExRwMi}-$XzW`sG$hfM7~}98hhDO z<%+~vy9XbYw{*&-Y(@yEm~_XmJFoIj&QF#6FRzR}W-Pj(%+c?nQ1LvHB*8t` znORU22J?JRH!wy^9$Y^r8#Fh<+mzYYicM<=gi{YOn-5WlU=7_oPimm#19d%Mhw+nL z6YhrX{sz@?OyXLx0aKcS)_Bdnf;bryY>+&i@_ z5AUv2L!!H;qWjj&E?Lri8a*G3C}cTRy4-F&^gWka zn@(}u6a&1?{R~1T(bd0@`{WeY1wh=3B~m37ijhrgp;HEKpB?a+RY(Yv;q30jomdK7m4TETeHCFSNA)*efl%y~)b zS6dRE?CBcsU0`snk8e3ToJet$Uu+Jg{z9YaoKPK%pmeexo0xgnYv1jp`ik4eHmBPl zkA+J4LaA(l(Vc~Pnf*V9_fy>8bbBrL#ckyv zQ`%a0ZrkJi44^~fdA(HsUTr2E2A|4IabaZf>7?PbZ|fYUH@`7D%$McUby*@fF*$VU zxg==S_-aNn6XU#d5+cNABx`ZW6-%oV(s4v-q@N{iFwtA_izj7w{Lkp7Z{>)=u{9-i)xza)*fj%d&;-G>Brsl?i#RDTI@;BN_r-TH16P{Pz zDyC*Ya(<$te|knh=+sy1zaVOwOC&NWoB=?N4aDz_G>`H|?y>qB1a8qQkT$3VqV8fq z43T{_-HY!3kb6z)#zDe*XkvVAHmlrjZ5FXL3|;V)TG>H#A{jdyTp}I}sT6@ZC!)1R zd#{Ek?rC~OT31$s&Q7YNC8B@MDPLDlMG#vP5T7SVCS1uU3w;N*fUYr#rzD+;Z1i?FZzWkqIexa}30cH=>Ldu|=5dIqxTG)2 zH93QAboEGgKGEpi&AT|N|3?9=c&h_eUiW^ut{fk&=_$Z;b>42U-5M}a?|lVb@i%W? zsUIaVGlUVT5IL*Py}oj7FZTPFfBM(>Z|6R3)W8h0bvPZDnJ{hT-E*FG<+DE;t!3Y8 z(tDzfgRjv!D{Uefy=TnJJ{CHmw1Ag=h8b%2SN;v$ulSwa=FW1Kz!-q(2DR-0z)e_) z72*lFG(IA$dbKrti)nSE8X`H5fQTFl?v`y(chKS>FhU||u^OVV?hL8^3FXbWpX|)~ z$-Sws9+s6Uz_?0%-ZybsTpMN2mdE(}kwr$}DxT9dh~~ylD$BhS0rB#PWlF3ZfoW$> zFEl9k>DfvDwRijerWDo1STR+sw~PcXFnzJ^;1%_h9!#@>HVbxbv&JZJr!e|_eZpd; zQ!Xp;>d$WU#Vqqkw$Pm(^GhQ`CScSu8k?eSH^R|U3K03FsoQLehIlps@v$4!TCOfx zPfb&$qXi-xYMiOU%C6bOey^Cf(+3dDnZFO4soG}}0<8eLZQ^b@Az*!R_FCS9GkmU; zs<{WbFCKXKEmj`oCa}$>*r+8eL0!)z$g($e{{%qejxCLsp=nOm7vx$XWjabt)|dr# zXw+!k5ECtwh4<#mHGsB#9htDmQVXt6N}7WrE4 zY(=+${E+x)HzX*pORc=Vlgj!JV5768LS0124ze5w+O z&qev4Y>vH3U5h{ho%CpM#EPZoE%5q_sL5aTQXs7nY&HHNnU#kbg4hFSIYe65HVF1P@=2V*^kD??rGF%skf2kh_kSJ8{>Y*bMi0HKOQ5JE0)PWMM>0U+nSdvNayJ}PhNlQRo`?_9R0MWIZ_~b zQ<%`x`U_x`lM1?YoYvHYka|>t(q3Fd-P$oGJd~)q>L1BX{xm2nF~!Lv&{kb_<$bx< z8sR2$mUIkTymrfKsvCEjX6~(g{m9JuXX5?(*ACvi$9^#X@N7EOOW zSq0F&`%z{lyQd4%*f*{vVKB*>2*Jj6+<8UiJ&*~Vxc1u^dRkU%CNwv$Bf!y z#(f8C!NMEVxs=#fsqiW1YQKzvsljE2MwrrPHnk^u~`WXCTrmPC;C6W85o2_9ZT%SEZ`_zK^y zf1@)117HW!gC_`5==+zy_@BsS26K&WXLQV6)pAvP{vzuIuwtGDbnq2@*t%A|cyb_A zTxZX!G1dM}P_q4vDfUpUhNY2w_21-gs8bsnSP2c{vzB-h_;TuO6&c@lp;~5%J@*kH&%85EUK~0rT;$E$u(6(jt8=nP3lf>Hbo;f^Z=4ug&0R)kVS~df zcq(eTmwxU>QA<+Zku}#g_w%meIwiz#*W>S40ImquF};-?Zedv?o4LNgC3iS0JTcc) zv=Diig5K#y&VA2D=LjVM)Q*p@c?Cl$e!*yVsRvdgys-tjzlK?8nwjoij4at=#*=?O z3OcbT!#{ouTtfpj2-Y@aRl}XF^@Tb$v9+9eq05jfg4inzftn8s70l$LJA|t$zg=Bu zwsVu$Hn(64BZIjX9@iqck9VosI>paf#MbD%^T)N9e4`dS{ssWQUp2v^@N8iXB18p! z?!rswrfNSQUZP9XxGvAp``WdG6}QZM)!Iem{0RAk+*&E!W@k=k7INcuFcib;t0SXR z6r_HCR=uo&;}I6*wry<(6I`Ab=j%2(C!zlibJ`HF$$s5dUi!NEl`BDIrr`mLdJ2iV z6L>a8Lb4JF^K*iKF~Ev58E!!5;pf6jRFF%0F>KXrdhdi+QC^rX5w5A5td~SnR^-eQ zh@(qjt)DkoX?~QX3G*E0A2&evgxZ^*&{7411-c%%V>}*V-Sa2tHShqdA3B-A3R^R2 z|Hy!1@_h@}cB`6}y#^2?nCgb1?GH<8IcHNv5q&zvi#y_^t23sTGat3b>WpJ0+*|c?^md$2r5%A6X6Z;qru;Kg%kBAQ%{iSb*i}?tQ`xe^pltT z)BF6@cVP_6Cy-93Ui{lMKWAQ!h*du_x)>#R@JQ~*;@vTG#eN{^hxTN#(f)P_4*G?l zANk`e-7E$=iyF-FaHk=yPhdbk{k8;u>xllO=u;<9u?-CepW=S-i&tj%lp=m}yyRnN z({mQ=s6%p4eQRO5ZDJApxJc>29lCtEdp-TOA|#KjCQh6CA{|n|9Dub%X&;SqrSWx*X?kGl(i-$8{q+T~+vwR33#ya-Nw# zP7%|C3nN5FHAWh^hW*8czT3AF!P794d#o&>R>QZfwXDr;Vinz!qe7+i@&n{w z%Uur9vSUttTRKsXx=QCFLUT-Og0{a(Qt@L}dsG~meRiGNf2ds8jS;2usD^{yx3nJf z1y>)f-o~LohBY0;=HS`3*uCvgv6d44 z0JmF{T66LY-xWl1pXKnK35*_6vEywWCAG&6KplQmZmEc3Ota*lKs84X#VzN445C5~ONH4y$-+!VsChf8!x!aj!vRc_cY1?oJ^#ic9VPG0HIdASu z9U)acBZB+in ziblmYE5cG=SvB?%L3gWLUL&l21SmlJ*y&fq9#h?0Qu%=a>Omt!!aSs}DY`HGEQwq*3{pl$C4V!%kK3FnIN$c|}7# znJHtHUd0Bab31}vmFSJ9r;l{!1ZH%I_Wi34FKjJ$TIim%shd2ext>%f2-ZM+!cRx^ zzKrs=voE@YW|FCS;PLyxWik{4xI6uM5oUvCb%q|72m22`RBX@mFv+W+{SpH3(jkM| zrGP({L|l@nXR9H1p&9g**6py?Q88-{0Z;h|Pk|%|dV>Zn0H+c-k&8^EMEbSe?=jd% zJhA^{@oH87c$jwm_mg*A?cXMUch>*C;iaz%p>?`9qV<;lbUSywr@2RFM@9 zugD3%xNjM{sFApFZO5XC8{0r+$m4F#5Ups*;m3ELm#S&o#Cn@O#H$dv$dMA%yVxAc4ZVR}hh05^BH31#3y5_PRu7&FOI1W#|U z4-3FHlVmWI}vvMpmto7#zF6mCUjkIlG=$!puEdY{@aTxMZmA?b^ zbfcoG6UDEAZFIJ!>NRBwtA3_?di@e+$VFqoUl7EnriglypZk$WF}$=_jA?|CVa1VP zOyW(cKP?0%YB{@PVWBb2=r+|y{^HwX*ei09g(>eyZ$8{4*J|5cB|(Hb(Z?H5&x#kp z*ZAGYupbV0IgG_lF>I0CzDYbhL3rOYJpfhok6HYyex%~bR``#(!4km!1R&x%p~vs^ zv>s*64_NOWl-9Z_e2ph|fmbHWQf?h!dj;~|^`8>1{K`r-cn!ZqgS?9+E#0o{dpr1n zI(D+i)!y`DzyAEns*Ypk^PzmIQI}=@u>#JU$!bwt)EhWXV zL>)(;SGNIB7@jHvhN!}#>`*<^;gV+Irhngz0^xFtrS-3QzN+8b8gvydB*E9;FMkKn zMZcejtLAxc+jw+^%oHn}g^g7>_+}z+D>oX#L?a)bVom>*`VTOM*YS1u1Y-|(mSB?g zVEJPIVB3R}?{(^;_?stmXgVd-%THpH&ubb2|3Ylkf2TTXf`Lwfa(VVo9#p5PNW%R1#LLxCFW|Zq zQc;4$Ihp#TekZ)s?ae(un#ZSh8H%l19`C-OssY7R3|#o>a)!*}ww2ynqmY)41`TQ- zzb5Y|naU5}KZ*YRD|G79r>S97_GcMp`dcrHYLaY*g)UgB+$#3}PNrW&?$=}%hpI`C zzJcl88QWeF1xAyewe=q3<29(0Z#chM^Si?CYukGpG?;g3*=T=bER$P3r_vceGHb^9 z-F+-2t5702iMHt5(T!>OP6B>#AacHjEhpA-UOBOhi{HvD#jM%%T4 z|d0NbHD}Y9z(5hDQL*PW1H{R(|*S^(&W4*-&OP zU4e!|$Ny}DUQ%=;n@IET9HJAIo;Et!`Fw5S&c#2mtd3V=)OX9%3EI4Xp+aOgLasFn zXo$JzNx&BAJ&)tMWO_r)`KvaJ#sy}e};Ai9-mY(ppSIJ5`5tDe`{#?EMSR5HiW z%MI;!kTsr=*ztN#ub%dp^GyYXC$e3cCK%~qFj2$z#a$Gz(Q%STlQ3NUc|2#_;(YMb zl-YVh+rO{HQUO5>qa!a2oU%`=aXt8;C$`}M%L`UsH1Un$!yeH)Go(7P7pMc(+wqW^F71P9tE8uCqTj_gK=2Io-fHyOF=AUW^QP(3TEoQK4L9(uhR*N-cFH*i~NG#r}m_>QK@c=|(FFGZIkU0$K!E;!ps~ z_MqX9ZKIq|Fxa~*$Lv0^Bx($OEz7+X;`voV;7t$#iY-l`l9}WvOv7yQ^gfI}M+yB{ zS*JT)hJSuT0O;C`Q;>|+Kwcp-HB{wwxgGWRM-^AMFy>0`6zni^E0AcKbn$-^qmAzb zCS~0K0?J1rB8s%~a#Qhh7XaFq!b#NbdL&>qnp!bt0}$*s#y_PswMlBp)rV(tiw)#h z%;Xba5Fm7L8cA1Ha$=U7PDhF`@7*apK6!XT?!^E>gl{u0h$j)EFrSTB1b|G+ND^|@ zv$o8WoLAFEKt1ybVrQ<#Ym%a@%g)c)3vcL8?Fhp__=n<6HysQC0e4Bb1lV!%AQ4$-j(@d@J&PdJpVx6K z;2f#gDBe8S+K`6jf&|vuYN``i-4b!Ku=aifxC8N8^$eVivOY<*vV2a@=h|$Ro3WTV zz}hG`ck@bFeAdY|ERB-9tBC8AiH>A^T=u0n}$pedwtl>@vv*k|>x4wnb#_Le! z5aJ6`Lfb?B?%61pTH)hIv+(&=8k-Yo;I@|bq|1`H?w^36tzK0OX)^*$^9Vfkrlat| z7fD3x%6N_z$2DyOB?gVgcDt~idfs|gc!l2FTERmdeRnS>I{SpBF5_y`uikU72VYKv z^$#)BvR2Ci9lVRXJr?g7L}jjTzVhpnu<@|V9$tH4WHq?>;NZPC&Fj?0Z+8cbGD4rx zIZ{RgEu6MTearmdSY?&C6+@KmBfeiUR(=MS zI?P@=0?-07AFEy&6L7dqh8c$IHCZx8UI|R&oUMjUR&}JRU#+Bl$;!=mcbIj)&K}+x zJ{}$aP`yzPi5kF;29Xa5wppKeTt6$0Fwh8r;R)!S@F}gO=U)E1>n_#zN45RB3dE_h zGn&aj%c!oRhgo^A?-ozn9CVdDqu-LrjF@$k>MnbkwWZJ+G3VpgUGaf_TjhDgi;(v2 zs&CO2pPe!O;RoMuTfWxEl{sIJl~TCXodMF3p@OQYkT47kyB#hlpo(dMp(2LBHBNzn zDi2yt-ldlWLRa>bhy9IkI#~ewklzVU z<}gHWSq*6AKg~L}r#tFmK44Cd({+)9Z#biBh)Q^TEoXdBMC*{^;u!Xnx$BG0&xF^7 zevl?;ETL@q_j@N)1jAGOzU7(g_6G?)WiAHq%zeDV6BVjq55E?lX8R3_}R5Mn| z_hIx3pnb+k?Ay;)L4*8cIw$|=$d1$amo8+OH}oUN1OdblJ^TfH&cAM6K+xX5Kv$xF zd6$o*frPGoZ(TiKjraX#>2Q4^V@rjx_>lTR$;{CZ^fyT{hS+mKoVw-lMBV1_hx&>d z=$#&c5%w=$pZlpL&Qsw-C!-*}jRUB4nlOGV_Z$pI0Y8e86hl9pzHj9hOuK*9vV8a4 zDklEZVO&hb^$+rLt1?G1(7uO1+hZm~!&j6;I(0*w0Joh;zA7D*sQqmMcOJ0xKB$#o z&}w>(OD0gW1X$P@O_d6o4`5pgiE^q2esJ*?;q@30~^opR-=bAP7go;T(Gp342ZlS_dSf#O7vK9Sms z2u&x_G!yBji440$CYn5icpi&>9-CJlM|vJ-a~}6}9&fq@5cuEB{t7?}KpfZ!_z$z6 z@_%FYr@2f0H?zM|MQ1WI@4uM+pAFch{)^df$N;^)@*ifu$z3Sz-NmEs|1kS68J}4T z&XmSG6<6N4VD?+qX*tt6pbtmy$-Zm9VD>A0Zi$Q2Vf}-ecU!$+_Tz*Ow?AZ78?w+Z z9y&L#UoiWb95kxQ61~hve^`VsnEmBX{_zsnRd-0;EYp9Yz7KSJCYg41pP z9hD+?@QZgxX&gwL6y^EdD#hFJUmvxmww631-EX?`aqv3)_pjeBEVJc%v9l5n1UT=n z`nl0J@x;P@Z02IrcrgGkHMgE>0}#7MO$?2@jrmO~ffRGY=P(<`K&ZE8?G0(74hi9D z)XU5VveFw%6J0_wE8t*@My4jsr!|J3*h(w2+QgkdnqAVq;I0?mAAz^{|U^yT4~XAq?~)9w0J=Lq_u4G2cU` z+E#ZvcpXKL(rnU{x5O!GMCV6p;TZBZ;48ZGYR|)s`f{fhgbFLqQu{>i@qNtXxOZcR zu2hkrM&F~wFYT?~20H#aK?V~pZK4<^oTT`C)5HEAa^GV=)2L^PjrP0hOh519 z+La8~w{R26oaM*QA=2<8fm2|7vgJERNvx1MtCiZK`r_oHA%lq68?Q(itYzYN8%FP3 z3r>Py-xiw8L$@E#wZT*irsHqmi-a+L^pWSB+7Jv>+J^*Bfyb-->x9NnB}5vbVOw^u zawO@+ovmnCQ(>5aLrX0Xx84Q@B}SxS)MDotd;9E!wc&}gv=C7u*>XfVf$L9A0H179 zEv3UXEsnJ_ZRYVR#I;sz!m=SCk`n~Kf`+o81CwneE2h1}t`+OmgspBQ(Y4?dH?#2> zf~xau*?KZcRC9Esj#YID9hR%UBt5-!`Uco>RYxDy|8MAJy z8=n4;86A-7e!if4V8SSpgX5NlLIMdW?kY2?U)jYXV{;teV&^L2)le{oz=`mRO)=j| z;3@?ts~O~18vG*8Si1yfm$N!5v#;h+dsT-;+21p>6DPhxqQ@>V>#NvY zgMru`y^+gfUo{6v&&GKn33g-s*5h$tyk)@dm&8*G)M&%Vit1TTgZ^qP`b)XdHbrjCLQxDbzxr-wN9Q79k`OitZHYu zqttQOxn&3A34hQTlw;i!7C6>n)U!eu$F=00Rkqb6Ri$@AsO}ddU8+N`d04+VVsbbk z;Po6D?lIdVT;9BhLnvn4`WHZO4A5>;aITR4HiK$RYrecun%=kLkfOipE17+{%F!oA62 zs+H(HZpq8fIJDmQo#*jKlP88Pt>mo&;YQ#fioLb$`};v7ryp2K2(JJ?5@I@L}?KU>8VXdEJ?uMDCORdfA@vMzH$WPYA2}rsX<`k zi0SscL{2HlHLO?Z7Prw(XS4gUUNvCj`pLz6M(VC0u1JQ|`uo?sVP>UgSTaveT6@D7 ze_ODD$IsU=ad-dYJ#>_NE>HIweirrMYQTQo0+&Uv=6$(1-#k~l-)n7*mei7e4%`)g z>qR$iJ=6NglxQCX2oB|Z=27xe{jwN%|8Y;vFBH}7=g#j&D7aA+XluJr;Y=FgPCHJi ziRa|u*+}^w+)R-@%7bG-sDJt`x31?yoqm5*{SF;Yw)~vaDg^Xy_P33+2ko(c2Z6*? zlb{{17c4PehV+q||46mPPL$ z!tDnQ7z2{doh?f&Ry`NIJ3{k=-wk}-s$D_k6Yf|4;1}$Ow4C34O>BFzCj6`q<9K~g z!X(RDEO!dZNP=}RNc3Cp>O8@ARig>Qq5T9oYwslL)aK`~0IKPD;^m`)6Puhad7XKS0*oIy$jIM^*J&T~gPUf6^{9d7-kVq0ub-=DS_+xZU zScvWjdmn%FkL9mdwmhTqXn0V-jT&IQ9Plue`D_xwKYzzJH3YWg)R}*qJ5U^-$jTuD zj}&3w$Krs~rKMA&(#4i*c{Bzk=9Ld5( zR@;|Nn1e>50pZF`>SvAd%S)lyCYk0t@F%E*U^kc+%z5tzQ~jN!yjoz)d;*PZ0vaCq zQ#WWwJDIj16b=khXo|?e~$N|OSS;v!86 z6q&>y)`>AYa<(460;HSrrBSy1q3o3IkmNJbjXQ8RPhY#qJ(r)#02M^WwQ%3Em5Ws$ShjMK@KhLxl-hSDYHpg6qnq^e zKCu2Q(+?MaQzdOEE$bFb)@*6iG9=+elZ-hrbuc_Y9+31#?-CZ17zxXKm!`a&7B#4n zlTw$pyc909%rKdjlXsl`d?4rWEDKG_@wLvyfwFH6gyNcVX|3U(OS7T6*^(Pf^QcgO zJ{y?`0xvLKOxf-`%q;o9ICvtREqj(SU`Q;(9L7vTVskyr*(%PvesRBZ2)yqq%Pt57 z1uzOlAjEM2vR?U5&GW@6vJmeYHt+ak=mrONBVK8jMbQf(I3LkQ;9!uw_Cm3cYXqH) z;QJT~=LrI*Z5KYx1F{Q?f=MRyH5?wYz#j=kKR3{efzfn8Epz?iyBkICFkJlNA|?%> zszNp&aqi2v@;p0>!SRyFW?+bI;T>Bxc)lPpQOcc&bCQU5#|Hqp1TU>J}<;I%ypRMYkZP*WWPM!1!lYIaQCXqE+E6Dj5`0 zq$4xuw0TuF1;KlF6wYnV;b2xiVGAdU-@PWQzpe+bVO4d-|< zPa0(3m~=KZ0>W7>ns5Qt=Lxh0eN5J&TjRw7YY^oq&JJ2y+ZviK+Nx$ju5tm5-YWh` z{-#>PHr3j|1%^ljXf?gIYlCCtzGTlrq0|}=wuYral}j2>tw_r)O+ph^%_%E&bF$Ih z`t|G1m#(MRKi#N)F=lgvmV0cp!fXxM6ffEKldmqY$Wnr1%*CDyFI}8hbCdQ0n5+dR zmWkRm>TRGxnFZbml=x)aqwc(`pmx72uq>R5gRS@eI#7#x?|%G-N&+p9JE}H$O~s+S zNtX%%|372VC1BV8I~JvaCmjA;Wo8>V%^c6E_rFwT)XZl;w?8D6{!f(|%O;Xn5iGT^ z@IPZwCZC>6z;t~5e^h3_=0A|Ck^jm#Z3W4Ez#U5bPLQ`=M+=ya`;{Kzas*!c2{-bx_+4%}1S3!9aH23%pR$QLR6E3#=$z6@Iv-xAL^3Jj# zg}}ZI+x?-wK0vYbULJ~a-2vZ&Q2yG8Mg2(Vd(!G;i2vf&Bc$y5Ea!!xR| z;lHbAOwnqk0^Ej=EK~%7o>zI+={3_7u9{LjLr6gR-a@K0xvi9S^@8;#H$BD8Gm{JP zVu^j2u9Vj;-9v1dnb+lrjd67+W3dlGbdFvknpCwXXl%vT$^N_PXk&(MSQ17vPd6np!rg?P<(;4jgd z(!1wSJHx3Z!`jQ(qg+Is0VR@L=(u^*Akc7E6&n@WU{TEK+p?J2fM>trrZ>3}2Y41h&Xv)VDd^Z>GdhKr6$q6EAlO zo)+AG`y<#-TXxk!b==#l^amf9@YL|%fJ?3-b~m4c8-Bx|pZ?9xTYW(k{Q})VuYyk} z!immHGdz6R(E7F4x^?)wvvZL#{|tOVx-7B>+{?90qBU~$u{qDRT>`nwlb#Ic}SwAQhDKwSUN}9bLldDjc8{n9OaAtEY;a9w_U| z{@ngqvRAU}g9;l?&c>@TqzGf2@B(L=#LUei8sgKrM8|~w`p9t9z1@6jI#L+VV8Wow zvcS60^;mN>{o4GN_8HzIYJy&m@p#0FxcD6ANi}&?95uay$MKkAt2gCluo?${;b^oT)HPu@OEl zSlnPxQ5$6l(^&!&!}Y*n=%H7=4|d4f4$S)X0ovmdzYh6F$;C%t_5wkiiG(q0T1KNV zoF~C8>FrwqHtKxsnCTa3lqUYSi}`@5zo4st;AvQt=eUxiH`O}=@2(5F8>?+VZytz* z_=v$DJOFdN>vrMl7tQgQshvHFgmP#IQ`Drz9zf%cK7L~EovZ?KY?Z}CksOZ3ZvTo6s(eqZ)4-Y5= z8I}opy}w@#DJmTJEbi{cHWcldb{b=vwC(2fhxT-)(q{p8FKLD@A)l}d2Sf=S!P|e4 zC@-D-z9oKnOW>hr>#91*!Nmw^s_@9^tgP4x2=3#KHprIg4n!1y7XUgOx$lgNXFqOlNECg23H<*x#pKS^d z62ObA|J=pFxoV-FHlNfqs^^k`al^O*aLkZ*pVbhK!L#I7l>=K|1?0iq)ZlDNX`Zu9 zRzVl@W|M$f9uE3A{(9O;{aY5u84CT#=FM%8Q}ztdV);H|h)^uG3qeY(S@lsw+~O~e z+C6z|RbVfCBvihbue;=1WOSW29PjDaB@V_Pd}T+Yglp||I*QD@v_OfxU*7&(P)qJP z9)upbd>COhdKgUxaK28T{V~0|h^}wRq4vju*?Vvg6d&98ra7F37W~nvk2sODs%gs? zEbi*|E0w1~?cx%U~0P+&tVugENP4>*djr@X1fo-17 zpU&!uZh`S19_N?f_ldJl@{GBNo-*QVwm*Y}GDqO4Dt68G!d{q>?+L5f3~yfb{sWEj z9@VML6LOqotR^OWr~W3fi!eLwKBbD6(?uTUS{X+$F)6*yM+AK|@g-0aL-!f8vOXMVWr|$z9)v~ZCw&Z$LPK#{p_Td?)hsYtP#UuLBAtM(|Ea zEAj(B)H7rlto_Vg@GajQ=(PQ0^EW{P#L-^OLtxz17F+4>6%{qUB5^%g-85Fy&{@;O z7{RccAw=Gx(H>ygLPgA*wg+x3as{ zJ5j0ZwEL==V`6{wI)y%;mF@Q$@B4w7oUvQd$l-X$_i6JWL8`SB(r3PD`q`fkf{GCI z!EpO&qYzS>y3jRArOUM*HH`Uig`pLJ@JFAo!f%3e>)kn#>k`E>kThHaP_5q5$$nkM);KdJZ4ti+nwXS_5L?d_`qig(vO`CHw9x=fSJqd<{qC5>G3z6l*dVJi!p5XK$-4l_K|rfydQq?VMcGm&+4hE=BXH`nRTi`pRQ4Z zz&k_Ml55b+4^exlZRPMhc^M)3&2;d}AATjF;AS@w+*W%UW%1_)Z`ztS`p3naCeB=6 zK)SBjnSRZ(JkGpc>FUqrErqi&QM|tSSl(x9w$Y8S%S*vld0`it8557lEZ#hw zbP>l)?yPLgY~sI`5$e`HgB(=b%LM%`M35{{u|u@<7OOeHhkpR^gy6qi9EIvnK&ikv z24WF;oD-U1dq81X-B@0wMEcG<%nNk$M8`0JB$fra-7w$B93hw{7Ml5+W=CMDJl9%f zz+j1=$pDM!0J~lq{M}*jFGwPOKFYrIl2f?3b9l00TJpx7l;qNECVkRU&?)PQgi z_n*ny0O~MU(4c5ygpJtv54ied(sdX$P9?1Y2i~JJ!bg83)GjC8D@@7q6y^?xmjS7F zMWA7@kW|Igk`+mTjwH)vIdzU0MVXYkCOIym-!8-+QsRnQ4v@#EnqG|L;o=Zz1_5_U>RL)@Xd=9A zlI0*|eYOU5*u;Jojrr6h>)YhNl@^CbrG51jTWQJ}w*nD7Q%+YT;G-4ddOoohntQ`DFCsB-6PnvQnWxV}Je!O^5z9BA zVr<32u>q+U9h0^xk=L1RJS`u;0ivcH<@&9p|C%DI0Ws+w1rZB0f%Qbpoy=z|$>^GB zjcInTRKjd20VG_&b_5+Y%QKp0zx*8-qr$@ohS=;Pu!HEhqM}4>5tHnl@cftp76h(? zEyt~R|A-X~;9dR6q;m!r#j+-gmJ9^~+=*JF@UdAK~85=F^;p95dP?_q68zq%KJgpq9qZE*DDDNapueNd=SgIkn0 z!*AwE>=ub-s8)FeGKW$YWaChAuud@+8HX4-UibMDav6tWKqa(BMj^07u|pvH_->*A z$Gj|Lv2N{;5xt}3-yY7J>9!^37%r}n5WgISwUR(Exe zOVJ#pxFMy;S^pFZs8NN8Wz^3N-&hE=HD2R&wkU5@ZOGjakT$KS-l(wo#iVB%YHW&RyM{IH z`FXyul9n1^OFI`buA{kg4Ows3s`9@FtICVMN#g$-tPKCRzN!9f`(->>@P9d?DKJ$H?n0ZGD3QX1x^2PL|e`3!5bDY9MO;>bb!XgM5Eq|zKOm5 zS-cty_jmdGht;kNM|5^6pcz9Y=A}{bA4hZGfr}6Ki6ne!EGGLU2(&I>&BwNTRlmfiuJ;9Yw7HtFXQUj#A=LgF!VSW9vyA- zd;K-qsWEVEJ1$`4%nqzF*v?jV40ujl7)zB2JDG&Cmj^DV3o^(OIbf=~6JD~Ahy{Kw zp8rAETZT0O|8LujjjjbS8b)_FC>!0l(U$tKA@GIBLsVEQ zF-FLL`5%tOMFNHPZ3%oU0_GxXKW}ceiBOuM!HzA>k(YL^?U#a>z@END4=wTRG|%g6 z%F0aV4LVC1}D6v%z3+kMYH_Mf|T0r6V7MpZNsJ%Zl9 zrQa6N;Zz(~cr@`dr?B)c--o_OOjV_;0C;*@?Uoee#teyBlH-QxBGpL-D{E|SzrMaV zoy1aP0n48~aqPjjzHMp`ReelRS}Cev_+x>F!ld!v2?;vQrF9Tz(6e8>V>x?W@kxi! zn{}J5iw;)*deo1l89o-|5=TWPY-Cy4onL+!85N(9e6rZ;IQ3Xhltdw>FA^ z6rCB~E`f60e3)aaxe7JLZ5<2OX^d9^AUk@SW9OUJHCTZmESeFZ)szL|;D*4hC)2Uw zd+e+`g2e*anIz)+#d^;vG{ILRXf^p%#EeU)wZdD=xzMRvXHTIfD<78_*c3^t@H0qm z5YN`e_)`#2+nG#&-geI<>W%hGco;CAucHR}QF+*8a`=uc-}33rxreQBU)0(llb5ZZ zp`nKd+;>N}k@Nu8XXn1#S)_tbTwRj`_!{^p8>Q$2i^XJYiKBD9fhK~| zQhWHCSg26ksFzt9bw((^=Dnj?+eNhvWS$3vuU z{c{3etZqN3N$z#*zs8q?hSDWrFh8|b7O{N1k_kFSk%T5`cV{ym0_SgiKz zG;OVHOPe9sytw5N)2|#x;gvTGrCd)7y2ALJ<5`53#`jRkabUO&uiNLHG?S7A{|aq` z?6w!az5EK{0;u9I+GGx3@rQEy_r3uiK=Dv-a(Yp5$~^1q;vXCd72?gWI_vy45OxWq zyZOA3f}GSMuWmN+7OU1b;n2mBs5~zW-H;Y%lo>){seQ}P&MHW|@O6g=Icoab&Yy!7 z+bbRZj5g@rAZO!5ybctBTnC+ z0nY0)tXI%i(XerpjUOy)<0JtOEV$;yDUYUad*rh$gD1&yBjPa~`EL#^`g23ceW21> z>5iWhH-4F_Jn}(7Me;YO_g;$Ud?zv9$GKm+6FF?Rw=|4>WW8^`%iV98v*%^=KtHv3 z?U-;(GTiv~x5D;|GpiqEf5m3XLPn=uFx|)xaSd8~QEzVSNXHKSwUA5Mh5*6jP?jg6 zI*JNu16#NTcWt?YE52}^izM<<6-|Gze;wuNO4Zi5{q*o3KJFw<%5(`wvQH}b^eYRz z5WmM;#XpOG)-kOaoTT#RDRZ5f^#|Q0Uq!Efm2#Ye^-^yH(6!s!r2C{3AjZ!<;f>@- z#%7L$A2=@y$5+eE%RRo{@?v8<{c#GfHTF44_n25q)^s1$x^4@+&2(AhP@(A0_%~a1 z*VT1cOTmQo*g{^6ji0T$ht-hEhhsu~OoWIX(ipu_a<40FlVfju^mBM%(+{S0HdCrs zx@H<3%Eu4HL^LNqGd&i6@YChzlD?9RpiW!r#!FP1vR=Arn6P%_y{V;hy}8UHwjfVh zuZ6*{0O;>MB!bi5QcqQFhH&WEhQ{wyA0;n595za z`M$-V!3=pP6s_Ioe3M1SiI4!2N!3}2)$5bf(n})kNMXgN+`3wZebzIVH zSwz1?s2Q)Mj*zFjVuWDcx65@?pX(Va;?oI7?xuF&+jgnJ!WnMD(fXE2pW&nwlw?kb z56u zF}a!4=e=1|7@_LPY;Qcw=RDh8CV+w^p8G3wW+rSYipk0h{5mR=+XYJpN%^GDOj-?y z|C)JL632VUL_ooeTypn>lZww7)(?bzCUOzBupSGb0wW|mG*1)4E|rqYiQ=t5@m511 zf^PXxH^y{?0hOCQ)gcVci(5mm-bFF7_<~LO4Q@=}`hs;o1`B}93k0#O3hmUb9Zs-d zHKU|#i76I!BAOqIVgVz_PNNDv5IRjyjDKlK)l?wJRJnqa@XS%kTnj zGzjaHPXo@PlTjqz^W?W>z>4<8!3Z)qw1A?6UNIF4#Flu7z}>aL=cz`f2H?6vBh>?& zh>?POD$GBUp)MJW_HJ?1vr0vl;F!JJ@q2KpAZ}6uo(6(b)CLm(Wmzh4ZX}cH0fm2u zzG^iQk--*5-O)5gZS+X0=K5fQNhARHS%K2XQ0Z5iy)vWxKm6OYW&z(ncuKz*KA*mRj z!Ax~2X)~LXD>-!tiBkuTDw6||s=(h_K4H*DuV~zXf?Q)U(vZC<#V~TK?uuM#CNHEFbUTqFqseq8LDatIU$h^;5pFp@}6;uC-vfhrG@xSG{N|Ll|d9LgKHzm@^fc+QDbf0_IO%?u+ zJZG_y1$TFNRcX-m&?Ij_mVPwfWpVn!HO$o8TT~apDbhu6zv^xpwKk$1_So!hUTi_u zGm3wMwp^z~w{n|M2Rf_mKJ(4Rc%D7vBbnt_RcfU=IroV*P=1~R;QGs?mlgu=TN=~r zsCaFLVb}6pp$gqM6PE}#f@ZPvKbrr@b6Ii3;6+DVFaeFZ+2UL!&4jrrNz~%rkp=g83M`5?KN$-gLX;lZHe6X ztnWFYoiuJ<*!tMVo|38H9z2#0o0GXo<_ET?x{TaBA&V+xB~^*MZ;HUl=Eok;3C-}6 z>P}ja>TpUsk|xxHHty2N3T|cy4_s5kx#*YU#k&=R%W;ad;A<|J#{7n z>2npmRuVwXxLfV|tqx8OJS;Yk6j6CPq`{soI!*4e;WPOlUo%MrpI}WSuQRH)NSmvz z&owlo+7Ipn)SP!kshz}VHSNb}RQqkM^$}5;5)l{Hr`nol?kPQkm+;gVZK_W& zG7|t?0$nSY4R>#KxF7tUps5>Jn4|4i6btMsX0y@{-ZMNWwN2b;_yOvws++GRU1bmK zqh{j$6sUWe1@DDB z!G?lz#j~P`{HG{$SSz&r$6}V1)S?8{`-f}RDrdu|5R>~aw1DkW`IDmkJo!(E$O7xD zcJ3WYP#}2rJ;`}*Mq+?F%b6I467Stp+oXLrPZoW4;?>xjl*@~d*5=k0%uTG`5dgk?$AB5(2F zH*7(^=|RqA7y&v`1uio<7G{tQ;jJMc)F=H%O8FJm0y3L&uR%dRVt?%U&FuHrpI!w& z*`FPy32x1_uL~jx#Es=}P1Pc`lXTFNHFqxDSI86k3fP?9(X?7*{)j7JBt4`T0AlzM z6lFRnw{IM6OG7A}Bbg2_4$1gStzyJO-)#5yVr9`zQ!4N9 zSBME=&e@~0UN1YSBv^X{F=8byd~nOQv&i7!j|*|A+Q%g@(vShrH{QW@Q!^E~Qh-oZ z5r=S?0^QUNc&8N^2c8HBQqIv>ToFc!R&IfAa=0?l1)JSd4KnLzOZs;rqE7JOm-)%2 zujd&e55b5NC^!dE2Gn}eGKN-v-3@NE2tKL@{bW!rL&|v_q2sPn5~+RwnWG(aViIt< z3Kw=w<03`vo^__GSRX@j@T&&N_6(mV^$cVov_cmlf_wED!rVNsC? zx$5ex%4B32Bcij2v(7Lj_3hw`UW8{$n{C)ZhFaTp_tK)9w(0qu6bx+#=854wgZ|}z zO+8(7vn`|4G`LHqa4TKAx=$ZOKb%;2aNKmP(`6Q%7FxGTma`MlKRuuoQdtk%*rjCXO;-~q<%;kte*7l^lO-SA#^1Z4Y zLoDN1d0wuf{qM|FZl4wH$_MhFQiSK+Q|6F#)tNhN9+-Z{p)rj?9(w5mcT=aF^&vy= zK0`ICW>P>(iApk!Q?@(D7BUz=$^J>*a)#$cg1In3G=nN~8~B;$34foAxb&QPqUY!4 z`(n=r5utUIQ(Srsf}Db~f@|*qH{WAWjL#Mn*VdS4-&4pB2Ht-8Z7!bVV+I`^@5?%s zY@XE>ip;^E49~UP0890Iuhwc`6YP0>fC@U7vvhO^?9|*Wkn~T}e$19dA0eHx{G!#psCnmPjlta~|U(*L{_Lz1DZqLT0vkqN}N6wV!qb;*bCS9GTNZEgbk~ z-}3lggGgf4-Ck*F{YG#?F#z63G3n>X?^1&%>brh21IMU( zaG`>Pp7QLfks{JoO;B7`b_CrtqIpTne| zB1MCYI=GWEplOkDY|^20rwn2)+S~wBfnd%^UU?&PZQk1W3Bj;qrLfG?JGat(IB+D@ z$#6TA^41yHd?HW>94d@Yq8Pe&=ApnI%*b@i@III+^+OCat>xyS&AqGZU}bkopG@$|Dq} zrtj<_oCzsFyPg1AF{#J!;Pw?MA3PSti}8($>-R}NR*J21&vLbkB(P*J^O9UHWeYbZ ztM6jC+v#6j|6%RR%H55(vds}4NwGc0s!!(J?8;E549Ui1Z8ge@tY9i4<8*k)9^-Sl zc}b2lu>X3}jxZt?4aw8joe_+PD?T}w<+?M%dt#S6ZHFNf5qh?pE7P0*Sd)wlK|*v% z>Y>E_3!(hJl3(7C&v!^liNV=+aDjp;m;18f8lfG0?2q^gd=3H9d$~Jy5n?E5pY4J$ zB0&iXFJxwcvLaa*zJPTy3KdcL%qXTrX+BZ}U-1OksGUYzglaJ?xtQ)oWL zhScH}05Cx@U@!1Z4?vRRDm!w^$*T$c=upW!nj=XoC5YvASf`}PMF|>ZVh6if8B$6E zNOG?REM}D6=};bUVV=q7oJ(^A2g`Fym*{qur1mqri-0}d#6b06v+H%fIpsoDmUm3j zx;9qnVHg7fe;2Tpn{Y4$`bQId@r)v^^L|Tp#gzfv z-28zjgst5?X7`XmqO2P2S`6!=hPCU;E0Z#+a_#c#PAA21K4rh!fSH>|yUXJFu45sW z3ToFPv1aCC8GyJ;xy%|n+Xiecy!Hg3P^vAY?#H2O&Z+=@fO^FaLNXg2NbX10JtuHr zr{Jp;wWcvl1Jx2n`HbRPf<_MY&&=5cWy$%VaMWJ?eL{WzF(BRdVe_G4bZ1e(Q#P&U zN*MxxmaW0nwT>vwu94Z0+W}JLF|G-2Nch7vrpXiBVP!63=5lMkGVLj|0D)uI9Qf^` z5q${w;L4nUke2wy(B<3Y>ZRE#1^Oa}f5) zAC}be7C%D6^QZqGjP<{nc;f%XSao)v$D03NL8<@u`&EZu(?%QE8%baio-AqXI)Dlx|V>Aq$xje1J?!lCU!ko-{d?bi|81!&ec z{FB#DJl7^3pC3!q$(>#}ssEcdMtwo9_kqN7MtwO!`H_6S$5miUo()>kPYL;N`j6+~ zZcUP=?aN(z^UAlb9Lemyy<{O4nK~&-zivrfGyDGWZhPte5~=GMBgT%eA@N6)*w@>& z;|tS+N?T%9?cfH(#uERpA9}~}0`85O#5&3R%eo)CGdS*YJu7^k@R&s{f6cv_DudP1a;V5%o_I_%c`&yqv` z^&7nn>_YL%Xu9~C_NEt6{h>v=5WT)*mU2%~3DP~auRx8|*^Vz+g;`|IN+$=f!fhlz zK9_b1(XPW;*;v_o5q~ew2@yfATS-7FyDxagF-F%^B7Sj>oQUKx1Cx(O^Oc3kGP0q( zxrzrV!kV^sP$x{nhE=J&b)MzKIPgb}XP8L~%J={hK*ik{#NGoX$wD1MC3P6I{Lw$T z@fyjyGZPx@QGf>JyFHmALPuf5S9{#wnY!Hrl%f&WRv&VsMV`HnSFB830Bo5uyeMGy zK(tEKj62?VO#s(gqZ&|^4Do2~k;ERnYnn+A%dglnUj0Ju-VW8@Bx5}w!}roLVF zuuzH)x!1*%mwliC2>P&9c5mQdf}1OEbg?&pO|zq`ff+Xwy;HMu1P~Ql;0D}-1o;^1 zM5*OZAC|A>C%yK_c6e~}->k_@Iz1@Zuwsf`a$Zo5k^7!B5$5p5E-#$KCh;6o@K(|G z^45o=SK~9X=hZfIxl&fdp5V2sf$gxNBSZQ1KwrR8j-4a$r=tK6E}{l7w`c7PnA^qLlHXGFDLC6YEG2oyXBzIq38UlYekD zA1g{?)yu*BHFRcRjKKX%Yad;#d68f8{dI!}W&I|bQ_5TGpXbc-DV_}X>SmaoVL8qM zxh<@an-R}0M8b&--zBjHGW)kxE*VZwEU6d|Z1XK|(>t?MYJPkXBHV4T%|hHokqD4J zqFdQda`dzO@KiHN0Ig@wOa)*Wl+LA+^dP~lRU^F)3Iv0ADMjN9$vZXkm(1Sr=AG+3 znK{TaIY;q~NN>&&$!l&FdwBCi@#q{>4)c#!lG(Cd43cn}wJ_>2fE7Hf_?he(f_WspHKq(Mitt$TriMbx!M0XB~`HyXq&s`G0#k1zl$ zbDmb!ZH;@n~IXnYG_7P0q>WD(>Y5l?Y$Aw zoL9;c9U#IPU`r<&YFdIvG`KKQejiNISn8msTiRv(=3IkzyV3$tlTpvcLDTB!we$1J zhxGlWEzphm;fm}e3Y6BS)vdC^2mF(SkMjku>0Ii7$5@WI%yg}oVng1-_eO*1H?v5` z+>JbG9qen+Y_v%FWY6_Ma*}k8K;Fu5O+@{utkn*r?x9k27P)k-L08Xcp!h!amZTb( zmgok_RTsDNwX~4ammQpr1Kv>J~%X2-sj{JZRs9899H^7>L!gbGU?jF8~m3JfOIcufoPQS7he@~)WQmgF!0 z8UG9Q#z@AJGeY>^>>x{^@~6E0FOL)dQLt!A&w+iGdA1I0!pJJY`sP;76wcH$Nk)YS z4@ZSuJzPy^*=rmkz!DWLO07;nCGu;cBw#)$8RnPjSW5_#BH zWV4Do;gEvJF@(>dZgStIXvfkL!Ia}{e6KF|-O5Pq_b}U({V%w%*d>y|fVyj2l)i(^okG(>PeYk)&fTIxQ`|?? za?0qPa)F7Xz5Yk-91v&CqtE42jLB_WsbYqFE7QCD`+&xkHzGr1Y%zm$VW2+!jlVTo z)L#RdOCnvg%hg%Vm-(1N1E2V`Z+d?-^5-<;gDp1K;TpL^5p%O(L!qz_@TYP)4 zQY=a!$Ir7N6(%`FG@s2PTEe0Ztw11qxMiEaXj-*Ow>6gWDFF@r7-82)1eSI6+P<~; zyc=?}3^gglSr91xh>|m@`i0=>y9Mij*mTS(KGP)~2X&z-IWEhlXSPA2d$i4b zWD$DzKZaE_+{F((FCk}3u;0n#7rojYe}D1TuQ*&Po|>D=Z}kWu=TkBk*?cjdbr2>Q z(NUkIhh;qXgV)D7%@T!kibV>}8xl8utQ!3$zx@{1`XN(dy{|Iy_Y2(US=Fy#?q`nH z!^x9wI`?l8LeqvYr#T-!{9dQLY6p>AbY^KwDkvLBL8WiEpPz-aJirh&bguv+&tL4# zMXICbet}yDLrJI2X>13jfn~M)qKd?UX*rD{Y&?IcFHSjUf>B2rxjP=qz8N#46tdqS zx%68<{y>*W24LYLFGa#vhd}5pGBGie{@sCG&BVM^3X%NnoO-N7=L6=JMI36A@QfrH z1IV({lMG9RX;z{|8YP*ewLcx*+Uy0h&A`dhgwY-Ds)&Fav*B!;vG;_?bX*dE`WkAJ zAt|t!C*I(;g?Qv4;BI}Y;aT_>iU{uflzMIHZVHIn5uo=dMG9>h(vzBiNYA8*(}@5t z@R5F52!;j=v;tDJ%oDjVP{oO8lZmh@+YFjutx-^h!!Bb6@qpni59a09m|ObknkQ(c zV0o&o*vGxm@$h6!6pXtay$eY;p@?^5$<&aEeg?=)ZA|*xkV#NZXgtqU^u~7fAxwlI zS@V%Q6Or!vq5bEU36MY<*G!%EsD|@!bLH&Hqi}k2j9XvSEsD&yebQG!3AE;z%!%v= zQ8^qVsqGoyO3L)A$>=`HT=A`(cO{AKli3N4xlb1&KP!WIg)E_^&hk;Ui6OgTX1fu_rMWEqh|069 z^~S^=yJSSaG%2!xdN*tVpD045+&-D_5|zcnTKJtf8P&L(3da`ueh#Z@%opA(WNpfx zInz)wC=%x-aZ$pKHx_A775!PxHWLxc7|do`jhroo8Q2#~9)iec3&i`2ou_0-tFQB$ zVi8E5r$KbXdDhqE9F?KWyBACsLOFpH5lXJ9;n8q}F!RrqV#=YCcq&#*Mv;U$W6~z4 zp)AD23NJp#y}8Lr3?eCC0hfcy_GA+7j=;5}$|z;j>FdfY-IaPn1c5{8^*GzQDfUb6 z8yE{Iqm z0N12QHae551u3Q%T$`8`6Pr=a812*X<+X&p+4MmuZ$n~bkqeheIiDR` z%FlSkpkwBxW~FHHeG~Rg(0w3PBUj^44Rjf#v&`kJ)_$k(o>)jSol~{?)(jkW-oO2> zpozOQ@k%`(_F{MAt0eKCkZ18>{s)Z_<`w?uv26+##J{y@vhE&dEz+;_u9AH+*z=nbYS{{Mkmj_`mK<)(F<6RYN-J(d&8l`oYai zQ3QS=jCfL9AhT}YcOQ7!(a5K_{=6DRY9tO=qWRjCnt^?Mx1m~CO;Kgm@#0^{E9Cf8 z;~e>Pl@D*IX$0%6ft{-ki_tP=_YgUlAIqPv60`SE^XatEm`2ye_?#*GWuaF&F~DWA zyc%$@Qw=K9oAEVRltvhamR~Ti#+PGvG*Fdxn1EEMsAWPU6(he%BHIxb*-kbq1oFOb zpo{RWF4(I$%puy&+_ikVFwquI$^RDl>@@lz{P7EFW;Ae0Kfo}3_! z6P;gQiPU8GXLYBUHg36;x$emr%}T2XR_h#IeFaS<96M*qYxVs4v@n_3mYdKN^~ov) zZ%uY_`5tnA&fF;WJ;f(T8;-^9sVkXf+oMnNDPx34qi3;fl@%rV+xDw! zM!Y1y;wU8tI+-S2uZ~f)uT!X%p97ONq3kM@XI5>Nr^O{lt1TxHZ{_P}LM^GnA{=x_ z8l>h1_la^UM(He?QpiXR}`e*KuT^CaS8O7CEZFV9) zm5TUaIJxPKv2_2T-e-PN@@y=S?pg8{t-|E>^&;BTAh8X@(Stm`fm^~t*EbeIv<7q3 z-AF97S03G09-|Ze>G%PLp}A4OvEhReR@kKlaLhALhu5)7?=Qk0oaeDVH0Kx|WM|%7 zf$n~30;h&j*QoQ8-K+!Uq>0xlQyS!pc+p0zyYU;bEoP__u0Pogi$3fwdMj?uw{Ske zc7sX>y%54c7yJ72l{u(Xe<(ITcGQebnfrT~pFkhR?eU!Q7@L>4cYpIIqoCs+0)9F` z3O_G)18S7O(#d0a!vBJDN&QW~wm%T)Wojr3z)X*df~09>^g3a`TrCQ>J^)EyKOsJm zZ3aaUx;~mcw7F3cKtnq~s-;Y^_r})br%kfI0i7_jdBq3adqg_|@(SEgj;EzHVVvY! zXlfz;kh6RiKxM2-^86BzMzYwnhAiQk#zir>;$Rabl^F6sJ3h-@Mgb$~9{Jt2V<70@ z>yA$Wj)8?KW@f%gIcZfp-|HKP7S-lhdNNZ7BR{~x(ms(KM!~e{sp{p_v4NG#OYSz2Jw>4bZHR)X`{Y(>M1 zQ*OkrXU~kZj#Eq!Z{Ucv3O1Rk?6OueA+_bI`m4h$8)jM^pCZ&~^v4XOl=COIRkQ5E zBI`Gn{L<(tpP^?PzWd*nzzZYAap@vibr2^=#}%u+|*G33|K~O*omegTF!Y$>s3! z(72YaxUJ5T&QCC@_?C*t<$rur?13x%oJ-qf`+Dy82v2mnc;KW82GB<=S52O>Lzg`O zBR7TZN+zWjT1O<~d2GLX>TAz`7o>}NCpNY?NO2?%QRuobsgC`Qa$-|8xYwvu_@p&k zK{lJ?bk*qTrG`WPx{VWTkGz#q8UC9SDAPm>q4jG zMLm(vu1~pE@^Zrd4@&TJ&>cecr_%FU%D!p|`a4fxnf8iB-^Jv!e~5p~H_LMPx)IRt zmGnazrkcp|UNN}x+Yj`@Up@*A+)rnyHY{e=4Z^hYX@+BTPO4YueBDl=8xWHmiS9(@JCa(mF?)Qb zEIoELsnGteYR8T58N9{H<|ZC!dcJ}#ZOH#xXD*N2^2@4&BS?(t+5=~dh2DP@dUu~4 zNwE`ohoA4d2BPk7W;xCXieal((@K4GE{Le+am?rJ(CEypdxayhnV|B|dlvfq>kV}5 zL^SueHAv5Pa2_v%nEBI9+b(9pA+@XezT9s~%QM6b+uj((t9h8*38<;c+fb@*=63R% zE1ph`n;P@eI5zoH?)BX_8Q1ql<{oRG>XNG+OC?*$SvgAs_GyTRa%)8&7kEHrFI7KR zT{1+-efmXrI6+~9Lt9_o1gP!N06-i?wPq1}_s^pDBRzt&;u+9ZdgffT9!Zksap{CO zGITsp7)*1Z_H5MiaG3_MAYTYXGa*P?ANp|l#7!xoDP6<3%z+jg3l*{0x{Qc9Me1XEp$tTHJmeVA8LijGgJ9v-Q&k~)+eu0fe{w+u(yczNYz6rUzi+?9bDKSTgu`)5Gv0 zzDi&pe0sD#TP#M!=RCu4B?GOGiSfaZVlb(^B$-5?^lZC~coyuJEli<4wm1rlx04L* z!=B5g-xrpEvSjwlXVwX4R!3z9h5(X%GMn{<{c)MK9*U0}ncyzisHk|oS@S2#%;kO1 z=pu&!7I;7~=AIrn)+723uh|GC*AEasrhw591lb|DPV2K)l$|C*|DOO({xV8M|3GicR@$%Dh+{#0zOGUJbAt0VfpY{=vg# zirMd&1H}iEvwC4tmSBK=zLyLj9xc3M1z%x;{ILK(J)<~7;6e$iUOZ%EOt2f1;4wKS z>E!G*iUKnLvxP;$^>xnA9U#zNffo_NB6mn3JxgoY2R7FdP{$UMU%(RcAyzoXizx7b znOKG;d;rZe-(jM?$0$8(w@_cGhGVqa6EOhD7|pPccNAIoGYy~tRfiO}v0&|*JDt4O zZWk5H+G|0Xz#+B=NXgcMd%r&^XprjP+DE~$LRm1BmPpu!<6EB9dW_Hw~gKODka@y>v4*4tQKp=wm7 zl3jsYiiBApqY8^4o6iGSE*(>hmR4*uv9z><^vuo1%I=ro7+>$vzP_kBXoB08;db=7 z&YIv?TMVrojQ3U_l<R{A$%j&w!L%u6Q@PM#z`^u~7 zm9eowUy|W0w<-~T7<*A!(`I5kF*STRz4*NvcXRDXzFK$pT6_nMU}mklp_|NFt;&Cw zj%xmgQT~?G^<1g71DBonideXA|(3l3=h&yaq?ee*C3Oyfw^RkNQM$ONo^q&j~adlC; zz`giHs&$9cSos%7E`(?^?Qresb%Q=Ie{fvhtTTMf<^NF}`iQZaTuf{GCh7*6mJkyu~nD&_|9kFHM$z-HA5w4kP?_V6u@Q58#DI1Hi2VeBMi!~-v55qd zi<;R}r3&PSOz$pl8m=?)=OSaNyV1&Nlzt*82gnJ)N2+dejwGIzXGX}^=Fht_;El`- z_0p%l3mP{LiQyX>->N|HMj$IG8j%KqkCNc7fGBR^?pFf0+4#pCq;Pc277$*Hs9AUI z>4i&uY>i()Da;tTj9i~AE1-D6v;!SqhDUu1un*r;<< zg$Yq$*_6hzY5{5=Tnc5;XJ8b4p3@v}_LeWui`+U9S;!7Z#GCJ|fu{@enW z(xhpBzj=Bz9uRzg-n3yP_UA5>=TNUZ)pMsMkOA4x7(?-N+Rk-i+(w^PG35$Af?{m+ z&o7BX|K8n$72hQxe~nBGwph1L;ZNngrJ(P2t~+(NU4MHs+6L+?2$RGf$b(tWT)XcFzT zpI7p4i8<-2&7{0D{$XjzsUU#vkWW4+7+2B8{+iO)F& zqtZ~0H|1!~j2zYB)1IM{L0v}e&FRuNu!h9RyM9cp6fE1M|j~m?w26-Dk7tHA0_VD}Y@ye!=wSaTh zfTMSNdvG{I>Tt|hSkD!w|J4FUcby?^kpQa(^XD_Kv{*_t**SeJKtn~cc+`~X^{`Wa zdEDSb#3a0mONK;<-U1i9l3w4c49>|-%_hR`mErVm{-^>X$Mnp zDl-(}wShvug@FGY9UT(grWF32Z=9ej#AZ@aDq70QTn??f`s@zetu|pSN$Se+HeU%}o7d;%X$7$x+)tr zCNv~vuYI;wZWciwf>yH(1l!+~Up~nk>i&Vu1i!hl(fP=!v%*2us&?5lEJbtRXJ?OY%Dsqs=^x=Ge2K^mY-9%r7Nq-$owJCMiw#& z&9sHdc3SiFFJ(l@YzeJMOUtcdEN{$XIbu6CZZh!pp@jE)xu|M4W3HrBv`b zj5^|~gL=j|h(AZQ3L9S_Rrm24tIWK!7}U)3?3R6XcS%JXFI>wP7zd3pCaz@F<~yW{`FVyXZR5^$a-ai zE!aL!k2>Y2lw(%)-O$)x9tLqYyS%%+H;gWxzg6r-J!0t+gL>p{KAN#4JGw^)a@yE4 zb(lLBxP$ArvdW>cP`YAEo-e!D1PketQ4jcq248HvB=U!+DLx9=OIF{eqUyyx*j|?P zPs(;pzd+v9^|iEg)RzK^cZ56V6Euy@ZvE&h!*b#1E7lCu2!SvD&;&eu5c7g3uJx6| zR^E#xc2V}kpC(NK;TR5yxX)e1zVG`bswS*3X5!#l?pyEoK<8m3Mir z9lDY2NGE%z@X<(D*L|Y8Ca+A;=NISP)-Uyyz?Q&%f%{}^gX&hwE8bMEu6V&(rIc%u z5Sz8`Gx@+H!s*u{3NfLt6H59Uhc~|Z6leXWLZ=hS1;Ll4t@n+i5~*Wy9>ixw(SEp{ zbwk^(srJRz4)EyS!NU7rkf@`$#SJBGFX;qQS8~1Nc!{B4k8O`jZwRN096~;Zt|Jx- zqEk2sQ4Xe5ERLnac$3NiYoJM#hk!e9#`S7{P7L$98PK9IIe0sHrVGYPnIdnOq8OE; zj89SROHp4*xp|&~WJ%RjPSv(c)s0Hk$EOPzL684i*Fm`ZaoRXo^|MFgfahtu~pZ zsx`w`pdd45IW*tEL0W(uI7}u5JqZaS;z(L$U@;jO3KUcJ3Wmv*QN>M}76ZPp1WOI3 z;a4D6Jn*R#1{z(aDj%>E519garhsxLCqxjx1#6kiu;c}+g|q~&QoUV!Ue9%B~^gTwoqpyYze1%39Sl1bFTz! zUOeqWzTXG?)|C+^0u|mfY48X(WQPQl=nOW$Z>S!eO{ztO}I8B+uQA2{9v% z!$J$)nI3g>6h~&3sX(6|DrJ#k2~E(#5f_ARd_x&@o6oJy07eh55Jf468dN|C_II%r zOawsnRD~!2GbjT2?<}JBdR&0-e;cz-@uK{%)wceb2S`#XzjmIf&idD-((VP@?mKtr z%Km4yP0k}34RSu=Fzjxe#SdHwFr62=%-8;BwQa3^xw(+7(Qo~gf?qNi_?WtgcgAD6 z%V$2}(&ad9B@r}P9^KsYX#E+(y`{_E$bF0J)wWLq(VaUP@Gwrr3vc80&l74?VSkkn zs85Mvh^^J^$DG^ms!?7)>QQ|2171Q~nG)S`) z=l8U>ahiC*58qYmJDyPpeW9Wp(H@l zBc1W~k-!XEy#91b<3XI;WEF8?f+yrIc?=jofcGdj3#HhhWh=lkc+EGUri$Krh_5?-#)ys ztMO{BdB1Hsq;m!7`%vX)E-8K3JbHAvI{@{1EwdG6xLe{Bde-d2Mk7qs+h_z}Sa{S) zbV`}=(i7Zwm1;lLM8*RD=|LGo+Mn$|BmF0q(Ml$AUOvetwctt0^>qP-f;D^q7gMI_ zBF%_{9CE1Gv2#m0mY$PegF;$$qkbKWLGNcEH`M2*fZq0wFRfC}CXn`2od1Wj_kL=s z4a0Sl5JCb0lF)lX4ZR4`A@tt6Akw>hARSQ>dhfj%nt~u51S!&`SO8H#KYBy#z{%Zxy@O0k5sazS+CVR#)o82tOSTPT-P3<-&`*O>aTFZ9c z`8I#H46mBF|7SYpNl=K#oSoT^=eU0#CE$+~td()d|H98@t82d>)drrU#JdZm)Ud_zQgJ96hVrFG& zD)V3uKQ3#vgB#L@=QJ?FQd?K=m9ma55%gJeTrz|6V4a05n;bxG4*sb8)*9rT`azwW z)~p6kw-FAudgy|RrhkQp?cwE`2oM=R7uuCIhyuTD!7Jq-)|etVrK}6@swD^+D@REn zq0sTims$j>3kudN3|!hzomqTkgp;3H+07fTE-|UjXFc+?`a%cW@^n>ue0G%Ier=IZ88Z+-7-FCrMo<>f68Qq&tC7x+Y>cw-O&Y>PB}J@eEbq8GBs9U8p9`@z2MI7Q>q{52y-2)0cqec+2o>{cwA?e z_3Ie~WKeLFkb{cQZbNf1z-->ne%Mhbv?W?-u)fk8Nji14G%?~m2<0A!A8S(1{COHq zYF#D3e?=2ebq0n~u^*ROuwxj!p2K9$#8c@$q3?qJvg?!k1*5!)&+<2kbM)`~(g)B- zI&Q_^9GdRQw34emj^=B#cxTswHK=@VqPd*2q)r&xGxesJvPVE#%usE(pK-JsnUewZ zccJ5xRBbr}<n?#Gxc_CVMMsTUF=bZc6Zt43@0}zEd z)O{h1VS!fR{~~lmci4iCgm-kw7WmXAy?Zp=zIy8gIV+m?(y95;vzwyEF@b zL*5Y4Sa->voIJaByez*$CbwpWFsW}%#x)~TXVfN*ivE=Fy8)AXVYn2WCAS1V`)u)M z?(^Mk(Za9Rv)0P1A402^F`=QWy#}S*e|Wb)zWeUe_tPkg>E(03q?468M>h6dNYonm zrPDWsuRTfbPn!)-d`6izAm#=u9gHurBhfscm(-&+L8QPDIQO`1qjLKKN@)GDBnVR+eQ`l(P{RXR- zY;)mW(5s(I`w8@+etGu4S5FxNW520XdG9_y70phMBI$s{14>;V@hmYs&qX&o32|++ zN7-MU3AzMY1c8@b&+zp6wh!{VEG~Y_A}XwWg(-sQXYZ?k?gJK)JC8$vi#%1wv|-lB za{*=AB)O{=O0E_>Q#Uu^6@jCh8_gWUYa7EK9)m545$cW+S&R`ojgerEm6H2E%=t>Q z)Vc|At!gHQr&9kwOeUvnD&{sQ$ruY}l-e+pcuPDI6K%J6{mTLiT8~EzG1@XGFar6n zvuL*4i2CXTjcnGIIlf0<^-w^4XEy-X{(l_^_s zNX4KoJ0l*!vX`xaG3Sn895qkl^G1G6$Pv^-67R`eAdPM33ICm1(J{kSVb6!DgXk zwhkER9dm}_xmV<(tDcg4eW3tBmWo82vvcH8|L+l<`~NtiW5EAYz>}^ty;;b5aGaME{oo4u(DXUK6(iZ z_R-y&MtrFWCE=(m43}zcyGgc1vAiw!P&} zOr&U&@sYR|pIKWh6;sk5F7uT_7MsQn)^{&IR+(OwO7|)3S|u%4U0q)d_y`T{Eu>cC zfgf>>F3U9Y0mon5Gwr}_pI7_lPJf;DSABN0cGZn)_;V8xL?)R1gveelXY?3sMnmw4>k8fTD{-mDR|RjVb;xAD(7d-{BB z9gjiHpL=D|B0axv`SKPNsYfaDU%!<|zN|q#aLpD*FII`EGVb%bT1t+CW6h$fRVDwJ zvBV$X=cK;;i51`5T`bwEtT_1{Ro2(ATny=$@Kv=b>hHU-H<-O0B2>PP#pAL^8c^YJ z^;@@sv^7&2)UT$#TT6i?I;-v1W3w=sSM5(Q2}Mg^ONt)*6seuJp5{O>aFSDUb(Hlm ztj43@RzvVp$Eim+gJi3sd%WHfBLEVd*jQbrx%=ix&D^JN#8Q?m6Y7S(KXdR&O5Vh3 zw(hx7&(CoRqLqOxp&#u;#y;JpCL26YY66*sZ9Yq{DCKs2$$#s8D@c^B8TX(&CR37> zWbWdN-R-Sr3FPa#-PsIb|2YU;aQcDEtt(C%QK&dpyVJ7@p<|w44GkP5xw#<-BxdH4 zF0^7Ws*H?*A~#_=wD(?{7?&k1$gU5xEYu)paYMs(n57nH)@Glhs&(O-+;*?#;s!IN zU>|G1qq7^HPYif!-iMy|TgFXKc$7i8CWaOSzzt?U!egEGQxf&_$L#8yw_anfL zi%nX?t^>jv?J+hXt1h0``CQ+Qr=fE>xZ*d$SAfRD9u#yky1q%CUQFN06G9fhOvX+n z-bcoMHM8<4JM_kUjX+#v>ngu}_ckVYO-?f(t+cpx`Mu)40himn!pAr|&S44*h50zA zpkGfg)-pA{QAR(sRj>V#@fceRM5dK>!j~`fDhIgOdY(^%DoZLxxUr`Prz`5&Rd2uP z=~?Lpy)3^R330cxhF<(d>7K%bSZ5|5PgpW+Gnn$KDe6tBOAHm9R>6WaG|iNP89|N# zd}(`2SAN_yHo-IkKaV)=MCuR@WdYm;7IxbDC#XmU_ZTxDsxFcje>V5xA=g91ghWN) zNNg|<*lwh(?WUGSCUJwBHfpN!pND!1y)*m9?hxn6VWuQabuxJ%=QoJCa&|Dr`RO{f z<-_>GOfP?SWn2u`&DKO-%F#^EJgxJmp`HK1{P{PtOnkd|^PZ3Hk*Nq${k<|9OI&kd z_gWm`KatZm$_b=haoYG59xC!&v?Yftf?lAECnZveT*f27lubB?MkymOw{#1F{oDP@ zDCt)qz<{OP0~D{NwI8V^sWCPGekjMSElqa?%oPHgk`y!Xm6lIzh0I`Ikn_pjwVSW!4#xtCVfx6SzwCe`(aCQ6wt#xxw8o7X`uh$-UJjT|JU2m45sub?^lpc}OJ9Nof6 z0F4`W=kgk$ZXl6U0PqEdk^5;)$@~Q`_S&z#L@tJXjM3FMeV_N^&2^)urB*D$Zd_7D zBa7zS5}etKMM3#z`OWOwNo#OpA^kDOCNqVq#1ffmFskst((1Q=2{QH`ul8&zN0$Gb z8g=cKxOBEUg_t0XG?;<16gMn-DJL4Xk?AhiKUsvhk@eoMM&Pzva_WmCAoW^RgW4Nm zG3FLM)iOydt3b}S@LiOImxP^pY_hF!6*|>tw3Rn|m}2)IP%tX6&Wm|pPV9_U8fPxj&D)0|IVN zvaa*Z;PZ*Qh41EWsZhH$aAD#T=z+O@)C@tw2I%n{g#&DkbsRIPPYDGNj zMGSAY-60uUcWEUd?@#L*SxpjJuoo2cpTk7_ky;vje+*)M)oor}#l9pJiCV$ubZ%E^ zSpB2di=n6zDcmmNTOOfWvQ=8X`nNE~z?($J&2&l&8oi7tDZ1LsJ6(2~`k%Ce|Y~152{2yMEo82Cy5&2MuSkpVY zog9DO>!2tam+5w!)td+OVS3wCh)pus0DEv}@$Jp7yeOzD7ezzrie)T-hyJnngS}*l zHLkEwTNTV)A;IOwLshX%)mwclR3@Rb)Jxz!NY-k?u9nkg>YYM|(Jz#ntnVgKJL;n# z7kAi=877ye)K~ZYlz1AZz|LKUA~roaH}eg~#csAC+mK(K&(X6QPA0wc)RT;7!yh=G zLnI!Xd_CHVnA({u6!+V!&savk<-|oTe7u2wXW2Qtmr$EewGo}0>3gOA{8Z$xkJ#DB zN6CR>7xsay6koT|>3hrHAfNc3E-Lh0k#@q>K4S(7sNF_g2{zjqTHSf}bwpB2V|>Ho zdkF#5UqFQ6ck8l8;cCn3@UXylY{NKzYQyN+&A{U=K%f{yahLv`NDVCKK0)g?8sICJ zvaxa}e$(L_{H$P#lH2h0k%Qjr+x|JT10fw7^B=wr%uN14{r7@t^sezsf0}c6n5)Uh zpD0PU0Xki|)^DrBlIn7wHp!ct#4C6`ZK(QaGs9B=jd`n6_jM>s&YsbCjJf~p(}M5a zkWaeeuE~60V>saO;r{4oD3jg+!922#=-8Fh^+03gFwAq4^LOu)nk@n4<+NpoQ^fUL z?id!4;m3Q{AC}T_PV*qKg~rKlQ-!1v`tJUc4*7edZz@{XNatM3fwdNamj`-3>6y}H zFZaLdk_#pFG(IT&@Z09$GzE%&$NyJuG&=D1f)@VxNfc}L1L;%y>z^0RnA7Z{32qWkYJL2O+Wa~Mf2iN98*=*Pz3&0?gwrP*!&|E%I~b;nQh z+;j*>Z~TqVGb4M(mq47Q>e4{AdL+o2MXr$B`Gu?8&F0h?M-(1O2cFU!TQKiu1Mco{ z4xBKB6eX$w8ROO&QQHWt2OCKzNrEJ)XZjn6*U%_*hD6R%d924|$i<9jv)N+k=(3W^ zyOM)}jDGG2H#y|X7^NC4t7|LeY8D`}k|nkq!Q}*59~E+5OkqF@bjPOL-S#zoPwzXC z+9H4m+48^wsZmFa`;rRdbtp`&yAu+0y~UQQWH+f!p0&k3bXN5aqEDZo17lLp7y_^V zitgp2DmN4JYdAyP*_OJ6_H-JBEz{qS&9wkEFCGLuh|-^y9FxC_xek@nJ-`Q^P} zfH%?$n;9{LXg~