summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorZhu Yanjun <yanjun.zhu@oracle.com>2017-12-16 04:31:03 -0500
committerDavid S. Miller <davem@davemloft.net>2017-12-19 10:57:17 -0500
commit41b0cd36de9bad10e689151ff15a28a88446bd6e (patch)
tree7eb699826d6a6936412bcbb4258d83a368736d40 /drivers/net/ethernet
parente9c5a106e92e18b1670619bce27fdbccf0d7fe23 (diff)
downloadlinux-41b0cd36de9bad10e689151ff15a28a88446bd6e.tar.gz
linux-41b0cd36de9bad10e689151ff15a28a88446bd6e.tar.bz2
linux-41b0cd36de9bad10e689151ff15a28a88446bd6e.zip
forcedeth: remove duplicate structure member in xmit
Since both first_tx_ctx and tx_skb are the head of tx ctx, it not necessary to use two structure members to statically indicate the head of tx ctx. So first_tx_ctx is removed. CC: Srinivas Eeda <srinivas.eeda@oracle.com> CC: Joe Jin <joe.jin@oracle.com> CC: Junxiao Bi <junxiao.bi@oracle.com> Signed-off-by: Zhu Yanjun <yanjun.zhu@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/nvidia/forcedeth.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index cadea673a40f..49d6d789459e 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -824,7 +824,7 @@ struct fe_priv {
*/
union ring_type get_tx, put_tx, last_tx;
struct nv_skb_map *get_tx_ctx, *put_tx_ctx;
- struct nv_skb_map *first_tx_ctx, *last_tx_ctx;
+ struct nv_skb_map *last_tx_ctx;
struct nv_skb_map *tx_skb;
union ring_type tx_ring;
@@ -1939,7 +1939,8 @@ static void nv_init_tx(struct net_device *dev)
np->last_tx.orig = &np->tx_ring.orig[np->tx_ring_size-1];
else
np->last_tx.ex = &np->tx_ring.ex[np->tx_ring_size-1];
- np->get_tx_ctx = np->put_tx_ctx = np->first_tx_ctx = np->tx_skb;
+ np->get_tx_ctx = np->tx_skb;
+ np->put_tx_ctx = np->tx_skb;
np->last_tx_ctx = &np->tx_skb[np->tx_ring_size-1];
netdev_reset_queue(np->dev);
np->tx_pkts_in_progress = 0;
@@ -2251,7 +2252,7 @@ static netdev_tx_t nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
if (unlikely(put_tx++ == np->last_tx.orig))
put_tx = np->tx_ring.orig;
if (unlikely(np->put_tx_ctx++ == np->last_tx_ctx))
- np->put_tx_ctx = np->first_tx_ctx;
+ np->put_tx_ctx = np->tx_skb;
} while (size);
/* setup the fragments */
@@ -2277,7 +2278,7 @@ static netdev_tx_t nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
do {
nv_unmap_txskb(np, start_tx_ctx);
if (unlikely(tmp_tx_ctx++ == np->last_tx_ctx))
- tmp_tx_ctx = np->first_tx_ctx;
+ tmp_tx_ctx = np->tx_skb;
} while (tmp_tx_ctx != np->put_tx_ctx);
dev_kfree_skb_any(skb);
np->put_tx_ctx = start_tx_ctx;
@@ -2297,7 +2298,7 @@ static netdev_tx_t nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
if (unlikely(put_tx++ == np->last_tx.orig))
put_tx = np->tx_ring.orig;
if (unlikely(np->put_tx_ctx++ == np->last_tx_ctx))
- np->put_tx_ctx = np->first_tx_ctx;
+ np->put_tx_ctx = np->tx_skb;
} while (frag_size);
}
@@ -2306,7 +2307,7 @@ static netdev_tx_t nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
else
prev_tx = put_tx - 1;
- if (unlikely(np->put_tx_ctx == np->first_tx_ctx))
+ if (unlikely(np->put_tx_ctx == np->tx_skb))
prev_tx_ctx = np->last_tx_ctx;
else
prev_tx_ctx = np->put_tx_ctx - 1;
@@ -2409,7 +2410,7 @@ static netdev_tx_t nv_start_xmit_optimized(struct sk_buff *skb,
if (unlikely(put_tx++ == np->last_tx.ex))
put_tx = np->tx_ring.ex;
if (unlikely(np->put_tx_ctx++ == np->last_tx_ctx))
- np->put_tx_ctx = np->first_tx_ctx;
+ np->put_tx_ctx = np->tx_skb;
} while (size);
/* setup the fragments */
@@ -2435,7 +2436,7 @@ static netdev_tx_t nv_start_xmit_optimized(struct sk_buff *skb,
do {
nv_unmap_txskb(np, start_tx_ctx);
if (unlikely(tmp_tx_ctx++ == np->last_tx_ctx))
- tmp_tx_ctx = np->first_tx_ctx;
+ tmp_tx_ctx = np->tx_skb;
} while (tmp_tx_ctx != np->put_tx_ctx);
dev_kfree_skb_any(skb);
np->put_tx_ctx = start_tx_ctx;
@@ -2455,7 +2456,7 @@ static netdev_tx_t nv_start_xmit_optimized(struct sk_buff *skb,
if (unlikely(put_tx++ == np->last_tx.ex))
put_tx = np->tx_ring.ex;
if (unlikely(np->put_tx_ctx++ == np->last_tx_ctx))
- np->put_tx_ctx = np->first_tx_ctx;
+ np->put_tx_ctx = np->tx_skb;
} while (frag_size);
}
@@ -2464,7 +2465,7 @@ static netdev_tx_t nv_start_xmit_optimized(struct sk_buff *skb,
else
prev_tx = put_tx - 1;
- if (unlikely(np->put_tx_ctx == np->first_tx_ctx))
+ if (unlikely(np->put_tx_ctx == np->tx_skb))
prev_tx_ctx = np->last_tx_ctx;
else
prev_tx_ctx = np->put_tx_ctx - 1;
@@ -2600,7 +2601,7 @@ static int nv_tx_done(struct net_device *dev, int limit)
if (unlikely(np->get_tx.orig++ == np->last_tx.orig))
np->get_tx.orig = np->tx_ring.orig;
if (unlikely(np->get_tx_ctx++ == np->last_tx_ctx))
- np->get_tx_ctx = np->first_tx_ctx;
+ np->get_tx_ctx = np->tx_skb;
}
netdev_completed_queue(np->dev, tx_work, bytes_compl);
@@ -2654,7 +2655,7 @@ static int nv_tx_done_optimized(struct net_device *dev, int limit)
if (unlikely(np->get_tx.ex++ == np->last_tx.ex))
np->get_tx.ex = np->tx_ring.ex;
if (unlikely(np->get_tx_ctx++ == np->last_tx_ctx))
- np->get_tx_ctx = np->first_tx_ctx;
+ np->get_tx_ctx = np->tx_skb;
}
netdev_completed_queue(np->dev, tx_work, bytes_cleaned);
tiQSJ Ϟ"UTk٩ZVD-oVctC8 ֧3rs'E$DdX€1O?\%^!8,C~@˦MGjZe蛅kF5nWҶ@LLNYB⋹/.6)樣КF[5G.~[%hM7^aFȷ/4q@ʶw!x.S164E __ɋU{!HV(_hvTuOwMj&CGJ DhnXCGD"F sewl]HM}ZXƒ&0CBG5ZaZWԡB+NT*0|1Ğ]=]ˣT_C?I;a=.H Mj[̧SEwFeopgRZrLmkS+N>=oaRaF>$3Os!:giڈN!?-}-ڭfyJ58%`ɉjOWiJ+h@߸߿B7rz=TTԼU5=dBԧV8m-̯4~rĄ5ߪi4Dǂ(\Q'nklCEH~)t.]J\_DZ7Y+vCwc ۘB$ڊ8fio]Ō@*|\qw1)[gNyv z-QTJZ $=T'w@$+A נN4 G5d3/YKDFܕE)4t6 AH TKf6W_? 1#rqgF3?jꫜd> Qйm2 s^vS@bNW^w>p=] !d(!XpO%(7Z;qٓK^H@'/BEB'op?ԶGgR'xk'чGr-]Fߙ@`? Q* "BWY;G3]zYe. Λ~|U9Mޟek`+vyR^3#%#J QgNk$IT~k4pXom^hT:"tHhm5~[4ի* ~Sp9Ldyۿj^nd@h.'qט ;mCG@xPAwU=a,ղi?;\/,C=J<}wi9ѐK=PċFU&PѨUÞS ZMd#v{{' Ng(LA#Oz^C0NZ1‘;K9  pnl4HrEќzvҧbf?ZnBCƉ=HooFFt>ӖÞy: EB UX6LKrU~-hzX Flヾ\"k 2@Fz\۽SbXtx'ysK'U^'Õh͇ :/,_OX'¡ӏ% gr,8m#- TߐT!q85Cyui3&6*Wz̪W!#uHS6z]Rڠ[ (#RΒ /ozçq|C8Ѡ`Sw-5ʖl?ˡ 1rz1ݍ9RIvG)R]ƞO:EYq8!tLpX⸷ ~t U%Q2ynOVvgdl6d$$9tD 5'ࣙS˓!4_ۼ{QNt&r^0ju[:еHn-O`Y s dI~IZg_ BwB^3? /c3PT?ɴ1xt~ zj!& R$2?FA l+ $;dܼ$E8)?݊Q]]9j{S=!pEg"/#c&duIz:YECN;tPp^ \Z&DZVSͬm4VVbo$kNHTX&PG@|\@)Y(@36 A6gY @bNOhXDD>=+Z(V+}N%xRZ3>קdj%B3c3jϯAPcϿ3s8GB =HelIAwŪ d{qdC{ !kdz^/$q,R:|PmrQW#w\4Ԓ:`9cNv;$Irwok bSvHRHBEo´MY|R{Is4s*: $SÝC8Ȇ<*K U6)}!gBS(zIAh6Gڑ4b,S%]`&cZ".n/X\hQB ~foJ|zӂ:!#}J,lOztt\kR[F3#1/eudg?E)sXܙR>ƨ`&}Oi%}{ISQkXmպ 䁶+Mjy,w,wagdljz4N2qgt|y-9䕀#Z߼WpaS8XDaN&W0oanVJ C$d?JUWyUdx[K7ܟOU]l},dʣi1Z_CcdڐkX@DO,<0?[Ko"7sY{`/dd4øy18ϳ$ccZd<@ %UG$CH}q+$&v$|8XC'Z܈X@u=ظCĪgQS?I!'t*{vCix[DF"JeaӂNN?Pu 37R~UT5hFY1,l7+jTC 1pJE"̬!|t7o ʑR`&½GR u4(TĜdK%?~am~y凕f'W|P$?wnm#kvMԡCA2+Iv]V8uN5`?䴯t JM /JťDԨ٤{t}E?*Uߏ^?GPh'WFS0O,iDkkӓxǮ"j\$|^.tQ?T B}$![9VeŽB+Kou~Zg6.( Ä@kh}/jrh =3COHX҉>]KNJR5U:5?9&<o8EOde&NאC M>i0%DR8"9@h%<;*tdHv'&PF2(ePGGM 5հJkjXS귁A _ߔdPPgjGݿC6IVhE9E4p$W(fu!ԯar4)A%rRC;zV)?Jiɟ8Kw]Ŝ]ԋo:ZW{'贌 "k8qR:Yxōtf˵Fƫiڔ$J1rS-3Q֦QzfOjy[C+Z@kmt);d6]L`?1vDZ, ;h[]pu!뮄aoX\]xVc \׎,0B2wrypÑ&l{/J=}-󑴷U;'X/t'>S먠ƻ-l-9/~h؃j3E~6ΓA1߯o?( DJiqO7 6 V$S&@dI,q)ϐ]dv>槚_r"u  m g`fa9aQH'oJ6N3yRF-Z]5MF{\vФL 7:#5V=fZzP3!( @+9|bmYZy, 302ՖNaFfD/ζ I^CuSjWCTiT'F _|-x_:kW5cCH0 'SD\7R}+\vQD~ TU_8v]=W@ n[G=s#täTu灺FnYtV*I{ C:tw?3fv.Ԯ7w󍚨y)ƙӏq M0|n:-~,2)C v U02TU7C,H:?gLk=~hg;~hntj }=34G2I%rl}^]JBNkg>,_GVkJI;m?#ţ?wз$]6e2RYV@m,Y'jJL .G ISEZc4>O47SfeZW%+6#RΩYv:)R:]^3ܹ/%kZ3,\rJԀp;w %<ɜfgdf_7}J$#*1:Vpu\4sE8q>Df-sqY]:❓L3=sʛzd__Ŏ$2?/,ʂpuʂ$˟Y2xߙ׻V:`- QmC<`:16VU߮Rr#L=vh{Б+8L+'+MwAޒEMY>|}QZpT3M&Kx/NS(RS}mtȮ-a]҇p(!yaΞ6kyE:SB5)_acDT y6b46nB4jm^)Un4Zzoҵl=5t~1R|l,,H;-H&5x -jhCYȃ ӍyLݽm0BHt+k qZ"K*MKj oE.y϶;5>kfc{ıvhRy/ L.HŢA{aTxg0cjiCaaK5fr#)@n-2 Q XhRn7E\:EAR ѿ.Rd$Ҟ4c%k@x!N Zaf 2ȷ"FU%o n48S?Ѝ>m(ozyu.A"R*_W_s45FeLxPm,fŠw*¡vRq.eqF- d|С9sXjAvm ;G=&3U,rj<{2N{LL1$% 7-XK8 LX{ށjU2iCdE()fU?'{LVKYvgq\s n7b]{g푺u7;shz_[3FUy}$ Ul,TSŽQ5!xTR7(UfRTcʆqi}j?lKb@HG)7#٦.yVNf e܂*Wm4f'f>!ݹE(cd\#F"j!ɭ"&'ND{G|"ͥyf{^ˋxC)Tv94CY7+4Uɛ4GqB[!|e~Kv~Y+ع#B^4cC x=4LQzlsLu sXς@ypw8vhe 3#D 8LnrVybK<;z–ӌk.ħvO03=;} ܔ 02?4~ڦozSNQ9'},`*|Xu!iϘpj6R\f [ h`U:xv]U'W/%CSw҄1, _#tDGg\5BO(\O+ea_Oۓ4́"y$vhmʩZԨI}OcH+,|Iǥb]̫bџVSٕDEUSf-ǭ˕Hb'B~qI컦;EjL!rZZ;qűO ZFp_>c۵4M3oꀍL . %>l &"JC lp{"}nCS8)U$Z>v&|a{14^7Rf'Ϡ etbef/2%-QrcNoR#}~Q0bj T娥0b+Z'bNaYKy^x[gmHͩ:HPdֶ'd$D Ftf-#>ZnIEdΆ9sgN43l ~3n LkTNW/ T!_iҠEFZPu t T}QOpJ:wq ׻.#vojɯ'?F *ؓ uyeO+tWdРBt|Iۆ3[ܷwA/ly6"]\2%BߵN(y-ӆW,Xhjr nn)[ݲΥY d\+0]SCj3t+DJY:dj#tbRA9hҚ` QkZCn_4VW6*38)/,7%Ӥ)Bg(r{'$cƷ-A .z gAԋ/b&ts:M`aNER9Sm{Zp6_;GkD@?Z?W|kNCSWguш- "v&VCĠٓ#yaN2dENH19L,jBf@ 4Cn!K}31 leg2c: ES$|p: }R.<8Fb[}`'櫕SIz`==+zj+5L*ǣtaAq\s߲FcZ3|v+ڱVWdR:`n|lEC5q \ NǕ䁃!^-} ݺu4FW'FR5GpmcåȹRC .RJ*@˻VLWΗՌ~ @5`BԱ_g̾[w9< iU1nG3wV+[gfZgDfPwF9`ӎCNʽ:ŵy~s4:~_EK̑|X$_CdJCZM'\`f \dS 4g1~\5Y7ޔ{T0(90H@oŽcCs@Yʑ |a]aNTG2yF'U7(`SxsIĂ!)` AρۻltaI={"ӊC-mЖ xj7!4dee_'GRҜJ5Xq(oqxoꎡ& ۡ 8lbԎx$Q]$E9A@z^\JۊėrMYZ̓g6,7Tju)#k0ֆ?AozD[do{zӠ-˃crB<N$2l5HniFcTSĻ:k;fcYj:'EⴥVIP"'#zqUӈ>w@r!bs\p"_M^԰>7H_xO Na![G7axSmIU[}? Fڭ)帾cV`y,7wZWp9ß醏; :YuVmos!'g. T6p({dN;5ߜ\LBV=™-z>vһ8q@ΓY6{k>CV &]UFRhU\iՕL^9x]=d|YA /.>Ŭ3qTMwp* a1X#a?~n9*$h3zjXEo;TV`,U"mj~G>sJId_ KMn)] pӄn 3씃_q:#$ĐsL&@plNq$WWj 1S{MYlazEjt$r)YLtuJEMe6Up ^A@2d餄P1-wVLh[@VjN2& ?6:YsL_WNş%ذt"73ٟ Dbh~9yD{h=F Amw^-?R~ߨKb{Z1OC!"M`$ۧm(dьd_hd5 'P _Zbw2ff2vRg3WJ(3MA+hb}b" "q,3{n _iC 6J9&W0ڪǝY J^ZF#R%w(kM)@;<H>+٭jid/{YG9II,y_ j MKU42 ];bj;O2N -Ը}%tu`b`K8:p+ +[,J `Ԟ #ba->sfQ0,З0]XԚjCR:uLSt{V:EiOW.<exyڋHU{ uVq1b<:s՚JS ;uY:n *0q ^Zժ5J|eIE{#(%cy >Oj%aO :!@sѩ %/~xvpӞ6D6GtK{?LǃsgU`᾽&aqTeg47]M3n`D1i`KXv\o64)ª*3gg']sR,&R*+!v ɣK M`t0j.L*;|+q.#3S֭eJĽaMPɳ6\BmBN ܉DKO58_("rTf-[7|, JQ2">Y/?PdOK.RnFnM6}4gdF>v kz3 WNFdLMv }dSs "+?zGu*"}UVq1jCꝶ m`AYY]Ko]](6iit7a |Iy;a#i["\(\aBN7!.j\g0W!Fb ސșe7ګxFffl=dKp@: j>sjrս>t$2.H(PS:p̆Vd#C֮GvuXp-Yh<`Sz$0tY@[kKZ[{(^,cܝ⌽vK`Docz7e5˵zbMqnLP6fsgc?q tτv,iyX??]/xwr\߯СI?:bC֫E{%k( 7uϻ;nDhi lڽӫEWrp=ssq'ͲTQɩJ%O@U_,`| !{%n֣|ܿo%;hI^mt[tհƴQư-Wr9oU Ln"gBH*uڀ}0IYd%_.izn8r_Ǹn +U1teD=heUi˵|Uֵ*ܘ~ LdkGḐ TBtW!GƊt Ӌ%9'f :]??(b?,Γw]^_ >3wb>x`>z*3lrݪ4~{xF1ʪ T_ZP^T7D1P-fp nN˶;unq~coչ4H<8l@r^T՜rRƨ>F=ҬX^)$Esydm$--hzlo% g6]=YZLTBrU@p)&4wU9KJ@w.sk`OzIY W[ҙjv%IӾfik̨(wKաjF$$UUj,iUIsg(r2SL޺,Fw|dsQ\L#\lNa[sD`V.')ȄqBh又ء_%|˧'xr,lͤ,tȌw\d#S[ϩ )e:7I:FA~\Dl͝~ItN% >_B8KY[]NSG46$<v`W\a} Lk(ߦVJS6蓡Pk vjT4@ީfinP8i`/PԐ0{j\ <~oj rⲐwH:p߯—$>Ж:T;rZ*SwUIi7]Rm'j$왊/W˺wQt=BH;CJ|]Hze1+Ѐ5yvfOvAEϤ$^g 7#2Mqt3]waao-5UE՜~}{57DJX҄{pIrzKYd9ҐekYo8pLAva`|)i,G"K(}r b`0?9-F dńa$Bӗ [ϖf84B]Olu?Wg$${ Ug".@~oc^AN9r߄$lV~d![x; q儢de5i.Yz.ЙaXQ7^qp`v$HK.C>D9hyn?@&QGnB  C9K@a9z6xkͅy4Ev:F%-$p!:9TlWRToO8AMyot 3 >o Z"oV侔+AY9)(AMUȟRn@vM#3rUBԨV*u@uw0&FkgGN4$Ki縴h~&q5L-u{5k!$iN O?@I`}[/s~k*jJC< hځ(dG'4?y+-a˨Y2Q%ʹM}o vIaR69PnG nt@?x|ܢnd^(,m@^KdDf_:϶$&QB)8@j͝&W/e(G׎UoRFcj EErLgfjrݥ%tw@C4"HD^'jBP.[K(7Bzl|Ϗ֖LL|Zwۙ Пo%yCň>:>B/@R :[ޙvM' DM\ v2)p*R4Gz&i>H$(:Xڠs=Rf{2t`9h^wج5JB^-"rI L|{ !g3SX<isR,79  lXi!udMՉiY}v~@?v=k:I._S &OȌ7НEJ]`/oDٺ0DJJt+T}2ZEL JlܬǹmC^!z}VܹlF*F.9@My)0(7joI\MeXH [ [33G)*Zaب8҄ яK:4 L~? 'I ,%cxn9+utONIfC]R4ǜ2tB*.Z [t'&N]3s"[/nfdXDSA-mC=>ͱS~9<ϱd$&"T(&_+gQ||KQDDMXL|1-IM-5`rSןHN|G'E+Dl.rK:rauQT"zCVi8˅^gN".mg@sk{ gH oYrU-t+ ,:[Jj?=(gGncg ua ] otQ*0y\\exZ,\+֎[E54ƿiЖhKLvۤJh犀9fv5ozF3ـf=8 #4׫ue얄o<" cw)Hg[/!|dq&mh16OHTt՗-W9iLiYwHȠ0 H4h6Hեv-⛴B>Srm*cOޛ>IJƶg0fs7RpZ>gՄH+骩;yttT'P-PJ[T6XG xeR,r@ӄ>FOj9dM97zPWSs&[v32zcۣ0VigcDȮ C 37Shj}گJŇr 73 GJqM25eG}+Nedv6+|W;A#Z `;]nƷ,7Hc|}J;;Pfg& lt&^Uj$֙1ؓ^kzg(ֶPI[~ج5^J8@ڇM# (?9 2‹vL08t8kVEw#-FWIuɏ>8>3ݤoG4}5 FV<鮞Ĕ&Eg [ #7x;x)?#trVjJPmȗ0"nKhk:TJ<$]\nK\0;r+3 }@'0=2]U-^4\|st_ASk^% 6 ,]N0|=#A: `WS zGQP. 84k6J4d&Sk Ks*Q_=g^L:mFf"@S%&j8<𶎭"2|y_AzTF!|o|7㧝jV04 䊙 @L$.p"G óVrpxQTGp!oeU` <4bRaCgYX< k]L-.6KZ&KcK{8]BEld^S_r$9E N!07L*B֤UbbŻ^BM1&L /t2{t |W+Vcڀ.#7W8ё9^{C I/k=u-Oؤ跃BZz^u|Z%IƯ}ϨR-)XCP3奰6qOE@zIMu`}t̊gO@/h=txӌឺ洢@"zR!S\nTT,A ڣv[;Wo+x~cr%. 8lDSՂXA/"&׷JQTkEq4x=KQ{o-a5<#cq4 ޒ免rR42r9dtÙXfb%Qعt'5>f u]l#g2ZΐiRPެVTw$µ@ '?I|)690ٛKMn6&4!}`5G ʊЕhᅺs,^[1cM Kw6>] Q]B?!Sma/[gz^)GpxZpzha@fœD{Crޡ)ECC-ZiEo~<>I>GᮅVnbK*CAuymNȳ 9\'Z }З)h@ oRIg{ik(H46 _\2U<@֫Rv#U b2, Bj%6 l퍧+*mN݂ą gRYmT}衬UQVŗhՊfņ4wVQr̔ᰡJQOGUݺi:}3N.5֋KtBHTn~hAos3walHMi4(n MaYl.1iOk5C;JSZ|mZj3hĤly8".9gz/2wVT ę WpTM"R CD^]AAp |JXKƱt5lym~5&6t@хd#{ӽ=NHf0- [Htmc*md7 |S2!TNN`A/Yƅ奞;k.`t@T׃nRef^j[QCZh%2q пDdSX۝/AETcKq-/8$.sƁFDT*L ! /ڙ;fL*!eayt)tW{qLUUjGWVʽj[U *yH5 S¯% ^🲞sڐ/`a-0c#F@{#bR)%Bk_K!/dAU=9t?uȚ3*&G)*̩,W}\i怤htG*Z_ۃj7j h4)ŴFFэ ?=ӝƣ/Ԅ zI> WJ%o;HtvX%>}OVl3O ZS#'H02 (*bb$ŞšI7_u'n#u{}88d\ n,H@X E ù ~`Qc};.-5 $'"  ְ!jmn@9ij#Qٳ\20OA&%V[uMlT ͜TϠ"Yv CԀL8whc-1K˝ dۙ{;Wv7y땒AxLvY3m|T#;6:Z!f=1E Kl^c&|*RK6KUN%!M>Ej9H5%/ֵo~o>uW^OS[CPE>\ŹєHWڶ<|z1g5F#)X;IawN H%.4Uˍ -Ai <9x#&Ʀe;8fL|3X|qP|=USO +<~6н {'@ uƳJ54?vZdPZ[}om|1tͬ`#Nc"[ͽz%)`띃W~3[{?bAsðƏrSEu삲d$[&z[HHV.e2lLƏ/c؋9(f.fHL{{E~EYbH ۊu̩s;R_ˍ Z7 b/w^|~j9ˍ+詄גMхSVK" t$hC~цP|9JT4zhE"Txo_g*IIT=pzhBQ(Z"vLE\S$|ԨE&!rtV>vWy),ߏ=6k/'>0 ÂҤLX}I!dhItl԰h 2b!2pX|/&Ь(x]J Ri}~zuj'_#n:q+ 9`< Got"f r.C_-$qp%_)kJe4UʗJbp''72\O/Xbft@r \7:q<0rRoJ+gKr+V0R$CT?Χ5vV9عhL~WwkrElY?/צ!OImOAaѸVqJ ^LT8>pۈ>aF3cg'ÌcҐ9mrIy-IXs{"7!|*Ȝrfz>rX)Gdג\I& ,ds2mL>:wd(!zEO鐜S8M'ɰI }p}\I|Zg`'.6?X:= Ng\& krB|4߮8R/K@z}čOPp!0Ó:j?I(4O+}0!,%pFA{u0h4#h+#$`glc*gߤV.5i4ƷKcC*$i^>7Zg$JڗxÃy 7BO[5Yb%;< v]fvMoY3x@ZP*M= ~y%^}欔|5ɍclH4vxŦ}|pӍng1C{˸"_-S@7O҄u7+ xٍKOeM"]HY9H{G_]Oa~l|C}Ӗ7 (cZ./ڷlȸ0!ն=%]>Nz]8Fc`8Zݘۭ=Mׅq˅n٭7bqt=qk4`рIlTX{FdQ 5Ugt8$9Ol ƗJݪp4PaEUڽRaI\c=3NI"u6֑2ABF]ɦJF',ko(&&3U4̭hPU[R{PUjTW> LTgr(XK)wB Yw:@( 3 ]#ӏXqb_!WHt ~$:` T֎hM-Өkp.PW8u]-($wݿlκMꣶuӅ&Ytf봐8y ,Jٕоnu,.zslx[Nɿ8eM6']Ԥ]>iMwI{e|%^`KG ADoʇ~urDX6^dJC_/ ܇|s.=9Q!ixep7YN #&qt$0 <yF#&zREi"ⰐbKPT jí6X!3x_!Mow/K{\WA$,gY.6JR6D+wS'Lw{BKO#(x2q6.Gʁ$Cʚ3zN5,oRʩZ+Fm.5W |q#FJAΤlpwJ,u-Vidltl{Z5K8^X.ZqJ-E-O D.i_:p(g YE9bPLl`P?uV^Yoi{N-EnpHVx=>$B-W Kp9pơ*Di%\1 xJ|!dFnWO5" C|;p_҈\Jjv &G y&6Y…!MHs);$^\Tu؎Tǚ*P\QjvU,6rݚEvTzCI-~՞ZO;^-iƯi/o5nm]ĄR1$BT kP҂h$(.y %=ٙZG~ԯT[?դ E|efn(s =VNxG7:!YWF2hTwhP!"oWP5-IwICdɸhluՏ^i)Ώ`E!砓*٢O!dUȥa&DPNy㯑F.jꂘ& tlSuIO ;!A[tQrݏ ~nH'Ù.a70&,rB fc ` ^I|g!bNm/SSag̢GLyj@Nv%.3 dl+!L\npEA5+$ Y Yʁ?CzLIIA59ZULjTYj4PUel#֨+ҷCFݥ ЛFJvͽwX2ZٔjŰB sƠmIAġ*Y,t1OdP~ 7kӳ_#[եK@ZQ7O؁g(vAn2[cQSݯ!Ҁ ObdYzYBp|07v#.d>uWZ,ڇɉƢga޴bYci%̝$QݩsnW6FpQ,6Ƚ]Ƅ=7+ꆦ5;\r^KONIq'=G[:8v c[dggo-v`wOOX˘V] \(ɹ7'V3TSY1}  s@ #yك[Fi vMh&w' os־hZL] i]zi>W〨5!K(M,tՉNp=B*Z?%@B=Kzq-KKb r79(J_1'fʂ.;-ڣh\2F74\fv(y]74$&lѓ*aikdmHel*c'Ck}]y̆rVj@9AR;߳d)l"9TVV6=wNEo&ZGv|u6+B4j%ǛFr'ä,X@2lըU\+ԛIG2;} G-th~6\J]J TO9AM-(pś|iHM}E+x5N҄jKYb{g|!}nb,qB\Wr}]Tl=- #(lqBl>:_&fuwI22Rn|$' 쥺Br]\NkBv%a:哟ۭEl=WEdvӳ%x}q,qK ]͵N7!(B ~l0"Ou@8򧈼CLI*WCEt"wcdOpAvu0!Ӽrѽ,SZ2M Y^ 'Wgnr 1r] K^/UiD`eGr‡YE6'3 Ư@#.k3`Lz?Ia]_>>ws4ZwPqc߄[|k&`V+i4B,k-}e4Mox"_4o8FZ gSCQj$"{!du#k"*$sǺ"tj` W$ 6J]ZDoA4e#nx8`eX∍Լ˞N`bZd+cl og} )KwpaƞD'ߨjk؞·c=AhWԁlٓ:@vir'lGD4 79QH\1GS$c|p?v\oTc'Mm\P ~%ߣ @LqJfeljRXSJ^=@j4}/4DP;꾘Lﺺ,h !}[-BO+GQ}S6i)˽?$22#GE N߻N܉ׂ4?~?_ aaY]".X`q!*VPDp0ٌV<B8@s3L@ Mo}wHzW:kG涴zs'D y\owx^W5Ӵs%)j:ly`_Xs[,*oAASucnB?d0؁Vvf}"REXmPЏz@Xz6,A @B#V Ŀe/jplg0ERYdKqgM3<4*=f< G~q9b)m*rE-{@݈Þn ֕եjOt/P/9*+wF;J rm鎃Aimz374# Pjw2PC@34dWqmG.;mFzG]jyӛg^--% C`IJco=cvLɑ"䞯,od;{.LdPo /@ʛc O2`3,ަ2ؙ/[N 5R+(BsVO&Оk:tw9CZ0\")~@&rZ`㉌OMsdJ!(sǠ肏2[ov&s;y*Zuй' Elچk,@@1Sz{&ͭƷeK+]MoV7Z4< LTTkvIg+#3 .,RՁUȣS6> j7#9LfI6V<`KkESf\- ~1f=JW~4C;s[(J( lڛ*+8* !`S?l9RZ.gf!Ý>gJ{LZ p=GNk|kx:ſ%)MVqP(ҳ|wf0*<^rltw^f[}(al>CZM9ft*%̩ޓ7SiST:Y0' nO9Е^J_ r(ćh7%9IoI\^8ҥj5 , : rCf(\35`&NH LQ" _ ]3-g4`sqO ha̦#͋)?abל ')Va=wpr9A?>u8 ŹJtky9q:?j5M!9Z-1w|0s{zł2 a1tl1;3ο"46R : Q3ZcTSP q$u |Ҷ64QHB6*z Nx|_"<&/\h SgR9#5mW'3UWrjDyuzfގKh4JlCu;p9fs&)nE:h0'{Zd tx M)z*5L "8Lkፓ-heuKyi2>QJ9BY{+r3(o\)_xW`"X$4y,7Iq<ۦ3dB$=WHCsb*gRubڂa$=n32~/̓FVNQں7} #}I-tM%'') ;/!Bmͽ!6I[fknPsӈ̀ Eksou: O*$׋ 7ZVVX#S{\ѵK sXر'fSsD: 'QUO70˧|(yÊxՍ adcR(Fv v_* \֠[ k:1ݤ**^aIYQc(q5a{^L}L*dqe-v{8J; { ~yضbEpPVʘymHj`J7)jPrOB B S}7 Y^n.#5u[xȝ$'J}Nl vs$2:͒RF#p-C⭅ ߞ?lj"_v(ܻz^nMMrZ[F_DNPFUp)ILqL}q=D, &EK+lsaC O ԼIo/wI6i3voUjϯl+ť4R :~_)rg+[#7qWF__ |Y zs)cj^;KLt@k1P2nJ?@7*nU UEjtoP*IVUϺ:(36NG6n8|L.&b; 'o%1>] _JϱW+fT)4 V`\<^\=8(rɰ2e tlpY5eO`M}Ű1λ$b '.Ŵ"Y\Z]X @Vʚ&7* lRYa-3SR*//"Gov)}BJf-"Q{r|04S0A ^yfGiUI݂h7$v7uC'S:uR 0II4,<̟ɁT-0|$"MANkHoTyVIۿ4X͐?Zb&!VS Y/ lS,40jb-wXQkW~DnD=MBtڍb;ǚPVMU둄vJ"hp&9)pN>{q(Pcsl 3 2T &VW?@8y98;(S{ q bQADV[?NnPd+1]WuТ vٶ*đ`_ `,u@i7p.WcO%%ac];]Lϊ֨Z 'dDAT[r)QA\17mmj2CWjOUɥ i rMuoV 5iͮpr~:J|7T<7^R y,0k4}6C<1 Ti3ä$eÞVAJϟ. ^aW`P pt7 5]Yc{,ғؐNPkۊQ pB^I H/G`SO?XFx=b[H &؅CZ 8t8 M][s2Kogpiv a6S0nHGΤ\\*?K~t{=D]'jDSUn+t[,l[eK`W(vwH;?s*;Y? yE2YwڝYm2'^:xyk)luXV'cs!}D׃7H˦74AK^<,W]"Sm;0 x0roإE@O8adzmMP2V74kdTkxec2|>xI'f䝡>՚E>>J"Flu_/TQRt.^YW^UᐦqU8CO{g--~}{7E^g~5ZGt/0+Y~{zrl-`Lxp}-yre.`%-7AGI7k^gJkb#i4pQ'|:S;qK<-dY B.+SHRiȢ\'MIK _Zb"G=dkY֙[8}Ff)=Gvw'B:k*R?UUYGn7-5V+_tP8Ej®rӁ>f̔IM1:L9Zaۘ0ؗS\b(F q kbDx ҵlm$`;j4~N( n$?_/eh.%|DAbk}و H0tb~0}gIaFVB}"6HGbI$v>3OczqP5#\$^iāoSnȀI^_g^<9݇i2L&hΊ !W }\_7 Z3TG砸Qቿ$ (nȡdfڬǴF*J㱹io싷J*[\gc3xَ6W{tI媋t&Y'Ǯ+Ӗgϻ\$E:pj[Q䄒bxd? ~# vy`,"R6yo܃0+<adhn)e=CmNsI+凕R _9W66N zm,oؕ');mJ),p8as#|jֽ7ax.^zN+ZR6z4͘gkXF=|㚚LӓDF }gqolYt@ c$7$rUa{`t'H݃c'cNd I,84cjj\ko?N!`% -c-ha3ך.nJ^>5kjnTjHkCP5P8dN$W/FVҙt k4Xɧ(3IOe;rCLfPٟKyN^.Aj˝6Κ:,BD֫ +fN'i8I=/+vEA)zj` W@oȃ5ij[ p)AM6=Yզ yxNCˏt:_'Vr1+Lfn#_ КtwYE\,4Y5 v-^ zۅ#lirO$hW/\ZDf|J5+ Ca֊_d1zSI0Q7*b.}5U)t&=ra9K6ϝקgf›Wej^bEZ|\ x6tÀvɱA8.:Hj0)Cҿ:d;&aPw{cS&AxD `k䅚ӶIANZB٭nյ策Kk҆g +Kia L86a+Ń)>,I.G >-m:3H{,~4 BOua)4R WL2Zl{97aP;rD.33<MvЦ rSJoסd87w٨nP2^LI PFiD&Henkm@A\!MJ[Lʎ[L:I)6`Z>B\.jg W]Ee-pOM*#-Y HIed4q^$S9J/,ű0$zhn,]_WPn{NE$s:?@]E^u0B])x^UM66kJs@1`b|7 ;=x]w?&CuƻF fO&;[;(e^cW{p Px(#C  Nϙợ2g;d!$;IcZ)}z^H3yƷݵ$V-_V(9D{jdi|X)d J#e0]4Rj<(nJlVwN̾BGr:U`\o_jZ-p ^ j X|2:)OEuq<:Nʍ-KJ:w@vq؝25 03ip$9CdV pr\)5Gz{#m=:kGVίG?]].;S6~U$DOZ?ϝUsP.zo[gIqCkj $ZV)S xM^Y!tЕ߃?+ NPh-Ю<X{;!+|X9%I?QZd}3$x9>Wѣc#؀XgRӊ髥RRp]kԇ4t>f ʀYj-Uk&53NaŋL)Nyn$ "Jc~5.~N"6B>َwNhGvS %lR1w!2S8Ia'4nlz@9*[28=.#Z`Go{TYPɘ 1}  +OYfݢQIUy͡PhJKy HjU~;}Eh8HIzd0ڃs k*1 6%h|[6o_ ʯoڱ>dAh3Ӂ NF+אge53S[1D8K[Tz)eEg<}Es ﵒ8y6ñ V*ېU9l^W1qC3Yl6aIep4F|Żz;dů4][,G;schAYmV+jh~F= +~q!zOp7b⾙ 'L4}ҭꦮ-_ГNxT%IыROt&GDvm[ >K7SyK׭[xNB۟[jɧwxHEYwNLf/obXÎ(EO숫ܵWĭyJ{p"H͐nI\]a6܅wDCr*r9OVewT-U(QesBG:nƾp?CmݓwE ѹ5?vjpGz~0v\<`{>VA r9bwE#߿>t[bY6+eb|޲[FcU5yV7l?hl__\4kJZ+i{ <'q_*Ƿ? GQ{ʵFW279 GD6w :cbC|PLpvlP1@q.Q%)NבOyIB+)c UPO‡no\&n癔[r'CI2"A?ۇ.9#+M~=¸5w\iGiQ ma>P}鷎gZstNFVyhJ*d$=qg!͸{qMݹ1 J{kŝ‡NDž%ĵ+;5:@\0LݐFcĨAR _p2N|8i|,8ܵ4[V|N㑍Ga`&g"O+`(@KoD.$D72f̨"]}x/Vى O71}0hBLט`h!c^=ЗDx\gOI/mOW宦 t;~EvHƬ sV h?&}PIjodFvɗɑ?lA^'5C  )q4M nsvJlŇLj= Vpm1"1;ӟʶ Qw*Ĭx2hlT\''Cgv@LIIb= @ L>,ł<ݻs#ǜ *Bi㑀YH7 ;07Rޯd*XtMy/Z?6(_3|ZOBr%x|f4S+lIMZybi\1 ^B LEh/RRCꉾ7_xq _]:x@ݘ=@8CJ8telVGy;=ߏg'V?BG"g(0Ar'K}9iJaSe+EƘAb>M9+yJQ軷Y8hy^^du\ j)^] L$w}љ՚XJ۠'Rg3Yz%᪱}1u VW`=ޝqMlHuejX߄4c@;4՝tlDL]Nl1\xo=W,s|+tZ%0-sq~Twf-aȍ8k'%1s. pl{ ]SٓꉬZX$R$B ŁبE &)wĂH4EΨ7~2qF#؈>p4{8+Qsw{xLqI]tDi#NvAؚ6`yi0nłtvxy1\ zJ;MsDD֘lsַtbBZ'2J撱7 c;H(U?4ڷVs?0c KɧOۍuYZm$8qN{?2͑ x, `_Os2#1Ra勫4S#U/y~Y`86& 0>6 |^xOJx&#eeU?Ք6>yDwJ^VRPMpl#).0~r#,  *J&z6N$&Gyۂac+оp#d>4[@-(kH0 yوnK}tj.<8xb PeI k82WxMy0WFCݦSyL3v{i5NIW"zJd`1<\EVdNG. ={0J:ռ{\H8㈭ qr%Ga-^hg?hv,NmKS7? wsyz@s{A }̷4ru&3¹:}C)mRZ]H :b-[gMuRwKHNp)5ТNE-{Ry2qJvd;IB2}PE0s ?2%< [ 7Vߴkl{J}.%Nqzf 6!hHwa˹?! q.٨i9KX`%W8/k i8O\:KZ2\Zqe䟙M]ڵv@|G=\F©-2:!1smmwM ֣Q$ c#?KӲ`3}슰ʳ(rdkP');zswB=H8Qg?7>yV~ Ȯ?˦zѐ $rH*p oRAT*yi`>N>"B|ÃK(f[IY&=!\ )t@ҥB#.mt|YFdWl0rctelىL ̐H@qvWW j҂T 8?=r0X {o4ٲ4o֎d"&^!}5)nPuq@kzy ǂV^GzԿ2OS a@eA{/;zi'l ҩ\'m̘UY!~Zx!x±ʍZBKŋ=eI0 V*OI^}tYƓp\HwG1`g_1*F>HMLѭ[h?a`>T+Dwu:yixoDaht4u=f|z0G XV"*}:ժn9Y- :IzqU0ťrsaܝ /ee2Sl|Ya!YQp'NL+G piA֦~r}7A,n}|t8 !o1zs*j"ӿ UFzj 6Xd4̻+>4'NEw<*|_qD#Yn^4/[)}8 Oaޤmހ˂K-mr*̄&)`>Df[2l#Sp8TzSɰr&2]t Nkn<4s2e5cC^O tt~!;.˰CWWg T{PexH` K@tG@dr A N+AQ[jެY"zǙbeU'Vͣ*nH8pKkNZ%m,FX-.vkAma /(_0 _\$&?3ttKQL@N*l#'l$*#דiZ &Imy_&CU'GzN4Q(6j9'V%@'9?g'y98ri2i],5bdB4B =l7TP.[k H ^iĕc61~%LS\KN8CLYSw2Pt^QS2Um"oz.yi-*s sQG/OO-IlOJ" 8A̽noW^;ƢmyiɣWQD=iMM/ _S-7_?)5??INFL\mmtˇ!{!1LLeb J "[L>6Qͺbxɕf%9RH jg 1݄}fz_mW@P${凸<$~44o=}H#ƌcY4 8=9p-]sa$$~PӒMVSm&)_ɌȢRl؇Z+f7.D,=緃\6%!Ezu .qn*>MnOCJ?uPԻ9utE,0 (m}h zt<!y,)`ү7cӜn>&*`Pk[#Dz.ί+0~<%![7@n&ж[$P *g/u*Imp#U%2222.o輀ۨZ(9xGN;7OA g1OӤ]M ^gڲLXMZKzݧ lQۏ7 e b:T*;ՇIWpRh.j`ŦTaNi90ѳ5#Qq[oשŅ6it I9t F7oE`.L.q)[- ry oeUV>tciۧ߮/WVQĈRcy'=:0zi!!ΝK |LXS-sC ]b`v LM;h{GpȆ@{TXB*^{>[̘3x}Fe @`6{ux2HvM_텅S6F="7=H %g)ELiKADV EGD mɹeMyc'cteqo/|Rέ``3ieel)ː'AkΛ.5c(@HJGk e_ιu |VfV BmzAӋ"ĉ+;r„:0bwK"A;tH6<ԷzQB{rM #ik~љ Ϋ09~C0eB,*K`'ho76+p ZТN FKXqě3'/dHH>R1~LM8 ·9F03bLT~4PSЊ:_uIfAsڪW8g8- &䘙:IgTG1tis7x0 r 9/L蠷(zu#&}mfZE~ĭFh'MI8Zq| @TtqQ8.:d8:j"?Q;fR@XNUI2I{)`<&Ignm$ ojYKN@ X&nTQ7 Z&jVuh(\FhU&:m~96Y5tf1W]*Z}mlc=tgaQ>0 IWkLQ Drh{@T.C?>J|SiP*g)?*uT&FF,cQlTv>O'%a ^?_Ui?+<>fc%}~5ݿ3sOg[;d,,|;1L q]aL̇8bѯ͝Qb5ufloW^_ Xٲ%df4w] Uo* ڏ D߶ &|YNo ᗳ%\Q _ÉT715 m)oէ=Om/t8iTʅWrvZR-tʠ,` KڬYQH͞tދwF%Mp](3]]4Թ5Zӑ ~νMFqdV2{s\=hk*Sϻþ0y3싲n@d8et@gv&Ru޸ D,?w>.^t^[F Sb Et`_<x/&xGlEqBth>]mBoTF1vǮ0k_mX ߙCqbԅޅI; -&z' ZE~yr0)f)z}j''ꇀBhLJ*p"Mc$!g^֫խb Mk1#{ qtEߵ+]/Dy=5-81l D6Pqſw2l[D p %d-щ_w#1@R9Yyk0iC9B9Vhk'=Ԫr,Dd|Zy]XpGTC`!teg&C(.á%gǰ à Л)!UCe1tLGTWk!LVhGȒ76d;F DX,p+9;lu7ӨWMV WILH5΄6.NI9[G~5nHmx -浡 rMĐ2q va[#. 8j$c177w/a{~#G}W߃}zDR钱~ xo ,}~uIk|//złt;$Y?{?FsEC?k6IGwB(a@lUKa)>8,SvkbHmbݡɥ8S8u8#f=ѿn3'žY.&/kQ$[ALpLqa@$6{8JlDkԔ9gד" kso5&%RA͚;Ab䮙1TQ\hl+nАyLDdiʸRp[`vG cV6T%$xS jCoŝ5h| z&qϕtudT.b(ψo6J8bovq(p:KqճWdZ _ j˱1jۦDD%/ 4xtmf4ng`D9qkC_LNC#ePUr)RR buZJRxk7xQ\ӸA`{Sn[E &&B6ݒux?Rwe g-c1 re 5Iv8馜W=|/+ f]^ of WAKҸC|DUWq+kbXG