summaryrefslogtreecommitdiff
path: root/drivers/platform/chrome/cros_ec_proto_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/platform/chrome/cros_ec_proto_test.c')
-rw-r--r--drivers/platform/chrome/cros_ec_proto_test.c265
1 files changed, 265 insertions, 0 deletions
diff --git a/drivers/platform/chrome/cros_ec_proto_test.c b/drivers/platform/chrome/cros_ec_proto_test.c
index 33721607a5b9..64100fd81c6a 100644
--- a/drivers/platform/chrome/cros_ec_proto_test.c
+++ b/drivers/platform/chrome/cros_ec_proto_test.c
@@ -1680,6 +1680,262 @@ static void cros_ec_proto_test_cmd_xfer_excess_msg_outsize_with_passthru(struct
KUNIT_EXPECT_EQ(test, ret, -EMSGSIZE);
}
+static void cros_ec_proto_test_cmd_xfer_protocol_v3_normal(struct kunit *test)
+{
+ struct cros_ec_proto_test_priv *priv = test->priv;
+ struct cros_ec_device *ec_dev = &priv->ec_dev;
+ int ret;
+ struct cros_ec_command msg;
+
+ memset(&msg, 0, sizeof(msg));
+
+ ec_dev->proto_version = 3;
+ ec_dev->cmd_xfer = cros_kunit_ec_cmd_xfer_mock;
+ ec_dev->pkt_xfer = cros_kunit_ec_pkt_xfer_mock;
+
+ ret = cros_ec_cmd_xfer(ec_dev, &msg);
+ KUNIT_EXPECT_EQ(test, ret, 0);
+
+ KUNIT_EXPECT_EQ(test, cros_kunit_ec_cmd_xfer_mock_called, 0);
+ KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 1);
+}
+
+static void cros_ec_proto_test_cmd_xfer_protocol_v3_no_op(struct kunit *test)
+{
+ struct cros_ec_proto_test_priv *priv = test->priv;
+ struct cros_ec_device *ec_dev = &priv->ec_dev;
+ int ret;
+ struct cros_ec_command msg;
+
+ memset(&msg, 0, sizeof(msg));
+
+ ec_dev->proto_version = 3;
+ ec_dev->cmd_xfer = cros_kunit_ec_cmd_xfer_mock;
+ ec_dev->pkt_xfer = NULL;
+
+ ret = cros_ec_cmd_xfer(ec_dev, &msg);
+ KUNIT_EXPECT_EQ(test, ret, -EIO);
+}
+
+static void cros_ec_proto_test_cmd_xfer_protocol_v2_normal(struct kunit *test)
+{
+ struct cros_ec_proto_test_priv *priv = test->priv;
+ struct cros_ec_device *ec_dev = &priv->ec_dev;
+ int ret;
+ struct cros_ec_command msg;
+
+ memset(&msg, 0, sizeof(msg));
+
+ ec_dev->proto_version = 2;
+ ec_dev->cmd_xfer = cros_kunit_ec_cmd_xfer_mock;
+ ec_dev->pkt_xfer = cros_kunit_ec_pkt_xfer_mock;
+
+ ret = cros_ec_cmd_xfer(ec_dev, &msg);
+ KUNIT_EXPECT_EQ(test, ret, 0);
+
+ KUNIT_EXPECT_EQ(test, cros_kunit_ec_cmd_xfer_mock_called, 1);
+ KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 0);
+}
+
+static void cros_ec_proto_test_cmd_xfer_protocol_v2_no_op(struct kunit *test)
+{
+ struct cros_ec_proto_test_priv *priv = test->priv;
+ struct cros_ec_device *ec_dev = &priv->ec_dev;
+ int ret;
+ struct cros_ec_command msg;
+
+ memset(&msg, 0, sizeof(msg));
+
+ ec_dev->proto_version = 2;
+ ec_dev->cmd_xfer = NULL;
+ ec_dev->pkt_xfer = cros_kunit_ec_pkt_xfer_mock;
+
+ ret = cros_ec_cmd_xfer(ec_dev, &msg);
+ KUNIT_EXPECT_EQ(test, ret, -EIO);
+}
+
+static void cros_ec_proto_test_cmd_xfer_in_progress_normal(struct kunit *test)
+{
+ struct cros_ec_proto_test_priv *priv = test->priv;
+ struct cros_ec_device *ec_dev = &priv->ec_dev;
+ struct ec_xfer_mock *mock;
+ int ret;
+ struct cros_ec_command msg;
+
+ memset(&msg, 0, sizeof(msg));
+
+ ec_dev->pkt_xfer = cros_kunit_ec_pkt_xfer_mock;
+
+ /* For the first host command to return EC_RES_IN_PROGRESS. */
+ {
+ mock = cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_IN_PROGRESS, 0);
+ KUNIT_ASSERT_PTR_NE(test, mock, NULL);
+ }
+
+ /* For EC_CMD_GET_COMMS_STATUS. */
+ {
+ struct ec_response_get_comms_status *data;
+
+ mock = cros_kunit_ec_xfer_mock_add(test, sizeof(*data));
+ KUNIT_ASSERT_PTR_NE(test, mock, NULL);
+
+ data = (struct ec_response_get_comms_status *)mock->o_data;
+ data->flags = 0;
+ }
+
+ ret = cros_ec_cmd_xfer(ec_dev, &msg);
+ KUNIT_EXPECT_EQ(test, ret, sizeof(struct ec_response_get_comms_status));
+
+ KUNIT_EXPECT_EQ(test, msg.result, EC_RES_SUCCESS);
+
+ /* For the first host command to return EC_RES_IN_PROGRESS. */
+ {
+ mock = cros_kunit_ec_xfer_mock_next();
+ KUNIT_EXPECT_PTR_NE(test, mock, NULL);
+ }
+
+ /* For EC_CMD_GET_COMMS_STATUS. */
+ {
+ mock = cros_kunit_ec_xfer_mock_next();
+ KUNIT_EXPECT_PTR_NE(test, mock, NULL);
+
+ KUNIT_EXPECT_EQ(test, mock->msg.version, 0);
+ KUNIT_EXPECT_EQ(test, mock->msg.command, EC_CMD_GET_COMMS_STATUS);
+ KUNIT_EXPECT_EQ(test, mock->msg.insize,
+ sizeof(struct ec_response_get_comms_status));
+ KUNIT_EXPECT_EQ(test, mock->msg.outsize, 0);
+ }
+
+ KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 2);
+}
+
+static void cros_ec_proto_test_cmd_xfer_in_progress_retries_eagain(struct kunit *test)
+{
+ struct cros_ec_proto_test_priv *priv = test->priv;
+ struct cros_ec_device *ec_dev = &priv->ec_dev;
+ struct ec_xfer_mock *mock;
+ int ret;
+ struct cros_ec_command msg;
+
+ memset(&msg, 0, sizeof(msg));
+
+ ec_dev->pkt_xfer = cros_kunit_ec_pkt_xfer_mock;
+
+ /* For the first host command to return EC_RES_IN_PROGRESS. */
+ {
+ mock = cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_IN_PROGRESS, 0);
+ KUNIT_ASSERT_PTR_NE(test, mock, NULL);
+ }
+
+ /* For EC_CMD_GET_COMMS_STATUS EC_COMMAND_RETRIES times. */
+ cros_kunit_ec_xfer_mock_default_ret = -EAGAIN;
+
+ ret = cros_ec_cmd_xfer(ec_dev, &msg);
+ KUNIT_EXPECT_EQ(test, ret, -EAGAIN);
+
+ /* For EC_CMD_GET_COMMS_STATUS EC_COMMAND_RETRIES times. */
+ KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 51);
+}
+
+static void cros_ec_proto_test_cmd_xfer_in_progress_retries_status_processing(struct kunit *test)
+{
+ struct cros_ec_proto_test_priv *priv = test->priv;
+ struct cros_ec_device *ec_dev = &priv->ec_dev;
+ struct ec_xfer_mock *mock;
+ int ret;
+ struct cros_ec_command msg;
+
+ memset(&msg, 0, sizeof(msg));
+
+ ec_dev->pkt_xfer = cros_kunit_ec_pkt_xfer_mock;
+
+ /* For the first host command to return EC_RES_IN_PROGRESS. */
+ {
+ mock = cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_IN_PROGRESS, 0);
+ KUNIT_ASSERT_PTR_NE(test, mock, NULL);
+ }
+
+ /* For EC_CMD_GET_COMMS_STATUS EC_COMMAND_RETRIES times. */
+ {
+ struct ec_response_get_comms_status *data;
+ int i;
+
+ for (i = 0; i < 50; ++i) {
+ mock = cros_kunit_ec_xfer_mock_add(test, sizeof(*data));
+ KUNIT_ASSERT_PTR_NE(test, mock, NULL);
+
+ data = (struct ec_response_get_comms_status *)mock->o_data;
+ data->flags |= EC_COMMS_STATUS_PROCESSING;
+ }
+ }
+
+ ret = cros_ec_cmd_xfer(ec_dev, &msg);
+ KUNIT_EXPECT_EQ(test, ret, sizeof(struct ec_response_get_comms_status));
+
+ KUNIT_EXPECT_EQ(test, msg.result, EC_RES_SUCCESS);
+
+ /* For EC_CMD_GET_COMMS_STATUS EC_COMMAND_RETRIES times. */
+ KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 51);
+}
+
+static void cros_ec_proto_test_cmd_xfer_in_progress_xfer_error(struct kunit *test)
+{
+ struct cros_ec_proto_test_priv *priv = test->priv;
+ struct cros_ec_device *ec_dev = &priv->ec_dev;
+ struct ec_xfer_mock *mock;
+ int ret;
+ struct cros_ec_command msg;
+
+ memset(&msg, 0, sizeof(msg));
+
+ /* For the first host command to return EC_RES_IN_PROGRESS. */
+ {
+ mock = cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_IN_PROGRESS, 0);
+ KUNIT_ASSERT_PTR_NE(test, mock, NULL);
+ }
+
+ /* For EC_CMD_GET_COMMS_STATUS. */
+ {
+ mock = cros_kunit_ec_xfer_mock_addx(test, -EIO, EC_RES_SUCCESS, 0);
+ KUNIT_ASSERT_PTR_NE(test, mock, NULL);
+ }
+
+ ret = cros_ec_cmd_xfer(ec_dev, &msg);
+ KUNIT_EXPECT_EQ(test, ret, -EIO);
+}
+
+static void cros_ec_proto_test_cmd_xfer_in_progress_return_error(struct kunit *test)
+{
+ struct cros_ec_proto_test_priv *priv = test->priv;
+ struct cros_ec_device *ec_dev = &priv->ec_dev;
+ struct ec_xfer_mock *mock;
+ int ret;
+ struct cros_ec_command msg;
+
+ memset(&msg, 0, sizeof(msg));
+
+ ec_dev->pkt_xfer = cros_kunit_ec_pkt_xfer_mock;
+
+ /* For the first host command to return EC_RES_IN_PROGRESS. */
+ {
+ mock = cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_IN_PROGRESS, 0);
+ KUNIT_ASSERT_PTR_NE(test, mock, NULL);
+ }
+
+ /* For EC_CMD_GET_COMMS_STATUS. */
+ {
+ mock = cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_INVALID_COMMAND, 0);
+ KUNIT_ASSERT_PTR_NE(test, mock, NULL);
+ }
+
+ ret = cros_ec_cmd_xfer(ec_dev, &msg);
+ KUNIT_EXPECT_EQ(test, ret, 0);
+
+ KUNIT_EXPECT_EQ(test, msg.result, EC_RES_INVALID_COMMAND);
+
+ KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 2);
+}
+
static void cros_ec_proto_test_release(struct device *dev)
{
}
@@ -1750,6 +2006,15 @@ static struct kunit_case cros_ec_proto_test_cases[] = {
KUNIT_CASE(cros_ec_proto_test_cmd_xfer_excess_msg_insize),
KUNIT_CASE(cros_ec_proto_test_cmd_xfer_excess_msg_outsize_without_passthru),
KUNIT_CASE(cros_ec_proto_test_cmd_xfer_excess_msg_outsize_with_passthru),
+ KUNIT_CASE(cros_ec_proto_test_cmd_xfer_protocol_v3_normal),
+ KUNIT_CASE(cros_ec_proto_test_cmd_xfer_protocol_v3_no_op),
+ KUNIT_CASE(cros_ec_proto_test_cmd_xfer_protocol_v2_normal),
+ KUNIT_CASE(cros_ec_proto_test_cmd_xfer_protocol_v2_no_op),
+ KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_normal),
+ KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_retries_eagain),
+ KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_retries_status_processing),
+ KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_xfer_error),
+ KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_return_error),
{}
};
-p"C ,wOVEiB=#Ҙ߽CT_Ie ' (zWG-wdOPl Rz9J 5w^(bm% ;5yavMBnsq3-:Bɶ\[z3,kyI8OL;hVC@3i6UzKF ;f}pSL,6̈&2;+gpG Tܾ/H%r >XH!*V\ǧW3 3.yWLf!)RL7}2j:&{K*'!Aff9R]GH+*t<>&TC)}fA{VI\lђrJlhjw4o //2oō9Ƈ"A 1Vy*=͏Ipߧ7ϻ<#EDerm=%@4EIH.-4Hϔ {lԘeQپi|Hv Cp6U: ){O_kLey6H,IMIWLH 2VfMcq3W9\g0SH]/V+׏Uͻ_eR{-ʅ9/+^ ftZ)(SJ7:mnȿod a0dΛg|ts9G"JNNЇuڮǔ',E6cwu$D_?>Nd Hb5j.fi-)#Y01̆<'zw_~Aa2x `ѷաnK%֑#,\=@k:SSPiLn7끵u̪!/ 62cIOG wAf\K:YHK)9RƐVV|$Jb>:j1 K~)ja1 b^l!j4֫dcplҢs0_n῾K^Z/H#qz&'`^H~ [꽻{*կwZ |g屸пYm;wV_:+t#U-kOڰr " L-w-qykAC~nUC~ڼ Xsn/ 3`9fa}tǓ"z8 ]i~kd?-چ[Ś7 @Vh\6~%5q@[.s.e~\|^~\ \:J"0iۙtnЗucnGN("cuPXs^ zz\ѣ2olŸh\&bF[G[0ŗI纬Xz )R6ؤ$ 1v823 xčA>* w_eV׎LiuI8M5x wyȉԫ}[ _O&ȡCVhC 0H "Ӟ-Ch7ialv}f=p`p9L]q3&wbEpRbFUseE^͋0Hyw88U0̲qk0`SQSnh戈4b S^;tW e^4@AkӊhȞރcBi{[$KiF[I_iJMtT"7N괧KSP8DPЂo1X9](~m͠q2bvl:-`z>͑vI)$VIۈ)&:8Z >>VTp4-'N13vѧ. C+1i0 eqC0|{2"xY_#``6V[0)b8 Kʯ|Rzx8Eg6ZRGbCq uAZe,-_Q^ xkڱQo+Mo?nlCz8D%E.sH&bnurqm=`VX0H\HC2ԙYYorpnãK ૔{vͪlt=`@˦Ġ9^zWᡕ4(Nf iƄztZvx6jfh/qx:Y_n./CUS*mgVHI>,rgh7jBEK0mv%>hI|%Ucϒ<5#tZL͎2N>EvUrVu"Em$'< ns}K.i@lB d] ;@AVN 4$fg658qծ+!-r{$N{jIĚ qШ 8Fy,VXG-5KBu=Өx )%&OvOjmG),x&o<ގYU[^P^J9q:5(0nnjv3#EϽɡ 4DlV`擱A\*YiGa3r/]i⋓k.ڗVғ׉9{:^N2b@8U2kcCxoV@|=jzL&kNTV]CI{/.8AC'~?skվB 8C} k6H7 Ƨa"pܤPj8y3,&']?fa;m #5m|moGJG>DvתC0۪3.v'ٸ?"yVQWtTMUȚ"}=p :Uʬ8mP f8+I:I>͇NP #@)69ȴnh%$(Հ .}IUdY3Q "5iuTiq >Lg kǓBŷpX3ۯmM$@o$2L] u a?+rR>l*ŊYdo6FR+zE~ 9W0N&f woe 5q>μ][l7F <%H& *2 TtozS $ +pw4cH&2ٙAQ|s GSS^O:)mg0#NJ ύ+48D .Dv1.$X<WYZ>pgaڒ>Hhdtœ*(\ؐ+=g dsӬ0Åװ٪hD%w)[|PAjDv[QZS|6><$vO&yn /e.\DH%'zRa|̾:zj6}H#ռ8x&n/Z7"D6 "=T[[(Fm->sfM`0,i 4I,#_X0_giwI%ryUTwJX<$P0x L w!m@*e; =_]`'yExttm->y!Of_W`\1kwOu!!>3`>Xw3~g1(0r$֍<^zC|pӴ/7hI]EyDnu~7#m/v˃6*9X%5NdBr B`ecFzuSEKu,nKaC.غvpk@ވZj#AvC.L.=DH8,e"5,T'icj]q^|ۢ=h'P_z5G]gU!'k)2M1<4f׎*AF9{}*ClmUթwNDWR{kϛxXخ:'x ^@y/g#)Sx~.Do=F=m #Uͣv,:u_NΝ_e)N܃؃%̖OWlz(9'S^BK1:6uҤF"5sܳv^h;\2R$Y<:[w ɣKa%M`tHhmw(.#qo BI7? "ƖWp mrjhΝ;m Ћ3:7sG { G!O! ,H^YVV"ꂣn|xu•~9mدwdڶٯw 苼 |dIO̭|fV%~LGZ B.,khw$_% ͽES9N3)}z?nQu-vU[$tvfaۗͬdyPloua+,grh,qH%_l\{> [G$lKzHtdX%0yOH Xݘ^-z+]v҈ o!we~RRvN*M1h]QYMHլlDv 6C U-dT\.2s^fKr@"s5fID3Eg|PWΓ{f]˨7L4lr4HZl2it7E o{ pohܵ4 -(hv},d^(kwmVm6>$!O8֐c57/@sqZ .,kƎ'a%ŕpĜ<¼Ļ^U@rk~q m;hyƩ {j t6Ɣ ])P/m6ЮcV;A=/UD?ʺ T^I5gj2jy!ݨ_4j1* cRŠ[aݶ٪zfWIg$Iv\C(*2ooAZTw?o9+c9Pث^7Hb }g{,94a7H'XnVƬ4Ի ZGzm"^1Пw$(:Τ92UCcwɉX4Op)'/~~m[0bI$p [^ȱQ.БheP)Z]Ur4Tۻ9RQmu=t_)l˦ };Az^sPA{KXF k'hya?'AliD:4t%g6 {gd_<0k3 Si`ӕo /[7MYjKB}3 _h}OgK hviv1-dv tgA!qp0l:d|4Ӯa4i^O ahF n&](=l+` Ps~BeͥizayT" bpDoG2r-!B?%`{W7F`Pi+ߧttmUmd{DhT 1tWb>Z^UѲQPLU**XWI<-L4'Y>,6{p@(t5 ȳ4*p]#zA+'gtNj 1=OUAӧ"Du`$zGpuoZ톲l AܬE Z(}HO X L>mN ($2ߟO;gw#1BWByw*SEIF iU;jRqn =a('roxH.nǕ*X9섍7+slSK t$1|p )Kfv]HM6#37ʼn?RkV/GʃZM J1O!K蒍eJA- i{knjŠEJ1 I8QVF|Rpf 9-{+Bvfoi5d.rA&oUn'ҨK1^xɝkQ0W#҆%FTYx.hyx 8r?\sDdoIl `&Dq-sT|rB-ZҺϼ*+y)Êt|ϺѬzl߬-aITE!#d"߮׈WBR,S$)Ws\}k)d-ꏱM)N+ZHPDpO8n3—'d/tR30&^[C+dSTdZ vĤ.pČe,HoBS=7I6MUB,i6mDz =DO zQ-x{R"M54aјg0U)tu|dM4?bg&:zrs!QQ8~D䣐ks(}Ga1[̇㩺݂s#Mf򻄄NnvL4;h#}D}./@j7u&Z19>p|)oѝi zhxG.ҩ)r.¹h6;F&[1\'+&F;T E|er.}WkOF4\KmwejMt|4X*pD #:X&׮&~{1x(?w2\̚)^1B5X̸.1MSGQ  祐CHE[f dcħ r/ xH =h#^"thSw;.o`FljCHEdǕ3_? o\&fKq!xcnFUڟ~ ]|?c\ZÎ"Z#tռ#!)ĬPzr4嬈\vrbt??'`ܟ7 {%s _znjKklKU[ЪFlbM{\1YТ QBRnat)%;|qnXпƸoˠ.'JDHU)0;3NVq> mo_[lmt,c3=%(oTޛM`a&:.AkLN ˽{HZ]+їdxrJ>JT8oqEs*GBoAd#؉ns -:]#\쵴}}~+V0P+bG3Պw4p^9f|W-}hKzF2JCy4 ,#YrT+M {_^^ ֠7gٓnXlCr %kt,c^yNW`B)& -S1TgŵLXNѬwAu |=]n 6cn3Ӵ7Ҝgj_Hm?[7EIsigh7{1ڑkի^S]Agz@O^ %;2lv<gLL[ DJ&9 Tz݅35JP<$3vep&ojrY NV#%S&t}s=߫dGC:%h 㤄Z?JKXڅ׌Wpy=)LRQ|5q f0El+ˋ,[rR]r,p_+aTyO:" %+J3=H˂4*~p L lv,.*8{ |jDgʝ˽>νC<֞eDAh3iif{ #R6Tv 5\ O.$@P5, 1U$xswH/G5y)]dMNs@<| aPJ1R_)jYKYI;}P$13-9d6FO̜jav۹!^]l G|aM%xrYa~^Z s)ل}aֆd3 Mjz5ۑ\Po:Ϟ$''`S8dcOsqDɭvMc.&GD1g~6\'~5\/q|6@J 2gwtG:#bv]q3k7ǭzvo6#3rHPrD9[-`'2,c'4YVi+4}c^g2O mOv '?K)H/NK%MϦ͐}(IO'wmZU|pmЂ,_))H43ߓIW3rvok[1\u$xC?k\{'~cFI/[jxI8^I_Ҍ/S9e73UU`E/viEFdY{fY~vs;5 "w\>cﵪ킟v;Z0cts}AlZuJ༥;1 !Sdc8960:|8FpOOMZivC{4g"I2bL~K$#cze8l85h*pq:PG/#I/⿐B#}&2_.(o/k≣L]tx[h^ߡ=OpZxL(hBI^:"k7XڒK7uw}J> _րz_E+rZݲ-rfoGvm! z?[] +[lzO[ix;F9vh,]dĚ-O,-lVpݽT1QSra3F}~鹙]p\lBfMz0#l'Mt'8ff,34pVsrP5df:&>j u՟$ٸ9D8~}9 dDz5[vq|<6mͲ!&KPece[DIl2"m~:,+2a5 BwUf w T΢L5r:iPRoԴԵ%ZV{0X}}.+I0cCB;5_.VRQm'62.(TN͆{GR*\v'9t]m!b~x"? jYH*k@T}@}9``TԦ}؏ߘ~GfîO35OZ4Z35nFqW:B26p)wY:EyGNL>ؑ/WlFߪ5u H\ vu%u 7y uET`YͱjTIԤ?IGbD{FE*,poQ!u| #T,BR%:Gk?Gϣ0VPZ5+׿aITzJg\vr No/{OO:϶Q!jEGnn2JoC˨@Z+G"YD]|lEȧ|O*}T#xxԀ){Yܪg}6hZ aB 5tfd:5ߩ渗^H>ڒBdD#<ɵϐZқrwcgeKYzK&39s c8p<-Q$+BVʃbrJs)IV Ӯ'0zh3FJjgخq(I6}6Ic8t(nrjfiʄ.4 @ 徔$ 4 MLwA:YͬPg*4:8ڨ4^"(S~V")]m̆PU_Q~,CCvi2SHJr4/Rnڝ *'jTPC۫c*;hs(m^lCJQ'e6R>QɰSɤM Sx wd3#tVn,BIPN- aķST:iY}Jy.1M mjТ{/PR}m6J_{ٷy8[x~ -JbR0 $ӃM&_ogz/2vQyyy2iX8\/TKѭz CDNp̃AAp-\FtXKֵtw8eZ;[ t7 d0Q/rj#- z95H~Q?aB(N+`QQl2-GꆖCYg->XRVHb2Bع{r$dOJykme]޵r~'#5+3=MB5?53Td(oIvdOht)В kHg*,i5lJ/U<Q{"m`nAcW!Mc_0]ƱPFlw9X{ñ2G;j Gu5髦fOG6͙ ï%De=Л2)^fR/jTD\=B4|Ev9aglG:|Fo%9!k9-)̞C)f8Ț:*0G)"~1i0)IlcD7*XB;- SpWdm}h_hWrxEұM;#h`) 7=6(cj"]c4 ɭaAˀ2 ?FІVS3kĨ{йI*l,|dVR5ׇ_fwIp d! K@,pˢ\ŬwX_Yt2 ze 36s@;#B|"=mUKY s>4]1$Tq]e6N=kTf,.vbOCMB];KcCQ̒zx2/0K_n 2R'vQOQYegf˓j"&:G7 !a~aO\]٧e ; l]S*ۦnH6#c<$8) JP[%&ܘ8j<TǍ)yrqeoH-;Bq)HY.ƶiF}qUGcU6]B)=7),DX8Q3XjM՞?'>g|GZ)ɠĀs6\*&AI[IYNJZ> ɢ/=4H

