#!/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=e86ff8c6fc5d561b4f91d49b04111863 # 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  sȿNXUni`zF0r? L,1n,#{~De <Ɯ4r9\ݳi:',7L@2=4W9g $[DMr$,W A1 asYmp3"Z2.)BX&lr^bo(ԝ9G' F> Bxy8Zz"6w,^JA!i4"9G6XB>$H 4b]r4$`(d<𠕣M0L b%)t 4&! P/B ű`X'ёN14cct;NXdiɔaZNab u) 4``7kfC?:l8G_Z:M9@3xTn]ЌG5َFQX1,]'xdj Wk0+δ_Ќ 5(5S9k8 M uc5U[)E]b5t2P%Q'6@Aдtkbix4M8UgIBS,&$ 3Édla t*0Gb amd\ bޝhndIb ɩV fA"WK^P;PհxV&45:!Q]@*hՈV1w# ԥِ)xZ  uGw[Ed1TW7X0{S^'Qw !anM\泘˧A5/[PD39ДFTk]+{0O,[1/*` f2/v5 5 "tO)b hf|?@N' p۳0I6 sl 5nPhpwiE2t 0'P$ }(4k@Y5q93M2AG}flT/*%q)Efr߲;NsC-ڸl VVX+ Eed Vӝ{LFLɏ_Yn10{uw_5VS2GLVY&ԼNsS)N%] o8RR.T fi 8^y2F9RFG~CJcV#o! {A+[҇7_\;\)`WW!a7=B[*7foșTV%&=V9%66 jp(1_m?5\[k5Rݖ.ۍZ;c1wOKx.'Y++6ڀXi\g-bߠæ7)J0>І6@T7~'՗x n }cp ꨧLKd2ީBv &sV-N9vJPlCeh hqƃfuA& a_4DSzYc#i/F|+ cg'v-AbS&o1Pef TIKK|sn{N0'C~aè">N]t4o󹀇$U.-HEo";]&SBz"LĄHfqCk߽f~ 0 e8 G:L&a;IY tJ|jqB%_ "~h8zwv>Ưd {Q7x4L 0X#Z,gju8#zoƃWtT J*Xlb= Lϔ>rC#sWE 2KvSYbK22z^nC Ɗ<4ds '֦$ݹG2]$\`p,!q2ȁ(0=k">& s4ÏDձl"k#\)HK͢ȲŶz)5ιLٿ^/?A|Q6}_!eb,1.KBv=ˁj.@W> <`LI0B=7-\_I[7S|"dZ)CE"] }ʪK$7XrԑυB2 ]W呦XC*ELjrr¼l`1eY77 *ń둞v&0{6E*Ρ'z:{I $^K/ZNjuj2xU+Jԏqjow:U /EDg_C Mahֳy4wr fV?n& \d*el|R#T4x yĹH\ºhy!wkb4Kit}w\Gs>, *^stЄ,ۏp2'wt_3Ǔ0E&^]:|+n¹ھW o}h Ri?ԱA=/wV¯olu_DwyKݝc/`_,\[[[eկRpLġ60RE '&cmmP7I'5,әG1"qa5e$|9$[1ԓG6ό4 |O<ÞR}pmBya }R37Cc4~'<6w=˦B hߵ )6 O(Ma" 6cmmP-grEz[4h¬pfֆj߬τb;9Y6~JqN3LcQO1OxJ!&pYZsrl-G.%jkjN^iyCڐ,2S IrLWh}m<9<.Nd9 Jb~o^˨r9A<*hIkRөM{WvD]7"FCxp/~m)1TPPƶl jN ,阔3cGsq$) A ̄I%){hdpJ 1#4!s@êQC;/=s07lń5CZ߹|AT}<E"aQ۽01/xFdEi.o' nU5l٪'~uv:hdžPg}w&PM/S9[6@taer\SkaX7T DmAdUZ VXWkic\uxOx;<6z wXhmwfsTygw4tH _E;DP0Vq58$䧦3$W‰1W|[@VQ% X7:?IxB҇̍Ix9k44RK '^E33F2'M/(j)҂v~nE/*>tzݕޢ$ $īy6Gf[,.>7e^[70V fyQ8'5pjp/Pp(-Mσ>#ytbŸW?ǎM~3#O=" _=Z'?5$ఄs #}QqU2tn\5B2H"}ۀ\:c< P,Ljt!!.|(dǦeLT/ZD8jd5d()_]:)F8*b$m'Ȑ$ e@,(Sl"C{9)<ѝ9y. Ad\,,h3=t._b>ȈZwh@8_Nf4hb'vXXE2N7-Nbsk)aY]w#mX\rG=&+\6.W46aJyP)fE͇59XgP|R[gVES>-u 7mܦf|[`xD ifކc4tD)``|Ĥ;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|zesm|#goQWk߶w6=˞<(05 aZCO^A_?'0ѽ{> (r !, ¡bnftPY'p Ɯ2Wߴ5ɟ[#l(4B5aѰ+ EOnm.WXE1PIsR]1hޡ{vso?}5S, "(;Ѐ "~LP._nq{/AM!F=eTR'E~Y_-= QN97 `'a/H tRgJFJAreP Ʉ;s;uiAB ^dnvO3Nhm\Tg<޸M;.cTV;=Ck W͛gg }S ! &)Z[ )H!@杔-iTD>74VA>ZmV~6nxt+m]߼|E9ԀێpW:n_lo~|:mpFG+;ur}@t 1dx D Bdj:M#XE,.>T5R^r~ o^zo $Y]][7FM˱٦Et+zm\`81G~+3u3mL1x89lg1^Ƕ U ¼ 'gՋduW77^lx^WΊϝ7BCף. I;J}ڒM60+lN|6l6ۋSgEWm^B=.ӛ6Jj8Npm| f?l(`baulK[,ԯځz^0E6)nnڴg*Ӷ.з8JFMP b>x@PzB@6`ʪ'z Q2Rh*|#_;yB OHZ»+kU,%ܮjbrd> 7YQtak#gf*ClQT*C!ٸLo.@YWno$gQ3|YzP`M8 D}*&Ft%TNC“-9h4_9t(fˢB;|V(>m fYc9ǚzLU:wdhFL\x<08 oHz9n6` ;aTijz+l%P3BRMb^S:3(vh3=K\IlG RrL2Ƨ֒VYhg~d+j׫.q_T~hLcqTACP7.boBыft3vemKj?N.gޢ٢?nU֟.x;7 &EЫ&(6 Hv%cxyuXDPP#+?~=D6>~L;cSWTGpɀR"<~³0^Yq2dI2a<[UGdN &,hX.'K OEl)%34&aYPE.1ʚJSx# ăkAL`d\yWTІF݆.]N 0Cb$7zZPAZ(0ij"8_| hǃтC,h li<[,Ϥj_W$̺P]Ʃ *ٶ&j<OYD2Y+1aN'>R뵲KRD#NXkYMu@!{+ l&|\T[ 9O~]rpk 'QjǚM2Ny,-{cr("D?a`G ě.9(U*-37Y Gms;.^ȓ>ލL^Y;bOi&̲Pw3H-r}!Rx  Iڋe:߇Co:ɵxCKp14”[K>WV1uV]ouMٲ&/ZLN Jz޹w3iV_/%M _/g*R^72{qդh aIHKbe('5>4Xhb͘"=+%V?haѨ,uQ+:o]pyNZ_+*8U^4(\~eAcv:ߠ\IMwy̸rB  e<ޚ3iԝEPc* C IElU#< Xh9`ZQ;'f_hƳk2[#_A^È7A$W5c# GwGK /o]U("͌u-G2#F1ל[C ythe4`h-rev ǩ(*Eth6J.k*9h0]`/TO:e$(G,bLb!STY4CL$6;95՜wDA; A7LA)oPތqNCbj,"}k띪?,ŊLMHcōAyXLi l "ג?<.A˾q7GέLpq’"g(ԛ*.&j1n&Z[ǑDwf1,vL;\gɃOR&нm+4U_Տ^뱭\O w{*b0C0mVJt_RLTgUh@67I2" fW6¬f%6A\D0F#_ 2iKs_G5I L fx?FGx ÕW%=2I 5 ,_MPSkiْ=H#KK!SCѬi$ /L'#MXו|՜Q@ &[kr,5_ 52!_4lFeG>fZg*DB=&c "{uPN6M~ ] Z-Mb^d[g*jK%o4jH26*D<N8_(>A PŪsъ}lJ9!%؏'~r( o؄ cءC3-rqO{H{ <dL~G5:iDTwfߗl-zhv1F w"ҎȤrs-nS.~Y{-E+މhD8-H?Ny& q @DuwgI"eԅ/#AFZMj{^~[gʺ lghɟ~`?K_ZZl+YVUPk.+]&][ʾ[*4:_AHNy67VŴ|lKG?>1mEKnSMw6ݖS-Ֆ=\GKn)cb h`s-FŠdzm|L>X[=>_EWl{ً'8(\&> F& ICaKr*WM%Eq~EHX<9D@LNgwA8[*+3\>>j?*GUNwʾAK):٨ h%'bI=,H3Q`2˜KYR-^I;ncW1&04\;yɹvI[S`[Δ{/ nyJ*\EZP-UOiȤ/Dzڜ0~a]8g%$e\{]==hIzKJqbj% *+Pު~~#vP$K6tZlݨY::.L*P K'&O?+mz]k4umzJ Wމ򶭉f;V yubq/\0{tJq8e(< 3HTTtH/K]435_3K7_Lm-t_\xwh]VP+b.:n+8!Kud)- AJ .XK0/| (4j*fwX"] %!<}45 lЕvcz5]V &ů^! Xwڪ}A0q,ʣ,(Gvg=i^лѸdkģf"\lѲ?!HoS8,3]yu`"OސDphyb# Ek-E|h)Ӄl۫j/YR^lIzx3a5tx!O2Et 4bfV%v<_rME#G<'m wM Y]r[Dߢ-LO^AcVWEC7Fw1=sQlCbM}tΰ!>4F&3ۜlpQ6z4_ƃk{NWrKUvdd%Tm "&K׃"'SJ(dCF@S\ 1"ty5%eff7@q̄lD:B+VItJ1=%\[mK'׼^E!]2:b fgHfi20=ƒrc `<թ@k60 M ڰ 0Kz[ɢ!'\A695#):z -0mk5, 9YS#P֝n/7?3Wu6PMB{6g[X.}Ϝ1tŠ>!08IN~Y[`21;#L%>i DL06G3s0 6.xk26@tMg/T@ckQk#րIսZ>NXf2kA8j%_Y8]`Pm7[Vp%41fM{W1Ҡ{C|wY&n³6O8C%j~xrP5i6,J.;G1 *@A;o7eSOt Eg~x؊cv%-9X1ypx!Sje MVfB7E2 ؎/XPhtk>:{[݄,vnsbT{wSť4 3-昇5 Ì˂<[<ǹ,|%j{ie!0ۗD'OOW vT́^cuu2YoM\n/.>&E_%(KOa 1.ī:CAɗ2V{?76J~[\87=ajm J w%[ۚ%/d{Y@6%o ;vj3Sdwg%r>l"^DSi|EjB9Vڇ0B'ҷkZ8Q"F ϑS6;mlڙYwϤdXyYhP?Q˭bz?{4DA]W,ȂzZ8؋ 9bHBQ@l#fQ[ܰ?*t.f~N!s(4,K]>BK/Yh- 1n3`$Ufȣhf(xnY 6.< 'x8WLnSSw4O<]BPoSרXC~0땽kV0vP )i{1@iSjUxS,I@XI*ϡwQ(j8-&.%l mԂB@h-̧wm` lF4w1NLHxgBc[w)f;6b菆GH1(hLFL1ƱPLdi,{<iT8͍y08 n{ r6SniM !O [Qd,qQ9UR-cS%aqQ#BL| \̲)M%7웉 EwjΓ1Ӹ_t iWy iJwNv9o?"E뉁 D$H~( /*"Qo;;cHR5ĵvTg%^l {U7hò9nx/|ST$ђ<\F]]gt3Ѱ7"(!Ҙ$e0"Y_!)@W;/chPpePrfmI[H@g_5E2=qQߐNh{IAoH=mcDoY/H:DVBY!$T9dA1e DJx ĊF3fw)'}.ԆG4A'>Ľ=ciGk>:>:u|0db *:oxc '{Eva}=S>| -hƏuM5  KA=QwꩣZ8sCm*ibzl6 "hOH ƩRs{d"Τ8gkaHg θk'^6V A V%~>=p d E'ZIgɡ\q?]nv20 b^6VV- .Tyw7P(*~ ,VFr{}4r\` K45gbZnx)r1T7?rP zFRjx -;GB Ku}CMH m+<'0| Qcip.1$c/$kw3 C K\E`*_CE5)gOZ5ƲL&@PeGb_Kܧ4:͔ x]h Ih5\\4SThz SSMA5mcݢ1nrω^薄ine*>+F ΉFUBELAHU&TwI)I6")ftaUAIJWk=,&ҧm8-mijp Qt-u ܱ tRU?TaW? /X(z5 }"gT>/^P@8>4BbWӴOBTV^g1mj-" _E=cDx$q ӣJ ._Rߪ:ILtbvԟxrwrd|IP<-Yx!OPL>q۠m&ӟ8(4GCS?b]t"9rjM&Dtg~/pФ2m,]zxl_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ۛ)sk^]>-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ۊx]=;{67A/um&~,Z?ێO6>]~ց!VGpxq3s'j5 w(_0F+1庤nї76iY)Պ'HK vʏ,Qśq\DiP=vf$a4pxG=q Ȥfk({w 29XQ3I 7QY2Я k[Oxt;|BVeۙ .k{|A9t6?guU-lz8912.9oCnF* wS=!\T C/¤?B00H HyeVYZ NP$gIA >'.VfsAM<d"z lAK/~`HYCPS' #̧)@u;Nia,^)Gʡr E4?U?kq44ͫЯ|'P_Ɂ%V<<(qrOXə @N.d ?3SId'wrܬ;! OiHM0,EPBd ^?:0W@ԹCtI?B',XBo/,[< )KS!4@mI,Ui#+ V =HM$>쒅 ߐn]H& e*?noiYό}@]2-Rɔ("&ծWc2"j?jGJ&n]mչʼn[3BLb¨#(29%H36c2^eeR$$BR0<)gI#us&2WW{߳Y`z}2I-P4iI?1/jc6 "_?7ɓrc|e KW܄۹Zz:KHQy<4ToѴGᓝ9"%)L7x@"68Siy i\28']L=zo:h .Ē%LYThU͚ S?q@=f^ElH]Dr'&6jbm,I(+ژj\"Q݌}O>ٔD-y?X m Ss7^ki#%/Y*97޿e@ +\`1H[`i/89y4t̝Jt*fuC?%^QJҤ, I&x  k?'?PYv^2=&p,  .BBd:AICH,uX(lFݞDA[c,V4X S9A`(3H19i)8sL=eӶHBI]ݛAs2F٪6ZM2G UcѢ-S{Ewƨ4wmf2D2Y&*6xA+ee)Dި?핺Y. /ԏ;8_}//xنu6+rPuzj΁J=񲸕%/V2IXsj#Rf+!x҃7͋ԮoSgO^KG1NĢc|evtMNrf@$0Gb{":Vkg]]X roŏ52Bmhaғ3# %P]>ay>q;WP]oy谾VoQV#i3`tH&!S:/c,7w""VY,@m%F%P9^ˏZ2 ͝3$ݛL3!w7h-П}=d.4qbaRHxۢ ;1)8/@4}'^qy݉Tjh#zyP=={n_;b#ŢR==d/v~L``/ezi$xCZckCcF_{Gsxҝ ǡy0R$ǎ,IF,ZDĎ3Ae9veiWm9q4'Jm`JC-.-|v*n7|fS ̮73)۬Ӗ3 lr,pz g߬V1]l:sAX[v\ExL2pB I4n*\]DQ EԔ|@!bzo'xz>O70.j TB柝(W`PJ=Pwuf&gI*_rwK;.X^IjMfƛ>+qWMdDt;9gɛ0mǟrVc m멯o%-8k*7gq ߪAqh1[MĽtdG!oƍ7ַ76~b%K}G@Thj11(Nxf 89 Cxͮ'qz [(3z֜1φ33Z1xV26 dC1k3{O6n{e.{#r3gmn|[V"1y$A~ڱ@m%ީ7FBսkWVaa(7̇ki7xA ϣxj%zL/:􊼛g/C'VoceifcSi=/DpBnyUCNb#>TïֈpuV pkP$BGguGGZVT.Ԗ+H6k< |>'ۘl:u.>hf ZvxFN#c M۹f%(u*zŒC].a=A-3LJ GcT̘ȦLz`:ħ'C]fR½K p3yUW4ib&Pb} ֪=mI=H[]bѽKT(NNi *R1o8Ј]O"˼Xv@] G&:@L;;+Vn?&ro}lk^=>7u{^.0&TBu`s7A}1r/+׭ű%8U[ց3ONQq|`t6*.}SeJcKu.lle{(u@A 㹫8MvSp](4H"$gɥ)}jvZkU \sԟ*$t3#d (RÎ䮥OAc0e p g?7[7c/Qk~T#W\B;Fn=#*XAwDJ!+iX");fГ'l ޸Dci#1`1nP9%LjDjhQ !ip]x@*\7^z%E\] ag'}9@$M*`a*Ur7H1Ӽq3u4ih6]UkI+qvN]hoЋܶw֮J6+D&%Nm|.2d.sll2 8]EC ~cI2 # Oix/F Nm m44]f?qƳ6F)(V ݣmU«p2.`S --\sC#m48јHƒݩؽJ%YAD.Y4HbGsȯRW,jSpX:~r"xJɁ-i>Jap83m3{92=3'=@'Ŋ]wm(/!Xri<NfxΧ`7kFJoJ͹oFi#netpz0ҋwVM&fG=mk<:gqa"o 4H!8KS,PfAsnUwpQ0aIH}֖dnKk ԖK9oʟh-nz$Q@D+({jtqI/@8,kSNNH$@i5=@f.Ƞ\pX6$q Yd>&W..q4#"'kWF܀#K㐾}o UtA/k7`g=Aw֔ Nu3'$Fp( ϻh歐:&AMXρ6X;y[{U1Eڂ$jP^/HdLWѰ.&"™ԉM]{+0+ ]*} 9" 3:GX )cC*~4WIq !1H^^5v"5n ]049xlZjDH*;#|1wnǻ9%Q?ufK4wNl XJeeX-y߆ &Ess>e0%%$ W| wsȚ-4飸{S2Cwrs,,e*ˇGHޝ q9Ol>נE{krc]sh4v@(:v\ڐ/@"Ya7_!D>2q>CH*yٟXB-!Ks}@v@9@vM@CN\yb$oS꫾u8Uh1p^@s9D6+ii"q4Dϐ==af8QcT+LYdP S#i`p,orUpƪIY]>"fX!=` Lggn I 0̀` |c4HУqg"ZL?$&].McX 5?p|=|*eYQ\ϐ{YZҏOOa*]^8t+ȇՁcks\r[|wG31{Bv bCwA ;8ɤwO18t-pPvsksrC@2/A&v' Pt"ŧɂ =CBa K-\AvXҧI"Y7J9p| 5H(xZka u.mvo8K {ImÒ`{U-rZNoBy5 i!>w!9`j'$&(*87O.>^%*xYd/_#I11ײt%}N-=˥\HqV :|y-LU:nK;汎砤r<10ZGHAz̹"!A^Gv(3q*n`6RfA _ܨ Oћz]3+BOMQЭ7 Cck jŕqnqޥ)x"zr6 r+"wy"] 25@A[xA! kf;M0Ʃ@.<ͤ*DFu8e5P&B`T}MWbx$X #mwgYc*V*b{,:a*4H-vf"}'0 ӺiL>܌.BLL#+m \o+¬OKM8JeK.bd|VWAF}݋ի۫ا;Rk c! dNI_ePpل`וiǽn%("G ݩRNU!qa.qNІFg]xOB`N@! c#e}KoЌ -) 0ҵAK{N3R6td2~<+L6Dz m/ Oc_i<ܣ:g% K}n{i\_O뾪n[! DL&@lu Wѕ 7L-ut:̮6Z朆erd,$y:B$#r;_' @BAՋB tTe[\78cre.o59 Gx^:D82U Rl;֣![5)p̹I3ɬ*&cjv`mQjYձIn!꡶g,3>[n6˸(TASL&:Si1qfWqO:!XinMcELQ{CJo/=1ꑤ('.wsXxܼ!r0Ll)͑kQ=٤gXOd$͌mYnBNNeQ,7S3w X!I*+a| tȟ;@wc":sJGdq^YЎ>>|" *yhQk l 'o}_/aQbjOЧ肍E |r'o]<-dzyhGP\Ѓ0ᙪ,^x -`)` 5 l'PEry㣽8T\_iZ( (dqUaWEsgDwkAG\.g a{Rl |NSМ¯解5w:L_R$2muk7f bK"C8uZ߿+ [E|(4ӏM(f[(A8ЕL_%> h҃2LN4 6}ZX*Ԝ*dUI4Xï%XMg͚&>Gg*4V̰6ǒUjϦxBXQLLkwt}zAJj2P U~Q~;p̩m[D La*x(GV^)JLyu/֠طBR(ڝ]L77T]T".ΚDLAFBҜb4rt K ~䴾_(:FbRRþrt% ˼^L ~ʑǔ./ (Zrͱ v+QM~ GV׃/v/)++33kq:\?/\QevULM ^yTX9#B$/:(9 ję P䈡[Hnvսn4Ds$9G Q۝pgNĩw4M ф"Bis^D2tM~p'wit=L'/aO`~ŠSt)CJZ,:XI:m:fϰmCV1]"h&}H$woHo(O@>I0+u?I f'3 ,p_K#xGy,GjE}ZQP wڵ䝺03[asYr;ws[uv=i-Pܾ3%H^1GbqoJ).ӯhF`K=v>ƒ~#[)Ǎ{sY ^?wŀiJBhx4g̤}6xg(qn͜HM ptoIZ_NBz~d\\y@gMlЕ]koCU+LpR)8 ,ֆJmô+Z! N;=L̍!3@Ip)3x[MuK:vM쭢SЄW28+%`!A'llmyn4@c VMFwi}u֣/aʑp@%X~,}$| ZP͉neA];>Twm}!E~Hka&uw֪?މvr0#PH\d E H!ݶ3[g:q+"1 8t6!k 1׳ٹ{KΧJƜRX-Iav@JRSg)̏eB `JzrVb 8q"6vWC5~\~\2X`s@a>aJ ݺR-RÉƨ- >mWm-k,wJjbGVh㛗>z_ Tu+C:ȴ{UtV]. BKjܐ;jہz;8۵FUKWmhtNt:Cs  ׀VԆBӑTc֒2+&Si)N8)f/J첢Rѧ6*km]V!if4,FN\XI]NunLǟȆ-$>ͥp1 Ջ?\Xs vwrbX"0Yds nϷ0Ʈl~ٸBCӛ&=8$3;:'乃?S*0G糋WGҐ]0f_w ;wPc :;0ŋl 2$80LKP_WN4ߨ7m& l;휁i{:hFWwӸqpkaYo'Cpmuz̫ VE#]298 2?n܏iװ"dF.+2XhS/K]e C"uOl|&g5"HF$vd :nBEUYߣSLIQQ:ubDsvCY} GʃJ)~o:qOKZUk*ƨJch-<^c{eW&HxOq1Req@TZ - ;iB˵i?*9Ss\)- Poqnv IwgWw|2SXgS<2]񒜷uN^B'A>9J=M\!@ې%. (*S}dibF<xC$x6'2IwxH`r[tH; F$ &!*s7O2"vU #+j,>V{1&q%{PxAX<٘]F"jo8ltffmޔ3B;C\u~\)7ַx&>#9gcDƝxnJ{'R9{Wwr'5 /6دsdI]-qI d4ѢsK4l1j;K&z$if ] Ĭ%+׫e#Wu90Id p<8y5v4v؃t1:4+9[yg>T%tmٙ|}PӞoH`ؑ(wPpDdF1E8/DLI%sVjbэ1L02'U:cN1:8 'OjT(_O5,;J}|E{TsN[ekSa1EHQɞ J =ā8=]Gk:HXNt?fԖfKi3J6e=Yt`P>uŲg;L8J+dI/!ԿOQs͟솣9m d\ )%Q+?^8=4 )HST"Ӯx,QB \1 \hZhNdD9;Gqh8|"{Ro0Ttlxsx{eʛ6,3TQqg~.d\f{|ډRD>˂uq9NldGkό\IGxԋg14C;䯨 l-=* h!i5shJd & .1ꎎ5W]F'C")"u#PfX?Irb30Y+>7=HHҝ'7ПKOF!}kٳϳdV' 6^ୗ;<hbt ш{}tD̍bpdد5z(CiфZVMxw~}PN@zj%{սG|V,:n7%Uu-(:.QkuXk콅"[TIѪTqrܬ)~)y*hUށoXG ܡW5'`c4z1ٿ`%yR۫ß0'5Q$6k>bگҍsƙ;m0WVuڪ74Z]}UMf _mUq iNWGɷqzPko@?>ML+ƹu(ok3K3Vũhb"L$ʎU߀@^ߏfVob:5 [Z=rAp^D˪Uu];/a#4mhQLc3SV Vy!-EK{{70wf}Rm} a{\ezeb'߿iUk_{^_]1tm_Vſi%*9GʼTew9L*'~V"r*m7$@0H^Ә]XI<Փi嗲.stjMlAl5Eҿx]ti{keUFD;bCcEߓhvKX}zM?y}?ASOI/fe|2tpYuԢfExCbm'HԟO-TP]W>^*O2?t'<]#Ku昫G$ʏj@TgB@Tߡ;*ճ@&ALzKzLBnZ u10K-9ָi;=P9x[;)4EF2 S0uܹ5w//oPvqCh?#)ȿM-7֩Rc)V> lد:۽uQ YX44|d6 ;5_>"dGI~xNFHB– +(Oc/(Nh4=q!.V#kP~[;~Wuu{]^׽uG麘+2 }P!EU xdJO g8U$ͳ>I@ j,HΊ> $Z\Ia֎z#~c󖧶S~x;%j*i*0L3D4LQ{ӈeyY @$o3J7i* (m&y5/(/Yy*"mYRByg{y0tGc "<ɩmZs̢ ڢd%)~Mxorr7og⿷n9CN^Y[ɷW aIlo1x2cOYlm=s?s?s?s?s?/XgX