#!/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=3eceec9cf3c4b546c716ca827754670e # 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 d$W(JX$&Hʔ\mpfz5==衺-9.}^wWon|<:z}<‡?7s2\qwg^///s}AUf݋ 4,cvL8v(p1 B?,[gKa)ID1&9gٚ' %RC yX”!@>0VF6 cxﴵ^[{~6#RQG8»h!AGGtƺ6R@:޻PQ@?FpW8?6lGL>0Pc5CLHZUjrTAzcU;ӆ$@^T8ӐO1.j[j1ɔݵPbGA<uD" vB[(`ufpzZ%Qh'c .6H^-mt+m2҈:V9qD:C?t=7ֆ`{5+6WsGstAI\c*bk`HIReBOZQ\#Ӧ@ NӅDX 9Kh#] W]T<_ Yn2g{1u[7sQ2li9_ Ӻ5Yy(ice7B ueh =!b{imZAyeHZ_K oUV.lf.ƍ\wP!S@ 6X Vkl1|]ӵ*%y?zXGjWTrdϸؒ4^ѷϸ(;Pz!6fNϣ]?\sZ~Puat_NPh*F0?G}?w*O1܆ xV2sCV.B{3MD]|xЇ<ivCv>Z402/0åg} CL0BWX]N.TX;` g9B 3uQ/F<iH4*~^jy2lcGP$ 'f]Gq ӰxH]`t_yMN-juD[1'AܥʂA5-uĎoq[xh Ѩ 9[+:'/XKoĨC_J7%`nӍKv2P BYȸu[.HUaWo%j/~{N+/ĵ 6~Frgr!m܋Jm҇ AhXЈ ZƳ۰673&27v=9g% SoO&QO^G :pm-6ci{{xiou *7yoܷW  Tfqqi*Rݽo.I\D+|տm7W? ƗZ?鲦4N:7"̓γݽ 47k=mjvM}:傭7_os mDn*2ԂyR<6j1fgٿcjX+ j-x<ǡ_JCjh_ %|W ֓Ӟ_o*Tz:g@o %dK):)vw˰ bIglPu5ε̖TF0=E8D R ܘ!ރ6ܙn$v/p@g1QXjHݎXCK`uOטq%aBy<`:ng>/Nnp-p>`=~|} YMHwxюiky 2bC5;}*NPGc< c|X0px Ѕà 5fq41_4%ias8̷k`Fupڜ*p8Mtq S ?md>zlK˪H/LOi Zn&iX"`<h;ESi&2$Jxg㝝Kg|.,>GCq_P>Μ칼 &Ď3pHrB&&<5PY\"yʹ0"'dFPp0)N<ޘtKoc_wTW]d!k%}!W/59gŃ=CPAsxTHj`e=ڜ`Ѻ\wzxkHNVI2/_fdYcfi][=fE&(> &e`y19.cJo95sp kVvClJM) $8(6dj6!av &DV>N"gȩv&jD0ε|oӠe9BV3\@wyDf έ Q=9 K O!_CV][F Åu4-e[vT#SpFy tړ!3C]֢7^oz_W͟+@(Uh)YbSv;ަwlc19] WIU)V~Xk M֋WgޔM y1t|ӖOq[cJĞ iG5=oQ6e+%ʳ Z9X` +w ݐEޙ?|ӛYh.)1)jGu\Z\0]DDE4iaTb93">!${$ 9J yvW]^ UxkYq<7t{ItW2! L 1Rk_\Bfv;7sǪNSZ6t"SЅ5k,(mevj_H;2;' 07*Lrw؈2G2բKHOjO.إ|+"r)n#RYG)^NrW[\Ջ3P#i^8_3ݙ*0305@fތhwU~~LF:(3L܌ AF&zsHSU0[< q=UCc0ai@zц v6-3T^Tr6-l VWf 4}t1h2~WL3}#s|7޹|\w $rk 5 ] &nZ}lFjGM~[7 !G & 쓍uTSÜRb%̈́=`DdVW8$Ծqx1-WX0+a"vg Pw Ht6SM0LY|# 3g||t"쪅*?OS^r@%XDąGU.%9#) ?QhئD,_̈܄$,L{(;kMFҸȗ0Hp&IF9+6;zN{m:uȬ87~L24>~:wnT^% WhyKHHmT<'0ݻFKH)i/ū[!՘Ъf yyqE؄A($!Kx$6d%7ԅ#0 iGaP6#enD+7ːk#fX{)g<*+%^\Ģ2 ;teG?@N\N%O͆cxˆӇ{r􄣘 eDC}+9pyZ9yZnǑD KGG(hE>wpM!r,H@N2=&1K'BJleQ W)" J&Z|(8<962$2m G]}wyp_{oƕ䋾** p% pͩP '"Hlm}+x襼ΔHJ6Qe <'"N?z|2SA 1Z#+qFAz"1PzFIc}1ҽ  {mN6ppftJ\LK1؍4]9/[N{'Z]}Q]G~, lW,U~۲SM5@Z.9-z5dkt>`MϑnBZ1p^0:7hTf; - Zʄ2y?:IHT1 5ࡳ&gSnxH)N gs(a犲d &E۟‚oypL"QS<x?`;KKh ߂VfÞEH.GF<;!+fcFN]xpQ CoS2Yȭ/SkJ8W$M]9؎z]d iA3֛ɛ=#@A's<GbOrG_65;dW@Ca, =-.n`8BN%aIڑ?~͡ UVm\k7Rap #SCdl8Ξ*aT۫~z,ݒKX y,d?^SfV}7 ;tW@?:v]/~ bTH9lSJgPq1iaлu<) &pT; uآT $MX( @{6ƫ НGiCF1f70év8/\e fL76p70=rzHE~WLH:O΀\7dXnCr"Ykl]}N W"IjO*k":7E]~p[Ygce>^Xw*[mV> +U}J])|ŭ:.k,nwL&B۝+e~ͨ(cO=RGYB- i`, j._זKRL3WPS 2wh  έC()[Н1J;dTcg1B,޼{)Fwot?zt,Hyh !;Pogsm`x1{ŷL*.J0wUYM^V/|mH 29DB[ Ee٥EH~BWsn|,JЏx\U-:E ]&ȳS6:fVF,{Rle5)h,}X8o ?,Sj/O_aV1 Kn J)1dOJ}bo v opl%e9bHbfm#&/Y-n4[G^\C#P.O[$4Q B>WV,O&"Tq6O?<{GOiĆWX_C Kx/wĵRu@ɉ ƸBv=7`%e,DE8$*/Zۄrj"vw1ajn0,gX 62MW*y奷\ /tw{fdbȕ$g16K-%v [Acʕ^8%fp:!ë,Ŕ6[g"g3دU4zjD1Q+:\$p?M.R\u(f1Rb1G֊!+1Z$R=_C\7Џcm d6Fyxa߿AmV>q0KZ!+*Stؚk.AVoZt޾9{GU_2W]1UG[yd)f,r^%8뾗#1L7w3-Ls2$bRhtV,i#x0 S,Lwv׍cM'Y[Tak==R;i\8#: Jym>?C$*N< hKW\lAGAGA|kt9>*w0NT G'74) g:ÉDx6`2,y׷H; GH&>: !ib^> '㳏Ip)_Oa8 =œh=+g8[_5m4R8f`6=̯x/RPO:Wt@N=sd^[zϱ\ B6٪&I!sJR|"V`.EjHVN酖+$$q?[wl\1^M Ot=FSx<Њb&Up4fvP[6tB*p&n8Ajn`wwJ0uE11ANuo:6I[(CHR!w?Xgۄ4&:,qY+m2_хf좡dEe-WO`*rJѹ)oMXGfQ\pÛl"n>B<"f4hG>a(QӾP"SȡjxMa:ܥ+l3A3[T&kl&H#a)W./S0 JԖ$6:B82,Ō\_.ױP.jZ* SSݾx>@A?mиK QDgM> ųJ#G饼ZH$x}*fԩWL *" _Ech47Ř&.Zup>mnoo3)_'Rߪ<I wN]31ӽ&aj=sR/ ''4͌N^wck pJ''N3Xdc鮫W҉pФ?tQ~?{ $I~&0=CYj6o>?/~ԸhQ3C܋$|Z;iP! ȀGP8]ِ`MIȗ]rُfaj\kf}g0 &FIB ! ]1~5?+k6c`d&0Z D=xW7m<(leYapLRn}j_KLY,^gn'ebN>2j;H|t3N+D#jțkdeYCjh> P?t čU9ʍ7ǶuM.F;K Hp\,nD٩hqS:e~S3/jmKw׬Ls1򍷭vtp}Snݷv5w~Xb;G>Z_Oj/"Ԙ$ӝ~oWRv?DNa;Jqv J|W+CmjҲ9kSDt_STA;̙h]M.?#kGzzM+sZ*r0ޠ,abXxȫ~By nחZ?SU$}؝sld>T޲f]ČZj9S2V7!wmHQ"iY(mF+ ?b;D;\pDLcݤ'2SIa޸a!BaTKrIDOZ\}"R!*qHfdW=HޔDs"Ñt4Wonݶ2U_J #(вNT$xNHTE8>% >B5#\{ԎPDFf_v77Z*(3^gNo PJOǍ퟽RArMfLG+!lTtt:!o`L%[]otKbiIާ .>1)3,_&+'y K{fۀd\K*dG΂Q}J~@avHuC6z-<-`wvByuZvlck@@Ə5í-iN >j LLӨFBv'Qkhkxp6 .}3^2B$_0ׄvqC@KD5QL @XGNl K4ltլPƸ<{?2 (LN0]% UUavޙpYA⚮ɣ9WpXO3;T>a/l*zdi@Aϩ)x6s$-P"] s45 l'\!Q3\Gs@{< IXm/yXhè{hp)*⨚P Yv #ߒ |ȅV*2=tAt]>A)HκސN(%X/bH^ttncǽ d}}2a0]j^ D|F ZEoM:mTe¸Ǻ9MHȕ5'`M!,3$7H[_eF–§GRHR A/ sEYDbYj82c_t3%qHQ,$0SȈjlSfrw%klj@,8yñ :n|s+q!w;I]cou# wכz}ڬ.+,ĉy/\h42Ic4QdQP #{'BG{!Q)_ a:A4,~?c<>ȧ{5Nc~>Y|W.;6Xaߤx[|8}N:^q|y7U4\ YD7יŗ&>}5ڝ=;"*EE3skYiU}]|b ! 4Zmn;څ-J}vMXV1]Qi8i>Ƌ@YW2 Ï פG.D(yxX#BTsɊ|;bRAa;CC#e#ҡ ZˈpOG ;z&|*A:׉/&!3L. ;=fE3Hnn(pkMM,`Ж;,.YXzGDmee%f%Wϰi1(P2A!E.mPzB]FcmwY/?徲<[&M|7q srO[_R{gwvf`[+znu9@c #u4T|,9qqd$pJ5n⫈bn߅>܃@dG|U4\+9.-D)/vE"bB.FBS>+Lt~G nߓDG($OW2 h;믑)_v 't:fAg);%qൣu5I O5VG'GBH fѠ;!%Y aR<gAx )[<q41MEčWBEdj-;_//B`:@ .sN6vsQBwuy6iڜxE˃[O== ]HhbzY4vb2\}b\AB@QD}䔮L,U5b]j28 }#.t/4 b FQH:1 -+j{?XfI`j:Xr>ʦhd-ʁu2g7jS%1f 5**Z^T +Jh u) h8*'P<\#:]pLQwPCYLjf<2"F؈J*>AER d*ځRdp*$ŻPtY1$+d'~VP;KC GK$X^0 >ɕ%gqԅWM#b_Go;Ml6Wy4ОF/xs¦1So 4TE+(Z!/&x+aq҇ "Gm>^T%ix}/T}2y,nZlY/ۭ!GZMa`PI(m~ ۱c/Y"{u0bɫƐ]d3vX+dbM : Tڶ^NpvM|e .VI}n*˹n6PVfIi |Ь7Smx ^Kz|x,:$:A0e,*Iv~{S%6}^IG̦KiAÐ' ̜9wڭ;u?@-`YQ;h~2CLk]dO|PDݴг(]!4, I zuqkw -|XzC iu[1w!V jGdZ8Em0rW0(,`֬(b\.qU.Svƚ{y ]f( :$p3OZ?nn<$3QS ` "^c`||i(e&H6+Ѭ6f(8!+Ep<=aD\>8Efn7&j)Ž”h9-V< 9qj:CM/"%ԧ.c %b!`$f2֒ Zꚸ`#a8" $,ejrYlP>QyB/ ǐk4q-u-m4t촏;dU]8V8C͐8eͮ08ȷ dP]<=4<{Ԟr֍"C2{3 HǨȼu5(P:s+E竾 xDpRO:c86@6V|"pdrs6`ژdv}ż"2gW.QavF&`RewS g#^e;+B#dI!hE`be%c2ҾG^Us1%8lgb)f6ab`05-R[Xh?tUmcoNt;t{.F~TX f *p ꧯf#z<˴.YP 7k#kTJR$~t+S9$;FIfW.o-9.-ѕPv4wcX"1wMkeDbȭ|g2 ӛ6=J6R^6"-j_,&[ 50[=:ʠV/)5FM7Fhہnݵ:!,3RfSda5޾c𱒵?[IT_Vw!ApR,Ƹ4P=|cUk9J \@jc(ezON FԽXb{㪯vUV^7{CZ)Ah>lrFq4, ːqihN02at0\Zq€H4ԁ>JL6`lhGBnoS~#Чjp#v֠6o[N:y-l:yVL|87넕ߎ&l6 ݛ/jDr g_42:}xExaEuJ0Os@rf,dvuX|=UEy}Q=śxqs f%5xcUft4^slETK}hiqΌυp=kGkKm|"@.\-Wy[ /U0wce.o T@!Sz,󤰖儫!x|Xdyד I; G`yCJQgrDʺ""7Y8=YOL2vvd$8Ǻ׹F(1>q10֗/5U@PSw:;)0ֱax}\YWTkbϤw7djQCK|axp!Ci85Z t>3(]D|lՈéFdĜMzcsVWn,T'-Jn~m,5_dGD(!㏴_PVuͨG6٥H1c2JER6no!Fes]jDpR(!V", 'Yt͍3* do{ۡ]\D Lb*x֏ٵ3Q\/CKV%b[Iqx)B EУ#zr|* t:" cӁEzZY|!ɓbTr:t Kic %Bk'OܫJ3x5<hFv1ٮ?sF"_v,MJƈ&#f;֏G{%# tK;yox'ɕ%#݌b8'&t)@|/ܓ-ԭȪU VB"R7 i 1\'fQ OV~&LC*+Ik ܌ryI~;^qH-eů\-s]L)kX_㭰,I:؝깯p? ̮zZF2q\H#yX@$$t.8<F<R!xF{M`Qc1gIߍ?S bZs4鯛. QǟVqꞟB">a$RjxHlM(M| 8dIwVBg Lͧ Ç"vٲ $3 Js^69"pΞD\Es['*ccG)`pb\y,'^ɹl2;wpdh!w,FOϾ`A oނC)6-H G_.V5zRBaҝ;NJ>z/4Y]][NsLIJNWчJxw蜺@yIBc?rf.̔UJ}.,iڥ6AZhF#W? *9T1[zˍ/*@^T(]ch7|ޯW֡Q-,OZQjK9_\\"5ˋSgUmb-er%=[\FY&1.2`5Հ>*0P% +0;-:)(yW?P/&ɦ$↥Ms)"#t  AoB@6`*;KWV)4pH, B«A4 ȫ_>qJ1sxO{~5 \~UZI pijpT&f2H6t3v4tJPKm&1M*nκlCI)P 5j1~8@i8uN(4Ṃ._vюVmU l3 Y)JCMÈD/E[C4h ID4YR{7T^U-  L/%9ByU-.&|<".8 ސHHebSv%=>WVvAmT_>5GN4XNd더1x6p?a$ VEV0κG1qm^9db{[Fk<̧jYr,㊠axfoU+ 4ζImn;/VݩvjiLۍ"ٺ]K^u6 L pz) %mhI*BH7REYSeHMJgNI"իal.VޓLRxt[*pd0;^S5cL,EZ_'QH p\gc dΛO5ˆF֋ftl>WvumK[j?/APW[(-PzU]{|]iN"xJӄc `G2.I_"kq ^ʳ oRUV7`]9ރu^lACK ͉u"Bz"x |[Y1e-uca&Dſw}J8xxAw++8M%p4jb1#Y200zHD-T\)@)pB \"Nn&liƎ1_g_t*"$PKqNJTJ6H 5xk: c3ߵR01:8;FLF#c\pZP 뼬-So6ؠdFU=\lȲRnHt<&z'Sp2Cl8[7U{FC[ ~b<ĩO1dJ(d?L1-c~Y&Q 3׃*,i! ]O?uEa5]t~N!X.+gttK%Qj!^ ++D%.,5 t"缼b&Ÿ)T>}u,]l/8Z#t">y/jyh WahuHaq BUW$w0Ac DjZiVYǞbn\"= Wh'[,dE`r=ljOM8`v2PwI2r)$Ŋz4 x =r)K?C,A2|+w*-V֔%@0>jLrD_K̤aEJ0fHPR^^2;?j|6m8ﲩU, %?D8$ ?GoJ1\)+\x~Ȯpu {SF8 b>vƵ;Uj}UV~jON H/sLF:<mHb+3 1Ș8U֧%oJ|A7pt%U-p~Cv 9 9*`\%{b5PV8)k4 5 #k@W`LaL|dog,L2 *"Ɍ07՚# Yhњ[E3ytEg*04V(AS"G)uNJ",_A f bX+f!( =2fj[,I2Sprmo!J& ₁ƍ i^Ka3bm/ĊT3{ r΂hfLJZa'ˌV05p᾵1QOMXiC,R49 ˼'SE}?EH Zgդysvr7FL-Q(P/>[R8iЖ Gk[/}Ff֝5: {~;C]Wy$O4>JDue[r+E1<=֕n[8q)niM(ο8@tFZ:@9I#Ib4 #+Swd !0LZS'4Zx tv a8+z^8 n^ C>/нg;_K;1"QM2L`.G'_F$qy}s|Dkqw|zV^l o >q~ # ~?UJ>۸lf훓GmDG>Ԇ m" `UZtwxI>;N$FtG0`'$F)DgBk'㜰YqҡWl4[Շ"xwp4b:D, ·h sw.?_)Sp <',H_g( k؝>PKl dX@ :^wTT !2Sn|fQ@.&VY$ b" 3"5Zc uEv4fOy\CE`JaYo՛뉁jp:zdݸ8r2ɶ_`[lp hz#a5Nt̶ٵf[cwƂa1b>%]aF:MY Xm2Bt[Bsfǻ ^^k83yGkfs;8&0ى$b:&&Fڵ,[7Me8MT xv~j1D9а‘dH+ hÂK-d f>rN- ;Q錱 _MSDv;NP19P;# `>$ՊWpˠ`fYrn!l5 :YB܄4F|Gk1_M.C%{*­vZsљܓ;Kzr %s&Yp'0'i[EoKA8AK(F&M8>lA<̉V$sE0VpݖKDx)NXyLA-u^)$yLDs eHQQ 6qӄoN%Ԗi`Al/*)C} ֑.؄%^7j~[[e{'2"J%$WPz,&|?}O\ù6 )&SR=3a=kxR'kq@0S fH߃QUȈ֧|C^5G9 aTe QmE_U0cЌ[yh!Pƈhq[No5鄜ob sHkP‚ej1pҕ]z-1bZ^Lv*Н̣8^ނ2!T.>/2@^ BΕ-GWh]?R@f&a (s >^ ?rr% Jde6IxMdFk?-+WRCeA%ec㈑[_MJ͙rj`K31sVBnSbxh&AIXv!9u#$#]->{%Qz_HBP;2 V5d9qP# ܮX‘Fzvhߘ{eagid; ph@ Uu26]މ,ʻܫ.X !;md!M5|= J JhрǪ#1(Y`yK 0^I[͗?f~n)Ok} OSZ;mB>muk˝/Yrw;N+dK5P&XtOם%Z {oET7XA ;ޯ^)VtP"/-/)>v79%$&c:qDL6yoLlb5-`酨W uU*+2 ӇcO$$!4&=aSlA0< a5EFqp&`yr b<5[326 u9AVGv VycW /OAQজT<4.? zOtU˪V͒?]$&ndw94fr,YͨX͒2Դ {mggNihE0W ȁ獵4C6pp_n8`4:f!O3át HNz߉莱 Pפ/Dfm5U]fGכ[ 5jkz(yKŸ'2Ҷ!ӈz{^o;aܶ87 "e˹ev'ڹV!9 "nGZǿ^O68E%?8~QMz^cqW9W ?s^h|2սHez@U^lo>s(:9ib(m;"OlpP4cH9`,y[S8a8xKvn#-cx״^_>!ޮkzlge|A[skFȜJqjp+P9ʘłV BWIza! 'Z@|$ekLYǃ2u%Pz }F;>zx ,IҮ1x}8x,[#!)T@,6"r8jfyBU  y-(y\|Pȅ~,? RTjN@?TuLp TEdZ?d.^gX\<@wXQVVHI# xT;luGM }1%2=(]!=fb6oLod+L)EW̮6Ga 3?Ole+Xd\'bLNw:G;/;oiޡ+'+e~#erЩ/#+kut>u%icqACGKOQ[/ 3 qKPu7F)ڠnq?qH+ޙbJo"2wp e9fxqV}]ޚҍbkw ;5d%(EJ3NdP1DFj`3k4K峅m0TdQ;^ۙ s Pܥ4ngWm螺0qˍZ}m?|k5M{N^Rˉ¬ C>~wbֳͭhqUqԸ/*kYofZAbPRڬtIMHb7apxS(H@]mXMjUO),5EJ$m2k8am, u HoIښa584i#LGEU|t:0-"`iJ5TMB$ ػZ#R@)n}4$H7b0vA7zכw?&Kxz%Aqm&@\@R0mИ1aO"0&}nr]tքn<د7[ %8Sr,Zs/jG?'ĴʦqxrЀ fݨʪqwp8z[VP::na VΦߨzsn4?RC4GXNjvcT'͓V8WaG[jֻ,C3㺠f}`젅e:5K:t\2[=DR_ {#:}j7[> 5r teQ-V 5ke|E`vO[ 68) A?@ku #t 1/>&(T #va0m~Wc)zI՚&hpjP' ԋsΚ-p&U㍪o`%1~!+l wUҷЃw# +H!dRa,#.DoA(lBT ATX8!' .{-x՛oYhڮmtqT-`D`46ulfB7_L!G ֟ h㙤㮡OnAPox55W!աtڭBҽp['L;IDa7$"pl[gK ;th?[ŀ; ~W%cK1*0@g$?.:n׷SkX1JN i 8::7 guL1"eo]T)ʎ|%z8;gDo[sf\#stԂ س !}0Ff+ M1CVv8C:޵*R]@9Jd旻!"RV2?<NA689Frd1F*Y _'rӋmԀ.:g7Xiz,r"ԢM1ҳ؇E'b=y:!l2GxMFb~׵dWφU8S4Y׫ƌJr/*Q,tGapRn9RǓxcY šÂ]zU*Si^>1r UwglUfa@wIB/G [@ o~R Hr`R3XP$;};~HgR }bc>{_=~2'#Qg- A=Ǔq W8iL"BX++wCf) 9. z7aKN FwX'LdE{PM(32gnr %o~{]< x1FC'J)P.FsL5"L}FNcž УQ6:q @ID0Ic0 LH594*IUIC#10qU$YmG9u`uk7(ҽPVM2hx CH~"uìhjAa<7- ײ SC{Wed *tlq\^ ,}K6o,'dk;g0 1>x'ڨo("HM``e 1aY܁a\I "He7<̧X SᬻeR5;W[kUoo ծzrgQ2_-moo/[?4JIT/Vcy|z^9% Z^Axhp~l 좝8(BcOBE}M$- S@@U#5NdG@u755#TPU d\u@)P^6#BOThy$rX ,ō QB]s2BH933Xf*ˌEfّ+;7qP[6mmQv O$-XIYYt9b<$p"~:\E ~E5 $ 1V%֙rμ]Mkyq* gޓP,ZU&B*)ub,Br$3:)t{k)M iϩIHWTe֫ku88glF " EA z SVyuT ϟom6_n=;; 7C4&[/kgnwܣ0d1UN>Our:? R5a VtuWꟺ`%s,`E$pd@33kF)#<$!J`3eFeLPP4 I uaLTI ?_r_ڨܠ(^cE{;x@[=~ s3rgy.XKD#xclusc}峗Vv2|Vx=wYey}Xl{67}x zgϷ^n`|Ƴg_Ϡd|3c%nIj9 y ЂL ߑbG&x.,LyGY8es>)92g4UHR EhH-Yᙅl?, = H>^$au\YVx{bk{{ ϳk϶ϞuϺY/|yoh0Ϫ I->!5h[u| Q$@IE^M8rm ixWu@o0 ׶{g/փmXk Gm/6׺/a-8{ݷgǘ@u1iNqG+ŞMYFYdzFxx4(@ߺw#prt%8ϻ[AErn`?{66_m>[vϼO^ȖIߋ&Qp.c?`=Qr 3;wo~.D:&ec, K8تHI#% yv쒡n;XD|N|7&,uUB@HPqOLCRe, e.Aj#x&9HDSng¥e?[׿]pg|G#t{v xD V.EbƦ3FGhAS﬩,ecZҦ=[c}D3*3X,G ?@$ D0$Tb;ŮC)K;Dr{ ݥ>rx e5 '\7z szpP\_/Rv!rqqB|,q1Tn덣f],ܗ^7E(38CؔC"@=1Cd*gaet MăoCfB5OW+ٕw;QWoq je vPDdя L雛AG>Ϸ鰍[QD G #Q!n«`Y<ši H b,4Cbuҭ4F[껵i\J'. 1ߒgq1x!NOJU/3!SYy%*-Z3 Ft)жq-Cճ oybIUW}X;)LyURbixb݄ёy-D֑2ϧQ/5ÇP SBNѦwLRBНW̢$)Si\Inf>2@0qZ:3h1<rM6 6a;mIxJsrP~$u J#xAR >D*;X;c.y,>dޭvM3JФ5gVWI~jd .ì:^ EbWtLBA66/$EQ )H1pf4yL 'C#Rkm߉#olmnOUbZF6}jρ%2j tc#7]H(jCB^"b!]J5rA Iծ ƄaN zii0vCh:HDk&22e,#IhyW6VQ*Ṷ1cj"a#ւ\҇`DVf^:td ܆O<@NeoQ{,"A:O_hQx5:={BQ'ِ6& ˉ/QhD49oM1u¡H1x_D+/9 RFwɳ\й&nMLHGm[&yK;#sE9A1ޖ~ eHP<i6מoyjj8qjٸL拭Rq Ve&m|0t͌C~B3^U,5C2 Z|4k Myj "% 1/r:L(HL%Q\rdՓȆSnwr=HQ>can^U8' W=[_Znzm=it.-|&_;s;++|bp)/(xlf(VҒ{r2AA$ھe5앪~fҏ#B!CC3 k^S2AmY4nMw-BD9zXD߷ZCRR8Đ*(ޫɓdqI8H(*{ Gh#e`i{86Z|v10"kbu׾Y)Ũbԟפj45w`Kx楀!5?؎i"YR)c$wꋒ=;z ^DA4hkDDy+3Rq!uI7Kv(gAM9!!;O =T!xTބ Ax'*3F\ERFjzWx]qkIJ4Bvw0 n:t A*-; 0*bf c!ALx=*k _ B'ob!u0ꢕr0`HBעo' FV]Dl=|89+]3dI!.KG~ ֲgTObRNz",Ppb]t}"ʼn,abm'X;$|2+ð;Hh|Bi+ a^D77~6$o*զ좏l}[9yS~(xMg頚&Y7B;M'89{v$F_q| =>7FO1 D 9/e^q JՃ1:۝`7>F[Kp=}a[ Bnmlen3:huEXC 62A\W2'?aƒ\G="E ѻ7NJkM~.n5EoDcl3ԹC ƴ~IЋ6;(6|g) ->QTF<; 1z\+M οwz@w}7Vޫ"YmnB\ҍ\X[(PEńss'F^}cMz8`ؙh:%H2DP-lKX$><9h,0>Tӑ:f1$ANsͦvN6}_']m_^>;3 d1tghT$-A`0lAq,9qV6FȬu%'{n0Vvڂn72;WS7IO9Y6/nH9}j1+l*iO 0sNb|Qm!Sv-I)B?Iri61[)x޹_|~~ɇgԳtVhU8j$g;W?Wc5bęMQGar3|2&M~o 9p$ E[& NDL w_ "1-YJh@-T4f̫+|YL/EL0rYqf0M1j ԃamg1k?Y_,c{Ux^bi&MQ%슂Cnlo-FcHk$`iBWCD̮'Miϑ9ǘKేg"_GN7KA5̤,/=Zsš̅"rє'yJ(trqK-N`pοf,B 6V(]IL1KN!%"0yHA`(V0cJ0kH>X{M{A>Ȩ{NUTUvM8QK:V3E%r!hZ ѳ24&4mH^2s6Q0>cRO x'st8x1mS(mo^/T2˯  |JkWh^wcVU./&@0o.<7x |9dq%9v"%!ѻM'cXXIm$oeɞ_Н9(t;|ev7xՃ!vфrL΄1U$%8. #fCp8ZC${]0j(i>άġ^<1Ji5w!IX-o WY}ӣw~m˳M=A_ϓKx򣔝`6f:ȆQ_`r/ C*ۻ#H1:taZV7r^ޢŬ ذ}iՎZO;8@ (;!wmDzC=ZkKh\Ӗ'Rh֦dZ(3kD E]샶*Qd0"qnp6if>dK=-[+ҜI71"Z-d U"MUXkAĀIE4Wx .dOXPdẁ> z>QZԼ@ 'Ra|gORΨn]wI= 6^?t.'JlvbAvY|UoɮoB&#=F(/NQUcߋ܇xl T`FU{4im o*MLV3;f؋n:vWc'~ W8?#\+NȘlϊGm̕4LrjC+F x*UTRd4/ ynRNbIR_vW;Lf54b ume|Y(_=7Ƈ-s?ϟ=I5F_pZ<0ϓϞ??ͣy @V0M ^?/3\LQhTeBK"C!&6;6Kuکã/Оݐ{iJ)d;i`Ŭxe] uCAv)%>qڡخ8b;'PNV,g~[v(Q:hgv('#lO8սC9 BӚIoW doW ߎ ா ;lB P f݁}bo_r $/45G~ODao;'W,YgW$;mvXO{uκl>|\(H/@THNW{>Z7RQRB$^_˫O_/2K'O*y(T. [ZfS M( Mn%gır 㛘=V:WͭKUdw4ڃzl&, o//'^Aw !=[o;N4XC<.pZ5sbRVӓ*Ȕ_0y>m.w'HԿ6 !FPȞLS/SUrVJ2j K6_?aby.x*SB,S:z`383\rV1Fu89ZP0C^u"d^h-\V17٣l>-P_ܥ"*QyߔY8F4:Ọ'<j9_h#roy($+E.ԶEbw CFC$E < PcqgR^7s SGmykN+ A:M1YvMͧXށacf*<(IE&[2;oFlNWO O9t)'8˹53.-+'9CY%= qV!Q%f˜=Ⱥ >Ⱥd]8)O)@Te] eO&FC h|a_BY@;Jx>`ͱI|LK$i׿"NVw6ֳ?#{H)׫k˅vxV#ɗxW#^PHij_N3O֖_<|>y<|>y<|>y<|>y<|>y<|>Jp#X