summaryrefslogtreecommitdiff
path: root/drivers/remoteproc
diff options
context:
space:
mode:
authorAndrew Davis <afd@ti.com>2024-06-10 10:17:17 -0500
committerMathieu Poirier <mathieu.poirier@linaro.org>2024-06-13 10:05:11 -0600
commit5efcc364fc63750fee93e5791130a1658b5061e8 (patch)
treef2a7fb0bb12127176e2412beb8bc05a86e6c58a5 /drivers/remoteproc
parent6159855954ba16a8b3f6a01c305f938ea7e88f11 (diff)
downloadlinux-5efcc364fc63750fee93e5791130a1658b5061e8.tar.gz
linux-5efcc364fc63750fee93e5791130a1658b5061e8.tar.bz2
linux-5efcc364fc63750fee93e5791130a1658b5061e8.zip
remoteproc: omap: Use devm action to release reserved memory
This helps prevent mistakes like freeing out of order in cleanup functions and forgetting to free on error paths. Signed-off-by: Andrew Davis <afd@ti.com> Link: https://lore.kernel.org/r/20240610151721.189472-2-afd@ti.com Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Diffstat (limited to 'drivers/remoteproc')
-rw-r--r--drivers/remoteproc/omap_remoteproc.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/remoteproc/omap_remoteproc.c b/drivers/remoteproc/omap_remoteproc.c
index e91e01658380..df46be84658f 100644
--- a/drivers/remoteproc/omap_remoteproc.c
+++ b/drivers/remoteproc/omap_remoteproc.c
@@ -1277,6 +1277,13 @@ static int omap_rproc_of_get_timers(struct platform_device *pdev,
return 0;
}
+static void omap_rproc_mem_release(void *data)
+{
+ struct device *dev = data;
+
+ of_reserved_mem_device_release(dev);
+}
+
static int omap_rproc_probe(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
@@ -1346,19 +1353,17 @@ static int omap_rproc_probe(struct platform_device *pdev)
dev_warn(&pdev->dev, "Typically this should be provided,\n");
dev_warn(&pdev->dev, "only omit if you know what you are doing.\n");
}
+ ret = devm_add_action_or_reset(&pdev->dev, omap_rproc_mem_release, &pdev->dev);
+ if (ret)
+ return ret;
platform_set_drvdata(pdev, rproc);
ret = rproc_add(rproc);
if (ret)
- goto release_mem;
+ return ret;
return 0;
-
-release_mem:
- of_reserved_mem_device_release(&pdev->dev);
-
- return ret;
}
static void omap_rproc_remove(struct platform_device *pdev)
@@ -1366,7 +1371,6 @@ static void omap_rproc_remove(struct platform_device *pdev)
struct rproc *rproc = platform_get_drvdata(pdev);
rproc_del(rproc);
- of_reserved_mem_device_release(&pdev->dev);
}
static const struct dev_pm_ops omap_rproc_pm_ops = {
[0%r?N@&r0*'{}@hI!_wG/w&WFU01l^ Bw*;5qXk(] ~١}Olߵx(f#뇉_`G)FW({KO[ܝksQ,m(6[P&,q+eji70K; Ұ):_b]aZMMbl,"$zW:xplfN4XFرv ՆE¸r?FvAEM ,=:5 i ¸OhgyoI3.N\ctX.7$_] qsv&Ξ~3..CL J1?Ђ͎ƐLCE_M|tkԅ1|z Arz}T<ßT&ځM *vvBӐ:x.4|9?M}4,&'WL2^sYh/t\>S"9o0ێqKfr!Z09u50A[P%#V{ >߫zGfqkk} fΑZNYAʌwxڼiB\fkv1pLlI%R! 2h 60.q [͋/f䐶!~(K&wP HR' AeT3 ^w |H` V@G߱$ɏ}KwLcfB fcblJHxtl`v- xx bt;GAjVM;h4ZŊvةI!St$^G Șf&"boL5hB%Ր"xь%+֨q-/Uz&]je6qmx1ձXH.Qσk\lEa + ,\oad[Xⰻ&OySѨ9L2#%˳ ?9F~_ϫɼCȈI;pz᪤LSl^ܜV~p>Eŀ`CWS9MJm0 xyJ>BhB[17D_(@:yݙwӇe]㙟uk""~#m^M^.4tEgxh6o;{̲hT50y(n{gQC%b˅` ~:^o?e6Jb44#]jƱwFVwur͘O̰qFu.aQlƓ\{+ﭛl Ҁ2=VWb;no_a_)*Y ˞oW{^'^; q6G)k2V:VJָ1Kamc'z+>N8S󵻭/t*Dp~vO_q=9-nG\T.f og['|?gm/Z-nf3f5gE|_IX /qU^uѬo|o__7^?nNQ2|PuU'?uć~Tp)?g^~}gǟ gȃP1GIp ۵ aבC^~'%ۯY[ jpA7k "ݿUt1RUB3[f 4rXNr# /?/zxAoη8%oDe#& ѫ/܈'o]Cӡ0DӬ1w~4u|DA,bDyX{ zk][4FN]/\&C,~P&I nSϞCc;AÒ/搓9gl| n]HGy% >x\ C ?cO=#^:0$@(ot2(?I][ZAlG\80ӻ& .?WC ~af66Znx;v-'U.ԭQJ>7 l#b  rrHQR)DDv[^T~ .#K*1 !HP::2E{T|lD;8;F还~QDGs P?kW Rq.rHAٕ?lU3^dWW#\VV¡6qsH85eSoMxɩPkgk;SsA6 `wywm1} `aX9neFGAlN=ɕk'rG?޳Y'Gk 7wݽv@O _8QWod@@1@9ej?^]gDoNOSYzpVdA{5a )ɬoZ((uMmk4Dp(;0/ ΐRMo?wfZY*G_mXE)!手 yBjsH79r!AhO.kZI,܎JeOR`0NpB+8@xƌGE IʩGSOV1h );쀍򼟠kR ,GD .v1̶G}9^UE I՘>uu T?J_G\zIC"9o>}Ϻ_b#5G_QwF~g[G mn?QX>-Eps0ܒʈ1([f<~S /6M,wͻ 㵆˿+Cפ67Hj=nh .rS5ϧPB;cG⻷.SQߔՀ#h'&AC/ #zu?D8-XÀχ7sy/)CGMuZ~=߇4Gw{|ROР@ûy˪#?Š/7[r# ,-sjχi#2Y Xr7\-#ϾP-HW'Ɯ=2=lLW\s=(vsAP_fqjg{hrAxmu/s!Q5%?!Əӟ_, 7!IpdO0J0u2F,)9`(mK݉6Kwq"'G-J`IVdRi"00W"5 OcXj#+)PPN}]*\}|7U~Y̌' NY@I٘Y_LF^V*=`o7:c3YLG8 sDX(s%Pr@Nێj#0q"Dj * N|?; v.EJsd( p$Bsx;Axt;x0^[]\>?nQ I?Tg[# d!HRWX#\ǣ=\ۇR秢^nt]~q$ }8̩8-T`O/$y8y߯x6_w~-QW:}o>NX] VMfyDGڌco:uG[8k-j@f!DnnM'Q⋇a c ƜC[nְ98?lQ7ܳ{)/:zPΌf1tSBvsFXncݍG9oe=׽|WQjt !B,qm,xlMDT)L9mi<`v 7|xEPCf,Ή7,"VG M J6DM {L(Df%9[^!:V31Uu ` EW)z}Z?7PxUL*/‹%1DN~ͽsOa izq[q:6aPu -◟_[OX {Ʒ ,tl =((L.: o<-'rd&%B(#1&+p؋#HøX4,{,l_MoNШϬ^6Kp.vEFv!X&m Ÿ́!Kͧg4 x|kZWp$ ̣Pp]LͪH4wy<~HSc5 .Un6g|8*r];-xFzt渙:4ş=ǩr 05Q+5)Ǣn"D {qD h2o)+Og N.!B>@\B2arKX]u@ 4d "cР"xO]-rHmÐ?Ӯr3oϰlm dHϰ~bBUTU&W*yǠU13mdN 5 .#yD(CR êLAۀ / +ZÓ0 0/NmW@nnܲ5yAo>٪=C/K.Y4e=olH4Y]6 <ŏt\qp{leu^8P.:,~]:{(G"8eF|G_ ;RF 9m4v~I=l"9vm]@2I{1)Ѷ}鈴PrFG7w,? Q.СO6{c>3_nٺ#xB7 D&0/(9]ؗ};/_dPHƋ"Jt'u>o bwIVB){-餁=k(hC=ZyLBpמqT^>HEtF G.g$xӄMX럭hҞsYQd%n{} E} k"r#4ʴ6s@[g D; sZ"PcK"3o{Wc>)ldJ9& W &K%j΄||DNuQ4\/&'gLzTW'У3t |`<ϗ}zm|쉆gBLc*4KyvgӉoɹ)3xx.E) |X߈[.E|ۦRgram|mq E(혺h"yiI}GHνQAv=f?ǿJ h w59+ *$5%!EY9tđ9"<5+ .C~z^v쇩A\rkT(N: !\I,jQ[(Jr)e[O $1T<윸fPxZ}'AÛSdm9h0q+g&bf9ӚNM;4m{[ kL[8]Za,7\$T AZ,2)ItIrW{ oY7lFKscݐAU!{y#6 (- $0=/I?䚲7"LDj\!CZ/P~,K=x.l.=1k3a#Pa ,.|1Щv΄bE* q^xi/\>摾 J"fV{?=>v:ZqTRէ.eSIxʙx<[%Qta冁~ϡ쿜g"3ˁn&_Fn^ݽV(1U(*UKwxTK2K+M=S?z_` _V9{F=9tc!s?i FJoy pPlrlHO.;mN~fXkE@ ¾^P3{<e8r kȧWZM՘p%?b%a''VqnLԁ׎s'E[PMs{brl8xXuӦYn^y_BrzUyl/ò/9nee^P4'%Rv[BNY\P"%# t?YZ/(-(ÕU t*j$b$Da绪. 4+gG랧\@v^i"1TMb?Q`JPX@mawq;|,#p POhG?\\`go5KH8E>TH챴*c[]joz.<~{=ҥy#y ,dht.YadqQy=xZy];RǫZpƂ_mKS2xF|T\yM1߳H>*@BC[ ]/@ϼwN5lNƐQt`FI%`~ aE&ߞ6Ei;ˊl'V0 XEbò:@A49\&aJ QsY*D>aΎ Uql^jBXiuvP P6a`[6&2 c@Q:6Q7WL7_mj`˦1F r'µ >UO j(?MqGsk"d WWxjHXIR}9=o{y9 ǥ8 U AoD5O w0 4b m;Q@r q`B"ݧ9>7: 6%HriVbEB$2o!fmNJ'#|[/u ^yVBB)j"}XvzheB ;Y>(vP|!ke'WokL/{s9&! 5+dt>g9q M.Dt׼Skܚux S B%.+ru`RͣP^olo6) #?8˥D;do4+gh#$==Oժzڗx#M2c0M3}ͼ}Iñ /C(QP 6ďUhnd#h" |t2 ܱ뫈Lu_sWaɘWۡ+y a/%B(l٨V#m~a#p%W|)#֏Z泠Ġ㝯(,O~:Cu=SQ Q4S;: 홏/z—l=b`#0MدL'[__ )AYfљ.qC  q1<=+j 75:z8:>̅">V=A3a/ \E`TtuDTMGY/tؠ63;VLlǢ8x˪iB{w%Q0|fC|M$:#f+ײCݘu 깛x*A% Dj) +C Ԣ+أluz`-ب/p#5Fdf@g|׍]/;)ք6B.Wc^E)r6éq~"džs' 7M~tiop=ɧ "p |!FV/i?V-ic-nḗi3D;hKv 8^-(B,]6c0b: c5鰋}ipw?h죄`90׆VbBUTSc^|Va꩝ 6eWWr[U&9Pܹ[3 \"W Į櫼Vk3 ] 1f덑Cm9_^pZQn?Yq r/8xX\k wakWws0BDCe&Qiߤ_k"PÒJCj"QW2huxË^PyIίo]]mf}rqLߜYrufLvvtiv_ܤN 6w' 3$A̛d Bseckh^A.kղZ fg]fceK8^F&8WVKM6C25N#PN4$qZ JGA(N@ Mg4VSMW>DO4|e}Ock~@g[]q## ثΠפkñktڧ%^9xߐ^/#ưJ^':(䀷b+KTMЁ}^R ud}adٲsSԱ*EG_o;h 524W8ĚD\I>%u?]4&RP$nQkd߄L* ;J5'KG^{\/m }e,^Fܸ|!UmVOG>w;Lv6H__4>A(4OurkО͎zGGդUFME rbUt(b(CwqM^ A~n5sZ{-cY]7`X5jdX]1G!Yu؞) #}[h6.8԰俦XNnwCˏznk~rZa})TARX!UrkstcWJUsW4 E=cX±Gly3 F9E Rv5`u&ҽ稍O\!=i~<.D?cGDAYmH.L1yNls칫4L MچRa6R;U1X_>s4H-(,(0grGkسdu|Vu]sd8j<豔b+:>9f5vE隕lzQr:U$^bF"M,8iM`yDeK EyJ@@rk\ e~!fQB_kJ 2$VWp~d9 Nzw3V h ֿqO9cd)Lf]J)JӴ">x,Y?\Q"ǤDKO;Sf:'MVK7I 僳.i6H͐[]NMε>q6}{vc {S ШDUtOOU4|9* as!>Xƻ BG"xGl?!&x=_,_4o8 j|Ny|J?MD&+2*Oݰ2s2a< qz  8Be5Q\V*J0r\jꯈ8;]J_2`  zxovPi5z؂CSh Y/,|+ڱG(=@Ө-yN( dư<;u*ma|eK9ff)ӄS~= Mz'7Z|TDF ;͍g▇|gbg#ڿF{'ZRwYw vl#| 4faI7:9迚 C\Cq` ŸwslRY5{^++]\9bxw᭙41ـc AXS? {lnoX 'Is0!8Od<%aV$!6`]QR;I(ꎏ?* =N6ǔ#F G 2ϚBIl ɩ1j"Νdgm1EVd``m2T"(Ĝs)EʎTeK]4MBoH]?3#smSav$4x'5K<(2(9r,]Tk 5[ƨ 9oc(7ҺiP['-> N^Ӷ#>P#VDzuvWPJMrXCdWttf^5ejl8tKz4~zavZ\@t8|Urg-J (ƒ}Gʌ=ץI`:Z;(PDŜHK ْv&OiliIσڇ8^|vGŋ# >kf\ If/ ?lFuɎuLcjbmn#ǻ7_ >%lXh4=7 ("f}y玚RϣixP; ΔA_bLg؃o/,?Zw0ΌP@>4.ЬP3;h<\oXs8O@EPGl¢, "]LVQrP^ыXSR$ JxLOBFJ["Sn"^Y̋ ͟ep| >VqcT ɳ7J#f|{D. Bk f nzvhϩ6D*Fx,qxc~ MV 8;Ź1 NL|0|ZǪjOlu0m g٩dચD5>n^p2Ԃ2N lb ʩK @&sxUN8 1l\f=@Y:ٍ!=d0@2Σq|莫 VfCLKҒ!R}<;#)t˗;;zpO= eF:c =J44#y -;<@qc02 $--zӛ}WrT6CQh⎱Jbf0~|shv0oV[>N99:qTB(sz`;.[kHZx^ DžC>!XI~Hٍz!<:8Ny`d ƢG>bV#5s %~zg+jXr.@oK#6 &^iWHz|C)Ntb+Gf9%*}Ϻ[`4 Q**HL1J|m}^=-"%Pipaf|o?OVㅔ{9G}p]GYpyi[==Xiv9.Y[;(+}ܺX *֓ywDP͘krGG0|0K6ٖ\3|iuGGt,}Fj/vLh}*Dn[;ۙ՗F˦]73-Z->M%D * cCETY"I2FU8^KX[9.EAANj.V :CD' Ea=g=m,\5 X0֑VB,\p*r)zѭ FTHT?2 wjE=?@F@9*ڪ@f[QtY(˺ԭ|ڳ c([M1YLR d4mMCnGJEtr_Fwk|乄&cT{ Iq%hd`hx`T2  s'IKǶz!KD3鱛^4Unx DM߻㻎cqwy(h ;$ 1|ԋ +钸s!CfEr~0 Jt R?Xx}Iw3^W;.Em+<(" ^}ԔcR{ʜWX=<|>xУ>,F%u1^ZꍴX<-Ҟa|Y k[[k {ZBV0 O\-7XtL3Kd3 gl7X=״I?~WMKh=SocmL0$1[Qθx'i@`YU0uz.>G}˵TEIHuVᫀ76:" !\̅lgm_uXD%2-c{ düøk熛}_mZH(.n׿cA~pK@s>1f Vje ,+KMm&O"pL?8;bn/.}əLTH.5%l {GFGkkF"|27Go6T:|~O`͡W`D`HHA?*~k8b󔶭l?m_#xhƅ!-)w4LZ2Nsb?+tzl5MBTc} 9+it4i?ڶޒTrP!D%s{Z̹CU2Daߋ |0+nrG{-ڤMz 8g.p(3g$Go~h5 2[5G9lPTNR ym8JEՇMR?'URtm,mGP .ՁXZo-)C{MVoHuy/ p{zF1F1 )?!e M$W '}q$o:>?͠K/~bvhOGKRh$s}VMGP @X vetşn} $Dm@GSl +5/=SBHX%S ^^6/o|~G!ӯSP B ݐ̆PLM S٩2 g]T : '0>vƗ;.ܝ>wSIh~ҁ"t&@?N@aTٽo9xwPr۩qCVB.ėƗ-tY@0Pϵҭm`F׍ԙf1>1\N:FHjP6))B#bGQ7(V!_8|z0D)}̇" G8c;{Aѳtq4mי(b˺?cpҢ.2r6^g3D ), ~zp6C[ζW& 21j]:~inӛK2OհX9MV*`@1K3 >?1 )#H=} NBDmih﯃UpX'5?\yQogvSq&N:t$cpP}&]XQQdj$*(`03E4"X/_ۡWp5pt\Tz ` `-艘ʲ2Z]j u^I?Tc:mþNA4ChV+(THA@BQ" XGpm gw_W<2Xq :^͵48C0|P,zi.xvM|Y[!#F3Kq{ԥTF(ח푾 `QRW*QRpB.e~ֳhDY,SBB)M9^e\̫3,$aID<3A;\ M\>\!5#igAdZ88K~jz|IG*V8{y:ȹؾA5F{ h+&g<]ʯ\D,&XK՜!VKAc*4TVynEd̮z<R- [rr}v]F8P#e& b‹,jEh2X'&/g>cD籝,Kmd7&H5>Okj&M#by_r3wKWJYkD}BpvUϔCՒ'm@z}w7d Vge\5͍Խ*]H).+H3hs4@S IF:#ҋ/A e?O da#N~>QȒaHHU7 #z' ):R/*A%HnaW-o ې9 oшQAU% 9挅#S_Aq$i(K+S^#HLЎny֍`aTK8r_埗,}&lG1 D˫{s:B](R1k& lo'b$Y^w;;BmoY+ʝ<xR0{ȼ9b z7Ap0r0l 1ȔJw`|wMp1@ l/7 `~%VJIDBč>٘~mPx/"gیOu"<_lK:S!4 &/_T0qg>c[)oLD2ىn=l=8Zp96t9Z0%fXIgTu}{cYKAC*tBn1oZo)'|%ۛ oŚP T\d*s+倫B{/7p"7 }tjQBpv\V҃bױZ?4R 8Ea:yX] 8+2I@vMhSC}2.6;)=`7}d(>V1ߋ~r 4Qb5 󯂞87-gSi2 +USkxZĩ?^ k;MK*nL*[}qx3ᤩO%~v \YT>BAL  ^3UgC$>:/MA&K:<ϳ~}\o~bT^򺲰'H{{/9**(i)f>A|\㯑[x_H"`O~KxLRcbl0!r:̄:[sɖJX L@1en9^p`{B/YWg | [deY}Z`4#J_z*~^$ޗ;]ysFq@bC~FӇx )EFecGN+8Du LesggzT,Ee$}-$qUUU5C˲Hb 8Wp F!!s%@qA`Z ZQ|c w2Tͤԃ܅s1Bnq~TڔB̙ط'%׮Msqz|8NpawDEH-q;2,v]IZ;##iq[U>CH|PIB_I][xL4RG.r.9# Zz&Sp8gßZAhh;x=.'P¨ikڕT`(%^43kUGWGid-Iv}S{&P-0! c=Ŀ0كUPlQ5R;I΄%Bla% [hR@~4f9i>'E>Y߸ 7[KKAWiGEjnc lQ;8~O,fw/?R+SGCs*7BS-;2 ω7}HH; +Px}nϲ a?ΞطJs (PHzt޽j<&(epaTk)%EqW-XI3i&#uõpc  +PQCm}#%/|9FڎLs7ܳ_adCqhiBV$Tݦ2萞(p! ^§Jc/ YDAVˑcoQ9Y㱕yU#R+h_NL/ݜal"Uu#EΥẘ#/?6sĒ/8 cO҄Z;#gw.5V%o\D'RLs`<åe̫s<#OwZ\=3U.41{God8߁ *d*`,\ /ulE%h`9%POѧmfBBhYEW}Mo@Z}8 [6C"fEEBARyhzdI=ίmS4|ξMvl{&"^p{]g\(EM a5 f u#{ʻT[~LM3>m_ GaSq5YypDUѭ+Zbi{p7Rh$m@8U}7\Sɘ'KO 1`T< w~~Q*0Ix(}f6!e:0f'0csfu#A>>^}4 &8bwsRrQܹg3c"Wr [-ZWSв .nT{|MӇz'[ުsٕ? Ou# !T^ndqCCJ+K0ދH*J4~ ,YP PIad8zqL E 6ιTο^?D+t5mzh@1:Jxĕgk%2vp'xW8$c#|K#BgN 6WۦS)% $ /B3gBlhLӷST\mrmH UjCۤaTq)&P p$S%rC5QOE53ȚuȝrM}W,d; =;SkANIj}jJ*ewy#,zYLްUZdLn *3WӃCp ?陛MRj<$,S-Cy t)'-0>F8cu33dC!N:IȋEyi3؝ Ia0da 2KE?1z[ZT3j-<ѹsܝU1& )ʯݕ};DI''WН9H;uc{G;g3̾(\~cDGb$͵nGxsQ8r:Hȑ}o> ogcOH8V$߷f-Ȣ|[{t [FǬ~Ř 󸮽+l{QyJ8N *CSI d1A(D [m90IkL%UR{& Tc? \j *kğjYlØJYΓ_̂uCk=nscB?Z[BbQPIsE2'#+"`U3No.11#pu8 X` &<_~Q8q3$9pt9L d~O:)02!MLaCi~6p]A؃/ fmԲ.!HR4?-skG+ZK,taAѳ̼]}3)+۲6 YTOY[P Y_(=-j1s nWEP(vX&I%GGϙ>J"rzD18n~)mӡGh ɨNG,ֱʞ \sPO;% uтY^[,@#^8?LA!|uؔWABN0ɻ@>;<桄eH֕:PB-5nsܶ >fƻsO@̶Q=tf&>o,̾l4&1;XφWUNe](F%NXr-]BUqWܻ^߁EۊH}-<08b2@~^}9es־]"(4כg)4DӜ^F iv}/f-BۭV@}4_/OasldX7\y('Eпхxe;ĶJZ _0u/)#0b!qYo2 ȥBCϛjC`P9h 7؎BIFi}lC<: @wn &m%=f$lX) F?ۦfo؛ca\vB!LHxNiQyhQזar,>kjh;S_hH^(B[֡-M dO5$aCbp]7 Y}~x TF 5S~I3/UsVIs@=ʛ0DFC8 S'8Y|(0X8 N#axbA} 9FAû\=y7AߞС\^tbl l'!`ꅰ:=:M`F.xc[$gI^tgg'2N]m˳x1P$G{lNd͑v53t%.Jw3 5"]\e݌G6 ]_Yv3lpR$ZC0G%kGn];*ӫ$B档YUН9dHp/*DȐs>UO?5CדP$skѳ/?x^SKy !ALosӨʭbsC/naꡢPZ9^\n?#~uK&0S pd*Q&\=KϚ_eڡ^ KRds=4KZBAԳ0QXv9Q)_Y2Bx?3M@b 6%#ߣPjy9L,T?dA;ټ 槿Ya2V ʃ"#kkPz Fħ({ͫ]#-ǽߋ5L@`s}6! f!!Լ@3:46V{/~>k}%'" [1q($aZb#ll3+Wj-߻mXiuvWϿPtr@'CD4*DDphBzI RF ~/Ýݣp=񛒡nPF?`$NDsؼ:.ljd X0RUPl*֬zGXK\X⃷P#\q#P z[#&cdZgH_%BQB[i m>X%Յď5*!Gn,)dpxZW>v+oZZ3=::RWيa}w ~Bfx§Z19`Dw.W{x^:yz̙&2Pu&4Z=28%8ߠ=b4>^'cmPcs +]{ ~, e:4uBV<-Fә9٤>hoPrVGD|z!m.xSm<(O wk\@<tw%tdQzP}j<|OxoP;b1❄Sa^ !{2n40fG _AȄ5Vp%ӓh8F:0:3%5Y|aiI*uKb| l9D:m~0˸:yFocfiBO;Bz%gi?RǍxo0s,HfURX=grL3c<͘NΫ-\ 2=E!$PO8@'{qf.iꔓPz @#B v [?g}&Ʌ "i'\t'c0ޮb@|Cy4gc3 ˭Dv;)X)`*QFڟ3(?E++卒B84k{5"ͻ{icʜ>_|ZZKZ18hJ%YTeO|` i YgOu?i6v-ͥ.pW0f1_*&qqg/ZtN:YLo`?G|Uv;q\FG~Nk|hmISdz7:EڡS;[YWRds{9⬄zX1O:\`8ZF"hC?Og7%HCO]п0 2{EFu% V1[∕]NnBF[]fJOe + cu;01AZ3vR0T;9ꙧ;6_-Y lΌg#ۇ\u_tq].2~ʫ<Ww+>pzxYlXfkV@>Gh7kl̂@B8Tf grl pKvw6ڏ# e/Vn"cLKgPJVt%C9pxG "e}cBH&[jzq(a'u-_[C@;˨v3ʼc]dcxA8հOj##Knwc ޻4U .} xMn "_1X-g8&>54pI4&=ҭqVړ%COZN;67e 0N9}ry4q˳J(ipdܒd͸gNzFM.\( ,, A گ"k{*#86'w&텭5$n2ÏL3ӸCdn! |čVjB2dwOPYg]v4Ip[,u;8l?}$=:* 8B,9}xeQ\0LTOfƨaXH}NvI6B)ijp m@AVyӭ& zjΰt!IHrgwQD/VaBŔe?_@`bY:e 6;ٻ:u (4*52\uVOwOR$}s$J:C͏J7goQS-i]}&+)e{gMu)ZqZ[ Y1PM$4@D9(纳W |Du!dgOKWF"{%>c.F[|/( ɋyDKۏ8*YUb:~|3^.UD)KJ׵ԟUmlMĻmb  + ~+8Te}))2Z @"4 4&^ t4_I)oŖZE]Axi~ W|b`v}jϫ!Ne&?6#Rۧg5"nF?ř!9h5A0~`B~7v{ē Cec+YH~8ܟ?븗˧1JUyÂhfneW_5B$w_i'èytCy"D<")+)ǮUwuLN/E:kwb_̽1ky}Rs?s33= J-#M'k+soעc'FOsG+bd2/Wwr}vY(nszڶMS1rYO: UbT0#6P/W2^O60.?aHgL1cvSQT=$g$ail&A E)e?u(̚t*E{͸m׮upg۶?W$v+P?2Ó^7&6Ǫws0Ycsw7 k@cz4^ǗkI8hdžm]^76 Y`A z%;~#p zCap ~1]am?;?}A ԡ@i`PP5lTcER#HԟzwKH:wb!d'.sQ.M\oʹ2aD5(% ܟ"QrA+,?%lj􃦊oMۿS JRP4\F߯plzK'Qy?{oڞ\ه9 RIALBO?cw PT@u_/]nctu=QJGC0g7^:fn9cO}{|u߽E۽BOWmeۻx<{茤ʷϻ97RMv E";{WcϚ.+/7/v\iݽwG(3ucû8gCӅΩ:frwL<__(}jtb ֽo^jۺ!w{w컔U8[ne!R]hk`tN;Wb/پN[1YYH*03zϴȇ~|=:Xuђ¥WVhNՉ{=]rUPYYG넁U ]OOSxꑲ=#-6ӢNĪNDoܒ10 D!Kd4 GO8^n!; 9,7(QFhy=|ڢ/~ ~b6Ú붼 zh0X3LqW[Cob`hcrtmߋЅ}b D7IWqQ pIZm9;zc ϐ3*bm%z}3;ěr9&~J4w~1|&]w/d bqV"GN`")b0tիaa\ȵ՛W6_MN&?Q$T<8sޭ4QjocA/nϳdm >l9j˙?ԿoKN-wsd#υuӗ6ۃ^RHc߯L JH Zե0Q[u7Ζ-KWÕClGcTqW(wNY1}&Y{Y܂0QIS]CV?[~۫flYB&1!=s)ʔfWpX%Q "o%Ⱥov-?ptJ(7& SVɩ_󽀧 Eo/AnF_K00)?wMkkQL?6ʫ!\ЏGMft^AD8QC9zΏLJ^Zfrag[ ÂvPXnA>J~ /a, \7mQހi`wl3 Wz:5uCLtC*4 0&KK *YP6h4*Mfd?y?wz>+N8γVaֿy4lH~n)?C޺#F8Mya~~PG7{Bm*Q6<56y2j ﰏO_M5ATZ<ݿP]O2^ujwg5@949qW$NEL D//\# \M,(!B#F|v'?K ["{|ڷT.y >NRYz6N[/?adwN ' с+v>?`É@zw fȢY>G3vx2 N + #dE![uPX/EEjQ)MH9Ye-54 I$,j!E"E)\,s4N$VGA3"8>LK9i ViǶ/BNJ+f\bK=}+"{5WqBV#C.Jva=>O;yurظh#=seތQ?ZNe˟æU]SyV T/EYL*Ɲ{z ľݵO|;5]tQ\pc̆3=R?8z ʢ 7[ȎA}87 _``-nݬ~ -TI~t{Ea J?' E<\<* uBC b/ $ BwG Y$7 Nw֐&cz)擨g{)x 7l-rPXsv5IƝBj0LǰWdSb511چOPn[|4֪?W#5Q#YxS/gXx)?(1T6+p&tGNѢjuk,ʻmQ|Y:K2-[+W"FBcQ3j n> >OgItkƦuxBRP10#[Z序/˱6ͮEҖt pb:5sCqiall}.[yk I"rne /([L&%`hW9LOr0ؗSǔ!8ca$-BiVBWJƧ#&ϣF;+6$@!.8\8o}A$<@TTI ?Z8.*\VjA4~AR0I\3xZspzHehNd^ml8Gyv@z7}4p:M1;ۮqՓ͆+4Vwa[iɋW^ Kc-l&Lt9YKBzcwjm:S0ʒA:9qV/rX"—Ywę@/3'sR"[V(y50CB< МtQD҂C#] LŷmA+LTE.XLTm!YNe<%9\exQ(b,ﺽ2Wcq.4A|ԙkk-9f ڥ铷 84?ܜ`䅽>yY'syuL<]\j˟fro~ 41hdPΔ6 @'[o2ָ?A h(!G`V xT56 Ɓ 0 F놼9 c"`qe,DbإI"(׈zS' \mi$AT4Βpht$ @DA O;uֺ`o1}r[,>?U_QOo @`ALJjA/O}!)!$D^<ÓO1![I!lV1&5݂Ќ#SPuOi E"ܦ=h~OL-jw!uPlۆjI@F[ "G"TuQu֥;gpQ_r9;k-_`zK5mBmsNW&XjKt%oۗbᒻ;PM_X 7ʁ`Xe\$Y(NyItE CSf;xwo~dtk5J'0O*[o XN8Y\NHMLeGclA@gWMgwtlm:`4d]RTsI:UuL+)ZJv4o0XLݑ]*tjC@kjG=t"Ynw;wfw/|b㔗in _obuc,18kLVBK"s G +'9 Q|YϤ; fд0=X&g\p5dIv h')٢*h@yBg _W/\%k\ppZۻwX|_5b.7…p"\SGxnf71w|ŀ`*ifMpM-37#QM#cgX'O!_W^zku}%zMf. Q[JxZƖCwgYրb6punUe U6 sURr])gA&8ؓZR{;ǯo5au8?Q0cA_7L8 T~W@oFmpDő/Ͼ.л8Bi~ed{a= *5;Ƕyf dήQq2\('Vx"k )SկEӔs Kuq b2m{V  0 (B QURal[ +PHJHHJ$H<@[Zru@5lnTcu'*Q k{@NFیk@0Y =F`GtDQoE%ҙZ]F~ϳ=q',V\ Z ,"'h i5Zf!k {U-]N%FD5VL.#S 3Onn)Zm$`Ԣu Z2hgn{lf tnl$H0 k1٦PPg,x3EAwѾX_w g*>:8X)(iGy~4A/|wv/ؓKApŰ DK BA4] zkHpL;<ıiivɜ6Ndjqˉ}U,%+j !Vb%|6_)Cz#oa [L6l(B6f-DuC1B8; rur #%Ծu5Q}]iIA }oD}]I/%4C6=f7~zrܨ&}_[7u2.&o*58ޭJw)OПg3 330ڱ0ea89h>GT<Φ)txn( R)T [?_CKƜ.NFAd1iF9Rr;yOdl8ͻ(遾6!_r쳣N>"+x='EG34\Pkssϊr9QYo iTW 2OAzCw Fv`_1LR9:$-F[h@_LFj>THCw HHt>f5m[Dj0p;@^0K}j&Kck_}O,%B*MMz ybzޖRttwxJ%3I; !'W_~}:Rh*D m@ (J;8hSGC%y@{0ۃm&+:̚^ 2%q_`tՇuy'eE*V#NsrƩ1c7_Nw* f+Dh 8$o{">NAl@-RA t_J Ob4i! 4M^ U:{wI t`4\!edKǗ\!83y7zw~o@3AҪgfv nA2T / )]@`'n 㵄qh7u43.p(aK@@ޝk@p2FcVZJ&J&J@*(j(j)((F(IUUQJԼݝV񓧷Aaw|b`3O[8Jfbo^K&$HIjt$Llˡ6 sȢ"RKE3'L|x*8wJ.]KâWGݐxoRڀx!!;@MLJ}QlAB@" HR(hF Ja *ZBX$ `Ja@tx=f!aERDJ#j CCCC!Ţ:եcjұbV.ܲډViV )uXb;&ڲmՆ.mZBU)uZBU)mmRVZ{UwwemYڳgm;VҕHA^w64 P;b@ 3<k)~VX~A~Lg "zosMJyJ/BWolA:lD:aNT~R/E1 GhfHV)wnA ?n3j\ĭ\靸Ukxrkp}.. =*DU%VGk=mN ճc!yp@@T"Llʨs]Fc!Օk`XnDD~ZA&k={ 7 1\ n^}&ֈBxp14 :" `*ֶre* wW@  mzǑ7{klse*R5||g@ ćr; ^봸P <Lr*h P_t>ߪI,'2.\Ip'W9-Z=ACh8S HL}8`6];gӮyb0wJv-r=J$QA1ӱE/搻7;=n-_Iw@t^Bn9nO2} !i4ZOFh́ 3ҍoD8 $DB@ =vDD~v3i 'W>S$8e(3zτ4` >ᜐ_@D(i$7uM˂ i/Tl,1*DC0rmuWty[v"/ ХDH*Tu@hMHDDT`4"%CClqR,4؄0 %&d *D(P~DyUzX`_ T@x/0a *o?+QK@B*A*݇z3/~M=п0RI߿3$%^ry ۖ|*) : ;;-a5DS B"*(e5A<ӏG-ÝIHHNIaߺ ' 8W5mp ;f;b]oxegL`!N،6T@ ĉ .6ٻV8؈4D+3mQĂXހk-{rK.Nl?yԇ u^ Όzsĥ*+VN;ݹu\I5i= ,H_"W2J汉9V;kzW$z$sR_ALY< ے!BA(6r 0p"q!I"Pb@NGؠR Mqӗk^;7 dc!1!Fpv&Œ7b] Ť)uvSO}p sph]ZGUݎ#k]+(\!EJ-BeIBVWa54d`-IG(4%|uHwe\Pbǵho3ΎiBpq?>)~ ^q׼Qd h: 9lHREl k=n;SQӝ_Yj x'hun(qn=#@`@cpTy9-:aٗՓFs&)2:?d8ۍ|Bݐsә %b? b&r- }Q/΁G'w"$ ʈ`0NK @xGxNXSX+2KK{- 1A.mFݺ c6w-̾օF^#њ3[das7.2a;kL-%9`囝h`ȈRث,O(mWvO. [xoTlkzgOO}?˪F;?ю)-26^VMLi:F;8ڒp-ǀE޻5ێxӥ8[X) -yY0Ţfχ*oxl.m-ե?_s막:to7?FQ~9-*|(yW5,gE?[~.@o$Q:yb^?;8sӣE 8g ]0yeFG] 7wha?}tN5uzzΙ^Ny`jJ&ȩՇD"FbnɱPA:HN3@P|ˈRkMg[ qC3BO> zߟ4xj*V!zoNM *r,E7熅*dm8-=n'V k2!:a6]#q*Ɩ-9䧼k^uo r|,5R.6ok^b s&c۩-p_7f+}*{3cQ~):)`2f"c؆`…\ZY/"cSFf_z4zi %J3!㰡?7=gGCG[)K6GlcK:ݎ=}c6-kgU+A/T榒a5 &#n|=%j?6tk}О_,5Z0(H. r/CF l6*:i?OY.{_!^^*\Vy q #݃leZ`jD‘/?ǣ 1e' 5 G|O]S)Ф#Z)N2RPMuɘ Q0%rzpL-;ƀE,l0-K:oZz[sA9OJJ ?}0kOhb;:ٷ߿"dK׿7/wkiW?0? ~sxw>ͨA/T.,0n woPr$2P5(P!PsW7{3A;M) roaif]7`hH`E;~ d[ȈJ& {_b|iĒy;O{xutҦe0S%D?Ģ|hѾWUh0su>/AǙ@pm AJE>hCyyZz (tjTx]muy?jLyVŨr3lUt[.ض< |^4<  B"(Q6(*"k=dT %psa8H@ }6|䝟OÐ` \U{ۄ:Dztlj.].r| /?1qoɱMZ9I( C1]c_"/84ux`æХ#(++sJ?59LJt2M@ivsswv.>bSXD:ej\p:+0e7Q#`WݬVI5RfX>{C0"2QUA\UÅo;LExHs UKAuFG@az}9F#32廛&tdpNA" @#E={t_RUs_3ӶVsUB() GGϣn/\\szB j '.XO/̤Gs۽7< $̿; fO3W.KF6B٤qp`ii˞J4t*Y%Q'v Z4u?9}aggh;'d<0av.>߇gnnGk^G ]PVۄÄAsT88AY$bU EZI!`HUxwNu οz8lUY B!)$ .KoF;bLޗUG >c[O#Dr:bZf $d2V4l2j&C?]R#Kn_^_w;nX#ۧPYkhiWQ6V蛚آse^'5Pw[[A*sx)p$-t[rVPAJQ]Iўa<`]gZnOD˸g ւD -rW/ks; kQVvƣߵ>}CŶh#kN[-)R9t-u*]%IXMhX1 LAIJ 2J)/SlL@\7wV}ۺBrE&YK+.ј(Y{:??S^D|}/x~ߍcLk+f}#-4zP@ Gl \*~6rw@>Ŝ!B l-Տx ئ$:":曻YUϋv׉{#+.qo/es峎_er#6Fã~Oݛ"Bl`u; gakQ7#?iÜ f?v\ż=>#uPG2.-mY 6p}ڮ_ܲ+A+7h67>}о>sBrY}tdc<9A+_|e}0 %! aA'w+I:堊P$5 0M +0=zN7 a" '!d>&?+ϡpd0E s都p0L' cY+z( /Yn8ֹF^Ċ2vx ~c[Zغ̠0~6==h^v nQzZW@{ |>#=a:kW[)bNq 5%w=^ /Y %|fd