#!/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=db6fac285f966972ef5bb91210fc7163 # 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 GXd ϋ ֍W$Xܧ֭IՄgVFUxiGGCF%\GUas?iLȼgkY17 R4 gqBu H̃`^ي' MVI{)MƟhfq8IisM,4I=zL cQ3@!|]bo(Xtz'G ф}hEzɣӛv H–^ʓ E.y0Th<و<)Q#` Riaæ |xQger& xDBTٳ6V2/ECw_vYׯ^S:=ҟe㿋nħ[yzw>TMˇrc\lP:f7@9ް~b#f//Pd%emFYSOVqƋ`Ae1&s;;?8w "w &I9N7+.3ij4zP 2`M_d^"pC[p ɼrOYe@pBH?%AFG9]Bڋ}bTl ,8(H́ ^TbMX4砐H}(hlVP!sYԧ>;Y8Hf\…X:R}/H 5N+RLe[u|cM+M9t)+X䎽sS'4,@ȣEzQl9`>-!V!oi~'",^)[aNEex3=ZM rۗo@F%WxU1}'2oDs5Zdۅ[P*T~J\6s|e,s+{ȝJܿT@{/Xe+$')cgK>@'(gF"&rIG2=4AR< X,x"X4ʚ4XbcaR%<#/d-xSeAp2:n`,>(@[gbv>@2J4F8҄òid?{9-w(݋0c~$.*#PfzŽrݳ$xQ0xJeۙ4莟> ?}MON@GWF6g~ r*5x  e {Oǟy?^wNK?WTa֗;^Mn&V'u];MjExk߃z;֮+S=uS+;w줎OC!wt]:wiu:~J0i*ɍX0b *`!a8kYqNnl}*Vm!wY)xz׻ :2:m7G˟7ssRYzP(y& /'_4Oʸ_b{ov:=?y/_'jחP#a4_Y5 C*~z3+/;{=$wGc#ZpSM0V.u(pu|P /C`F y|a\J p(`|bcv?Y":a|ۭ\6i@<ܐB"/ؘdGwPwtOoН`OfI>qǟޣs5u9:VX n8aPJtbⅧ;\Tg!a9)ɷB-ZOCРO|A{_<LX9Вu;Ei5pPrjH) ZZ嘆6M4>ogeC뜼n7A(6޸?v&o&뜟23C=ДAKa9NfbH7bS^ Hdsp':4@q=:(:`"eq~ee.@y)%Q٦2xi$MlM/Zd[)@zdTZu^*FB ,SDZPkʻ ׵MN GuS./,  Gۓ{#P]^۽zwvy.hyvzI< OH}NW%̬#L%xBQZX4߀H]@d )| lU{ bx- }ۨh7:?ExVvC6K64^$|#MUj+M5Vf6y>N_2LhtCl_h{kw t `Kz \z9̶9lSg3R.801LwtUK԰QMuY\6@[oňzO6@ MoM$r ="M]IO d wW#ؘ?bNTp׵OdBs }+k5UsdJ!wȂ VkYÓIK4uv-+\'#;/k,60k+P| _*cZ7:2SduHƴÐElRμM+𢅼[R0%ܽu EDШ:De[mC&-}鱔/K6lc4NbK_ڪg1/=F_cͶ\-_Zڧ\0FNc&lSʬTT`7[%ħ:l2c3W u H8#ׂJĚ&IwyS| L?/d(Uk!^*%KԍvP4 $ G.Y>`smlyp'}-'xI YX XnK!tQnV_=l幂Hh v^YU} (,F!(xիd7h  F6bеG!om ӡj#J|]橐F#Z!R.9 %}fԅFoYT*J^Cl/2Z}Ekp< .cG,NS&*nd }9:)YG&:Y+ø= a:CPo zkO{oƑ~&V]@਑ ̩ R[@DS!mowow2 (Y[DwD"28qa}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%d[|>׆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ڸqAS|>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`>\>ViȴDG^w/_7 ȫ{V- |FDD it4HGCq b!=EqQ A\ʌםWɲ:LrTSƠȂP4F8j9a jX$Q$0ѓs4/m # /.3$SϳbДQHOO(_od؞PR~n2^5$&.ވ{cH{R|b@gsMq낂.l|pPG.c#΢4Qω|(g TX<3E8jXZc\u7l a? yTr #_(Ƞum÷%>@"èppQc'^Lmlӫ,kwip {2g,)eۃxz] <*BtK{m_# ,E}Vm2j_w7,oh<uN>WDH-X&_/Ce~qB}vk_֏܇?6z /BА-G_#! ÉhLM/v`|YCPuR' #L)@uϝ3rmfRSї$Zϣ~+lhƪok2iNl54KF HIUuM6 ~.t~d&ElY[BY-?_Xh)OL>\@~x G=<㐇'j 7Atja!X [ 'Ax3p L%ϢֆwFkhpDW\myq ۋs6&HT ) $m*ɨy ű!=$&k5|#A 6E" B*?>^(gSDP-0E\2̀\ ɔ80"vϫ^tDU*(KIl0$m!a'^F׉:|GJe['SHܤLv`Lu,**Sy|}bE'fC-k12V(xp!Q0c*:%q?za:@ Q$]2\0.:IψEV;>LM<+_+FJ=vHod QmQCl>ZnAQ.Ioa7t)wBj19I^(PQOS9C)SUveR|P;b8{b]Y?\&%5!6p؆4ϜuyOGM`Mlu┉ a°1\mC +G Wȴ)"eJdSu!` g%@5Ub*Y) 0;;J85U@C2ngQZDI3+A ĵf`hpW|)7-5RÂ/p?F9<#O/;lrcIȟ Ɂm(օ/>z(qkt3)=b'a, N;-+y#!qI&'0i$7tvN?{D\Ifmf%u23}2I5PxhOc0w^gӂ$N#,5f)F)n܍wė7tg:nXƜ (K3kKأۡȏaԹK-2c{p,CpA Ymkߚ @m ;cxT@0O**|DVQ9@lG ΰD]0=%G~ =%xqK }6Z1F_/1oIIqGXoI. -!YF!'@G~[:Fˈ.)(s0X].9ܯ"Jၶ9Siy /2$'̂{>td.ǒ%LYTb,hX͒SZk@.̫d`)SY*Cٷϣi$MlX;iHcV +IɌ}p:;})~ع6mnS9ܘ{ULJ)~!RL($CS2dE$Xj pNj:sN;sGV9̡4,NIbQ7TːJ/^9>5iR0y<w 5` *Y"QZsƜ GL_2Cm&eBt=飻v'v~$UqFMEg$:Lvi#zؑRh Ek0ʚzh^ !q'1?iE'̉(ڰ kx+d]~' mfE 0e1B9gʞmš]RHvuNQ?0zp[of&n40sOFuZs lҍFsQ>k??)O'WX몌۟&LyyaQZJG=e@nbtEgBPvl|2˘R%V@;h&`Cin,UM9ނUvU%_'8KQ1^drWh[c쯣T$z;I?Do7Zc ay~,Pep_hk|ż:=nvX[&wwx!n8xH 04tMONR5T>z'G@^7RzMVO+{à%17$'%t7ONAshN76ԉN#х4z^VR /i40d4lN1wbV,Fu¬4Α*L3j@3~?^aSVs?$[[-ѫ$E=`"L}5, L7=D´wW 7 ۨb*A"֨Q$pUֵ&CLGO P[_jֱZ@`>PF4#xsfmmAPqv2'Ӳ4ۄ;L4;ځ֪ÇPq{tqs67mWSϹQ8l֫kS;8~cg#ů2lp,8 Hl۫vJ\hЩ'!Vsoj5R%86XH/Q}] Y%6$3|sN5c.+&O<'9tEg#1]xdNFPNϩڥ vo?쟥Ƶě4tZ 9&cEtDS]hOfotW*hgRhԏz*IV'bAJ n_4N*P?@aP{'Z)boնEԾ0oT u@c#?jZJu`34toR̈́ߍF@g+nau56z$F?>0L#$$L·EÑv) cXp^:h O i=!jF NxoMh+)p;,zSIJFb7QQVKE-`M:1I #ȵDf$6u,9St@ţyQ_% ǡyIş 2/#M'&לZrGl$XGqct rqԎG@1F򲺯ۙE.?}[ &)v_W웙ڔMiwkpm ]f:ʃr0bV1]F8.y@0ֶԎ?,no[E}?QjXVi)?FMMu _sx{< 70.jTBNn:c30/k@EՔ_Db,úu3|yܠA&@~e*PF9I{@%o´Z 6`aS r[pTnvLڿO+m"φ@h^%𿞬=NLQg!,e ǒ[=KYO\B3F,fEIA,r@Ce?c$b%=A}59`/2JZ\M3C`Ɖ7lU`YpB2rd7ƣ1Q'9 \]hB`æ`Ѭvvߋ1rw5UךzW"LJ˅[/ Mz='gԯ;A+U꓊Ws2nS -!`maEXdkGc" nK~NU>`ho%Yӷ}F$vx?(b?\}~rxJoLZQ{ Óia@zgz'Iac".ĻaJ%b>ZEba!>Q ֈm{ZoOV~awh~m (E&)-dgyx!CSl9XnxT1n bA׀ N/)@@@yŶ漢5l͸,<BoDzQ~au܄9aHjF,4gVsvfDӈU{4[4LSSπwޔ?aeG˃o=Q gb*99E]$o=`)똶upѤFXݏ/^pQLA gEXA@ ߊ5BׁhI?^-co%jWwa O2,6KlS[V9NZM 9R2[N wgUrԢpTh%n L[Ptۄd]yAɤA(ƥ5a (f8u"@\"a;mV[iʤSM:՗*ua{SMT|4 =KBNKagw/+qlƗ8DoޙRjli[HE/k1`=taUќ7!]ayIܼX7$ o` N6?t /kClwk>|V'QCp ҹɘ#`w]y46 zaCX׉'\}Z+40K v>  {QEm;G4R)E޲Ο1G^ mA|D23]?d(0+J ƘC::=v,r ĤǀD^4čCݮ~$.n!$׆Ӌ RN&XA* >_˘l9D\Q拁JdVw}l#Rgd_wZN9X l]sPj['<!3)k}ϢH>KH,ͯr/3jn5 Dzq1 X$6du(5#YBYT % X;;-kТ}΍wF19]5H*f|/S ٰ'FN 6!rwWRQаfx9tkޱ e75FvDњg &y :S_ᏻKk>sB ɹ8u>_*H<&u`f'v|60s\< Ł5@C/jE35b0r[8`P1NX5 cJ}9 EB}HE|mbc98vZpAOZo$1Ȓz3)-`48=D}I2.ր2J7iA%2곑xfYqٗʤV(W M{\X#IqeX`Sk dϋopNAxGj_sÕMܹ$N:1d31y*0Oi2R{ ߩ%QGlQ|%n 'KحacoE=AN( B18jڍE`tX󨜢;Uɜ6%"AdW#$u݅64& ě4|)7}f/wfu3JAj=6A52B~z ŜJ|'9f{Tg,$wLfG[Ş.g(͖S/gx3gfbMFϨo DWIUfٹr2ԝ F%Vm-szhiIVc)%ͥnY/#:M[C:,f][L喧 uMqO:Ek>McEL(@\P˨gMˮӦM>p~K_z$~;‰{9Wxܼ!2(♠m?S&R%%-+$m?_{YS /};|ĕ0>:I ѻ˘Ȥ} 1.+SgU3%O'Ca䡙2$F(N5 ڮ?rE@%%!X47stɫ ?A~Gl(=} gxz>!][iCqJffx )Zwwgs2,O O(+GUXUcngYAyX_>S$:_I#(|X}z_2ݢ/^HdқtiQCz˽7Ḃq" V=h{W^̛|4^4#P̶F/1Q2Y+KF&A>fO]SKR() k{Dk6~WD(BLϴ>_ЊV@(zxĄlbfzP΢ڊ< -spHJHTdyW=wNl;sjQ*l5Ep6a% k+%xªDW(Pr+Jjw&tA)=dmUUI'O @呎ELfA՟).F%wIFX%2_AH}}X"VohV2xaPT oyL{ W{ܿ r% /{4`E7nlE>$g{۽*_Ї|_;uWgz0mB MP!7`GI^bMusL)f֜@M-=br^E7Ds$9G Q}8c]xv;1 /~9E47P{p| =r ^D^&v.?dߥA./0麗8=- yh)ǩ|M$V c 9]6f 2emF:M!{χDrێPJuM )X)d'k`}6}Q+Gz-9 =Ry!ĕc(N&2-8ip*Jc$:%3 6-p=$-3*ISF<h6 -t1'7xtB9 ֥. YGKrK4/.t&M>M\ڸ>0_G'Xf,+s-Ӄ m/=YI돟K¿[8q:lyFuV@mz+otK+w:VGЯ7kq_]YOX]}r|wUZQ+@zp:#_W9wZ=g| ]?_a(Α*?vK/u;'D!Y^QqdsdGp .{6Jz_=,~:?㗍G|%U% #@D?~(orK6dv}pjXY[-C*T|JUn_Z/z _z'AuGTUwkt9HM_wݴ|uVv*˙K8|ީG՝us[z >P M+>1SqVG+ƍxUa$,c+tLV˻Ј>ZEzThlh"LupR$aUfeUx*UNY)T5ɨq/'~Ğ;DsiHK9Jz1Z86A 3x9C:7"Dft{Dc D;ǑDF'2Ka6J0M41`hSsN@c$Naۃ19N%C%unb'[P3XoQɭUԞxaRvo}>袸B)O!X`pOz033yaWvNWS2[twwRT)87TcѻaMߔy^χoԛmUuo[f߇jބ~j? wvP;v;%U9ޮ.)@nrh5JNgȫ Q}xzkļ LP}T#x~p{w5&p[0N` j[G8 p:Qé\qC!QmWwkFfO am^LqT?:>4ՍVv4_ǍZ Z8w&xyܨӴ쿃i>Vm=*X)M)M LUq 0c[GN1l&ګީmհ7X˻zVTz ԹwUh5^Ξ-p%Unc0~.;lLwEˊ噴z u=;ҺcY9qyw^{WLND/B Qrs3E }@D6kv#_-r ސ㠛תOW1׬3f;&al2P"`n)hGopx%$asQ=ްAj05:>N:F̡Lӧ w_7 K()>ȳib"QW*1p_v6(e? FgKs$K/*YancT`d_G$?Uwk^+1_]('G~h Bz׮ca>S-Fn\;2Pb:mbaoB>1{xouGv0]Ju/û!lHBilݕ\nqs<_\TUsiȆ$P*++%1c-u )DLv@E_t:A\I 5:v 15{A1$KK sr'25p'P+ԙ58Jlb8'cO)V:NSABESZ](='e[.Z@^^!rMz1TmZD7\=nξ痹2SW1_Sz.V+8-l!&%Jԋn{iӧKkV=- ۧ\nڎzZY5E֤nnڴiqNC!ȰMPy@Ff`ʪ'E5"M|->)]o 'r!X;J1Qj&"U2)v6-&0 'u2{ Q"腊0*>#?ktnm>=A+wxҪ[z_ZgeipDpe E54vL->q,IB2 ^fgrJo-Us"{KQ;uɠC޶KSdDiLՀU>%L+ 8 hУ谀 3c ^@y5SaH$Rk}ܿhjCC/p]A'_BZg8ainv'3,wȽf(`>G LQLpgd2U tH|* uV8 ӭI454IFKɨ%sa D}'="UW1gƤ.it4Z`>OUlPzhZU=] ӊȲҔ@7R >B0 ' =]6!1i|.-ijwS/>b!e; Ƀ))qZ1p;k}Gp`Ӹ=E">}ٹ,aɢ dZH6 l[Rsu,] * /2"5OXhqw&`^m D,ڦM",2N4݄.eܼͦdg Gms;.^(c'Lx7Gkl3VZh…;U?%2ŊM;guۗƠ TwXN >EHzgդyϹKØcѹ FG\~U'Mڋ1xD/j3uN',+X.fiْ=H#KK!S/\HJ$_@PXv_-TU `"ΩXB[lY,~U:q|= /KfK^fƬ_|U.z'Of"{MwNVfRh6[w1`9"X^n(NF(?]_*y#8 WG(MU97YɍC4 u_ʑ*6Gx/KeP[t+kOqg-\暐t;ǷpZL\OPn'R^k롪d?`OF`N8zu֙T SRv%m$Ӗ}բ"G"܎nɌOCl9.7)ڢm%k hge QpbcNy& q @DKƗܑ STitSUvG>1=5=[UVG *jВ?7*~/*>+RY]QQ-UUQ\kL+]&][Zʾ]Y/7:\u0azs.էSd[esZZǴl#5w6ܖZr-{-znvm0Rhk\0?rx>W=^K/}ϑu$|v4:9|C\*^^RTA%7պq@[f0F0ֶVBU"k rQUˬg>)ڀzK@,Pfi*wwp盘l\`g:CDDl_Ā݂=`Nmٲm6.tJ:zML q`^Y:#ʎ\Iwpԋ`nGKR+!\Ӓ!*E%.ktNݥJl2$1hvۈ8`PrqQK=7y/ro|Uڌ&'-Q$3*Γ쩝ΉE  yRuLT c(ѴU8~lX2<}X걟u`OPK"1s`3ɸ<8-1JG\ t<6'!>(yjgK~g\H#K=`v^{$:)\DE}/@e%jJp$5wǝz Y^K*3nt6M8HeCsol D!̒"IM47Wl:̎z)CFd3pHD)Dh(-mCdOSU2K}?;0%q+(:W`h_/:{]it]8ʹ{BXEޛ]xWYd^f,޸I!Fݎ+rB5?s/фxlwCp>x'9/ʻf'Yb)㸛 4DWi@E [nu9>4TZ!у %;{.=#a}Y̾?P?C {],$ &NJESg(G`ނO.mrGF7P '߀'fBL?~@GjC|Zn1̰̂C v${/#u8a<߆S]DAHmVhX\M|Lx.Wk]ۯC{!)xOxcjn}-Y=k@95Ԥ̡~{;b8.b$9ԑ1ݤx Kt fOlK0pg+