C?occtvAz3.Fq(\ ]Bѿj#ZFQO,wkg]_ P^Š)2oͤ hϟALZt@. .܌,_̬m%oFV 1wGd0ŷ$1B0FmHWn,KPһ_˒%qI`p%js"Y"-VlL﷜fz@F`n-R6DmM)R6TtFP߹^I5]fT!lut\;Η.S([t`} ͆7EڑK,n.(L.u n#&dFc> + suyZbrN3!<@,3BI^vu 2aN!8ܯH?;{KGtЈB1aaCpD_D/~s9Ye~6æ8 8E77pj{Sle#Ks;!:4_F>+f㨀-}w*kO> uMq$ j~%Vp>E<ՏO4(3TcxYK5e өjtհC5$GԬ&c+@ͼY9`GSr kzmF\] ZaBe]1BIC=u`AjQwq=8Ii5*GeaC!RMIi;g"0нJ)t7k]؇jq#X_@x^=0/L'vNV)wѽ 8yL>h~y{zGjY_?+%ɖK仇Gw)#A76~mr9X6Ǿ%-b=\;鍯?Ser}Gq kZ٥{%11$Ȏ̘aΧ 6$V73b ~n7}hwMe>Hv!DpZب9A pd>B|UE6@vOpn2![ddiއ2~D/~tC5ȔF OhECw=y}4;t5>FĈ>G`ڝ]Bip瀻)7hBNRqYZÑZE&]X)%W Y{w9H-G*P -B;ԁ>CF{w.D]Ț|t N[klt9΍}Af-Ex H.=RVˆs3It26k']{1U &sȇ[f/$ տԲDWTԇeotM1 !d!,JkwxVberoywCErhdƤ sfFOl)ZjTwzd%M7u1'8yИN;ϭO!<Ȗ"-ݻ"f mb҆tW{'7wc[ ª(Rd0$ey꾛 p3yufFΈs Z;DfhĸObMssPďv~]Vn=DGx~j%iJ;GsPoC2-Gq?%3]4Y&+6mS{ D[SHԚL9H٥z]Y2;5#90w|4U^v8 AD:'L&F>/pEacɃi;[|Qy>)vWTMnB";@բ)s%}_p|M ¶ LbVۏq׹rog; ):}gT^%seְyabkRaBw2o{ihU"~pX\JTyΡ[0*_`x vLdC^l〩o#/] #Ơ%4{BB;  MWMsѐEj`/0=#EJolI_~OFНjHNUgnaN[2bо4ҶRnzw{IF˒< QVVlaΤ;>`;RP?pf =44TNXF Qmil R'xs7/:8OKБSwW{3QUQwOucYs7xQX^E9q#{z_sPr&GϤh6Rv|xvA#:8r}::ffGէȖ' .YdhI&kJ>P8a/ he'M[ʊ/|+ FkC@GYzW_Pj#sZ{ܨ M; ԡ-^ިW:(i(vzq oc}CN@jVw,Pd܁ dd92AޮF.qu[@_} x x{ $:\M #yك.GiN#vMl&ד\ѿR/(ݘA<"%кV@c.DO0D} YBYB;mZDGRvA$j=0-%;dh/,.е_䄚(}f%#Q! Qȃ"15˄n-?Uѧ!w^C6;^CS-R=YJEttD[;_CHTyXM5}Ld~HmKNk7 PE 'j2Q}-]#ʆ}@.HyRudʮ+/[IWi6{O8|PFC'Rx_Za=4!!?5wWeH~yD+IBJ9yBA+-;;jGP9oX|MaQx+}/ob<]Yn4J]X1ܑ.KnrLb!G 6@;EL&8AK]1\QkhBqTv*@{q$ΊPJ y)~> T/)5;Hu8w _)H7;&3zOMQ|2\%6F) F| ܰ N=l^oJrIVrjNfS=iU} ;DxLVi19ų7Y~vh_{}lH4_OzF HGj.3^Yq?Yc6YA! <.țh pja[\^?/q'ɥ t%뎮T(Z$WPi,+dyMc_GI|:[k1 \j97"=/T,[q5 g]j5YW< rHA/4[aWjFW0b)ͨbts۔bkQ57B3CFo/v^%/4$e齲#JV8{ ؓM{>BWNWUZ@3 V:mP{|7٧e} {QR$/rK70;2@f^KE{KtzKRz[h^:od@+N&޺lÁmKJBtNvp7myI_ߤ=3Uݩj`> t4զ$ǵȉCm̒"fިK^ b|joX1?Еz͒:SKSDXP>`^!vBbʖM/S%/nlOɩ嗖l"{=e[tlIo : sc@2k%:Ϊ'p!$|;Z؝q ͆\VhPd֌HהdNL/Cs R^F~Š(MW,;fCDiիYeB^zH7Yp{ȟXpi|7.G.8.ݸ&+2g*&Vs|ޔ8⛍o7;=yh <\9ˆ%KVޑr+܃ex#Ш8o(yywc<"ngcFR 6p)h2Bjrw]<(YB& I>"cf?C;4X'ħAqS}v?E쓮}E_ֱm+_'G%$yL2D %eKߖEd52qPͻ2]'^V3Xm~}=='&q|q>\fKKY_!Q=:DbDy@:}φy_n>ObjL?׺^HhzHt o^﨟;~mA+YtNSŸ[`9v5֗!:^,m6n#<3ve}+WSBͺw]*ހk&r@h76\,2FIL38ʔu3/8̵g$CD 3> |Z>@B#,>+GI D< RBine$tiXR P[G5ǡvpAgō i{\tm$=`~ΊP,ɖw'_ha={&c?DZb݂$y:yaƓZYGTMz>A"_GZP!*Tk( `ӕ9!-oޟ)^Eqp'H2.\6nS)_sWLEw<.(1 F? v^Qod=H02c $W'GM]Րoy~<-RH! }:^|s':{.l^MZc F<4} U >*$p3tO )'ܣ;2 ֞=-I\3E0>:GG?|D2c54EaO_~2́mk6GԌ9HəeD1iAܾHi=MsT.u07 "eyмNuBX~=QSK9mG1')ΕOnO|w#!Vݾ@H- rSh/=/]9ktd[6E%~\dMg}VJS[ֶ BL$^>E8BK^t8XI 6+p)GBZWt' QPo#׉Ԇ46Z^-0!/j5TtQvm.dHQM,nVTvo)d*]Qc) ِH+ի!7f6;کDYzm5A]L0Xܒ9LMy4Kxp;F4)pݎ4ayQlefY//_%w9%62 KR)Pe6SNL|ҪEƇkJif!dSOF#H˭Ҭh@ {_6"X'6A oifxJѳ]f딞U+Q~3Ou0zPlm!ܬ7Eu^;y?u5j W綪?nKwFYhrE-HZi;qY`}h"Mm;+M8ݢiJϒ>Pm@[Eٟ-XsFF4 U Jv'y/E"g_Dކ|D̹?I6|]ee!jD༲vfNe0́Vm`pG98F? .> 8I 5u䒫r };xp7V'{Pxgba6kUDlamgK?#6Ƃ6( - t|!d mi#DY4b(D0[rUp r-xA[!~)GE-4dusF O{5_/Tݨ:yj_5M[h}`j@3So\9..ݙ\r=Z @$G6ōɮX+P|tTnQH6@Γ  uBϲ>=ݍ<)Ȟh[ĺPW _84S>Xtʢg&K!ϓ%WgtʞlwC] W}Мأ.oZࡲH WI Yyuv+RbD ēE7H-yn>{*)4y9;ڒ?q$)+ x9r].b4v|r`vid?8Wnel4z30|)0dt!nуh 3GoEׄF+-a<`Q:9pDXݓf^ `C}rTFWe"UשE;j*@!xzX19l̫ƆlVT~Z1E ZOƋ|XR6%z855i9O*'٩OR죳d B[ z==ߦYR/ij@eHfpрϑ5E.i@E/٧O._ig&/P&9|8CRP_D[d^6r#ev-(3pR@ƒtcC O ¼)n\E6U:ƭYu%:"^C E>(Wje.~{hCM&'d8@<_.5b7/>fdqd;528ot@1AW&a¢1TMUCIt!QeI:U*r1ԙj봏Dret}Oge&y rt!E28\ޗtHce~)/iF^̮Pm4{fSs!lRNow;FXg d fgf$N {( 6H)~v:d\#]ςԶЪJQýUty}4`Q`" ϚT{+ό5_`p@?Tt'M o<4VzrWZuq}X~\fda vQY3LҴb&cyKKl4~VTǓF LVek)sxdN^M7A We #4䰗$&aEWj;^)s(K[Ԙ?Z!VSU4 |#lPwm`;4c~/wHҍ(mO7joo8T6]lɸ"t'9)pάzYq4 ZP9s}8ʨ!'G6 |$Ԃ߇7@VF4l,hB>N@TcT!WߓՆk_AO Ux@fhH~[C+wSq"G̳Rc#k6Dt MRz |RA;frd7lMkTh-ۍac(jtO.%7J z@Rܑ1HLyymg2iX{DS]$m:.|`))@BJ:#zPEY#,ҡb4:Fj-.]@@"g{q!>&aL0Y*EG;j{ؤjbGTM9nxf½ܑ(erSbuvdgզa'jڀm9lR5hq=:U2!{/hmZj@Ml=qS]x/$gXN t!ƚ`j INrB |s՗z@ym]Jj1 :f]TS0 jza6U^ʧN 7ely>mu2 ԾO;Kp_st(?Ijfx 9%{ >k nwV|KlS 3j= Ʊ|~2fĺhštQdD!V3pN,+ mi8t9"  Hx0žOXK2kԟ& 3cXppp 0=މ&4_hC\ft IIz4Bp8DZͤ͑B5uaAQ>AtFm!Y\E\X+&,Y>՛|Z-j4r{zC%bq4U[`iJPt^iΗЧ_пjA/fB=D'z GJ"9?C#aRt`T^NK'YZlC!,^a8E8W\Lnj` +DW6 qBfyN뭾oLG8@y[9 ̔<;iK'ܮnQk4nt6vB ͅ=S[$SZ]hW8A S8G]ݍ4fǵ`&f Ƿ82M?~?a3JV+-fl=b{b\fg@d_孅V'4d2RC,X^$؊UT#Zadoڨ7tG Oo;qX!ik~pn1fm&3RJD>"to)M* δBh 0[e]Z Z?|GP.g]$BmWnxlI&21c Do"-E( [3x,xWQ sb6?f xm~5qI1!7-.wsi$b7G;QaLx?C)>,eHaDYGQ2kd "1Q" 脏:_F:7?ȚxLBWױYzn@`\[O.725̞/N&'):%ƌ[J"v&{x7E_Ѳ[%*kYa)kCUdFufzН֠H 1px௅= vvȏ<nmӌgX)c =-i |1[y3t4 6WUtBJԖ.l28Y48_~*Yg"mAqԂ&nBD=Ns3 H:v rH6֊Y9(91Jv zGk>BM _بG) T -4O>0o19!`aiw1ç϶(b<WANY;n8N=:KfOKE`qvn۷(e_!g Wz|"@;x'99L iOywiA,V P͓~p*? \4&Pp[ɷl0\zP쵎6e+#vǹ,t&Z{ֆBSgQ''yx;>I^hG#D$iE-}"C Hd 糧VHoe|ް9-Jyn8Tw4N|1{3HI~+.LɆiPa?+[熺h=qR9݂Dc=n98m%%uؔDlً FOp!vݱ(D_jV껀hf,cǘBh&nӮ3 SEQ|\? f6 "ÈAźE8;iBQrF\xx`đxԦ}уР)2Pq$5M ~$ 0nEW+ݦӆG0) 9;=~”Xsr!Y^;8 99+bm>U/JlN XsJw0~pS#z+)~$-`_H2F51Y(yz-ԐT5R6 op'J^+-Y Ic󨿔;||>"1ygRῲBt AInLR7"$ eiPpJp1H/NтD=K" ޕوg/G9t8lkHws yٌAͺMYGܵ-ܿ9*7b:eH5ڪ>HwLs2JJO Bq_Ize(3Z߼ZTr$] c t!PWs @FGZ U?CE0V[oDߑ%RK=Y#؜g:FtRVm4MEDH"P2bq|w/ripXFJN hDυB:hB;.ש(: }:װO e_O` ɪg rUf$r`ܻYjh︒22 \ p-Q3i !q侐Gf\Nf'{P-`7MeqhJV<f !&}HD(KIy"׿z3NweޒDD/3 u, r 8I! ńm }gu-z(=t,Ļ?#}{KKJh{Mr$qV1XxEot|~UP <O' 0Ci#?SL)psl; GfWgvXWOom2{s~%X $?DO\3?σuRyX޽GĸdC /@"溢z^TxAV!}{?߃ 7(%K :_,a,ݘ jlܴvA<}L %fHp3هwN)]CLNtZ}Bʹiԧӡi:) t&*SGRCWz E%\8{ĂҘ}\!3B;np'x$vs hE?Fʷ $LvjoE]Vw<3*7tͼV!IA+і= pgƲ{a2 7 dMZ |ܱ&Q*= ]TfѾqݥĖ0؇<9ўEWiƴr3 %nM@׍ϧVݣJ^ȞMB o>e 3s!Ƹ3`)I.R<㻱(1 DI^L&N՘B]rI) ;3Peg YGm$=2 A9օ5 |cEA}a4rMZŷv UXZK:~8uuJ[S 23[H2ZLFm 4͋TGg9LLN-c+[grz^nHrW$wdUQ%g?}[uɫd 8 ή1V&NGaS-:WEh-ϒFqU2 <*7cٍ3k;jH̭jhp+rדLv,x7)Y<]t_M.Q{t}$1F+o'~b{b)O~/ 3>be,4)$Yty)yzBxJ<8r F3Y*ס$gL K(͔nO\[U֑~BZ0A**9O;/V|Q:XMsi5q$VpR,)qǥ|tǭ(p )mz s)wM2xĐjTq-CׂrN܍KG(ōY޼_K ۫4Nmz}nu^wժٗz[@Cg,K˟f-tZhK5)PqO߿Z)oƣ>}VCb>\"'ڏ .roWՆQU`hT.7I]Wq`~7~Gwn=UNJL?+B/MfzdƏ(SKOvw+KuQW8H %|DG)"m#y8l`v6:0V-fL%W.Lp^&_s6H,v GjC&_}"w,NC 1 sG?{:U~yA8ij 2uT< WdjrZ_)/xg|KΏ^)9Wߝ̈tD;EHKhW߭5y &rg:v}W cWf\+NY:';ь~ f<J`{]`|<h@|&֯y؄M< $T`_"Q=QNjKW Gx +-\ot|ω}j!kFy} _"[ܖ0߅7yl' \'h,g嬢Doyl7i lTdw|T{6D,!nYRj<`Vn0'GDwmttbh7to$ M':ׯ܃n?S _q`*x$(#tNSF#i8cr"Mx7Ӈ-x,AQo3e"[oL%AЏ*!¢6?\o죞璺y Gr0.}4!(b ?Z{7xK:}5B񡟚r#On8QVO Zϑ*k}rWn:(+)(LZ)Fc"bt]T@ aM?ݽ낅{ %wMpͫI~?~~+AdCX) hL~ё09dĩ#=h=!ws{6Iϯ{&L֕iS8Kcw߉ŠL|2C*.yX^gk#h&,,cTlha#Elb=l4`&w`I]A_Y.Xh6:4/8WZg 8`VrC-1iJ8K ?*:bi.{Q8} \OO%qyP-ƼMےbiyX;/$Ϋ Fe9>&Zc?DXKMGp F?W`7lN D^ QJzF8R S=2:J*'ri/I5MMU^&.ZPID\ s?B&ŀzN<+L/I~7C湒Bp`'ʐ]t홴\s |}ЎF*{da܏ ~Fvo=OYI4XCYM(b5г]]ަ:u5qNG۪ZJ/>B`?u'3C5[o9[]&Q5_xοik[4ѻYS3 vLTjK8'~ 37 GA<Sblf/S`'Coj?53J>%wd 7Zܼ}ɼ4t/Gӆ ͥ=VߓN;޴w, OA)2Av(й3iPYh"ͻNj#q Ż ]Y&A|FsIˉhC%\ 34HApI]v<$ါ~VKysqrtfRYy 4lxMZW bL'S.׌yԮ~Fz#D {!=И#y^"xA QD *yU` yv6hnn4(Q6(+J `elIZ7ow*xi}}(GF&#Vቌ蝳/d? Jny}FLC~~u,~!PA[%@6;K]q?/\DK4Qbmaa8Pn$_XA"Ĭ Ɲ' '~ā-YQT]YOO:BwX?6%%D_[ \D+2O?HPҨ,FJg,\UA Dt+a)B)Ƿ7˷_f/XCpQ` Dt0CNJ BT,D}6J6xk-pœh}fMMU$!D#@ڄ|Pa Q!(>˛Ĵz}@ _HVo q /f92m_Ӈ(g5LCtփKWY5tR|%IhM,)T;Fu|'!YÈ@/_P6뤴+R!qL:%t8$]&.\fM?2i7Ng$%V\*#}'.Lz=m5.%5f^!z&Al 5fyu:?Xwsx/"-69K( #S~o1##kX9':o@}EB,$,"n2L7wNF Jn=ƈ|A=il_#BUɷ{=oK) O}tH 5Bbڄozҽmy'wP,ӫ܈1J *epNAm/|@Tf+KoR9$Za^7Џ ԟp8O$K^%Vmqo\C}|q%'C[y)\6RJ>,Xq+ulU>p"cd^9}1M`Ob?&ovN?.=Ēfm{lCwЕr0/t :͟.jL*u#f oM4aCe `$RLM=\_ Ow)\V0KoҸ`|m:k; &_ex 1ipA=FP6>f~TǾ8?GEaEaJwp^B"@05V˱^L_+=0,% rJ=GWRRpۋk`S _&KF/PDbq7[^:6qϬ\!$GV3(TOEp.CR{"Iyg%lrp_[FyeIo]A~E=,]Ki84,qSVfR!7>8GEmS;e(z43?T~W _ FymP ]K|/@vz6BφG2R[R*^|<7P:o@/Ta/I9i`js@*4p4rhdfp8Rfg!"M^?~aK@ll)0 e|(fW^.ze}/Koliyw :ToݨٻϚoĤ83KqNW̳Ɛl*Kא L/Vk2QVA'g7dZUzh2/vp֓qN=>ml-N;/'mi>x-3쭍ko!k_2uz6P Yݳ7G1/ ~MbD&}{eӃy;uX/jJ^m4+F%|>.'ķŘ~'춺/ֿ#ZAsߌJڝ%Y֛gT7iilߜ5[xW@o(?H.jуJ!t=,>]/)?nytW!f{asˉz޳+TH-&oq78B,Y(J)SI=##lOJ)aP` 2R(sp2+Y3h|_^yPǙo*P1!q 9-K=y'#y |o<(eBF[.zQՊU99j 6oŅY``<18TZ96koψ,Dz,g=g~wS'Kì^~bqUG'?U!?JU|1ZY. pY{mC~:srR.?gRi elg֮=Z!)E(#B}c=1qH8Z_"q1oR6+EeCpUTZHJo8Y?`;+%ߦЁ3')èrQB Q&?=:^]6o3DUSZ R4f"teRϲ2_*pfa=2ڝO]s%'B~lP>DmICIEcQre+a[U:.2E&Bhy" ɦlԷsȘ`E+Y+ uT5<; {qIԊ GMRLc˦5 e?l_=Hhol7MLj)%)V @-@ HYO߿geN15jQ#DLըESJLr8>l_Ik_Tm3NtSit{Kӑ68\$ bhmN)] ܛD'yN9b#䇭5Όhaw)A`"[>zԁ9ݝօ.<}#ܥ= ~؇?"&݋U6Ex,/Vàr5,ɝz, -&>2֬j'xcl3%v1'-cẙY34H'u ē!6L7弐]:ퟴM y +Z}lb$b dB w{ 5IcFcwIP=Q-4?ha[x|46_Hd't"!Z+uU Xcax)9;Ffk]~PG VGvճƼᘖwFыWZixӊ n;7jV2" l(%FboNLڦEDh,x,3 &q님WW&JN (D㵹v:pyp;žnbEn \8tyӽ1mEC'/gP5ąv{@KZ?ǴZ{sn;d,|sRl1a"ښ4bFg22b_HF++g&͑*ϷJ؈APsqI $s]^6"WE=3J ^ԥ&͠NyLckz8K&NEVh\ %PPEU.*I7TU&Y"eO )fY"zI<|6׷0bFCuNfJ1s1Oٟ tAWp4g #N3TgW{xւ)ש3, mMrdc"v8l1R S"&ZD\l:Dɤ*SW6oɄ$g&wrqy!\h\d:o14;Bqf +tdP^Z('rqɩ0ɐMOl;OS, 2d;sS\`L̥0"$ZY٬wGZcՕr/"..>$cPPn6 !wQMÉWn֘7@b 1}0%Sy?;mu3w]%?t{^IN6߬BgaЙ|[3EN|d*-.<_~eYO <;Jb?9O+;:\Bv.7x\^qa}0 \@< ^ 39soR0vOZ\"J;mPQFo|CT/k.-XkA_};'<&%;/4^|fvf-'sr`]{f5?#_3{p|ɷwZfŦ6RgbEoKY>4>-H=i^=9T^b!$?tZ >bZ% t$D^)sErSNƁSNíH셰B s>6k4j/%CЖ>dIqoƱ9Zd=ɰ\LǸhyheLܳ_O9׋l" 1whVlF[grώuz/ kCDwj!@a:RULa \ jA]3wꚲj1 9n$?l招ں6_?`ٽ=ܗ ^_C=|'=y'<|{/!z]z/PSw:UȴlAKP y$y}#$zOh1< @xfݵJo&;zc=]a 0c8t7JƂNUND"IEH>a! Sc8"Gz1`AaCod$HDB\|v/>rP2X^]ķҞ}bF`v LH˧$V~O!xִxڎe*%=4׶ׁ] J6E'l:haęb aib_tJ'f{b0h~xm +O$&PLlai5/I vw lh elO-(ܨGA;]7" sHiD'FH#Y9CtO^::X"|mi $LD'D:Î;}_rO6gR_\ ͝Kwg4<xxϯ q6cPȦTgõIc~ʄu= fZd% % Dg43pBVַUy| J-mIN]1o]NNvvn)Mv\ZȘi9 2N{~ȺWE?7k?4hlv|R[cgG%]<8Z)bI27li<4km?=fػj/LJv2tWn}7UOZ Gޯ~t{3ᨙ$ԫ.:-rwAA.zlN!qOFj;@2F^}5x #>W019qύ77PV0 &I< @+On۞xa)翱S<ݭgn}&oNWEZ{UFeȜDG.=z*tRH2A8|/xW^gǧ*#1):{@BDE"ӫt+:ʎFzCH$QAܲP;ko:k4WʵSǐ/H d,0*&4d:ul+͊XvV0 >uЎ_f y 75E8Q*ɊTp5GaVk@1lV[A1Jۮ*hprsdwZsUtH*_ Qd?2 R Օ[RA^ƙaa,}vUv2O>EO(:5إGu|Q[I(*p \+