summaryrefslogtreecommitdiff
path: root/include/soc
diff options
context:
space:
mode:
Diffstat (limited to 'include/soc')
-rw-r--r--include/soc/fsl/qman.h62
1 files changed, 34 insertions, 28 deletions
diff --git a/include/soc/fsl/qman.h b/include/soc/fsl/qman.h
index 37f3eb001a16..3d4df74a96de 100644
--- a/include/soc/fsl/qman.h
+++ b/include/soc/fsl/qman.h
@@ -244,11 +244,11 @@ static inline int qm_sg_entry_get_off(const struct qm_sg_entry *sg)
struct qm_dqrr_entry {
u8 verb;
u8 stat;
- u16 seqnum; /* 15-bit */
+ __be16 seqnum; /* 15-bit */
u8 tok;
u8 __reserved2[3];
- u32 fqid; /* 24-bit */
- u32 contextB;
+ __be32 fqid; /* 24-bit */
+ __be32 context_b;
struct qm_fd fd;
u8 __reserved4[32];
} __packed;
@@ -262,6 +262,11 @@ struct qm_dqrr_entry {
#define QM_DQRR_STAT_UNSCHEDULED 0x02 /* Unscheduled dequeue */
#define QM_DQRR_STAT_DQCR_EXPIRED 0x01 /* VDQCR or PDQCR expired*/
+/* 'fqid' is a 24-bit field in every h/w descriptor */
+#define QM_FQID_MASK GENMASK(23, 0)
+#define qm_fqid_set(p, v) ((p)->fqid = cpu_to_be32((v) & QM_FQID_MASK))
+#define qm_fqid_get(p) (be32_to_cpu((p)->fqid) & QM_FQID_MASK)
+
/* "ERN Message Response" */
/* "FQ State Change Notification" */
union qm_mr_entry {
@@ -272,12 +277,11 @@ union qm_mr_entry {
struct {
u8 verb;
u8 dca;
- u16 seqnum;
+ __be16 seqnum;
u8 rc; /* Rej Code: 8-bit */
- u8 orp_hi; /* ORP: 24-bit */
- u16 orp_lo;
- u32 fqid; /* 24-bit */
- u32 tag;
+ u8 __reserved[3];
+ __be32 fqid; /* 24-bit */
+ __be32 tag;
struct qm_fd fd;
u8 __reserved1[32];
} __packed ern;
@@ -285,8 +289,8 @@ union qm_mr_entry {
u8 verb;
u8 fqs; /* Frame Queue Status */
u8 __reserved1[6];
- u32 fqid; /* 24-bit */
- u32 contextB;
+ __be32 fqid; /* 24-bit */
+ __be32 context_b;
u8 __reserved2[48];
} __packed fq; /* FQRN/FQRNI/FQRL/FQPN */
};
@@ -405,13 +409,13 @@ static inline u64 qm_fqd_context_a_get64(const struct qm_fqd *fqd)
static inline void qm_fqd_stashing_set64(struct qm_fqd *fqd, u64 addr)
{
- fqd->context_a.context_hi = upper_32_bits(addr);
- fqd->context_a.context_lo = lower_32_bits(addr);
+ fqd->context_a.context_hi = cpu_to_be16(upper_32_bits(addr));
+ fqd->context_a.context_lo = cpu_to_be32(lower_32_bits(addr));
}
static inline void qm_fqd_context_a_set64(struct qm_fqd *fqd, u64 addr)
{
- fqd->context_a.hi = cpu_to_be16(upper_32_bits(addr));
+ fqd->context_a.hi = cpu_to_be32(upper_32_bits(addr));
fqd->context_a.lo = cpu_to_be32(lower_32_bits(addr));
}
@@ -521,7 +525,7 @@ static inline int qm_fqd_get_wq(const struct qm_fqd *fqd)
*/
struct qm_cgr_wr_parm {
/* MA[24-31], Mn[19-23], SA[12-18], Sn[6-11], Pn[0-5] */
- u32 word;
+ __be32 word;
};
/*
* This struct represents the 13-bit "CS_THRES" CGR field. In the corresponding
@@ -532,7 +536,7 @@ struct qm_cgr_wr_parm {
*/
struct qm_cgr_cs_thres {
/* _res[13-15], TA[5-12], Tn[0-4] */
- u16 word;
+ __be16 word;
};
/*
* This identical structure of CGR fields is present in the "Init/Modify CGR"
@@ -549,10 +553,10 @@ struct __qm_mc_cgr {
u8 cscn_en; /* boolean, use QM_CGR_EN */
union {
struct {
- u16 cscn_targ_upd_ctrl; /* use QM_CSCN_TARG_UDP_ */
- u16 cscn_targ_dcp_low; /* CSCN_TARG_DCP low-16bits */
+ __be16 cscn_targ_upd_ctrl; /* use QM_CGR_TARG_UDP_* */
+ __be16 cscn_targ_dcp_low;
};
- u32 cscn_targ; /* use QM_CGR_TARG_* */
+ __be32 cscn_targ; /* use QM_CGR_TARG_* */
};
u8 cstd_en; /* boolean, use QM_CGR_EN */
u8 cs; /* boolean, only used in query response */
@@ -568,7 +572,9 @@ struct __qm_mc_cgr {
/* Convert CGR thresholds to/from "cs_thres" format */
static inline u64 qm_cgr_cs_thres_get64(const struct qm_cgr_cs_thres *th)
{
- return ((th->word >> 5) & 0xff) << (th->word & 0x1f);
+ int thres = be16_to_cpu(th->word);
+
+ return ((thres >> 5) & 0xff) << (thres & 0x1f);
}
static inline int qm_cgr_cs_thres_set64(struct qm_cgr_cs_thres *th, u64 val,
@@ -584,23 +590,23 @@ static inline int qm_cgr_cs_thres_set64(struct qm_cgr_cs_thres *th, u64 val,
if (roundup && oddbit)
val++;
}
- th->word = ((val & 0xff) << 5) | (e & 0x1f);
+ th->word = cpu_to_be16(((val & 0xff) << 5) | (e & 0x1f));
return 0;
}
/* "Initialize FQ" */
struct qm_mcc_initfq {
u8 __reserved1[2];
- u16 we_mask; /* Write Enable Mask */
- u32 fqid; /* 24-bit */
- u16 count; /* Initialises 'count+1' FQDs */
+ __be16 we_mask; /* Write Enable Mask */
+ __be32 fqid; /* 24-bit */
+ __be16 count; /* Initialises 'count+1' FQDs */
struct qm_fqd fqd; /* the FQD fields go here */
u8 __reserved2[30];
} __packed;
/* "Initialize/Modify CGR" */
struct qm_mcc_initcgr {
u8 __reserve1[2];
- u16 we_mask; /* Write Enable Mask */
+ __be16 we_mask; /* Write Enable Mask */
struct __qm_mc_cgr cgr; /* CGR fields */
u8 __reserved2[2];
u8 cgid;
@@ -654,7 +660,7 @@ struct qman_cgr;
/*
* This enum, and the callback type that returns it, are used when handling
* dequeued frames via DQRR. Note that for "null" callbacks registered with the
- * portal object (for handling dequeues that do not demux because contextB is
+ * portal object (for handling dequeues that do not demux because context_b is
* NULL), the return value *MUST* be qman_cb_dqrr_consume.
*/
enum qman_cb_dqrr_result {
@@ -859,11 +865,11 @@ void qman_p_static_dequeue_add(struct qman_portal *p, u32 pools);
* qman_fq" for more info). NO_MODIFY is only intended for enqueuing to
* pre-existing frame-queues that aren't to be otherwise interfered with, it
* prevents all other modifications to the frame queue. The TO_DCPORTAL flag
- * causes the driver to honour any contextB modifications requested in the
+ * causes the driver to honour any context_b modifications requested in the
* qm_init_fq() API, as this indicates the frame queue will be consumed by a
* direct-connect portal (PME, CAAM, or Fman). When frame queues are consumed by
- * software portals, the contextB field is controlled by the driver and can't be
- * modified by the caller.
+ * software portals, the context_b field is controlled by the driver and can't
+ * be modified by the caller.
*/
int qman_create_fq(u32 fqid, u32 flags, struct qman_fq *fq);
QqIr 0hW:->&:{/&xj`ZkN4 -7ǵ!$d3/܍<"w+e&CYYčNz{'ǣH8χOͨ+2@^QWCRwRx Swd^Ӗ&޵8dY<,fdZ_{f6=fSFT/$cpRDNhr^p8m^fp.'Ӛ4^Ã#ǖ i pһU*.,,iWYJJn.wMiܦ1M3Q)J!鎛=S7Vl4BGHt r ;5]3y֓AEV2ɣhTˡy>^Xbms{R,:~4^Y9ѐL 7PNjڝNg`0G4jtT^ټƫ%ޟI hD8S2F)gk9/T-a+ѹ_hxa8Y7); J$GZh+Cwb3jz1Z2c.=g y!WKZXs{qL j)-G,ޏy4'*=Or )woܐ)#i,ArwćNjZS^;GoI'hreS͇] :ںi]^UV8u~ daVnzy3#^ǥ%rjN2?<fQWCy:53#hf5j:%ݩfSOVqoT5i~F) dȱc t >.ؐEBiw7K6T /#Gac:6hLHIFu]0,U0cљ;pYCDj$oɪ=Fh326[2|>ϣ5 ֌ xjnĎ@d-{rO0JJgPx,P7h]sk*bW'03sH 2nu$b?F_$W|H / pZA%`є; /%.DZ\;v@ۜs,[Pw{l H"mEnnLsLLRfG5 8&zs 2q!&N4|z:!#>B.ltujfJ&7 @LusӔ9,Ҍg)Jw3T07p d?Go s7mZYC5&M@u']edf}&fQS ST@#3u؀H%mk_0pd ?Z!2yuS[ `-hz6i$!nO#iF +w@ !jqw9]pеUk+64?Y0LGYAӽ+VY(:AOW^_w,yCVENR9()aL@VX9B"w.жDfk>%H9AY")F?|Ah# K^ }tόV p ¨7LVяj+ ױu8 >! J!X]rĒjj7 lZK7ܟU[r}"M hyF$ȴ)װSUImY %t)ǘiB*}b3E dmUH9)uH']1(<7AtaJܵ~a1*ON'f* .8$$p'?qtg'}|-:ĉ$ryO+reĝjH?g䢯\tb&R"jzxwtcW$h|IXsQ*<ږe0O,i$I od3Wd.ZbQ/tQ n4K4<[5d42a/矲fIU:02^ ^`z-y -{9hܕzdZS~>E.'SycptOqkRtMUN`ٱĮzuv%|o77(gA߂{U5"~ 봐5O $cDޮhA>&yBI؂%P{4cb7P6byod׮-8t7IyaP3Xǁa]A eQdW'-B$XYpȿ`8Y̋)xl ;aA0WO-Fè <5iUA1?"\onhtC)Ԅ:rr{;=KH\%`X~^Nl -z"5qu|Rhr/TC!R:+Bٞ⏃GאLGyNnw'>1ztI=68PGYuDCTӮ*miKzj>ג{<޼μ+ɠC]) ^$Y!{gqu+iJA֡dilf43ԫHwFoPHٯDH%ROإ@hqvZƢR/RQckh]멝zJM!2^jc8qR:nyŕ twrꔼ:aJx<`Ӓli6_?8_2hGjc~R᧯ٗ*8,r/W2) E+g5Fz_# ]?#Bm,8M#Iib&J9pu#Ą #ǹn.PKVco\G]ӌ&}'xR$tfmZѹclIt5vGc9;OM%&ӝEA(GTW L3פru~$H6!@_hYse6]Rc}U v3~1<<ѫ@|*J,!0|{9jŹێ wfb{k?IJl*9i MHa9=~p$;#4*lqtip8˳Enxy3flԵ1hi,y`") kViH|~? ۳`_+>l \ )mD lBw!{7U.|Y!׽B0'*#r2x169J{0UӛS%RcEsD}~n>pGvB_xd~a&#Ue!o촅H-t agEջ,H)nѿ'~rwE@Kd_mQL=k+)Kd: k橽 ("6 A].moްac4} ,=)NjG(80QkFمXXSHGkKUdqt?8r׎|bX ?܁םz.PS/& "QNdzwYsW-F>~cmLז1t݄wSY9 QK1 XHaRo ;M_4&f(Qh%>9x j{Tk/u2%^Lى6j%]TnG2C\)ŀˆz E4[ t#6o-8EVR CtK3~Y [|VLčO 9EsD $Y$p@)CJKr5)ZZY\eU"jmRsb2G\ԤF3`nY^]~VGG[{yFtS~ =`^cEY)EѣK1J@ !eHX6p9x@FU.tF/#CYYD "P2ߋ [^:@uz)1]LIDvȶ3[4\D:l+& 4!2_B5՛߆'nP^]hzWd-}+;KRlR:LsX {2Rճ8,d<5t薏:pX+X̬ L 3yrg$auhdLfZjn}D` i 1jmG T,=_t*nr\op'>@K&sb@a4HoJ;.-8I]ͬk.핱e+do1wi'lreZ~0:޻Zz%@'=X 5CzgnM>"Y[.ߢ?4 +,G pt{rc7z81f/|5 b5wҰ< cV O&y<)Jjso ,A#H+8hy|6eG;mBPz@[HQlQBz8G.V~'?@07$ٵH;.~}[7>yh"8Zz5 J0JiBw;= k,ٶQ9yF;KYZ !Fa}S|ܜ4X]g"yymMmM"LPQcnw]-'JN30|kUVuɬ_K/TGO8 rL ط搯 UG~ja]h<#UI\;3 ~_bOho'.\s~LԚy'Kvh[8*q0&5Yjz<64π ? 2ْ;vz6&! a 'z B+ayG+\'%f\5+n,^ŻۼznX,4Y*u;5iP|~H#053ECW/xPLf8=h V79nLf5՛خNGL%rN{4E SN4-%rWf. jZ/)oy#i#NbUW`2x.>oү 2c.jEO/':OOӂ0c9rJiϞ܎] 1Tp '!C:7 y6T/Wk/(N,a cWfcS)'IdJ>7V SE![1As8&߸ fc":Qб')c^zf ux!6R11U6[5yf671ACZRt2mo*Fx[f_!+7,nClutL!C٘ߛf!'l: W <r c`^X?ט7¦@ƅl`=]Naj}. X0 p.VL|۽.`wPMߩR7Sb41-z24^LqI薶5‹+xɨs8ʬ?\j_򭖩|i%ct,,V7q?鎧iLC!"qf#Guda?VhL7?lP q#S²_8\j^$1lM5#NO `k njfW5J:usںۨw[!"^:͘KRqLXY>V5D|&@F:Gd"0ǣ1m | s>$Yp/!4*p:t,8 Dbs؞2u>CTr|eij;WܫhggO뤪/^Or Dr)X1cAJSJwa:OՈh!DL]c&郚-*Yk UIfW iPՕО:rJU1g؅h r+$lҾdlhjƂN5739GbLeOj*h()'xvSM2;-⬬jتd4f) Tq[ Tm0|R?UPPJ5 ,X'K\$XVź'rnի+H3-|bBE=$;uiMK,{3bjvf5)-  ֖?/z\[F7= hh0We8u[pIgJ rm bvr\0!1;5ٮƉ`vXN iٖ#qSM%֤HЈ^bm4'>`oPB z YFuV`1MY+yҶ;$/~PS_m (|骔N;5_\+t־•>~x[ӻe$#& S%:m~jCVMDzԚMXk5Na9tR?{_;N,T`y?fq__|X) M U+:b [O myuɞׁSW6&Q@1R&zgܙvxCd:c:mwҚ#meueNȾLM4]ڭa)C p3 ]jl8.s䳝Hy(ܼ($:i3L:mXVXBR ۗt^@z]Ey'J:@5u*BQzxZGŶaw ;)!T|]5HTK V.I/ePl_ "/2PLf#l$u:WN^įJadkzZR*qiK۵|l0OCYd"ӰHE7@rSwG3F(g(w1p?:D 뉎ަA}=rI2ڸn @øOBdA23`>Xw3~g1(0r$_֍<^zC|pCҴu6hI]EyDnu~#m/v˃6*9X%5NdBr;B`bcFzuKEKu,nKaC.غvpk@ވZj#AvC.:A.w=DkH8,e"T'icj<4qCLW yK%&Ƅ' #WsanD)]Ixyf{X'S5EuF6ٹIGѰ5VYѬp)̲F 2~LRѴ!`}yqyRd>]q^|ۢ=h'P_z5G]gU!Gk)2#M1<4f׎*AF9{}*}lmUթwNDݟWR{kϛxXخ:'x ^@yC/g# $Sx~.9/=F=#Uͣ6+:t_NΝ_{e)N&؃%̖Wlz(9'S^BK1:6uҤF"5sMֳv^hP/R$Y<ϚOw ɣKa%M`4Hhmw(.#qo BI7? "Ɩo1`><8М;w"]$gtn掲! BCWy`28>u'}DHXTջrEdGl{dǧ+cbڰ_qaU 3xma_@9yɒ[8_-ͬBK<:U-1E>J![X,& #hoIK{TB:gDS o[ȿ8HBsbq3 /Y(VXmsqY#y[\xl0_QLEysY5v ȳdcDs'{uyyfwR%/l+CT+Hz:_VkEQDGҨ .v1j*J 2n>0YKf//i%AdRvYCF %MDFʌ%Nf~cJpew˨ު{rMdY]QLl*nXڌʙsVǤsWj*CGk>r.XsinN-ܬYhA ڀE[dc2OIQuFIsdnx:QqZaGMFÆRD gXq)e=-TVpyKwH.=JNc2]<Oh Hz$pKஷ06C6rp Dc4I1LdQG^P9i'm/lW!;W8r@Zw8{?hn*FIr !ѠwOcK*9r̽"+dC^LIOjn}2xbaEws=wۓ}hn 6BT 'JX|vÄ#p"@ g4!/MaE=nI34ԍBJRѹ>H5"en=OqK2Q&δ+KH':N(y֎-G5SX w)ɚon6ºMA\|Gв1wMZɘV3VYtmuH {$p)ly#FCG7@huUQPowprFխ}l. .vHNz]̅B,a!1@#ʢAB,rY.G~yL08]qdutTZM$zC՞fQ 6fM>7 \aQw'mѯȵ4< ૣ d]mKcGP7A~iӵYF'TI_ke-YP3Ĕo &ҥ_=hy D>CDC1U<`] 'D2;g5zX"P8eR7Й6ҨGHC0\cU1s>aH%x5[wC"Q_Ox zpdkEġKFf9Y+{=y2Yl#$k&He/BOɦ;|[_FqAh TڙjI>s D +*\U=k'{F%R– BdH.#~^#XLfβtPiVV󭥰?n.7Ez8h!ѹ?~崺9؆Ϥ^p?'j?NkR7shܛzmEMũQXWS9k)j;3rw4& >RSgȩp8T 3Thh520&5Fu?I=$\ 5 p{FASWɓձ.Mq IDSjBƅ4DE-Y¢KN.ϩ{$-={ n1v ON>2GXo:GPQҴ dߢ"y>pHnTM۵bv]3_; j|]QՏ\C-7"dS~]slvN:KV.cw+fF/;E|ez,}WwOF4\KmwejMt|JnS8hqEs*m(@d#c,:]#\}u~+0 P+bG'2冬w4p^9j|W- x˗c,>B~"jiXZ7C^4c>s/HN|F|;E+Dh^u&fOZa Q %Wݩ[:]¹ v ^'@cr X#9b9IF g cL"xtEY.<8l2^[O̳7ϔ:JJ'}"oQn5__%OOmtg_hGcTW6zMf.㟅 .z)`! Dsj1.V6H,{TMSgsҶ/A|ޓ頗`ţ%+=Z$\`,S`bi^3W~}4<3I9DBB7hv,/nYmv=@R鯄l72D,(M[@ buom1C"$ T01snQozAvA)P1gʙ7@sYpBdˠ^&#zxzOrjn>)IW&F m~?ם&jBtI]SF=5lvf?MsNVAӌu?/Y +zZ9ވ@8MjW eW#r=FTܪ5'J٣x $:БskC!{:p[ >xM c x^ @*t7,/; (rywhΆrz;2*1Ȱ:`Mߙ錈qtڽ٬ #Mzt Ldز|>\|dY8ЉO4 zo;|v8>A M-?O`\4?H9'{Tu +-:'n-{̘b:T]u=qyRk_ iYN,8'Tղ"!oǔҐ\Hdv!d@XeL%U9$'Xe-t@Ƣh]S֐Ft*ukMw4)`,0E+aklO]Kj -92 mF\ɮ`gf*Lr!!< wt'Y~-]x^&RPz%mb*7ƦJ" v9&&w 測4 fnQxvp%c\qcFzWJ}&3Мח.]Q-97 B^IB}d>38ߜ,(M~8yҜ˫4ߛ.ccB$oYj~gI*P2SҢ VcЇu1c3w'Ci͔ }Xu}R_f0JM!͉+$PS)cﵪ킟v;Z0cts=-ZuJ2[y1 !STcHsmr`p n@ Ÿ>p'4 ҭfчBiNUEfe uDU' I2FX{I{vEd:qpj;52ES$ |]BuMI[b?_F(^L!F.Me *]p&^nG9GG47#1Rv=C+z񘻽quD8_ұ%^$5_tW?V{며c{хEz)cfz=s5AR\PHfqtO6ѝcpIzZMQV{hm괺4(U+zg g CV*Ȓՠmu:Pַ>Ɇ.%BDo'Ȳ{J.9Y4IWǣ#`%P;&2TWAUk,KMQזt[Y`E"v$N К~XII8@˔h8MX7jIpYNDu+490LЫŋndi't0a=iC|^7Z:nBrQeR\vAb?b6wjd6;5vU:xҢYךqT5ꍻj\i3N:)rÇ =>"ug,G(b7JV٬k@m$j+)1;omp/¦juVJZ& vNrg># k6*wWa`6#X7|dJcf|D*Yc̮8xE)ߘڔިYeK(?\:(S:E vuz]{z*lյ}ͭ Q.ZjsPz2^F ij_9B&rc">{j?VA쓌| )LVn?ѴWAnx}ZO(C/;%V5ǽ_sFx6ז|"'ZI}drݔ;c/[ʚWr0əLñ߀La5HoD.@cR$Z9sNYRvM[%pNMRMLڞe J<6.A_u>CJ_(}ez3l(I&ē\L6D~_䂟Ah?XۅN%3$cpP-F- 9ad3fE}Ƿpa{rc-[ҵ1oXoccjoULzw0ԒWÛSB|GzʹmF6h#mHNE( $:9̃GI F_ʼ=F;Ru4O`J![I*~ɰ beEECuʹt8 Y,=@8 u L2;t_O\0_.S(AW#/ DZҶD;_$0׭aP`4JEXAVՅC 7 .P,EFJt<6LN4_u\KyeE+A{'_;bkQ=cZqa5|0W|臻f?O?:n \ogeMlFNKy)IpR23Ly롶Gw&lXq,D֗dMxIxv9KL4nC8J4Hn<JY4]3-7zfC#+h[' n|g9x#=~`C q1"g_EU;A7zEd[;^'8zj.}yU@{4Ufʦrfpffbf%(,y6Y;x!K%y1 nCwe98]ˎ^,96MH{[%4.UӭF(FBlb󿀟G- gz|5qtn6uKoAzWa&jU_*"Ǧ3dʯ%J- {8=ٶZ)Q^9_IyZW/tHEC!|gi5#M/B @ ͬFwd+uګ0z?<e(%@)>v^Eiu D.[hARv'=͒ ~QVd~b|y$'o%4X]h1O}. Wֱ:Ge3L2yYfaҢ U|B )=|H$! @3ȗ1З:I)Z)ۏP^=Mҗpe-tut=oV_5QƸPBK\(kьtIFv~լ.JYLeRԔ׉UrV}ݮJqg*8},+?f@XR(&Ӗj1NLz}BY'z-7*Is5Us:QG%3S> SX~o1guD=Zv9|kęVjIZ};<ؼX-Sf`NUu!9Mfm5scTm&.lq;@'8Λn4PNעO)3ݤ-Ŏ9t0Mx;hVB8-IMV^[xͲ0ġP|4ݝijVz_T`Zf#wV.CcV5FӸ/h<Y|{l~;VLД^Svռ%4==HgZb.NqdU:8`"4}5L6N 9rŽ2kezi3ks@ ;"+3c:3Hېt`g[_T%<6A|65!V Qia -U gq=m\P/nAdߒyŽd S=4KJThJtwaۧ@h\2FZ^)g}qdZ#..@ES@uMr(w!kw8mBp87+_̧9P. ٺ\F"J'ZuVN #jKzϡB$;vhZVE!n]B87W\.ү\SQZf5}4.(׮]YBMȹsWaQiN6Ι="ój3SݡꑍG>tRѭƎXAq(B9JX# ow[;n^33] ;ɓ~P!-!GP!ρOJ蕠zUP@.C\Isq_'_Hph-m@.=Ua6pB8I?WI`5l^fcTP̛^j9#DH' R=Us. W0X$3!d%76ûkf^YhPj i? aE"e ]kS,ǪoO5kOyXko'k8WQJ%A+I`kyc3i?ګvM/6ŇTk4_<'t]HiFNFQi-'K?3mڟ3Na/:Z$kى)pS@h▲=6HрQ@*IN%|ʵj":%z{)̑p_4"` q?btV(Jjo!\\AJqNr@+&>9r{oo%.\3| "eAƢ/],6I6)2wBGޓnbv|r.9Zm<>ឞ8Vaz2n֡T3! _^._hcIΏ^g{f-:%ؙD5f9TP>!Mhn5^ 7S0W"50b\!8AThyܿ9=|O-!)-||W'}vYeVSb$˖@8^N^d# \eOLJl&t0ִ?h|lC4DrPWу/'#Ӷl_WVamilׅlXܞ;&c'Bugbn ّ;1eQGX8qnF[*/mϼ٧z`iд⻣@zٮBJh`I: 74FhOX8@F#sX88j!+W469|ܧ;Ȁw`Q80J3d@ : ə=r4bפ.ORۮ\swyu\P[G仹"pkĭ^_+h,Ѳc**zVlNqH!p>*ӥUa?Iԅ&)$r@ iY4X.|d4t{UEY@,f+  }M%Xjm_ @B~8!oO TNzIJIR#Z|4pk2kl^ݤŧ.3UbcimDZ p nl<4Ö$gd%wJn=ړV]S֞4 g(kuUty,uQ<{qupgfgOwOf[Kmכ4`foGZJsʂ^"ȝ *HpI6@D SB(M~J;I.r^([.YwtBG$֢%EJfY&[#h: Rͮɺ9],;Ez J ; %*TC5cOiF%ۦD[ˏʞAd2|+xqm =^| )KgPǞD'hڋrz/"QȵAmB0ؓM>,ܷ}"~s_!%ݑ$0+4z]r6..:[ڦի]*UC@8 }#3,Z\w00֍ 8eul_Vp PtLu'qWo#K&QNUsTl!6u 9ENj˄f1CFGx]2VpP{{T~g-شAk,]DWp|Йj] >$ł݄y:`%v֖Slz.$}wwd%\<|xlpHN.dC)j[LgKoO x 7 %Cgz/w$cmHh6B$f@$C.0wt`zk5k,Ȱ6hVDirl`4׬|}"N^m6x *?E7D:4GRC4p.< -z(Դ`t+hC_& =A?JGmϑ藵&Sfҕ'L`My-){] /"Aጃjޕ:bnӰP8~p-%0W4802w4]Zr/,!#{5ȝx6b{i@|4Sc^ҥ \ZGEPh}{zG k ZBsJ, Qpϰ3}>IձJgydnqAˬ-[ټj]}οRy&tX#>6qlrFb}YM%6wLeQ y!`=#"~dl`x:L*aQ9XA?HL!I]Js+x 3NkpUߔ pi0WERY8dp߻{MMm2?&G#YQcS 4: f6»g} t ZԸ ?Њ QRZC^ovqxRg. qkGH*⏃Ug?EʾT5-'ir):DiMhZK0&gsiM/$=EP&n#=.4F뉚\Zi9yE |҆yaGzG]D[})Y$ۚ! M-!"o:ZfԲ:մgx^0gZ(z~HJ INjf[T6AI׺ȗjXyw.>WA"0 #f#o!kE*[oX l"`CVjqD5P4i0֩NHTiZ@$]/z C  743 L;Xeۮj{SsJ*ޕɨJm:J3=(Un]ݢ|^uռS:~}3wӷ綪?lKd#wFYhr=- 8ޖF E uh r 9x27 G'{P(xWgaa6kUlaPmeK?"Ƃ6 -' |! mi#D Y4b(D0[rUp Aru ʋxA[!{~) A-4lusF*O1_/Tݨ‹:xj_5[}hi@3So\9ܙdq=Z0G6ōɮX+oQ]tTnQ*xH@Γ0 4uBϲ>=ݍD(Ȟh{PW`_84S>X¢g&碄K!ϓ%WgtNlwCm }Мأ.hZءtHUI Yyukՙv+RbD E7H-yncj|ڂ5P qQ>1hh%eC]) #6gKqC)h(07p~ubܱ2EmO)cY)cVQ^3WuX*zskʅQk8̆AK3Q#Fi6!,CkT5`LZfD?Y..C N( N$oP'Amh$;\m"!=N7 ZZ/})18Vy"6%:59A Fjv5:&/j)v7c8k$Q\Q{V(p fhLԁp3k`d2Dޫ'h!iWɸA52:J/+h?m[ T 9ܼYLͷ@F h-ҸZYḦOl Z!g IEW{"4=PCh/Wtl(QW_Lhk=,]kx󕷴$OJI3i<]P]`pT&:Jꤰؿ}speZ 8ka;3{Il}\r%d2|ͲHswkm59H(8w_)qA7sז Z(Ccl0} !FzcڎF:YKM˫iUI搌+O'} ̺YGA7)&g+3'_'nJȮ r GB}&0x:^p".t XZ-5FqZmt~ քd646u}<ҜA,}8;'DMR|$IUӆAdIlg-/\_e7(Ii2X8)I-53,ev:j1r[\\^TKu7{%U#!Sj)ygEV+>&. 9+E˶$ V0噏qsƲ]J*L'j)9Z>8/% doP1b꿴 8XGBv,%HHIgQHt!4E:TzC 8 uKh_Mۿ彺 hVSp_1.$X 6KUȁ (F]`S4[(F:`)G[q\ o@}];E Rú^YNpJ,ֶ.ƎLڴ;lDM--|5[tfc՝NRGԱJ&sMVKMiÕm}J K6CX!)Ib^豒O|.R(%VkE[-/MjJVM/̦_kS﷬B7 /4gcn[ڷÃ4b6b G>IT3R" X0y8!#dg-atm;.j6ox -v{Acw|:S Du8VOlxXH )4je5#!Ǖn=GD; VrI<kIfĀA}` P`;qe my#ˌa:i6ZEFH[9Rhfڊ0h<'HΨ =$ͱ kk$59ۀz/ ;^E흓&@NvrQ/uX,擱j lpL *xԋ8"\,hL^\h$\BHIB?CvXA"~hD3B.i|$Km(+ c grjM `#J&T|;.V(L2~7h8` G!gA0mխ^5jY=FNh5{pgv~{JK '(p ký+6] Zg~uzgp/0bY~ {Fj-GLhP@l0Ğ㫼kdFܐLFCh+ d[[jKxX+쭔񆒎QDݭs'q+7mM-ݬ١dFyۇwX$24&e`ID™ZhAs,flK+Ao*E@h O-ITD&|!0Hb<_ճh |b/vO4V7}o*jaNOlo-T&.)&܅v.Dq':"WÛiok0p(? (kJf5Y$s:JYlQ^Q4wV"|"HP'YIJB59KOF9̤{NUscd EØqKwU)^cw+ZvvV%pm>3+,%|m4*T|)C>.aВ'@n6ٚ(cm7m*[>E|>sL'%!v/fp6 OyFzbbgNHc>aܤm@'7^}%k="{M#(ZVĴ]&( iwN`f@ǮSQZ1|9%1FɮohاT]+=510E2`"u54[',=N3V8fD2ؒG!~b;* t\DfƖE5-ږ^M毵-:!_|kL޷8PR9 ye%SauTxX4H?NJֹn3Z}@FDzǦylT!&k`g`oǣNaHɿi6!)Z"7ѓ5\*m8u+2N7WE㗺у6 7)! aq1fE>hf2 tsQ+i/w 0O~pju.*NܦP]fM&qd8>)s_ nQQ-Q` 7X15`g!-\֢R;Sڪcqp`1*sa<`0#u*JB>5#u_:B#~/D;`Ic.vZ*; 63F%*;8\t&U!$ Vlbkݪ$C=wuq⦩;MJ#Вlca^x).TWRo [HeFRl=QvA. vG8 B;$A~﬎%uBB2xgRYG/b {~Z)v_VΚdt_9j3\ rbGzQ]:92At!q:ziIaraԚzGVwCȺҮ: umEftK A7Ep`k{x)NV;t:T: X=%ebh2SWqYR8CV߂K:gXP7+dF; NonnRZ;ڨ@VQɎvU- OazFFt|$7r%2Xw/1LFAiYKW36᛽>9;3JeG=`^2Ǻ&8^AohX"/F.tTIknU? Qk)0<]i?j1BY&Zf TPݨ2nyў,I\cEle[N:^ݯ4N>**\=L_S.>yl5FQت(Z: "Eg?Y7۸J&Wnqsl#1|ycvgAU#әǴ~_=3vfCM9ѻAxŞ)x-KG(ŝW^D,;vetֶ^cmviӨ@ngnzv87}r_rIW_pAWcC|򋿁tZ_fM_.$1:'p!;߿jGE%ݨCW~7~Ew՟VlCʚ Y1y!tH{Oy.^&C}|)$xAݡfb+18dCpen}UP6H vjGjN=F&HZmX{凸 ${4} yh@_i.[Gl`,Z(")VK< `op*9o9,4wv@◑VpE~r֮yrYz/u̕@o )?е53KaŠ4iA7t}NX^hp5``Wxoy |<h@|֯)o TvQ=QNjKW G?z k+-\ot|ωAl} jѡkFyp0D2.?a %n$ <;~0 Bsaã OxɷdfLKhqCGАr$ړP+BŁ 1.t3tRoSrBOyzW|lOGoxC6I0tc5z=<+DP_m:OF9(҄ʉi~3 :ڍט1<=һTr}nq~8pzQ+,jƓ6\ݟ}\Rw4A|\#&:* X/% AťMly!Nx ||触㠙.g?dx p|r_o'4t$Q6:)8o& ~&K@K2P҅ovf[0ٱ(ɹWPKk_;ߠ_>.e.c1- z!}4Vso09dĩR=B!ws;6Jϯ{UL֕iS8KEo!=de8T]*(e@FwMetMLY(6F߅vG 63I{S=nvZ'!r4뿽bڨbt,l^i-l6RZ }[컉!ظSY]oS)t5 | s$QB>wM,IAoh-,G\B|rzpÜhό"\Xxk=S{Hx\.@p➿'!eo QTJzFX S!=2J*'ri/I5MMUNM.Z`D\s?B&ŀR N<+L/I~C湒Bp`'ʐ]t0ߺ;-TC2#ymTȸ}RJsO{jW>c%ipQQŵ?j.M'u@7xk4׏PUn^];Jy^XC~st܁lx8 c *i=XtoV@Dg#!'[5 oekGsTIÆx"#z笭ċ+Mnpt␟_&콟{Vuu~!tRD܏% +\ژ}Ԩu<{ҧ-1k-q;q ne_[۞EՕT_f|fdžĚkX~ZF7S2 SruS(]J20ek*gƷ|T%,e^b:fvl񙾾`kch u?̥c\!ȝfpȉU C<84pXXT%?6}^F} םiyM=DYSod@Hd$Q|6T`dH( !'1^:WkH\x_G55E!x X Ӑ/UGg$7F jCn@^KJG&'*QIv0"˧C%M::)bMQ7$IǛ $ˬbGLdv`UԪb6wҊԨZ_ƩG??dVsaN/\6jPK/4iN.W7(uZ>wjw,b^h2j;B<2<},sy& d(,W(RIbr/.F!5T>q7h¤^ӫhxgDړf0R+a|N{8]+GH]@ECR3&|ѓhͳ@$hkd {Ë+?غBEOIT6^NgI=NJ[c##\r'-i߉z9fg?dIZ6|=}6SF")/>8Zex'aÃgbǚE&J-, jE&ZI`)I4g]zfDD U* 4.@7E[  xFdAw1o9?M.?LjvFlۯy s4]Y4%$ + S,oj_%U]qހh)aSo9rRKe^\SX (8]X2_2zq"_t$^n `,_r֡/֎N^x&' !9̴Ҙ9lOS=} q#ԆK򹋈3'q7vA}}/%Gwozv+uٯ=X|q]}hY@̤>Bp5/}pS4J7PTi*g>XE}->!F)mP ]K|/wvz6Bφ+G_2R[R*^|<7PT7S*Ж009XgkA蕚Au42c3jVC&/a = 6tɔveu2 i3ȫFC}'2NӖُ%L6xo⼈_nT@gMUIbR%P_ܸ\+  cH6UkHVa5(+x֓ӳZ2*=_r4g;8kiI8'bz }ˀB vcpQƵωؐȎ͂H KO ;=Z i,zloYUt%CB&#‡-ocw3#q`N)󁚒WQ !mg1_5 GG=|b PdnRLeyHya>YwT ZXc=nBB(B0 Ö7;Ab=w:WhB1 $}-jw#~1^β5A<3?vX>f( +#2 +YQU8wN' |" B'a@Ӓ! .|B:WHI@UσBQʱ/daL"OUQOhӆ "W\؞ňFz )׏*; nS-McH_>`i!_g!con9˿<X:4fs3[zlЏ)QH~VPnk!-p-HK,*B߶μjFwz CMOP_;ʯ"u-EbTRdPR9@+v6 G~If&,ۡΊ/ t\~%Q Q(RJj 㖀E1VnGo?/7o 8{^A_O6)Qݺ*Vl_`u_Ͱ>T'?V!Еb!o{>t vQ]7UyأRxh$"v$q6- r= vK>BAAPiu&5^SfQrhH{z0QK˜HZ ]y랼C={ڟCu LbClDYhy{ 5@%R|p^+Mȟi4p"k i\TGR=MSqERp/`b=+ng*#MbhsZ 2ZP,;^R;ɞd*dU[NU {29tU0 qsvٌʇ&-s(>mw{"XE70^XT MRP@Ch}F땦1JxTHI몖?΂4[3S?b 3yeeMɾ.}R iTiRr}eu0lp+' %TJlꪫW;s&}yf&cq&&"5uOg R5ύv_7~N_kUq>ViϿYexď __Ť8!f1@|)E_9Լ)߶8 cF+?U5&mWrʓFw cMɯ%?}w¾[_ 6 Yw1q*Rc,\yꚖ}i1v[L _Q);F~nV t qo JAUٶFvgr"Z\d ~=Kñ3#5E $ -&g ]XS7Ȏ_pM h15~aj[Xc{7V,?)O.EJѱSu>'g^#-aOƂ`'8FK?[r7W |'mɺx"!郝V1ER6Ҥ$קP ,TU.?6_MY $AHs"P[dddĶ҃zȎߵzvט6HJpxN1j^~Y]\-}Vmj'gb~ݽh֨zF#T`H2a6#BcQ3&lfq'Ag [1 ^@n}3zebjd,H4^nS_ND%̎=XABY}zaLw|ӽ5mEC/fP5v3?ci[[-~ cӗ|WbC]=MdB_F!:\ψ􍻌LXI'ӭ-6by(]bs~IψS=}#&= ln9vSQEեy+q/)l)zRgv@I:JS: <9uKtD*eM2,м$$uC:\V7c_ou9:nMtHBR" EF[xEڬ_߳F7ꚮ=-uX5kWN@9)=aJ>|MG^5}mpj"axόI[fbCCƄZힽqX *Kp1i?P A&N]0S]j 🙰V p| |4,|3`ccM\shӑIyiYΟ 8P%C=-M{OY:ycM6saۃ1=2foԢdj\q_Gf[|G1F'RRvH|Ng69j/z_i_Reņt<8MSÛ?0tnp[5 y c`Gcg6Q{Kne }mt3wY%?u-{VI(+=l.Ϭ@gaЙ|[3yN|d,-8>z8w˲gۯ/` 8/޿B'|)bi+<.E_|ۖbyыb[R<ƾ*-[cV"L_; lll4^Y%o|ᄹ<44(H`v{|~$x %w+ \wK;PĘʟ Xl\W~̂WO/h1b{7|b^.Bn6 `QFo~ET/kO.-YHkƿ_=^cf <`S7u3K9ʷըoȖ}LD>ӽVrCHwZF KmTK$%p?9d*rl }ȑH.FA{^ 2A$Y$!V.rNi;W|u),^p>\q?iϾNt1{frzG&1$՗D43j잂hִXڎ%*%DpZ{Bk@!Nl#PL6'b avX5$z7?8gtzNol~xc +УsdpMLiiW5-/I v lh -/%M .4-m?=n9_k*J: :<&״%9wwXVmv;9e۽z^on7 q _햿`Dž 2Zn! o5޵sFuM'ڎCP wHrIi_w?75EU4I-;큧ǘy6^?'{Uw^ e6#^g(=wutW}7Tr#|#Wa?/<ԙgwhcs;w٠8F l7S nDߢSѝZkm)%:LWߥ@]9?CӸFp X[#':f2WA0Qӕ>єA<Hm_8Ɣ.7F>8bj'7 \MKv9b3]zzoF G~Y=\?i H~/x^gG*#1 wNt ewgWtپ &X~^Bt Whk;^\a&(&4N^qGB8t8ױt+li:H0}u?p :hD98j8Q"4{\xf&2M4KzPe%I\|lBp]?N:eIC)lyVThWqfZ,gwqc87RrNUuHjDӋo>OpڄQ7-pM,/DU7Ν0|@(mbN// &Vc b+)\3aHCU=JIv.\nw(ޖTo+Lz7(@@n66ezZT ץ4!؉~L'6/}1'惣@V'ch0-Sٌ{KIØHn$;Z SAu67jy|­M.LBD^7_^_CzbݚFV}??ҝ1h)vF>+2}[j-Rm軝uQ\+gL`v ieV׈VI~W2*/Y~nv*=ퟁcƄN'zIDa#4~I$^ , rzzٯͱcL9߮m4^>dR8rQ: &ڊ>{cXZ{HLD dD[8Li*jrKlp\>G'/އ9ٿ+e|Y0;BZS0k>4uT%ޝ_[EO )У_=3*lw$hƒ R@ѡw;2"熷 -mo_ $Fu =bļ!{~<\#?M݄' F lx)EZva˹PyL}6ބϘ_Z?sޠIp