#!/usr/bin/env bash # # Copyright (C) 2011-2019 Intel Corporation. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # * Neither the name of Intel Corporation nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # set -e PKG_NAME="Intel SGX Driver" if test $(id -u) -ne 0; then echo "Root privilege is required to install $PKG_NAME." exit 4 fi # Check if dkms is installed. dkms --version &> /dev/null || { echo "Package dkms is required. Try to install dkms first." exit 4 } # Check if the kernel module is in use. /sbin/modinfo intel_sgx &> /dev/null && { /sbin/modprobe -r intel_sgx || { echo "$PKG_NAME can't be reinstalled because the kernel module is in use." exit 4 } } DRIVER_INSTALL_PATH=/opt/intel/sgxdriver [[ -x $DRIVER_INSTALL_PATH/uninstall.sh ]] && $DRIVER_INSTALL_PATH/uninstall.sh &> /dev/null PATH=/usr/bin:/bin umask 022 DRIVERPKG=`mktemp -t sgx-driver-pkg.XXXXXX` DRIVER_TEMP_FOLDER=`mktemp -d sgx-driver-XXXXXX -p /tmp` trap "rm -fr $DRIVERPKG $DRIVER_TEMP_FOLDER 2>/dev/null; /bin/sed -i '/^intel_sgx$/d' /etc/modules; exit 3" HUP INT QUIT TERM EXIT # The number of lines in this script (plus 1). Using this number to # calculate the start address of the payload. NR_SCRIPT_LINES=118 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=53f6a13fff43bec81072e6ba8adb78e8 # Get the install payload from this shell script. echo -n "Unpacking $PKG_NAME ..." tail -n +$NR_SCRIPT_LINES "$0" > $DRIVERPKG echo " done." echo -n "Verifying the integrity of the install package ..." if test $(md5sum $DRIVERPKG | awk '{print $1}') != $CHKSUM; then echo " The install package appears to be corrupted." exit 1 fi echo " done." echo "Installing $PKG_NAME ..." tar zxf $DRIVERPKG -C $DRIVER_TEMP_FOLDER >/dev/null 2>&1 retcode=$? # Save the return code # Clean-up the temporary tarball. rm -f $DRIVERPKG 2>/dev/null if test $retcode -ne 0; then echo " failed." exit 2 fi pushd $DRIVER_TEMP_FOLDER if [ ! -f package/dkms.conf ]; then echo "File dkms.conf does not exist." exit 1 fi source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 5 # Cϟ.UgNقGs?IQx{p\; f6 ?sqP Hp؜'Dc[k,f4`L֙%eBH wy YK3ǟ!0aA"!q߇TbA/t9'SZ BON#ߙKɓ S"(28>F3HنK҇)!Q 4ܳ GCBZ9 4΄= QbBONhX. "4@Z Vu[Ccp?2zW벣KԘ:]ɩNfLtu`&`(&P2dL G=~CXf֙>P{>83@C pn5ě5C=GH%x[xhqO1hlƐn=Ek&P2\X@@:@$&ц%"FYݩJ$(Lj`F$r ~ T nj5Pn"NS)cbWNje1S:/L] N=P.;KSn/3g35 UldžǴ {\2f9\&X@)jW3-0Z+\$Z/+4jZ n%咼c ZydnquJ[[_DA,,Kuw ׯ_=ᵞB{]LX|!wفG\$A G4<Zԟy3oe+@ŁߌUEN|ƷwƐAE>MԌ@T\{xr c{7Fvĺ J ntOsV\ڟDfm(˸".gR~#N`I-3ѻ.+l[9@QZ~F3Ǘx77>#>B c5>A- 7dz 5#%?{aEuqԬ_ԡ[vg `nEєmJj0 ~Ah6PjsiԈ)07q}+[E7w&5T$J],ԙlGk%يCQl 8 J~n>Aikuvr<žA MYoS.`| }n">O/0 xAaWcoܗd[Pg5Y'k;Q#Fu(ݲ _ؖi+I"Ks r$=SMf(!s_##@Lb2 ឝq䦶PTM@)pS%,OZ,=JT: I9֟Fwb ۤ`؞< irmA*};qܩ7R/7ҋG`0$&D?7.cJ\5vSYH/a8ҁM` 4A=O̺OPS(\!'bS;ȐD(Wc܌ 2Dn"_Ba3Ll0n^B4#D[GWGhcڬK%A1 ,p UOr*lWEb*:=3tJ;7 70Fkm}VjyT Qgf\hy|"p-O؋2W<"wa[sۗh!ϴTso#Ppsӽd>u09Wq{9)[AHIXK%}Dx,b_q_oiW&*1w0'aGXΖpGTߌOu-N4 jUH%HCzbi+!^+=GZ$)eJ"I*XBd.Q\}azLD/}*Lh!cyԞ|(E,GR*CqEe#m^a}APB2 Ӻv_1Yr} jTVgө0~?W"K\LŲM2QOj~h^ʹ&UO8o8+=]Xm!8nSl\Ub #-n~Ozhg!_@ҋ|eQbpXkxīKQGo-0[8W2*{mm[l?ԱA=,wV¯olu_DwyKݝ׻b*~ $`T d%Ǹ -O84뮎@lkzI>au3Ptc4p= {Jvk#t [6@JosW 8U䱹i\6J@6!e?3TF2LbT( b(`[:[ rfo(YDO& 7l hfm:` ޝ#㜃e7gZwTE44f<bg9 U'Ōgm9r)Q[]Wkx K{ԆeXNPH"x6ǽfAiљvy$=He00VM sx |XF}tD jQACHZ8v]tlrL{{&4{ם3Lo ikl`愨I93z4GLdAYWBK =?0WٸљI>g d? 5Ը#8A+18 |6]L>^s<DudzQ.nŸ BJqgDVdֹoZ@A~ RA-Vu&?[׫nV ,ڠe:tn3 \4ksS16 FqABDV b{v4>UGjݣ[ݐhygvhv ?GG|vi9HYIU}I$qzɌoX<`&Dw^0ENp%ԋWpYdf'z\8,|.Ѐ0p\!i-u 7;mܦf|[`xD ifކc8tD)``|Ĥ;7]O+F_hٖم%ld?g~$JL[Jsn+8їr)$9ZtSlbkY< &&QHDpul6^Kpc~ X2һ Efv8Yn2@"V͈.`z!22l %t 8΢͓⢬ßhtP.V g!f? BiCc^zNӲ5EJ㩶GӶ9rck;~pF&|0L8ܶh{)siYFaBH3Zު'v*o|։A&חݨn LOH2 ZmnBRԝ\ZǛjb#: ?K\nF&)}Aq$hAB- ,"4(ۢ$ VrwQ#:ؑ v#1 ;;$_uC3 р. xyV2ZRCke456a\!& eZ\DKL .*UӨb /kaN[g̳wЫhq԰Eo]^,l-[k$ɺ0sd6A:] ?蟍)xM˄iğU$'LT.c1d~H?[˷x|kAqPqx,*  i+XO}IqXo{Fޠ|?v/? K~V?j/2] bA*lAk+ÔDz`aDbMU`X7ݵL7+CZ.2n!moS٦/ eu#O##:V XOQtYyfuwr=5F|~6j$@sghe?뵞bvg4uE˕ vn4QeK 507ZMn6vһA5ؽ ŘsiQ=~5gq؆BO 5¤]nm5aFpodlqٱ{Dý/gމ#},\w s="wiqtơWk.^ J;!ӯ<0޼wcFS"``,vߐ-<;xo{ |=ϴr{3 1j&).(m$wed79Nė}X!-ŻHt CD_ڸK[dm%Lq( +∤yy㫦G^H14 s1^V)nz|a)27Hm=i#w.\^~P=={ۦoak[C?ᶟo|z!WY>rxwFmm}g:޳ɳ2IcQP654Dsh݋xz ܯ"P"ɒ"*F;INZf#j'Ra +Wx:R79 fCOleR!qwCc QB1_s1 ތU ?]h8'M7g_ArpL q4$gn,C BOw'snw> JmrWE.&]PuCsб vwca=Bc#ԼzR\&]Ud4O NwZ+{K^RTÍKBoJT'ӘS v&3rxk Ff7,8ve7$"⠠hB٭m뿲(5*y.@K=;4cxuCn/ѸFbEyYb6Dя b-nϠe1ӷU"'!)Z]~ooc}ݍwYwA{W=x$0 J*b,SXz_-UDjnOZ> 1o񳰉(pcJC܄4/C:e\-բM˫`fh߻Xm̓k)b?n&H@I!gI)DqYJmmOlPڲڟIrG'9^\e/ BѪG۝ԱDL%0NB$zLEi  Ѩ 6`P?+ˠ=$)GFa$4%)N 0R^Pi^)4HNu T=0ugv.-\hA5 ԋۍi MZ-XK"Xy'ejGgW} qK!)h4@ۼ0 h~g]*G *oMϞn[~OtBZ3Xp;N ?>V;~TmZ@pe瓧f ";`'3DK5鈣zv5uWǏƳxcU57s"aWiKcDҐNϙ^  HEDt 2;AGNۚHN_4#$({!QLM'ViׇfYKNz\/$ͼߋtClEE XPO}D0 MAdh^T>wSzKZΗGoSb6$;kFi96۴QE g F/seb)8,kvAjAWa6dURz[zƋ@*Y1߻н3oFCzTzeA=iGO[&|Mԉvv{r7VKez?5=]^FI n2Aܽ' LL2mi ZzݿRx[;P+Ȧ3 [L`25\(|*?A`JYQYC/`A>JF*Ookq'] ɠPKxWcedS~RSLB'==#7<+ }Ym%xv<-͙# qp443Y ܵ CVh8PʉrS#Ux%'+6nAyY`@h瞓m3 ̋'OЗf%X^vM@|X2{sS>?rcIKў4߫ʋ'^]l;Oq bP~eL0_ x%Su>' McՌc8k,#XSzI|@;JΛ ӈ€ikUG Ioy:g-ڹ"t'*M]Mo%Ӱ호 4b3QYA4ATV̫zJgn Zwx#`H!]JIftZ*CϙYEz%6x*|iLX8Q2["h|HRM(zLnvZ߮mVSl/[| &~ԤsUStzu܄&7xîxT]d>/(1  ptxǯ&Ǐi<~l֚c9PJ[x6++Ρ=BP,BU 'Ed$7 z(%FYStYi odxs-hc + h^% buH$|fZ/_x?H AxZTxBXx'ճF.Ѓh8hG!7覙>)?E VÛ166ccUL%\omS3RXXi)p1rU# ޓ" XAQZҼ%w7fcѹ \JDw\rk=ɺn[E vf(5vM P)Kꌴ mw7#IF`\4 d݆WլD&@3|(a"a _ R\S&zx} ?;#?$)ی6`oa깤X<]b:IA jr-M3[)|di):d#s153D)tPXx ຒ3JHDUݱw =aM\_ $]{^&7k&h' \k9_R'd>cZ:@{,AdNJɆ1]iÏk8A z^֫ARt UwBVb{"4fV^-IwPB倈Y Gпeۇ1hX#U~cT5Z/@)[:?P$/[.~x a ;th=@.΢iP{)zoC4)}20յCZg2-"b ߟhJ>NE.(ZD18Cz|s\nSEm)q6o*6/m_Җ?h)Zz귴v%Җޡhwזx -|LB !>yŨxrߧkggu+1򶑿j w/{$'~w Фgds tS+Er$`{ BXT F<HFׄI: 4IUKV ZF2mzt|K#˖D gb ?i(lIQNߡD=\(կ( k0'炈.gKevقЇGGC8rI=0#@I{hS+J= THO/8˶WGV1k-I{I)4Sz\LD!Ve[Ք/ԯ`d}$vsNK Z5KGDž)տT#x d~vymTokݳ=OS;Q޶5QW],t}j$N, fN?.cn|ybf 5y|ݠ+ڸyqӁ&>9 ޡ뒰 ̓a}ުj{[Ep6%'y",E!(Y^IEK_up |Uσu0bfSMK =#5䒧ƠFPݢ n:aLf{+#TêC+q7dKzN[/(~F0ۣWy%!pLѽ7 z#x{xL0VQ-ZG?m c+N _-U,}h;%utzp@mu{Wmf$83;EG/A%ƿ uw_7R8Z]}^!'+y vwۺ3-bjIhl>36vG#b2' ^/;k L&|ǐŬEX*np {A^c'ϑ'kaNA)sGr)3:2`PExGuWB?/ond8έ16da׊^ M$|Hmyk @ P>^a0D l89NH;LX4S钢[/)`;c䆷+-;U1-E /<_ :2*8v*}ޗ7B9)SMW3rg"2ܦogw_HcO)::2c?)q '?QBw*c:\t6,grPG>Q၈)F^rf.85Xѥo-@)쥐 hl :X;j }P9Wk~ ~XR惰}-5B+ G{ fڪX>2 2~*3Fto`Yo. ĭ[x6F gYmO&ͦE%ygO3!^ES;wg @``iL0[v׮B%+&/p0=RvJbɊLH1; nUbWgc{ok{߷}՟έNjO.c7A3\~pYz{Yg8eCm/mٻL#Զ;&՜]S}R] jQ96knwN&B󭷉mDŽ@(e MIȀp }V~^F2!a$-q%5wmTo@, 0 3̠nAwر2d9xkD窻9 m5_"AV?.#=I ݈*o=;<ƅxU'{ h?\]ʞqFr \'L- dRvnx s[s䅬r{QR5Z I\ m,*cvG.El})ryeIKGmm(Kz zZ s_4m-unS/OM# }]`)hIU?*UL}R D{Y6HT$@erM95m6_,F]6o!NNjIPߋ_\ގY=10)XCDI2ɏ_n*xg ΘIGi"\%'#efYol%}QP$cF}1؅W_~UƵ:.h7B/{UY3{[g.'P}gP[^!3<{:3r"]#M+ƪ&bzvy {c0s]We+o n_`ŐI^p2g%]-]ܱ$9=\ٍSt|2 y-r ;#K|ƅ'3amjJt)GKmUVx蹂ofwjٜFJ!"-u/8m_M1x% k>i;RE9tnB3*~E5%壄-t^] ZP9 RMX!hfn=Ɖ á8~/Lh,γ6qlԦ1_qbpi#e>v)8_x,ͺe#Mb 'q"|6gm6tUΆsʍr#I>!i^w+%5 `"?@EqwD"58yD 1sY4i$2}3qNC y2uK=aδa8Z*XSW254MT".i.GhÑr=1 8$5 ڏ@E#mgg I&UNҋ bW}4MsXs46 @zd~Sq\wiwr-="RN HJM~{&ڄ'pĽ_'/@TL>AAE xcuϢ}Odp.ヌ*߇AMU|iUܼc֗a)'jWp@N=ut^>[Ss c#M"MLCU@ަ!3TCC!8Zj3c/} Sęgl < =6wm+fԪ5t=5= D§.4w:,D?錿;941W&3<`#B̋ߦ tAwPE*8. EEP18ҏ?j^6^NQuxϷ/X ,uחLL /CQ3Ɠ GJY^PJ /AxhVd./wջ)ɒ><-tDF!jL aw{B=`UvMnq`wHXkBH&IXh7 Chx^~b t4ƹX @R|a ! - p mWOa*qJ1)胷m[T<7`X91x ݒp3ͭ@弘"gtc9٨X)鳊ׄ6#]:Qr0F$B~0>Ō.*()B*{D}Z - sRͿN8N^4!;Za!NǞ*]񪸂3g2p X&SOl‡(YLJZ@L]\j\qӱq!|ʫ @7BMտTd~1b,]<8npz27Tɷ%6v\[^'# N.ON/3ӝj=%kR/ '΢td'?wh WpKP$'TNs0it$1}eN׿;|4VfW_k[O7R_U#卵oQҮq|!*,w &1u]3Q gBH4Ɂ b3eW+Bxo=L NM&y Ep3D KF_L4N) 볙 Di +Qp~!pzE="a &HiL!nbUx߁w Y@HBگrMo6jZfy٪0ʛ}f!IuڬVC0Y]īf~EVǷaZUxu 3ty'fSЄk9Űm3FuT{sPS]{s7kEUmԛX;B0.tl)+Uu]-au)4e{oe+B_UF9ʄRZpۥds_h^kBdo9R4Cxѩu2R" (!>J.^^Q۱9^#> Ѵ]%DIQ- Rr"`c^ŰYgvhzb<@ D)뭷zt?+K̉ڢh%Qth7cb"SJS!$4Z'M')Ih$"qnW*Q]|2bpnguϕќΉ̑~W!O>8K'ɾwhq.k {fۛik^]>-8IPW=1Iƒ&6IeKe3iCL奂5#E+f$< Źl Q&e"g /X0ktËmL>W9eVg q6m+ i0`i>fI0ᤳDD7"R%`Cz2QtfK9 0SrtSpIM?J\X ,];{`B`YF:I>$miUߑG@P kw*v2rJE}?& $7"Xp5ͨ%2o{*s-k31^twAT,88.]c1\KΓ(d"y V6,C(+$;!<l;~:HiLUL<.|H_~~Yy|VFɎꌵŸ!C SLJf3dY]4嗣 لh:N/ʯ T7Zִ R#EUIBhQ|5T$N0}Y~iFI7{]ڔn|[MM3{5sh3 T { P߈ӹG RNACDgʙ_\_ ̴um:<sޣ;k؉M:́I&/mhXGf!WJ)E+ .T$U2!ct &vrNS>]PK)m1!p YG Rߩx]:WJo%+Z$~okǯhl_\J3}+WJP+7Ue&}q|z~r*_KWn_coy ;i98؋(Ĭ?r-L*5LduO4 "4#Z#E{SA 6C1CH:D'fށ?g4.5z+N-ܜ jY ,*:pmI 3N0ɰ22ysKnP"I,]"TEZIgkhD/aASP3s<޶ZP~ଭP.xOx44[$ >٫Q\+Bo4 27e*5i3<WuGL {8(#e&`Ia  Joe_^εm{ {v?╋>`aX)6m6D7ȍ@j% }bݫ3t}Oaz›V \FffʝSB(c13b $d{98IVzz{ܨ~a mEjNIK/rrd23$G*K Ii4m1AGI~P{S>mmQ=F guHu>w?U)]I Dl%KeQ?DUЫ0~o$a̹Eakζ?>}t6:Eg=^Z+d|/M#CI=M<^ӘjZfO(-#;>ni[.Ǔ׵c& l,xmym.\=j;|}~EgCcƏ+z~4owB=NSp;z7'1A6%a}6& x| 0gݭ쯑ךCn'AԌ1bm8 e.A&Z+|7!"&; _W۸sm+lk,1̅37]r^&m,?[[ky|VWb&^S|(9^v96N'o(0\|T] L *0 G:2dA8:n𒦖X [ěOHsV8m~I,o= 0P0]19ld XF` y20Ej5U=(R- +ZeJj$7GE?_hC]!WYrrh;{hm?r)' )jz?Vlȿ;9oh&Q I}KEjXlvS }أ_/Ce~qBlr~l y [xN&0ľlˁ䐥/.Ȃ%rȒ 4B# tVĢP%v="һkЃdD.YXk HdiPBneOHh70 %X--QL9(IlWz<{JxRdT/xH Տ^٢E~kDW^ůBA$ {M h9NT=^]-;9%ũS(܅kKyuކې[<.>ou`iD[m`"em #@lk@!l7EE3k D&d m!a@@ {BHG^ML%e L⇝Q2',?@?~ JJT4@R:mz%}4pW|-75QŠyxQ;`6=N康f3j=6ݰN!/[s]ر\$Q~Gc3BW4Ls,!#`CvO>lօ/m*Sr4h3F/3UV\]&EB+􁸉, pǓr4k[:=a".s~up=7?K7l,#zd٢E6kc6l@`+Zs<)7&Pg)]n/x.M˭.,HF ظ7cZP4" iv򗯴 ]g-+frxqvt,˒ Yie6U+6ŌO*Jg*Ip8TTԏ2[ŢvFJzሔ_wa͌0EE_u_;9"?>>S*6DTIw>|QjJH"AB4 Xߪ0b(NICN,OzM{>ٙ)Yntcw oȫ$bP[/i#0vg)p&J,Y2d齑Ke/ \emܬ9@K+:c+*[4;*+pƋE48+wK obf(ƒ"غY+% MO";۰ܦ0l?WqcVm6RBZꑥro3y+aQ%y Dx>% v-kN;sGN9̡4NIbV7T)s{[ʻ\<|켬q+ MNdnЙk ,ȣD7B-9cGL_2=LFX;ƅ8|gh{lJd & f"@fPJzXZlǾX]4\a6\{(ĜƔN4Lylǒ3cbm36, ݮ}yۣCp.CGjxg{LWGً'Y[ V>kSV sh~8v7X3>3bx>n#\Q<є6s,vL𩨼jV}]1b#w?̧(a+vc^0j*\~^ԗn|ԕveE*j( ._ Wr@!b!t*N8._M. 4ĈTRZaD mIEI<8)k:]u[o@fm2龇MqáCeoa{h|r=Bl9k|8izӮ6?8+$WAKb/C7'%b7mgO2{kI]/dM(6Y E{N192>%cյf<:WژkHhn^Gøѫ4U="L}-, Q* iB6,EeJ{\vC`clUx: Ta4  e0TwE(+i7Z򌓎+Ka(v:VyS+Yr_.[9xaٖL+[3[c'l P(YXC)'66@6)=<3".JШ{]ZU'su(ƟW:V;"vp"- P>=Bw~?6h d'!(qƐ\;ᾤSv̓ZDV',PrOG_u9C_Nfm2cj[ַ?9d:(6zus =;HDvS| }63C$,ie^#SwDྡ?^fRfCj<9Lq_Fy<9eۅtaoVFܟ55JqkeU8lN:cFH0m)P?ӏ2rC{'Y)bo՞4PVrmT\]0jk) ,1>Lҽ4woa|>ѷ}k#M6B'f&%t-3OQAӇ^xWH{םI66N8ӣ#6R, <,ezSIJb7Q RVkz F=5&Iln0:jaJN}417*ݹp #EB}xb$kĢ5@LD83Xc.PfEؖH1~fȸ tM=ԂҢמoyg8e "z!pJ\-}3Sͪ8myq0(^ Vj8v#9hn4oU$/۹DhE)?[DMΗ ${)Y9.+Px7$}2@UN tZoىr5ۭuWgfr۹%w$xdJhmIZiI^`|uڤA&@~Ad*@i*-HYq v)k5&؀OX܆fPX܂C0r}`qDK7A!G4]FmܘyY k}{s VwAx6782T@g@ =H]0zG1B;giil83C_7jwI;jEa)SnӪ@N036s\nWRW=-g={fNFǷ7o[(Mm )vX❊9 pQ~ØHk8/Q{Uo֊xp|螌vSd 1̦_vlv 5jjd<0vҴk\RǨ'Y,9xUD9h+6nhrJ @(ǾݠmPcٖԃTOU%KzK%4A.٭"Sp@|$B;ᘉejG !0`_xd‘J34ľӽk--F+d;c4b,&#>ӡ2s JԈѢB8Tǹ&o2Kй6@O%8rBITj`U$n%cy<;f$hlגW& 7@x?>zCIm]kmNWXOv LJ˝TyN+PvA]EF-=Ȕ}$\.e0\ـe8p!j:I5dڝ; F^э[A0@yih0>gmRԯQ8A/G۪'WeBo] @0ZZ3憌GѹLIiX_q,ã17%SǻS{1dK~]4ճhĎ1EoO_\NYԆnu *,Eܻ.A[|7Õjpffr;d{f)=OzxN3P_B*nG+~x6uaX4"Opon׌Y*J/Fsy61Hl/ mx!߆MAc;R7nӽn܈B8kLWE+N޼ ϝPGn}1k:$F܌H -a<05L {xtDhBp6 :XĤ5Ph#ݪ,`6D~ۑ4b-ݖ3-ϗrޔ?:;ZIT`WVQXU_$8ݟq =X읜&xDI(mj{2R3xHnGUr"Ÿk THXoCU!tЂ^xݻ wu09dl\a]M%n ;Y,Ml\y"!L[?p)8Lf*)j1Ljܛ3FDbO$R!%׬*Gv Be W!}t.霵# _"An*{)fNHQw[!uuSdž1Uh0Я;@Bb|9 ukDj@ zEahss2f($&T$vTGb=}Jws|J-~̖+AiKz r[Pܿ 5׭M% 5O%}ʢaJ>NKH,ͯ 3Z5[$iGq1 d545#YBYT% X;&rZ|\AE7-0) h>쀘Q\u(ɵ!_ ZEo2B|d(|ݑTT?ZEC0Ver욀 \QoŠIވW}u%5T9q`cr4" >29#N;Ys8&m2W=Dh.!{z18pƨ2 QC-V|ȠF X# &!媜$U$&߳ ZC}BE6BzX%>A8"?7t'eahG# }E!~IM\fλzk+ HM{XT"˲K !O}dUpVx۱s5<9ifb2Uņ܃8vpIf9t㟂cpZ7Pӡ+eU_|.M(&&6OdA~EOemB{ɇ6wÒZDlODnXMS7rjF+ Q :H]N=32=p֙'mA*"%'6@[;.[V崜Ĺ R9kLB}B *s.u;5N)#HL"QZ#URqn5 /]|JvU  _vGbbe%J27[z5Y9K&∝m!#(u:[ntӗbvcAIx b6a4vs?DJCp(Pf?Um͂>@%ʿQAF7;^gW[o 7(>jՊ+1HɽKS3LjjŰ:I27F&@7g8βTT)1IŲ%XtnU%d<)9ػyVdum2_Չ^1x~GuF1J@3 ;:"b=DiR}U=#xyw+4n4[:t]+l\9 gEXiI~+@u̅H=G[P%vOT i+ꅂoӅ,X騆˶:X5@-*onq,i˨]Fqk6sĽt"pd:?l>ɥ6wӭGCkpSRsg>YULx>d3"kc_idCpCmXf|J)s27lmqQ..dN/@}M.^=trb%͐*T 5YtB ܚƈ --js/^z>b #IQN\yC2(`♠R#y4zrIoϰԟH۲y흜ˢ6Yxog@B=TV@$?wD>D&UOu4X+"}6_);[I}D@:UL]m]'FN5 ^)52_(7J.O/i'$:FOx?߷xZumЮ-a3UYPA[Sr+AjٞO S‹y0 {_pJ^\pCZDS&˓On񫁢8^2h|8G{5ϙvq &NQP⸫ Έs\ *bKĝ19%_OG_j-tiu?(6wIdn Ě=Ėq" V=iWAQeEiM_#P̶F/1Q2q+K|e6(FilݵT(9Uɪ2h_;K Ϛ5M$}/Th:;$wS%kv݁i~ EÓ'缈0d&vOO /1zO_žv芍S4"Yu,ܓtb{Kt̞a1uۆ*Bb8?oū_+ iItD 1kJ?4R!Q`0~2 \PIvdU>]Q"}Ԡ0̙JI܅U߼9ߜV$(Uq))(X׹xh9G׳ $vǘ/a|-SU<)jC L@'s5GI)X^_?"a60#D:$ZړއZ wgz +qٍF@'jB;'4'Y1(h$NTl ,c›kXhdגZU{1wPb$d8\/~w5v*HqG9xt47A(]mIʯ@e6{,[7mQ0-P3'4s"5- 4ѽ%j 9 qr9m4AWvI U1 IYp2X* Ӛj4/8<017%\FUf֒3o6W$7-)7NeC^c :үMx}8q祺xT&C%d#[7aaV׍Z)G `nk%jA7'vf#Rݕr!."ԑs[{'əw˜~@Nvr ([pUi>7J% tftpnĭR4;ƼW0`r~R 6b`3$d_f-9*9sJEb鋷$)y*JO90?Zys /y*YBYe({يc+_1W |Rq%qE`86`߇))dvJ#""UY gvV(m,qCjd]Ton¦fV-_=継%7C:]t, e΍'S4@X_[Q MGF3S5bLXK2,OAZB8=>I3L2"1^#7 Jƫn',D膂)/vx-& * ~)i0=}O$ΪSFbW{3R̚ GmnhfK܍~kW';No2IuDv{ k f^o~)Q,)TC(5$J{%lChJIL,ȸ$mb򫑎=IJ v6m4 ђv87fۜ$ ɑ|˙cՙ5/NˇĒH79 ևZ]QpR}C>ZxiDl,2wU_ؽ[vgϞ.ƳK=-:I?umܐyVj77.zo6XW=im<2R|NNl(fҗʯ/i`TǛOZ43_'?.ogca;vu;wo}% gg}[шPBE Ft|Kj3o[ } ~NN_}_|Fa晜yR9[n_ؿ ڭ^ش/6?E%&ף17<͵{{|}VE9Nn<b$! jz[yVOdc2t-v?ҝQ O{ߨ98r$AD!Qrk&؝a%MlH҇m:ưɜ-OjKs`:tơ6p7=?jlXx`^+ˊJabF6ۄ sv=X-lš:rau'wu; ׹s2S: hhh7"|6T/qbΥdɡ a`f1pw7T=Tϲ%e MoTzԟL\ʒO .vr_ICvp>'~%*N"Bם?#병yfa3,72#EbsCڡ5PĺaUf~nNU3'EFATP։ Ae-0\)Nn(0Zƍ>/oVkV~z(jax lKbM_=蟞?^"?ťKSiCW7Yi.> ^KJ ztLq'C W1$Sܝ;\MLcMMtIKrmf2 8u{ B?(:x4sy nCږ4أHNq&1"$͊k!^vS܃ hٜ$!J4ə?<.o%Nf ?!r&p0~ D8h<Fhǟ+HU5txX}G]CĘ9R{;C%a@fcvY+9NљnnַUzS~po qs~X㕚Ld:w)H}o{{4b]Iۮɝ,k(&`ce%eRwR'&%\s8D~E^,)r@P{Cvtܪ,x92Dt%D\oaT_h'a~hihS+b>|ҬTo Suyw#UfgIBO{^N#aGddkC-!sd1% k`=[E70#ȜTAꌥ:T Z,<9Q~Q<{?P԰()uQ9oaGCRM9PeRH!G'{.((6RdL<tHIL@k#a:!R[*_,)(a۔fсB->˞M\2IL(%MZNhP>EcY/7z紁Wyr/sGv3;s%=R/QDlxҜO{ ؒ.00ՐQ](-\$ƴ;:֬ #_uYX )/TbaR@a$]),Nfܠ8^"Y "Iwڟ̒Clk'#`PI~+Y̓y2]G^c/Tanϋ HT41:ehĽ>:wFB1 8\2O,A# ־)Jk$~7%x:ϐI'x6l7D@%0PqHk+}"illQXsB(Ԯ30|h524*+| F\p-tW2Q)5qo7yFr`D^ B`6"1BY*%cV:<1i{4KhJuSzR"lVLd75⍖$<T׭FMt_W>5w|QMU=WuhB-+&B?U>' =5~xrP#>Q^kTEћ*P:l:5WPz[{}܀zhN ur89nnޔ޾=2=Hߴ/icƯb/ߴK˿QU#e^vڻ&S?+PTR6 G^Y]}$iLЮRi ߤI ɴ SK~^|:|6UY ~"nkj~K: AjQVeX\16W$Gϧt+T~x GT'U.ؑӥW:svqm#Aqbyk5ZL|ZYr OtuPhrYE `| or=%=&T[-׺qy %U4 ^Eߕ$OcqϊDߔ١8G4;̣G쾙m{?H1&"H\8ԘDojh%k4{PT#j)o:V\ܚzru7P(i;!t4ǟ󑁈_T`+][6W:f(ME,,[u>f/2#$?qa<'q]#$amea˅@1—ha4ø}`Y5ioI {t]>*bڅC<\ol '`M3*Y$ R5$g\ xl-p ۤ0k~~đ_Y[Q?1yS[N)o?O5{4[ QzM&U}_(iD2 ,RE շݴm|Zw6l*Ey/[e xfr|>c}:̘>S[[Cs?s?s?s?s?s>?.X