zXva uE+*jd ќ RLrwP.2+pGWqæ@P脑̓Nu ^Gqrx geKuiZ'O< Ғ d$dWuHʵdt[5|#_4,J7O}[efZF*Я)ݟW;Ǥhk&/Oah"u4 ǟ6άu k-6EL#^gYwW& @jBI$.5=yZ{dd=~jvz QmϞD+GVA7$"+[5 /xU#$/ajD},&%؋fmڇ܏jdJ~ja21)A*m,rQ NI"zaO7 i/SǏׁ)2?ҟs^+WH6{a埤>Y|gQ wMqWϳ@UE E̓+TǗB%2d^`b zq!;rk?/ШB i^^!z3(++d1{o׋OZW}6b/~6f/T)ޛ0{w{Y^uK^D fUz2н3{id{{ |%|/.TW}/\.&qN, ڝbNH24'a殹8jTlB?5%E}Z)vk=Iռ)k$|.e2y٩͋>* Amo*|C Y_w{L =4Sai姲.sBP1t~`Sm-{X넭p&ˇ (Oo;ؗ6184}`b/x/XOSM)VD6Jb<%7*:(KE ?Vkyɑ ij~˅W*׻#!rwbR.1UDO:vűFʡ҇hD`4)bP^μT>ǤsiF`o;h,֓WWA8G4;̣ l`M30ͥ6㕂 Gn,@k8eU(MQ 5dQh9HuYD77:o]Pټ+56bk;a~ k"@C -:z lN >0 A ?Bb{t^ԟ3ԳTJCn%ɺw{'ɺV./: BL܏?va_<v;d-C=+99-ˣ~#A|jjcV뮫+^=ti5m)~f~R?mܔwq:]o3]玪/aU) &V#^e4KS.?4ws}>ws}>ws}>ws}>ws}>w?%X