#!/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=c88099f844fb246a7fb8c3726b13fe32 # 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>>mN:GN[oaG'Q0X<> ϫ+֍WOIKY[gV |Ϭ(!&8 @K=~ $yւ b"^'3NoA%Ol'K`Az,c?3ZOAr>!R0hfq8I9isM,4I=zL cQ3@!|]bo(Xtz'{ ф}hEzɣӛvH–^ʓ E.y0Th<و<)R#` RiM9*03M8L bA9 Kx>J(-cbgd05@KP"hBHV{m9^ d<ﬞc`dm]]zÌA\ۺC,12y;MaCY7m \tt5j0@Cp@wؠ'%15|5.~/-w]mcaVw7l6ۣc2dg9ݾaݘVe;s27y4F 4.&.F,SqFfׂG :0d=Ƹk/J;$/rǮɮI1wVt~`CB;&3\$ 3狱ckxZA6=H4`r< ä3Q ڄ6J$f(\- H* ̫ue&{1m- q. 7rS̺dF+pPRjC^+)TA4 ), V8 "a؍yVK2V쳷Uk[#ѯj8pkg:.(H0^@Tٱ6V2_DEs_vY7o)'ǐ=ҟe㿋nħ[y??n}("<9gQ>8t5;nr{˽f Z?6œAjF>BU'vkG=YyMȚd\N` 1C$0}Zqqp !uDKWy-k2"+8dˍ ܘIy{b-F @QT ;M5O,zD 2 WR^;z۞"oE2;. %Mב {G@Td}r\\? g*ۢkkZi̡#NY"wm< *X<٠aB-һg tYm } ~KsE (8gA4wJ\s*>+YD) ֚> Gع}V dY2}g_Sw"3F hY_[ @]`!1uJeѽWf/2ܩJٝr}~OU>Nr2vctr1a-`"7t$C$^:sٌu}O$2FY+W\ x`Tb[@:L gDE P™>wwq #HؽpRV ,0gev3VXӴ> N ܈$@ꁢ&s|l!JN%sD DM!FS3K JMHӴMg|c|@fzka ^0O"{ՊT]5Cg d~OY3B&LS:H[&3p q,?M raj4:8II5)҆(ּ\ De=qr.SW){K8N&x #a4"VkᱳB2\BNOQz 0w,xӣZ ESѝ${WPDžp\imHq&7 ]Hh #re>Ҋ^Ҷ"]'KmpȥI˂4"1牎`fvx"7*,W:5c% $b1Nݯ9?2vڙVVe{SEo]oXvOR; S %q#i~4;Ek{?jf3KN9_\YF<(<%LRTtOKg`DpI>'' `+# ]3? E9Jb\2=4AG K Nթu Aߕr<Ԏ@*ِ-xumj||o\9Ol=XDx@v,f2`P'a`Ay<^]C,!3BypB//v3/ `t;ܜLh+j2 :{Sl[)!MBT= ]/)Ӫ:d3T6 O |eƭ~Kfwן)CH'/%4 YdW-}jdr29&Q?B+&y3UůBo {ރbbgb :D^hl2~@+nijtsԥwOR!eL\t!r<ُkB)?-Lv." Z ]zsvW@D'`1+W: ۝QXӛh.ꎀ8]11]<0ݷ'N!;:<:WSSc5"LJNLt?JU6$,;2%VVi?GzPC$=Vfn`d`zOnta \A%!Ԡ7:RV-)?V!95I p6/i Jv Rao;7uΎUe!hJᠥtpаo'31Xx^gFxj[y9_ X Kn 0 8BxDGY'+:b^JIxFdEi-}' ?.^Xn+ laӋV=0V}s 0r;+gyjl﹗ʟP &-)Tn/umjSQݔ l y1BßH/T3{Wv!] m_.C'Rc2UI>3Hwp.SaIl0PfxԆD6p-7 '.,j8C z%B?;[w^k^f,w H&4 ڍO&](͒U/ouKSKٕE+3żuz'/O~&[RLogQPj1Z;p!=fDW>ai5%[3- L m)]d45lTS]V`-縍d-P[@1"/@ *Bx[\.;#{nHsrNvba$> 2+_"(  >z]*ҿ1-0`{T3@0 h!"~I#o=EU} (,F!(xիd7lh  F6b~kYGb)0NB](fB"^h@J0tC"nQ"ayjRѪ+m&z 9hQ_vrO*0y4,㭴RZ_8Js+HdSO6jPP@fz{ի7bW5xT;\&H}$-KN :N1x*2_Q Fd~:~x>`R^d Jw?m^!DKA3蝱w{6,_3 G4gNMݲ/$ -m}+x襼3ŔARU"K&1lj3O}KPqXN]p4 n0Q)( :y}ze-m#7~WK aֈg6m: uȏPwW53?6GKL&36."7?ILO2*3Q $j'݊t#,-48\8<[ I v4x˧~v[of*\f城Bp}nQ1}̧?Mu%7P'ldh \J:π ],rYLK:(LJXpou$ΜN#,K@~[-S.Fkgrh᝴EJZ+W*`=#(!H;̗zz[RtWKPkRj$@r=*XTg,ߑ–]w֡E"/%| SER㶋 z2$pocX݁qDE,sWM0ǙӔ7(ozYMX,V̑Jj'\wNxoM r/{Y"3G2)c}e%[|>׆uБó}X[;LEx~ugٓg yr(> =&MAƎ~EUy<ௗI ΁~.-Z^<*F;A}wlZ@ <^ਾ[ r0+R1{NoMMuI$fJd/]D!yGs-vӴxfij(!Zx>d K+j>Oàӆh݋7*7.R5ڸqA|>3oQg+CNְ$@tKG Վ[ԕ$C OQ[)<7_"rimL:y@j TO;6asPΖ.5O1:Jed:&^K9$N rIi lt҇l[I_8wK޷O>iZ8dHaΜl|c {GBA^t#LFM~)Ac^cW YJ]"V&z耕jgrjFP}m؝zޕ_N:M  KkXEmtOihoݸ?tڏ.5pV <;L YjsDW=yW<$UWjNQv23$xT/KÒ(>*H^_˰{P=SnfCGm✁8E+lKE$R@Hwni6*~<"1úZ 6k Џ+¤& ЗRx*7g%)Ul3{9R1{>YXj"/Hjua 68=nWݭo5w{8Jɚ(y/Oρ۩Cz7P|ޙ7u{O/wBq <ީ+NӾr,~l}νB7`0nyx+µ GM4=G~nQ7C< ϻ 1#۵r C[vnނ ᢤӀӈӐØJQ1T<$mC]4vP>ޘ>3- X"+#jQ=T(%bm]G Ɣ7\;۹vna`OI]Rd.[ׅ∁ 7RN6r {X>$a^X*2`;9`g-ÄDa$1;TU:h+L\-y+?>>mXMfk!"Rk-*OYut7=|? njiP dz*I FZyQ mVC m+Ssd$^PE+"5$UGzlL:2zQkr;C)ia=@gr>ủ&mUdM{6B NoW kTɍKBa7Hvs6_xɟQPZD5l)IlؕCT DtC8G)-ŕ-꿲ZJ*wX-n`P[G; ) sA?qv:kܫcb׊P~ͰhgGՏINQ[ܞAt%^"ԉ*pj 0m`@ױEb۳TCfq1֬:t<4"Z4ACO `4G;+cа6(})?iӂX_vUA7z81xU-'E2zW]*iy,X3 ?bI6*]V Iw0NJ&Rjk|bۤkrxV)q$^|hX?Mq>!ͩ49UIwq2f t$ӜNӿ73"ev 6`RGm=O]= QN9RoIhKJRʨ΃7=;QωV N+Is(e dԝ:=}JB U}sӬ MZ-XI{%u2tU{Фt!5: - ҙ-]D_0n) -Ҍ;hl睔қiTDDwݿoxWI&?xouދ> JA/7T1g{$Id 8}v)G 6U+V¤w*PQ$BGU]Ub ͦn{4ϨƙB$9ed ELT%cu?M+Jcx&;dc ; 9C[X Q+8W fS~Ab.Cñ'3=x&*L3PKY4. x '\ѾQnzz;q 4\;mEuq+~,y˙re;M>#@I{h) [@Ӑ1"=M6/-Dw=|VRy$)yF1HV"C&n=T.b!VejJW3RRQ7][ mOiti5KsaJ'UA տo:<~h7WFFvxhCl3vTjhNm o{ulwНaA~ڰ ٣S )RRnj\U#67,hv Rgx j"TX.oƩ>WYmud}uv_6kU1{wX?񟵟j[9C8]o>SȀp*9U]Ig_ub2 x\`iBM[tbD5.FXc`90HL:6. T"VݪCxꕸ%~GO>ڑhZ"`g{(Mj^9 Y(^1KZ); ]RRRy*eFh^mUG=.βo7PsLǸ.k/xP|g:Z17Pfu\bdz6Qie)Bq?9ij%n VJW;uoӔRF5G[O9:m.6k;j7NSE)^Pc0@RLeO^1$GӸ1Un* t ׉ӜfwLqڿ-g/'vr6k=ܼۧ>~(¾{M!"A0 _%K*qé 7)G3B>I,SW y9GZ̏vKG.x@ӽt%f!eff@qd }+ك;)| pK~r[.C3;ctt)6=<epcD.C @~`LI Os*G5{; bdzfIO}>לL­ g}Nwppfv\LK38f15w#G)=t#_ԏ{(=ug[ ; i:PMB{v_c ^6@sGnԳqD%&xYgm yy.s]c.kh>g<X F01ė#N`ExMuȭpo|v#8ps]8FxS2%?Y猡V#ać!) p%'MXsжZ'$!3 ;ηCyD${-Θa[;U1->1gt`rvANt *Dao(=s]3(s`;_]'P3S؄mnuőS;A^=F OU,hB 6 cDG#Kiϗn9ԏFCZ^oLnUm Gc;qPe]j(uѻNvKӫeEQ'->Zuk6+[WӔNwdHdlUj(1Ϡ}oRgiZ`YL@ٲ&xźgPN8N֠T(H2 3ʨzh:0NsPI^&~OCwgVюܕ*,sK?LپWN՗C47iɄ,E2 .qKxjj>-+zSـlMY+텇y%U\W`4cΖ4T˂<> YFS.̖=c!DHlM}"6ÇRTG{ݡ@3%B~86qWM>N墳8~**:}:q* )zq=UJ"{'`ڻeB\IZJM5ܡKj0T];>5Qc1pI8!TckX+Isp_õ[3cnڅ:kK/(`6F3G)ki ŒE[( hnL39`m9 8Gm cfRB̫γVx+Ȧ6Z_HE߂ؙWO&%(v!Z<ӎW9eA+&)tXGGKa jFu,\A^flL>ASS)f|5ۈtD3`2[@W>V-4FS|caMl 4q a WWh`x xR*5j/rXnCGݤ8fvrՃQ Elc.EG%nN F-8當Vt4DeLжEɸՖ_t^9;B_•_;@7.N*xG74(vV_У@ "&brߥY8)|HYKM~{:"C'pĽ_'^>`=>^N6MM.ヌ*߇IU|_ 7oYX ZAlft ȑyl͆.-8ӏ!641AA֦:/ѐ|!Vɘ_qҍSy;3d"Τ8gka؄CgܵMvI[ ]xB`O8ԂO) M3(hW|r۝:`L01;<`%B̋ߤ tJwPE*8N EE4['bp?b^@X_NQ_;͙=ƅ+41͗LL /CQn3Ɠ GJY^PJ.@xh\ٗ;DݔdI` #t (8H!JLS>sTpD- ܮGb<]55U6CEBY0(7Ytd=aX ċqo~ų!IO(OA\,ca` )85ׅ𐄦wPNQ LXx n -k+5~/.ύwٽnb /tKme*7%b1 x6:*Bd ծomrNAL>0LC1S rbz.&id~XʴrPVRP)Ga4K֕&bc۪V頪)8Li_æǸpiP@'rOUCa?CngX/ٯiYEV^R-^z{<?πP-VCܒXuzb.ZKD'sH'¼/3ӭt„Ņb(m-0ĹGCS?>c]t"9rjFw>Mll!64|\+%!jwue|>;O&O#Jdj0 BKz.8sOR }ΜTYO6206[o[)_N\JS)HnA.r)q .0$qQXl R4訛 Y'V O^P^1^RQ*\Nu l7p+aLpk%Tj2qE@. `K2&W/ ?s5y''m/rV m! e"CMw7fVs2+ r!BnUԚ(iE Aat0UM' (2^X[&4!=Q߮%8nVp=_[)~jwNɿgNXIBaii-rz U\l v(l1zD hRwTZDtƝ~yyK RؐM(9tB}phVIˏEpc6^m)E^VPr?sz\ʼnQqo3])z^JՔ[7F"ZI;Ow OĀ'oc=J%.cݦ3r+PaЗAjIfcnn|f#VRx Z{6c jV*9QIoI #3VTx4jx>.rr=I9-1N7~2K@plyo騜v&/ꗼkv&*އ))dvk&/)`O"P&VrRRk'z.fo^g(*s~a*V+/:"vZWEg%e˷PژQxvZ'P m66Hs᯶fLGڃatѱMG3M\ 'z |.E3S%`vb̰J2.w(Hy .N8xtf>9ƻ%DoS)"_vyNJ"V?ú"=p8) U t &  MN78||"qV7ݛ\"e,zoJ6RD`׊lܖ8t& 0mo0LOPNDh`ģQN3 S4N}|4 } 6i1xĀξ.L++1]b*P/4:]vG4EiiΣ6_3:P\eP6Fmxfp԰>Ƹn0,tff<%;FdPAx?5jokaK}>DQଣd/N|9`kX:Gj }mD2l;Tn|9P Zad~)'q`E ~톟Wٽx;b0\ػ~R&=݁ͫo;J}x'UPVgUT!`,HVC|)OԽuH˶%O wv p$(滲~zMKj0%qCm8 i.C9"m6Z"x?)„acۆWiE3qS D&˨ɦB>(Jk㫸TS0i3Aa/vJw"qjdDCI\#fVkYp_&+RnZjG_*O~,rxF ._vx z|1tIeo7X7D6j="ݰs/[K!t1G:9K$ +QWR'}ƒ>?KYPܭ _Z}XQ\fSzNY/,"w[*nW򾫱GBM2&LMOʙaH,ox~U;Jd2gNeW/k5Ɵu`t?Ϧ?7IF%YJk-(k̤S^,rSlm/!9oFH#tǛ9P _7m;Tgj \זoGC-¨sZdY;g%8*5E+D A鷁4*Jmwҩ`24TTЉ2bQ7t͊h'a^ !k;$c܏"Bgs=IۊCm18"+a&Z`pMܼi0a2(<봒5٤|J?Rk宎&(_GyoEIùT!`4@r2KF$x8c?&pdӺab$ʍiLd7 '6{Zzx&s;QfT"2o1od^q|,ː6Y=5y'j]qV~;cR^npke-Da( S 2/YFֶuVX|x؜=\5g@?~T'sYpqÕUUmDzHϩ1G\ }WCl-͋MjCⳇ!;7ѝK,:{-VAj'KGX7Ф) L$Q(nJu^>0+xUKRVR4z<aggcq _׈q A@ngjq|+I#69Iw81~ʼn5To۵:qlXꝂ>pќnl G7 i~WNI.^i&i`ȼik]WLy2NDsVG(XcȜ'0О. (TaM;Ѥt(&'ѨkyU8N8Fܜ1ht&UJ1NDRުm}oaި!ꢇG[G~g(hnޤ AlWܰ>jk8jlH|~:U}`ƉFHH":o#'SưuxҞ{u'BR-բh˝֛=VRL wXJnbяӡ|'X0T7>Ztb/F.k8IliXr逰G*'J6C<?dv_F^NL9ݯ91  I<(N9 c*cceu_33>]~8>3)M S n 73),Ӗ3:dt"RabQbGg;p"9]zGsamX"gi޼~Y7/۹!@'"(*S~6R8{)Y9mN+9 4&y:&"o`\&մ N(W`PJ=Pwu&ga*_JN;NY)paM4$VYuhg֭ALTčrz >́8Kބi=l'LoÚ>(ϩl- ԫlF4#wJ-4PF(ֿ 4׀f~` @+o41mL=WzLq΅*,^4{Ռ~6NR(C4q{̙Um0.Ưi;]併 f" /vs\R5^a|׎k7vK^Fߋ:H;fudzL-_58ۡX[m)KF(>ϾSoq ',@XvH{5Rj R2]Jm(BsUH]*SD&_<4K Q뜷S~+HFKCe^IY-k}Ju{o{ܶFKȶg&7d۩tXџ8јHƒ߻S+[y wmߧQ7'ޏ(J{O?W_!_{7ô=yrmd @Iy{X= nR| V|XXHdzO-5bidEۓ %'_Xڄ_C =JIEyaJ @)fB#^wN*G1p7BpnDl5 (Ӆ5*K G?b2Pm9h$A {3.5OЛ^_xX7ak!{xD 4B83GR,PfƚAs; n2͙\a:4b-ͱkԔ3`ĝ7Oc[Du3șnejbJAoQ5mX:m'j4V@K{uA*m89b2z*%,ȷ u`:ZRhA/W[p]oӸ$"ˠM[F`}Ė|,U9VDu̖谓"Y4qibg4FA2HN[gՖd2imTN%J]X?}o14`D,cRY GA9e.:2ћw*(>A`R~'8ZL"X1aO8+]XU4MH-n>GXF7o֍gƅ5ɻiM?Z}u5ڶI%!\tu2]{FMu͂DP+u"W ̒O8)9^ԤcQNQq=`zgu`}[LLD٦. pyE.̊R{1,ǐN]:)˶\BC'1)1  qA_$ w꣋[ԭSInq;ʽ7 2&[f(&W$zTb=Y]ox9ԙ-WdwN=4VCl,4[CW|_ &Ep sʚ@߳h8c څ[:d^\L<-A;9ap9JHP2BcB$VΩ@NC_hosl],EL}W@80GqfC6 j녑¸;0B(|&ݕTT34lg^Aen]wl1CٍwMhàIނWm?sxPacr84$ 29kOv Rgo@!z+I]9I"C1Ozz1|qD PdZs?81pS祒sǿkm0}L3Y^? 17 =\P^=O9e ?R%>YӏWɮ(Ƽ`9}:ZfHLYV@4gtkrBvbU y;'2xtJyFn4coN5;!HA;ys'DJCp v<3q_+z ?_l(p.G!z:;"5\t#S}ԪeWbƑƑݥ!xz|6 xrtwCs#](:25@A+xA!alr_7e|%*[irVPsQKϤ2 FhDk`#mwgY*V*䚤",7St*iߧpemw. bӲiL>ƹ1BL&}+ ӷ|(p^F!Fwji h[f:_zxI[5v+-o[QiJ/Іc&-1>v#/A<*Nr2MC8woŅ<+InAw d64A=& |Mm˝Y cn#e}MoP *>6A3{B1R6up8xJvn&]F]gu"Cr?%IN<ɝ1a&JތƳ+١Šl3ꛨdA`rv5u'hpɮy[朆ޡ192GDy:B8#@Pr;_'T@5D66Aj=o+3Er&Z`3&gI^F6{f3GaD}KG&3 M6th-*T81ޓԪ2FS"oΈqgׂёG7uyܤCpCϘ|J ssn6ˈkN/@m&:Si1qbcSE=NOq6)2YiӲipIߎpn!7o x&k)}#yTz|I翰_II|altb I^Kk~~+$߳qe%NsH2&2)~,zC?HL ʔv|ա %uɐu*yh̨gh;56e+Oj6PII(]jOi'$+:JOx(?^zyhGP҃0,^` .`*`agdٜ SӸ yeпRdJ^\cpC-)b[7O Q;;^2B<5ϙ8T\_iZ(OQrUd0GFtd|VPa֗ɦkN(uH!0=__86,ޗLhCh#]Z24^r/t:U^">&{i$M KL uF/oC BD4YASvRT''+J~,(ǚ 4$:9ʾ>S3bС.J~&=^<921!ط^.kw+heOCrK9??\)RR3Y.Y[UqtUR 0u|=$gycӁYzag,oQn.v jxW~1;uzuu?+{:^*Tl3U)GS^h>U/p\˄,A% #XͩEv(++33D3Y^v(!evU%L4yT `!qXSS 55x/P`DS rX>mWэ) jΑxhGǺsN|)8(]{,}LuNM "qB܂wl wi G%p'.`O`~B)qq*߼dAӱb'9=bN嶍Yqb zY|vS!ܽ#0RjĂ~J/V>Y3G ,p_%ʑ>|KylHT^}+|(q*ϝvu09.Da fQ>% Yՙ]@1q#y b"ɕS? _)wڌ'z>7}4#,Z+1qy4cxt >tkGIN(MtK@te AZ " x1"MU%%/8au!sư)\Xx.95RN2^J7U\XX[MhlI%r(40d=U~TX.fP?R!b=&IcZ F*|¿~u1wZ0Mf"D'Rm'^?ɉGnNgtHxw<*ڱ$59tѿ*Yv"և;ԃB>ު6&QU*kT<06kr FYZ2WexJ5K07!њQYwVhM'3@V\Q҄tCp2iI3KTQjS4$)NTiUM iPhL ̘2'ǘ`=| 4xGkYo9 NjSPi.u:"D@][]ѯ|qwp04YmiEЯ??2 }gA^k\\|_wj졡8tT;O onlt<1AA>zxjWABU|ʚ>CfǠOb2b:+Gl4 RFLNCd,9&;ڍ93#ڔU7YvԬ^VQ0ㆣGⴉ0G 'LQP}[[4 &.i=,R: 5}ʊ襁Ҟ LƠDIJQo cp!-ri ijhoݰj _;^R3G|{qţo\(AW8~2@*:$R`:+̈́ɤ?,ǕusPqr1 u(+-:=_e땕GS^m#|ntJ!z*s{aVᨓ®Kѧ辵j?ʳM9oR=]Z22kp[D rPgϥvZ\|ՅD6q,.ڃXwNF`a Tv{e|sSˆEz!XTIM82B̩bAL pԔrl$k&Njs5Z"3soWYѵ*]Y*(_0ٷtA^Z2i51/(M?}_$d9{tדy*|o`W3co4ia-0'6(=4́r-.iE^SdYiJ)HLy\yWT톞.]NE^@ENʹ^Vq 4;ĩlc Cm@-ؾx8i"IԾ\tdQg-T~qJd)],bɸPhػtaXE(X쳵>ȧr9M(PWk`3T.Z К'ɂ,48;`06q"?mӦSD'{jDrnHqIJfln^#6݊FzV/wr}&]q8ŶV6v5&\m:+ ,'#D |ł{bY[}4LËd⠻KA.K77-VxG+S߹ޙK̤ib44`|#C2~9-%'>*0elIW, ?Dć +I_4U֒ǰr"{Wp"€.GUFvl(']pym r}YZ.IQX6j`:gg 1y;wn܎ނKkg R2i'ѣo@06w ycb(4g^ r@qN+C`j4}k흪?rbd}b&JKc;,h'Sm" XA QjҼ%aSfڱ G',ʢxBl"HA_VfEoK|ugM.h0Rn.y?Ih(|*dw-_}r+=b6Kɵl{qo $7)ҭ*ERHP9byKI#IMAT- [ K*2DyŘ>CB9epMfod%*t; h ٜ~!.~ j // xz 㒛jz8- Y|k[U!*ɵ\r}q9 ݨbeֳXmJZ%F `g(4 ;8[ML [ji !]"VY__6/]bnH0lYG6Q:%= z&j&C͋8F0 ,ONleG;8YE0arMiGS5:EntRq%tJEHOT]4bkюmDx(9kl8Ϩ%tO{7*YmFCLyCԂ(IzтQNv{@?EdEЖ,Ϟ5^ jaP?k[1 @WnmvȋΘnRF}k:'qTQh%3n}OrS=gvC?#x)638(XhF<ѳj<w 2oZ$KhN㒙kQ=[Ylm=>Yn<OYyvz?]yqkikz^[;=}d6lgOqkG+VNO`LDY Ix0d5>EDuE{{b_~52%a`0@ _6E9( E'$Etاɗse XN{@|.]hqѣIkt?;YW֗4#!4S~W(Q4aq[J b :p. VQ|?Y?8^~>y-?] rhri|`_j0gp;2J8D#GSr@4ʞ-A&j+x&9Lw' lO= w}NϿW+$OW<^w(czt;}&Ѹ+eY Ǐ"âAqyW}2/Tby[wTz5HhTj!4/LTCxmJ]@Zō'B-ث>pi? ayjMP,h%h/fa{m`{S3[B=^нgvPKW* >B.r 8hlb Έx|1'$?lO`\nsn5Go6럚A>-};5|[jӵ}Z Y>2]FGʼTEQ7Ut! x,;=[&ߞSU0S~^|!e{:RYP)ⶖ=`vUuV8f'7vKX}zL,B'|ܩ+"[Y%U1ZpAzs|HqHUY?+]Uac;r1]z)K ת?"'np;bXW #OObC4|0pz1Ktg^rf*WrcfV4#u[L0E s4wI~򫫿۠z#fYVMRJǣIlLr5cn*@Q (Hx ($:WL "ߛbeyҷ.NLl^וOrٵa}MCHS!SƖ~lxS I~K] |r!t1`B :Z/Op{q*pOV!^Suld;YNֽud+Y !&EUjy h NDivBY@yo}d2ؖ١Kε67~Վ|zjsS_>Bnot uIqׁd Zա2A)KADy2Mr\znQAN+<#f?%T-|^V(!&\^|_ʞ__{ЖQ?ё >5Mu NEIKRf6?3?)k6n8gm]o3]玪/aU) &V#^e4KS.?4ws}>ws}>ws}>ws}>ws}>w?X