summaryrefslogtreecommitdiff
path: root/drivers/mcb
diff options
context:
space:
mode:
authorRodríguez Barbarin, José Javier <JoseJavier.Rodriguez@duagon.com>2023-04-11 10:33:28 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-04-20 14:24:01 +0200
commit9be24faadd085c284890c3afcec7a0184642315a (patch)
treeca357f5bb56a44bfb3e412f6c1d652b8d39f4988 /drivers/mcb
parenta889c276d33d333ae96697510f33533f6e9d9591 (diff)
downloadlinux-9be24faadd085c284890c3afcec7a0184642315a.tar.gz
linux-9be24faadd085c284890c3afcec7a0184642315a.tar.bz2
linux-9be24faadd085c284890c3afcec7a0184642315a.zip
mcb-pci: Reallocate memory region to avoid memory overlapping
mcb-pci requests a fixed-size memory region to parse the chameleon table, however, if the chameleon table is smaller that the allocated region, it could overlap with the IP Cores' memory regions. After parsing the chameleon table, drop/reallocate the memory region with the actual chameleon table size. Co-developed-by: Jorge Sanjuan Garcia <jorge.sanjuangarcia@duagon.com> Signed-off-by: Jorge Sanjuan Garcia <jorge.sanjuangarcia@duagon.com> Signed-off-by: Javier Rodriguez <josejavier.rodriguez@duagon.com> Signed-off-by: Johannes Thumshirn <jth@kernel.org> Link: https://lore.kernel.org/r/20230411083329.4506-3-jth@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/mcb')
-rw-r--r--drivers/mcb/mcb-pci.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/drivers/mcb/mcb-pci.c b/drivers/mcb/mcb-pci.c
index dc88232d9af8..53d9202ff9a7 100644
--- a/drivers/mcb/mcb-pci.c
+++ b/drivers/mcb/mcb-pci.c
@@ -31,7 +31,7 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
{
struct resource *res;
struct priv *priv;
- int ret;
+ int ret, table_size;
unsigned long flags;
priv = devm_kzalloc(&pdev->dev, sizeof(struct priv), GFP_KERNEL);
@@ -90,7 +90,30 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
if (ret < 0)
goto out_mcb_bus;
- dev_dbg(&pdev->dev, "Found %d cells\n", ret);
+ table_size = ret;
+
+ if (table_size < CHAM_HEADER_SIZE) {
+ /* Release the previous resources */
+ devm_iounmap(&pdev->dev, priv->base);
+ devm_release_mem_region(&pdev->dev, priv->mapbase, CHAM_HEADER_SIZE);
+
+ /* Then, allocate it again with the actual chameleon table size */
+ res = devm_request_mem_region(&pdev->dev, priv->mapbase,
+ table_size,
+ KBUILD_MODNAME);
+ if (!res) {
+ dev_err(&pdev->dev, "Failed to request PCI memory\n");
+ ret = -EBUSY;
+ goto out_mcb_bus;
+ }
+
+ priv->base = devm_ioremap(&pdev->dev, priv->mapbase, table_size);
+ if (!priv->base) {
+ dev_err(&pdev->dev, "Cannot ioremap\n");
+ ret = -ENOMEM;
+ goto out_mcb_bus;
+ }
+ }
mcb_bus_add_devices(priv->bus);
ϭ legma軆2߫]?Gɮv]\%Tuŷ춚 ^kiXPnrNB͔~o|,FZ{m%mu'ǁԈ^>Q Pk3V1ZCPReW{8gkύT8qPQZsn?g^RKktj$`=PøŶ;v_^ֶnфxU=o/^kuR'F.;P~Xw3Qt ۻ3TYzĬ.H(XKA([]Ӿ^uMu<\ppj-r)Zræ*U«>8V9^g )2(Zu`c~*{s~w(;yNx9ic-Ԉ@O}#csd~\\HMqSJo:,NZ:_L.qv]=o6**]ehӌ@.gRC~݁e1$HĄ\0U2EE,R*=3 ̫@‡TEpM#PQ$Ƞ~0 )>U @@, |>ngS= Wu͇mP^ ,7UgUAԲJVJҏ VXhFc @Ǿ}q%Vs˫u(;~Uy|:z~|dn\ct撿#c ~NZm,2uc\/M _񪩔^~>7QʱeYt:Yf=oOî3~qZb-|MԪRoo1QkWmYw=lUm&zL\=YQ++56c7xXӑ?pW -ps-kR srl^CL6 HX`y,i3.dbd,*i,X7LX@$}0?P\M!"IPy4.W`:x?s.tn,:$=omFs]0=nJy8hb S2GD3rIHm~s$NS>o|5^PW)#$vV# [}l?쓕Z~v^hQl" @SbHe[˦G0XOv||a.bQt q*ui}f:ٮ2>]v`#|wY;|-"#|HzuMU|MMܗAvV,_w⟴~WU(߻]ҝ<.xh/űv,w` x0Ez3ѣ8z/ h ru 7zصwcP>LWÞK1x*slJ˹2c| %'kN^oE|RZiI c=]nccT>+zώW}9;,D:bT6z7ѝgڠ_;\.:b@~~;|~tB+0 6;gyVn3`Qߒ{qqy!+_]]Gxc3 zV7Kzc?<(/m—i8=\|uDٌzpi@ga ߙ {yrv.8x+xa_ 9VZCꓲUvI˷'cXcn5?o56j_V7WOlt}nWB-뤳hn2iO&~QN]OĶ+v|_]SG˻km.2MKǎz%.#'{ƱK/%D3Qg'0 .I\ⲱIB]Kw@%u #/ո{~t1)pVJTTEV,$ 6AID* P0 /kY mp8ɕέ'0!ܐ:;*CY('g~f +iMD6\0PI#Ihh#Ky-0Y`VW˷|frv"N.6G=o(vV^_YlmkW ŒfeZ\)rV?+x Lt۷_tcCk$TO/ S['(1̲k ]lU[FxPT 4u#;[#,b|sψc 9}k>If!4Z] h=GQUһU ~7tj;7F72:: mgXś6vkIIh^ .K{=U49gAOټK~f[.!лNxi}v'&/*4XQo. d'+\7i1̍ˆx-av@>/vjEQQl_+r^̮/*wN;SI%)ndalV(ͥG?qx8AjD@65@Lk|ب|'9dj N:.-^eFިfk|3pΩcm:k8}^C[c<+"v|X͇>ˏcd&՘;W;m]FUkUUtk(x5O3Ww^xmc^HɬtXpZj=ΦC&G|Aѽ.E*OUBMЕ&p4S^8}Uۇr' 1jةAhS^p6],&6 ߫"7l ze :l2ԬύU q׋9:8aH>]#~X5WMW.#m)8G V|-uٜq5#:]6{Ӏ{\P+a{P+UdmxNHh:w@5AN@?qB]cIC6V)}z|ON)GjOʤHx뮸s йht72 }D'=-҂[h *[:њox0-2k{aqp+F{F凂Qld QRNŭSG_. Hy@O/wn{hxw4OP $:ke9("H83'eU6wZJ׎(#t!!%$ALTbh8i*Vf,1Hw/@#s_H@?ł!5*> "')*MRЅД#@}с/Z ×l0HľHOrA;*Bb?p[ì8PO@pؠ DP:8:~lGog*tKUZ g۾_pfWURv_?` cW;?>;W.ٷ{>Fwn{iHTJ !qpmw@hH 5=ACMB%y6fۡp XvK&~+|*tTՃ0 sjQl(P̈́pD7L'\ o"ʚ[il|<Н!@jt:C!>hkK,aH|/;؄& D^'g,y ~`QcթǻOG^dn[x^dx`Y-FyZ̍ )]=p9@/S>& >~1zu"_ȔaF9{T<PUK>wHk}zWO&^90tg9pio_ 1WQ3=\; uV˕__>]-xUף<IY~5N DUe\. hXFQ| a;*}&ZYF+tX.-"xϒui{{?#P~~`\Cc#l- .ǡq:ǹ|ɞy)_w"A@Qo$9aYsHEQ?G_H5@iWN_n7A[tz`]q0=~Ѓ/k"L#svCp,4O"q|JquSV>qklq2Dn>",iO2/tJJKwSZEnTjϳw:[|;?/7(# Qb YAS| ^ugIw5!%/nY:'򽩘7ls~NI#ɫQ0w|쏣.~Pe-k&8v[3q4Y cn[LHM0,WBk$uLʰcck;PO戤~W"j"9ȷ7+s"tWc{0nuqpܢߌ" Hm郧83f'jȍo{&tZ$ǟ/Ey.~0^FYo:zu\{7c Sy|7zvW ZD~z jnU2&5x.oo聾y蟆.ތS0.BA>Wexh~0/ƞSZ pw"G 5}õ*.(|r0V?b#Sf\@FQ"vskau+8܃ J$d9|ң@gih+ۍ꺿t$ Pȁc7;[Ҙ͕Ͼ~>}9y*m]Ѐ/?1 ]~}t\3_7#;h~OW2YǶ7m),H!Σ8 v"[Ej6G8 2"`%ͨYPXh#u=/ 4J:tj~,"Iz7ߢ:W/<8᳻XJy ȘKXpϦl%MTHNQ`OV+@RևN-}^wkJ)r: Ո}4EvnYRJ7 qR¦/&2I1r*>U.4'GA~7PY:' ƞ|Z1"i+dG07y97P}_c;%ʐH tu/KqspoU aLn# `E}Sw&GR-gPթ_<$=senpt}ִ?}>6l#؊wۇJNt7}>)ѿ:lU)d߻A^qu'>g97DX'μ%.SJńl9GWg7z 0ζe^9۷6 3t1e_fz V}d lzXn=A߲|ųpv]]vtMcʹuΑM=ViAfMݸRN\uG}nٿ2νHxW76zxo<`>) {uݰs;[ vnv{fP/[%sX]oz 7P<йq8kv7Ϳ}V;^M w}rKʕӀ97fn~×݃vm{_F/#nѷ׿YZx1Xi?m -sm5,oݞTa#ׯV:t=[%M"à\kW1Q>V&&GL>z"P!Yk v&XQbĐI Fbڳ@۔FܴJpϱ69mx`Wqpȥ(؂"6:sPj8"$89!s[2,樎1XMk by~4ֽ 5{!')%T@.Q-D fZWHulHu_{I͑?O%u9=0F0vf LE=ibѤTDRg#˞jA" ;oX -&4. L{@ wm:d.[gEօEG^_D_9 vltl)M#bmKWa7pX0 T69<;x酰G\>yE'FqOc6GcT|S.΅gʄV9KU] 8pvLuWhH'ߕdž8va {6,O> e?Hk}~tue?G|M1_B؇Y{?srvvt%Ѯ.(",>Dv}rr]?X'6h4~?l;u~d/o~:Q귽s_tU˭7@#cd~LCMr\A#r N׳!vtO`wb}G`;=|f(B>fiPGe;>~.apޙr __(5t_UdD-{% ;5BP>Bh)Qt6!;1;ԿQS"wpJ`"x 'JA5e !Zxb*GAKs]aB"}?0 3OȪÝ ձi},֭>Go`k-F!hӇk>I}Wqy<8zuxmݝ㒠qo\N}z i]a#b4^MrQR&T 5Ƨ4Aݒ~FT~ZM 'h)fٶL۽H YϽzlvϮ;UO#h0'Q{M|rśl::JtdB^m@ QCjlyJlǨBs@Aĩun@kA8r5Z b6Q@2|ȐLw5[m@BDT # eXÂmBV8O9j0>cT8>מG7vҰS +IܮkO0{^75A{#BlP26(!4F8ujw?ofUMp:h}@1pBC Hb|;:XQo=HJ\BM/vЏ\M+6?;7dWG`^}7\b˷(v~QN0:Cޮi#;nF 1B;zEEO!j|:>"sزQ!SSQtf+.V6MS+UsޟxΤ%3~W]DV>N?"INd?=Bub]l:Jo0U[c*I4)E F8yˏ]u8Gu>id~i$!pێ03"E#鬥Ϳ!t"?`,1ʉdE?xqwllDߝ wTj_l K?GTݨd -D=41mDjl p>:;XX 6 n""`]ؑ,5W_#kXs1胀P/fɜ>v/v" O@/~=Ԕ\e_VvFm'֐N:^oioPN}*b҃u8wDnUagWo7\A@Am<CVd z[mu(0˽@YɅGhrhtLJ]$U'`O^Gmqv@:#OiowÀ$~aD6Gе]tD'Y$3f`<-"X" CgWzȯ3;ZFv0f*"ntuw/Wnߏ#n7a~ 50>byyRDœcJ>ePu?LSӞC͸`G=)QPeBWWv` ر^A]] ̗ZrIiJnXE-b_1m{:Ok̝/$7a$x۬YO3ѾSddGw=?U n -w!#HCǑo= dgɉOTdu4;8p5d^kej }{v;Xqs0ȶER4 {Dg\ǙsLm~lG9}<Vgl3#n gL<oTnCk>*w=vl؁;L,{̠{·*`FgWo|Ap~e6cic8(qyaZF!KS}z6U_~}jl]ל<4Ft-VCr"DEQo/XEb*G㌔LQQ]|gj:D#<wT='\\#D8FTr8|l:y@3FmsL{[^y:]^b@Q1IQ4QTD`尻PXz ~*Is٪$FHKxI ۖ0=?j/V]v Yn^'U>k(915ka>r9n+-{ldx(";zIʑ}3 ,֩c5a˭su}h1p]+~oP#)G8.P ncfyzGT~fMl/{;o\<~VdDA8/Z>Vȁ ۠RW."8;MGwoᢥ!)Jʸ͟D\P}3(w-`GC+ Ue+KSx]`gJBpT'$r \DASpϰ5^`\_5#"Iָ T3r_~as1 TϝlP/ kNgdvoW^y=uoLJܿD\_ҁ޸x\d}^~n[}\ǧ3P~unp>ށ>ca0_ o>g=C `߽r9 os "¯`JIy4e!.(K^6*J 8lĈ -7zw4!7~x! <+Mtakٸ;95Ϸj9& x7T“'rR߀ٲ)%k4Weԭn,VՃ+9Pl?m4㜦(e9>N/jgmE:y\>9 F܌5*ɖA!}Ȑ}had> ŽanKD +^>R~u ;HH(A wht;o' e:8hsè >Zz|2 D^ S>FAR0כQ&q>'DLȨ 5qh~ݡbPGꭈ 8L=Թh8B923n2˖KUD5fָaQBy|ϜeEP~ns*{AعG}ws^8tiu/#=)ŤPeň^7y?ax!LPlGHkh.ǜy;*)C}yim 5*&L|m(lę2ro6L'8|0b]/B 6Fe@_g߮@q;:G:~UϺG)=5"|4<'to˷GTx_Q>5d VX0 ̷ ͘L'g:R>c{QQm<aWb8h2ymYThOِST"Uu_j֘-1QFLR.ܜPlg,f[30n!2\;wCX9 DE@Fw8j ySXp=ac䪮J-XQ]!5D'N/Ijٱn>.oAEY6|3Û!:I.~)lj~J;kr4L{]*ϹN.H.Me09yQU:$$f#\È)#|}*YC-?JQKQGCL)s ^M?|RmG:S?7A2[X6iy?ary5`n24V>wuE* bhD'XY+؂"$H&3*茂Jt1W lQAP}PCO14uB"8:A5T(*:ShnlE\Z 0@Pk5L9GvݮƔh]}cLHyX?gAL;0N8OS,Pד &-X۩ u Iގֺk,$Avp~ g  #X o%s3CnBs 2w 1"#9_CagDD X`q,mD :tZDǪAyK b--/)L0u|.URP=-%zu#߇vާQIch9lpF?"*})z:IwV?uooP?G$/`? _Ti=ҏ+1$'<L—:튦.8[+e9Ⱦ5ќXZ$McCs1Y2Uetsk8:I{\wkC~ѭRvxzn.W8V7`-:3Kw!~ƹ~//ca N%0y8|96k2/^AùR OiU7sBsĎ/ ˩-r4o9#|jT=szOUOL&,qD!}PbZf\UtQIGX\8NLί>XsI̘5n:$y!x6{- ~'9^#N>unjx=Llk6>b|ѬKVl>k1.\+|%qQ̅2HHըMEdc/fa辠m9DqĝЕ%MF_{ygCg|Tu `IIy6&3Ȳ;ٮi|?bD5gvtlu9b~sD`4.~!!a?M~ه2H_dBיUw]W5brn `A-4WMz˵e Zl|$\%/|d@] *?b2'ˁ>nJ=8#06:?4>)8^wb3 '0| lBH6M懌yҹE5.SFwqRxo9Fx(W$IN-yW=rG1bqKsxU ^o`-!9Ap-׵ {C/3ħbGeF9Dxle1o"~k?+.p!h挱a 1͛g9-5Q.coK$]oa~>WQ=o{GH}yܺ Yzݵìy":u=QzPn]5V;_S\\J1?*`OF^[{?~JBI n,\N \RET  omٕ2eO (7 DuF%kTD$ $ڏdkmpg$5UB൛?.sU"5Xc4)8 c̐ft#sv!Kbqߣ8ph,ȳ9{o{5Q!<~ņ# ɣtqq' Gn͸?"%7CR>ľ]r>J;@f3"R hV0X|B$JT5w R'ps^^#u]8-Ҳƃ(U afg)s $ pmDVDmaUBtzGQf-0T(1.`uig3Xˁw|BQnD|F&mHpvucSAڹ=v 4&5Em!Xda!#;H Kk/W!$Oxt+GG F79\rZC/.7*޾W Kf'+%g>VlIGsڪ>Q {3nMcjA]4k|Ť:9{$͢Vdz^.-BH5k˯EԽƂEC}=R,ҧ| ~ݜ>7]0)y FJ6oYJ| DD ed1N~W.D*=⫣\e &Ō8.{znpX9^?G&÷/s*[jfV(S( (Fu9ڴ=gQ%:yyKåəN4}ƌ)#;yBN=1%WpOp2ntqJ8: ^u@xq33O `~| -P(`- $hΨUI(K z{6E\@vWUڥ-xm~~N?Sp~n^@犼a*8 K`vsq4s#Z-hbTuWi|Bۑo}K Ź845d2A/f'Eߏ.@R1z,e[ F7{ܞ8σI\esDvb5zmeY,jlUGQNkwz7CP68-q1&= >PR5&" $F<|kOscd1dcez1ZGGm#Տ5!)Cw&REI4 $q-qy.B!TY|r/olY[xQrM^;Nfls{[a߷ YO)xLTP|l1v?2Ӝ=u`巟 ~gvg7F42SI}0gm=ZpgCmZeNSo#@irBӱCt pp.j8UG\D` S #oZvg w#GC!3eEo\,98ƿuP6iD }E:;Ok='o8PC"խmmҀAiEF("y?{ *#PD #s]X_W[1YT1*D!0 uh 1qܬYbN9v{^[6&f H+ M 36G={w[0Rד]} {悏n}uu,sNj#A >ھ,9kOBkg^U1Y0'S sLn('uVdiitt%Tis2B J.DR22"$`IEVih(JL&m*hH<'}h;A)d6UBd&hnҤ0C&B)͗ri1GCXU<|Uwo1:F򯤋bߩA.iz`}}6ȐH@%D$F&fgTvM'qN.q̅ w$/i7RU&mf64ba)h~3j,*N>,+M9V[uݍ AnNwd [w,*U{ѥ?,_h4Ac~QfE+{򲑊xNLxjcsUxqZzcOC ߬c_*!U ]BzQx×ofG>^Xd)!^1/u|Έ`3>r\@raw芨}څ0`o$eD[=?Iv,%od$0l0:CJEvO4sB? f;/RU;7>^]Ұ)6 iJl^l⬻|)UT xY9Pb]!+p\]9 |Af9I/:7ͮi[)lsUV}/(W=i1W?m+nWSʐ}K[g* cǚیuU=pr]NVKLC*iG=I_/֫Yq|^iB>@|~B#xb>Hqj,<=MB;Ф յڂfJcpc*-1k G+" Hk;*:W_B2/i5L<핫W#-arѯ23y|V5m2FV_FD w6G9?V%oPPOj=@JMMnF?KKXҸl5dz:w4ƬGl7l2 ^iA"5ԟu ca٦ܣL:2ǜuoՇw5g[ +!8 \?āʳ6Ul ubZޭZ&Ka>εҼ0Y-ɂ-.qTI*N:}5= (yKs51zRxs8d Y)Gk[uѓ6$؁`$sq\q=mȪKMA W|8- 5T^!ĵ+0Aj-ͽ$ 15}/r&mѸ,=ղ0Ʊ.D 5d!4ؼkdSl%;X+B61ͻʝB\5$W[_#yEg-K":PX"5b E}z0Uآ/ T/0=[RHCh@D@S& _QLu3xcQCJlKbb(vK{붲L Coe7b>s3댫< (2fIv&!n MWDQsH8`S q{Jv~K"Cĉ?@SW]^cޤr\Cͧ 4J2˕?=P983uqij>y d:w$"~}i`*=7) 46>׮~,ke\kg.]͎NA`AP@H1 :E>]]ХC'alm}bg&vZ'Ȕ oZȈ@a(ns*u\=AC͆X8Z'Er ̯,I,\߫}P!4P*]WB{BoU!XQ{b@) F&0g4˷.$x|Qz&8E@$(+3G}. ' oU8M"4xI`¢&<Ox"2 px(cƕVb PG% .Ԇ G1֜UgLEf EfvȣԎRЫZl6C9I%𦻢RprID? ?QTI'̅p |V+=sׂ5ۓ uiH;EȜl"P"|B)bG dR&`+Yא&Qnm";ZCۙ:qB5l/ib$~Ek;]eE]Ҏ{ӵcS.ۖߏ$ `w9# /w` |Ř>6*+lYGqbAlH2 u^:JE+E|-}""w$8/@Ƭ)cWq>evrdR>ufxfgs2w:j[2QBH| ks7o@56k(e,Ѥ< `Y"M6Ì =kXIs:!Af+d`IoTKH}GV+"`q8T@wҸ_tϲ;! *:/ 6j}ecE`.HT slh.6uL\(4J]@\B,cRb 9W | $.)z~*JɱY\׾y̗l5\7ٳ)>ՂD{h>UcRgA;=Rmq@F \(\ /FN~-AJ؈.@qe4 Y,Ydm0RHaKaˈ*jIu.oičRi`Ouqc,\ΞlDZpDR';ڠ8ث`8:Ɖ@H ?hu<NV$Gró2 oop񠍗|=8{j_&>?z]$n.sUsŅ5:_=[n2 +#B:l~&rˡ-QWn,Џ7oOKVɢ\X\S?bdžcB1绶xL7# mh|z{tj=I'  Jxk‘C0qb.*Fڭ5ȈL@.PG2 nǦ6WDnUo{#C2Cs&է<.*fGƟ:84]jICh 2-x[MQmZ8̗:ζQΣj#y Z$yշn[0st*.~bN>^<JCY(nٹѨ( #L0[|p2V8۫{ߍ ^1 ND9:JF4 fJ\do/~#v7;\ݿ˹Ñߏ9ΐ[>bQ!bqYa$ blMd#Mq yPm'snE*@PxF\ṃQU*`Q(4|'a+`Q9cg|W[-Q^g.DrUd=Q&ʏg!:@KĮ-ǸCCO~&xz=´nC\U0uͳm3~}oPbM`]qtB.qm/w aHHC>T{ UF0y|:?D26 EJm$7JÃ{Я0jЁz^\ ,DK2 ӆO)x::Y1'Z wVJ;uFî( A)2sMvZ0Ӆz@N=X{}bӣ(6]KD~+QY8;q+,ZMڃJc&#^ /U徘:1V ?C4ylp;j,/0׾M9Z dxЏ0mi vq^Rt md8'eξtNx4>bHXX'(5r>rput+aWaZ,7!(C=joo/. t \K!8ӏl71pBQ"ppd>jg%2ysӦ;рPjvcI|3 w|,}̫2mxGTnޡRxyX~,1B`|G\8;cIQ#`Ss[ xax~ ʳsp{ZD4:(!Ga$D, Jً&vlm2@6ӨTnJ \o-.Dq(⽁77M]2H_O;O`}$Z G RRԽy (jx6juPQ,)*cfYaL|.a'Bqkohz(vڝեyJH(&t̀'*?3WB e휿:'}N6QS^k;yPl1ktHym6rw?YaW 300WR8-jZulQO 2sWMGChG^u{i 7rz6azG_B_/6F\Ujh %*$k(>$ЈQ_<>b-T"Qa@$Щ6cJ4"GpBL&se(|+^j_f #l6)w<1hīW؊6qD |i–2f~RX6@2\UW7AT q Pnx; --rۼuۖ?u<џ`:5- GYQ5j>q9umsOte?V [tLːs z,[|#,>)QcŒ*LlKlg;v\}K5ۻkLxx5 .tFc Cs'!#tYG 棤*|'}w@'CFJZ"Kb~ lvf>8G/V4 ů[sҏ˭ԁx0FLqfb͋11]u"1SP\ū>]mpye&g;u3b)Y.R^N:3X?` Nc96=5nFfg]tK? [e64!N#R)3tf3jVE)d~L{N%_~jˌ1AgVm"fw&dC /KlbGO 8(a{LeVy¹KܢL}FǫPisRFb,"o`C%D$K8H)t_/oӆ=1=$xqe_2)=A,嘖cV.Kׇqk(EoտGN!BƢ5c#0A<,WD,~_g9  :R8H>ʤhlM_wq]:˴!~Rh/V^V5pI/߭U4\6^SRȱTQHZKlx/w.kϠ@ⰇkqaZ*<}FsI`' "׫c;thp-ls0k^NN ߳k85G)cIlǞV6[X8!f[j:űł023]|`5#gwc jU%*z8"1XL8Q(lF|g>7Si&9fznDV Du^ kΗ  %= $1xb"5XTi80u~0lϏ',tE%Kyq=[)I>Z){K9Ƀ_^P)29ln|GR4;η:SP-/Oo K.K10$_Ҕ?K ۱GFEjN~Y )j}6~kXi_KTR`z*XX?2ZOiЩg-FA.3qz]&6j98,t\,>(`z,>_Wf=6,\0܎p=s R|qk}D2'o\MthWc5bTVK"uY(]:g;g *'!F rpvt<:pZmTYN3\{'2\ 6X$^!cPǎ[`E5cϐY"*E\38Q5TY )TR:Q7 J8ਡ][22hXT@∈ ',pK;2#ѣGUŽ*maLt%DA@X)9cY`.BjO=ܱ%p{A>>_ھ/=S <(1bwZAk%|^2>nu-eX]f?D"1"W&v?;"V0vh8ex[!eH%D,ơL(*4r͡mhp7~jR`$Q>b0ܮ}}~sV0āxs@?me@:rC=#R ?"!uU'f>I4_DEn"7& ʓܸsGsiHRr?pY)jw0$?~,X_ a]RI]Ri]~,Hra2ȸ 9AПiZP~x=Ȍ0q3"w;Q8G& #NnGs}b-IZ_Ǭ}^PDA;en5~ n/B?bh0 ҈vF.w8Xv+uu0XX d@q6XH-?2wуɚȩ0V8~$.5^airKnjRSeeEɊg&YbƘ@)bW(>¥ʁvknW~1Fݸ/:C_uDNQ؆ ^txs&lQƌ=*Hcwe J+7 4ĴN F2Xx(g& Xiex[@HFÀKdW_?8"Pۉ 9 ɟ~p @L>y]͐?XP7U-{/KSv[/g(ÚP3@}x Q{y{g콀bq\/=ڕpaMSv-"R>/scU#GT)Hψ 2B1SVMl"maWpN$ s?VdE p"-y#l#f./3qD&U8P/@dPxQnw}?v١gQ6NR0–GԌ&HUou(QI^HZy:75ny`5x*b6xRV0QkZk A}{EypN ||lo2'Y~u- 98gD`C^[ Z3ÇaUsGp_6%>"Pl$E+fk<\a>r?1x$ q@V \l5||SeFt{Oҁ=]wO=BXU?W@a"CRy•8E˖U'OPVn@ 2qIfxk}9KzQ>sq9,/z`(lx|aRP,p).0">d?XD 'Zf:g2Ȧˎ]fuSG7>7,@f 49^:v'ݯy M290`Z.q`ۦI qG=E"xY\t qHu? Rc}E"Z94b~nuz[QI ȋzڨ(yq|ZZ;\:U3vH8|Ι GԞ~9P[ͫj1CEUxX5_\!;;m@%FT@ i_3%k6.K;! dDPª>&YZcաPYЊvf|ƫPTB۾oG\B9rŹqAzǛ(:?SL5/ά@+]eOq H!"{lЗ , o+0Pwx{x"61%r;ӽBx0M*$0 i/*z;~\_uǶv`ޝqϬQTgZy< b. zUIuHknn7bq>gpOɫI/4_49s:"fZZ*!S`c gGIx@'<>"6 <2YanJk fhN- &0I]_ϕ4Tw zᯟL>mq b{7֐nTtu{)9DD3tp}$vRLZif;f3Dy%Br M;Hܜ-1CՔWyut.vS6p I[SX'i**DU^%70ϹַN|ؔP{]ýFZTHٟ6O:5m {IUpE-Sj e>dqyDey'LvQ@!VQ^ `jR'oE_nζkk?KGޫ,,1lKYcm!sk>Xck2X0`ybPH9뉞Wؼיޯ_gS G۔08°ZVH%wu3^WκPć6Q锊l<X۶8zk^N ^μ,lM8 i8#(ŜR|;Tz̏+?l1wqGObؖD@|! JkܓZ-bVf̣X,e]vL#AխX[ l5e9:p2*+$i{ H& ٭?1AL:{g<}7,xUl|8xC}]&!tj eſ8j̦%ak=qdPqUB-@a CĬaubwwˬwؖwjw}Py I-H  w-u:{z esTNr;o m^=iAf$ _ j="9e7&޼1ͭ.1`6esԬ鐼s՞ ?1wc1Uq}|n6z#z5MR}r֫x`~eނ?]!\as3n}[CZ|,8kmpP7Ž }$[\nX3)UcQAne"aԞѵZUξ9zgr;aS, H15Q uDhH")-6D q-;sGHpDLg@M9FP P\8ЊWDLaJM >a#8Z;eu}k<ɫZ͞AǕ)h;0n.,2|" ye=eCǪV1T>?T²ՙu4҆/=}?5>3""ju AsnJ[.+JLK9AnqO2 BA1M0*~sx#s\.#=[UuI]U] =QHC>5pY싲ڋF% 4zuQ75+B>O}v/,N}|MjMPp"fy Z=`ozЬުP@s̰w@q\Vy|~o)s;$rÒ #ޜp~~q5Ue;2A(c|?>n1)a*^YDldepRT8{r2g8*Kxj'SP$N oM9|f\Ԧ[ٶ?s6. f|Z c!Ë^' !y;.oyo0uC'R, g`ŲK]} km Lp ^݈#Qh>scͬ g{Uh4wo^ÝK(;IR/\ ^4"7;ǜ qg3L!0Qe#|~.ʦ_TZNo|2Pgsnyp(&2}#VB|zH~rsog 9.@ QOtдf@ Ql4[wA vkK Wrl}!zDg!σ&7FsьވgO}iV~aݶ6$9n(13;*XI\Bό&9 /ƒycK+ݒ#'$`  cn@D ewFX50=mn~; hYؘW xt9ٔsK+YSH0H| >*d3&u,ً\6h$` "EwZ`W  Z]ݩiш3H>R5]/y86" d9  /SD9]=ze5\k+@2 O^u :3\>P̗qRGk d@ 20 LsaJ ǐ(dy.wdK\T{bMwR\ K,5=CܫiOSwwRU( |~i b""Gטzn&FEo"wYR\tOc.;xpCw2<[Ԯ69vs'sȣM\<ڶ2U1ָzZRnu1g4)u&I +⃶pB5{R /SƤ66&&oAxh\ @H tDC ,^D! Qxڐ5m?c4)QJf\GtR% DVFT%H;> Y9#b ]y`Lrp{"s @19~c0d 8Qjt{Z}[]C|MDnkŐ?8Y0Uqc&>N ۺեHBe v^ŚzURg"_ }j)"] ojғ)}?8t4W3 JBQ#Y"34:iER\>sѻ)JbqwT0JLYuUQ|BY>|v:֣ 2flBaw971;%t6t-t_0ȺF|D4 $kw2pݚVJ.[ӖE5Ez'w{8Ig3u4 ΜYmPG t Hc7cs֛RK\Cs8Gl,-.um/bI(Dȉb!{<(O@Hd'xô>" 06]~[*k8b\X)sU7?E#lX;'keE(1$IlƤEńڢjp6)t!`e(s )'|!'$yΣŴؽ3;ؘepxMkR`.~>AN od&pط[vŅ\H.!;O4_e-a)1_PǞu1:cqw>Uh QPF[GHQ7a/* J5M,[yݤ$VXvp9mm +p 󞪏1zo[Pq_TוAKlXy"N+_⟸wtwOBr^`Au3.뀅$i~yb>f88@y氧cϞb3dץAo~Z}Kx6Y, ǂ''{ 5AJ]Ӊ@"xLm\4~ZD-$rˊ[ẗ́ 8=} 7 a)0ĊI@ D/1hszߔPƌ=7ܙ2[65O[4mj?"oM1aa\#}ϛ$A[<2]1-s^p^nOu5%pl>{Uq8ۖnת0|eߘ;y8í ǀǽwn=wM$< DR%bY H\p=p+^nxͪCF@h4ˏ.LOTٕ_"mkFOBGGW#{Ħl [ͥ{q~?53ķZ zdw{s/ΕFjq?jl3|n0grWM$zqTꌂ$fz)](){0 2;\7!P> `A:a_TMHT uQxxoYAftܓ4=& ((L TyQԶGs>hB;܃v O {bWffOJD ~Jkm8q]2af S%^l[U]Յwbn!Mdݝۓ,}p{4^&t]ڽۑFPϸJc}+G=:Ï)X0/V !AA^yJ8_-,dT}׺v<$HDWNz,D<ڑi:#8ٕۥuAQkrF; m|b몣jݹ}~0[B-D@"q1N_1xL2Me7}Nuܠr}] frč&X8T gE #qǜ2q :EtHL7r;aԑ>!?T$E gtDZouY<Wa#T<#1]'ҏ 2):Mu1:XƿKl>|Q@Ev!UE̤{jec\@0|%6FO@!V6 Kr:69͒~y;TJIöA!$0YsrLP vzwi|elr9g]:_E_kVR/&0OV,E ܣΊ īF~,aƝAQ˼V,"2v5!E!)6C4 DFat κq~Sz}n^s@v0 k^/i8^Qml]`9&2y(KjWI67J+Zg0^MzҲ6\ vNT5z!f\LOkjd>npDe}1[0ݸ93HAQNLQ?bd,c9>!~/W噳w:{Լ83),%n45[G.,}Vo7 ᄒؘwISŧ{rk^%lいuz{`VAǫql2*H5D "j\v}û!!f` 6 \NLK Baa=߰Nu`Ѣ橞p.'QD|.#j<8[ew|(}xA^\oP3/hc__hkYYI?31ېgvm㿖%#6G7eMńgh1"P2/>/^̠`9&xm{L;KY;ۘe6<>7>wR\1u^s]s8aK}<j`v{%x Bjb>4!BL&J5 A}EOk\z0#S'%d9 !3߳FT ik>Qƾ)A7y͘sZ׹ۊ%S4t'۵L\Fn6}qr?܈ځȍqrS/~ꨠ!3U55+ƾ9 @ӸŘLW00`2!eu׫![y2{\F ІiYG,g[`G\wփg(8v:nf4s2|w 83?g>o#y j>ZM2x*$%eNagmi2)smVE@Fq{>Vf\#kTЕ ),zCpf׈xRNk9m<:OpeΦ|&&4rak~X*jg`A};VG!3Կ!a⺝⇖e <.| ؀L1)D * _fm=|HuaU6,VTrDr>Y,aWiSZdj6[el?X}9',e"9'GxF]?_i@L!G!e,s"'z;S'?\IrMP٫&>_YRWuZ8֪GsiN~^ HtagF=/\QUzDusFmŇQy/(|O3P`B7[5m[ܟF{%ϼ Lrb=??no$:s̑&舠&y/¾+q#Ax88C|[L0J^rj O#W q 7 1b ;sBLAASsnbS$2jw(jpnNϘx d{9H < yqQ/m51 ag_^j2Q&@3'{Ea3o`ʦTl#?dHiECaP9\߸ڲ%SRJhtD0%B YҡԷP糬cX@qF,w$N#|f!=fЮ3Cν2u .phpF#8H@dP=xƦvhıE!C¡W8v_h1h87+τ/$pR o/\$qHF^90y#K&tY%{*#83ÿyq[w#؎V8 Td;SUnQ 0)a:\#a"D /N$c߽K|c^#pV,`&WQ߭0kӿI֭`͙-k޶o%7) p[Z|]-vN}!Z]hAd=RPAP= [H )bq34kHn#5$BfZƆ G&o $xuE!;qW&(/8jXN_:SHW@x#PN2b"#`Bqª9Kk;&]t\ΧDAuF3x~G!>&r:?Wvgv'Dx]6m&Xu}g5SŎ_^'}CxJ^#pGx69q|oz*#E8$$Cx.hߪ߇/Dny:<eƞW`0C$;&u/rhPy厫=s黎]`?c!g8BR 8R iXyxpj qaȲZxγ9SqS-(] u{Ds y=hVMZ1d(г1'T_720YⅸPrSn;K[>jgskڕ1Ocd'%18PGhMUC88 W MDe`p^ CnHFw)< (椹\:w}*0> I,;wu%bx}Ri)нTmp.N;fx6n ׃KW ƍt/\D߁ ȫ1(F i%`ӨA35:瞏@[g.ۚq5\`99E,ox+:}QNhxl-8V拓8q[磱ň^滻wzasqM4sjuvr4sQ|Ny[}@KFCSkk7Z>fjH 8݂9:uocۍn=35C#:3Y# >PusƢnP*0P}Qu9&}@e4aexv%JjZz8V&o5JSχO:}QE{Џ ԁ䉭l~52vH|3)׭\gJduw5:oٰG3rʷ;b><?\88]!^0ɏw6dyE-! 59}ݠuTvFb2DzV7YsWk霛:oב1͖zY(x5pu)82ue +xpAR:֎,AUfCa6 Y»ʀ &Aq`-,*Oe[7Eĉ:`JpLI9qy8Sf?i'FO+i@5c Wz,L!u>5֙ rY1Zxc4k*d3»g@,%+8AEv+Xͧhd|P|ߙwY2 /V<<[z! `Z $"7k~]jsqD`]4AhQ(YYN* N,s hț])k, I{ybgwNT~rnuU9#ךpvtD Ƃv` q@HX{r1@TpCbGJ ̸fd,yD~nڗ旫E^4#:pU7Bz#vH—Y$!M! `ȩGk&8zxCIB?TiCC.>o#pwIdAJXd|<$רn_c=>C` 7.VҒ6>gZW|4yps2=Qĥh>tZ3Iȸ_So֧ʁEʓ468y:bS?%Ĵ^2B`_+"8tM#!/1?\%?k[a;󉕗휗SI%Z<R6F˸106ѷ;HSu䘒mz-d"Q-Q &ZCK q$q8dDyh($zCIUCoeшi%QC#y87@=cyoq ,DBz]`|.Od(ZZD: o]עI_ ^L\?t1ݸ_fc?^g^ea&ъPzQp&e!Y?n=ebdd 85h3s^`O"oUxtlvu,lZ7=K 8&_O1*ELB ?Ɛ;b'ʦ9L!b˅>Ջ2å!HhXgQ,qpD-9>転WM@p  2|bdW:a:̟DŽKxoDptgbk4N~#dT#`[`@tSA me'άUقPEFAJ_a~V(2\zvtHR(tfuO0Qr+ؖ6_9 sQs^?JLZ|op|]3&L -%z4S)/vZ iw6oՒH VL?am$WF!N s(XJRd=kt]~8{I6e|7:ڃ%aCB԰.K)eSOEٮwYuP3:{k7^ |U#}9ĿGJyݶ-ŲfEܶφ լnϕeb;ڬdsXQE.5 +@cg=/[r&no xG? B;Z$c԰[F(csʭ>~@y߁] X^TWd$?6GZvqhfSY#pr.`S\C^Ii~e,9/aP̜^4E[ռH)RD\`"sX39 Qn#opq}?fahMĆP휞qVa^ 庽͹3wx?O~ G gMyO6*$ %j.@.~|؁X1P[w\|bF1^ DqwvA5 gZ=LA.oNf"yƖ\!!xA@ܟޛ#Eì)LHBY̘E.k-|7^:Kyg4v,1<|2ojBw%mʥ&*>T֛h>fbkVub;@Mi#C8`#=(Uf5/0ld5]dg^$EnhUz͗s;m@?WU?4FVq&DŭDbn/4Kb)S\ܠlKē-x^8{ce2)b~s̘}Cu(8)>1{ItR*G'wu+hQᵩ9#59Sf50 FiREzNQF!zBMA9bZ@MqyDlt.QSN vwݴZ *r Uv-4߶nRap"6U{Ng(gKOӪX>HqZ3F\<Oz#j<`OrwtS+KBw4}x ~w 5-Vqcuwݔ;,8#V,yu1`+u9AӍak6IJ9F-J3BW1R}'"$f|p/aoxoa䞭 ű7>Ͷ:k+x9Eψ*!f{aչPij 'w\triPQ|\e}Gԛe˾^(eҰL (SĴ~xp >фo}$;ipaqqGby|XEg Z]d9M ( &}3zަUj?2 qk㌂z](l z#$(c2Tx<AN,ps@fQ6e~PE8f h7+|K kJyVjqz:Dڐ$M=@r@ m:?o3WC#>N0pD R=*=CDA$}Hcq%Kg 560Y(h+*Zak=R?! F Jp:'ƞ-\ieNn!Vf{w)l" :XpmB Л7aԯr6>j!öR7x~FY h2s1 @ASK5vYH#y4wkݵóX6$j[AT2MˆX>q4˷澉/v2(=vyH@\M1%8.KbT L O֯o0+=,'>vYaahݠxqQV=ʎW  y<{J< T4 >?2uNi WϷ#I]BuΌ\|ؒ3Q4/t 4q>b!g_P^g>/}",ңtBø_aS_~=eR4Y'D 4p=BFNu>ɽNpcCP#3$= F o+\Z7:r{yYW`ž&-ғ-#@DMeUKAy}ľ"B- hr"a4 (7{^)Y=:'0t 1-Z]^%iסǸx (͠(F'\qWE:/Th ^@,8y߽П@m2XYM$W0cz9UZV J ,RҀ`8N_>!A=l3 }isFZcF#k-FH) kɰM ;W@Pf4I?x TXgm yM);lf_cGUAF|ѭu`ZvQ)x q8:W5?Ĭ .sNOG͏?bDF\b`3kYT$Pũ1oòca@-`6f$iN? /4)DmPZd D 4GBAQDϵONb/ֈ8=h᪾`YcU_*mۑm!35??vV4}ʡٜ=,1yjJ-+&/ ~Zp80F5%  wo԰prm_7 Q~adO+b c pkT#q18 ؁G,=G]>\ "ٱ#E\Ocq_ٳYyܶP!Ј vհٟ҂"qDǗp\`8<8KO5bH̺=={}wrBlt½,#Np$GDJ+ -`F~H/5p^, +d00m) 0EM+xڛU).$]_G&Ln oTv_9KTܗ G m`M;su~><_B+-P}ᨯv.|:y4(=)$'~oy(T-x ?|@:}mEJNҽp5/yUNJ,Փ\Q @eD]F ΝILc׶^g'm7<Lzꅃ" >wyd!`ȇ_ ;{{}_B Jy)0Jw\4gGqcW-O+;k{I ӌ"{Ԇ'& lO7Қg:=&HJE""k.dR> ,Y gU]W 8μ΅f q}w,tP'l҄?~opq4?<9w ~ʭF7rd_Cֵù`l*amF!!؍01615R|z-^t]dCH(bRg_CL>ԇ3agF r mdEɵS(,ΙvT81B4itFrY.m{UoycކgzAP 65 $ÎlFjӷ^ɑ@䇹!N$ש0ʤKZ@ܱy@}??M[?u#BAۅe#뿴3b>kӳ@>p~~kIbǡ߯8@;to=8~j.uћ+>%%+~cOx h7!ssѮC%\Bh24;RU1/eh{cMKo`/? o.L`4M'/B?}}k>?g4$^CjneI.#CqIeY1HH>ݣ?ͫ=є_rg1ANlkx:8?+w}c۩nők烞rZ3΃|,N[{_NGߍ{){m峩ӞȉaFH0='i~7='r"kNӵv=jǼ_'VtFëzVc+xF͖Kw: 0``㯘*xy5'{TW+T^U-u/0Ck ! */{"b9o^J(B2t&\$IRP豯=X]g}+1)ꇆb9ٳ^ϘgC'󋷉o}oe{K,z̘^.I->,/ܺc n}_pǯH0Y/ͱkuֿ3jppiy"9^:wX3F Ƞw~M_{`n ;}txdhQ/qKjt3#T8  b=+ubntN_طUYX39OBS@5`7Ւ(yw[r};Z&"h !Ɗp!"#{iS6fER%zϕ^%-S@tBIEGi>Ӂ:g*]?CjS :KoB驏f-M| )Ad$(+d0KF2MGx~@3~(Da*kw=ׁgEt1\ ;Uʍ|YD1 }}iw΀e~ U NM%ZeT|V!c!Vsv/N&Ds<^ Y FSONp﬏ljkSNiGm "Lrx4˛@7㝰c/TW7R`,ەv4M< GTcً]NBw# '= F[')K noտg`Ʈ}D H6Gf8ϩx ]wDQSyb à;E iDxm57Vv y/5.녜}JVAǍ'j!lwcd>m/\_4!|ώk=)n??,uA,e%q7sPŬIls$t5ZeWv{ nYl >D {0!v{ZC\ya~V[STbOhj-}][~w;8~F~Uiqmn #qKF~f _bsB֙M"<8 ~XSTs(D#w쿦nwS?t][dE8q_%Gc LT_ sDA%#}} Mq׺{$+RK}yχY(|7(k Vo˟,zuÑcXPK4-QWz[' #rtġuOj6&?$VA'"^K`†(auDo&e*Yz1W~A|THEΫsAg s-^w(ɽ+gM]w&e[{gA Ĺf'C-uŨy΂/ :\~7 D~*?#'Gq:٧`O3 ,absʖ?qM#$ cE8H$q vWnڞa>C6E@P@H@cj'Jzq#u?ჁD"A#ȅ63BJ_c*T{t@mbI;R  P1(H& 7A$Ao_4ogиxc?*4'vmKcaw>*nn~r)M%xl ,Hjr&5zSЀ%␰z?]9BURS6ɳNS3߬Q?ўݜMB}\'>=g-2e|BMssɂJoD2&9~_T_ܢJ20v3 8JC7ϳͿ]z!!́=ۿs^-_ T64 =QթVc\TBJ>-g4wN٨m0XF|܄t螾Pl^>^s\֐j՘rZmԕVqWf" ͐CPuewL_j=s;~v5fR25%-XDKKqj3nUdjl oNoyi؋G&!A`D׭)?[XN.@!H6Agn: CHx/uvB{{JИ@ 5I+dyh1.gfZ0upM[vskϨ@x%[x ` $M_+j(ZN B~%