#!/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=00d0b55a96273a046149f046b5908249 # 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 ~9b\{sFϿ+{(8v^"! Td C+3瓙TvݡW{f b3Ϧ#Y<7 Kgx0: 6́<3q>ilrΌ̑9O31v<>gssp>|6XCᆦ53c`Vfj:FUYblP>G#'#QQi G:бGЉguI2K6O@@A g2Ώ9?d2-c907l4Hi疁 >MD@g-glv>q|a<d3d .htvqj@ 5K*,`^3"QBV66NF1~t.Lv0ij0pFӲ2ȼ`lHuSx ~2qco&{^1Q.mkr>1mÍ^9m ftnf96XȞ秇ц5E؃H+ʵ!寝h;i|d>ču%Xwy*]>ucVtoA[l1|Y˵mQE O?݅S/_dJ}?q?Xem^x⳷x;D&k.>kLG} ְcw;:mpCE֠4>?hJvUǽUoo^dWW:βl8p6M{E4L5_Ӊww:~{YTwDwJm[lڢO*M HBb颬ز !n3kfFn|M MdC_{vNTG/0'Ykg5:ywI.eבd,6t;dYi;opæƵRPu>뿳eF>Qs!a\Nr%gW?4{ EߜM 5"{mHkHٵ‡䆒X' S՗ˬL@w aK8]] s&Ґrh'aڀ"5 ]5"dِ[! bH5k??0>(幀%: Qe NJN\)ew];}eey֦me,My,[+F0ŕ8-WEÅc+8wOP* #~_e!@p~^2\Z`Oٴb~y.{p]*^6 'G/ׁSlX]űeD6 Zއ"L`3BPA}8: kxW8_U΢:{ !8F@о@tXLn`O2aJN-,r@^I!o0'7z4xPB-9./_`hZRSZ`ǻha}u<,+CHnrC4Nl}Fd16l8BPSb*dm;7(~s^#+ Y8ʇD"^TQhI'&o w'zl*sQ๚VuD:hqe=WZhJ"ytN6iٮ4&ݩ1E `-6AsdH]oEilw!h\dkfv1FGбh`+!QHN[N όr%4lc_ځ|GNJ<$#wa-u y0=OX!nyB0;NyL^#εa+#)"wÎ{*j[O1F9:`*o><~J6'Un ,&!旙İAvusvq=TAd,K` &Tـߏ.y% ] Q)GGhǓ2daQ~ xGQKchqO"8Ihq4iArRnGt0wW4I3;T%-e$vH/NčY8PQ̀n[PwH:Bw\o{l&]L!nRpPヶbh+{HeDgN"eKci s4h?|J8n.g_B24Cqi^Q}sYZR:Ķf*߹TP4O씴n{=({^-ȫb[i`+ mϞ1rt_>AWfJ侍ǠZ_7Ac5Z^vp/Jd6g>&( fDQAa;)W/TbMy7u^^> ))^Yt 0~Q;ne& y6J,}x<>.<$'6f%җ`op.AziAW r ‡wMޛi jڥFG ءLZ[ NfiV(sҋUł^>`ӗZ$%&lKan}LO*SUVS&R5SlE(~:|{Ad0<TMWM޴?+m76'm b\^#b5QX ^+m0H慦n_C> "u6AUn *p+^Rږ]!skS#APP?9{gCp1'幋%oI] $]|`}m?^BD5^,Ґ(9xp{& u>6bKTCZ; = rUU[AtjT9:tV%U$Rwt)+6_?A'60 5X ˶S,k{ѣaHH|j:uE'v g A@Tnv+P8 T)p ilNE2w |뽏?ܻq=wa܊K-aR'06W蟕+eľu!]. v!VxvɜO%n`Ʊ.v\; #?vaD1 . N*JÖO; xIMCw*c4ݲG>,#\eN &Ӻxrfuf!ЭYI;D(c[5#{ :I Kzl*v,*KxԼ,Jr4Ռn(Ѳ䭅F,ݝ,B9=TOdQ冇 ekw-T%W:)^^*DiEŲWlS,nFMMDtz2%ꊘ:V\ʨeW?LK_j奁^lY U.%'V &Qxf KT1oYF>>`Qu+kIlY+Eh(N|~\At,"TIreprއH=8BzACVPErWjwyC 61iʭ&B>VǑqG\g Kd%U@Pwsm5)?NG}+=~v0Qާ:?gAk/Z53_ysNV@d`ʧ/~,"M| >zH4gJu{i[ 21QF.){I)Fw=gE>zmҜJ=8ɫ )x[&>D&G =ZLRdLF> gSTD(D6qDFp۸e{8"YPvȇAJHDXN^xd[ŧ:U3C 1͹@S`Ů**x^Վٵ 3(@V%\xQPK)NoL>TapSP9ttNXXt`ޓ/d.~UBntWNDxa$65Q(+l9L>/zJKQ?~S>Wc<&7 W{6ro4n/s4h/\.z>X$}IZ1 Iz㜧su0)?.Qh>/d횫$3` ¬7@1>,0N%թcLF'II \ W)ߏɻt)Gx5<)hFGvlɟ9#{oS?AEƈ&>::=kǕlnޟ>4:Bwag V+O[V}) ,zj)6euCi3k58V=5Z i 1-)6NУğ~&L|3N%u,p3zeKWo#=R+zEC+W+hWuڅ9a f^~z#ڞǭ$Oĸ2ވ=߽$7OO{cOowшZ;v>?_ h64@Eϻ M{N,At9CEgL*r $EJ0XIC16% K]p0~Xm<{>9ӛryxjWNΎ[pi%[WCfEw" m1F܇/*QpqW`ltH7V$%Nx$]}QHړ~rAYul{َߴi# G?$ rh(;zεb~Ƿnx>ȭ*Z]MfWI8qP+-j a2c&ӽ0gYd0oʼqG)BfTk;/-Oͦ6aǣ"T'P Eʺga<{t V⩉0;yh-;_vQ(@_!o Ů* 6j~'0t){Cӗ;@oTG~RC)1n<2`1Zm1^ft=TOK /h6ez|*S)&E4٨OpOf>d ;v3';+)ep"+TB)l)iCBp tH8^O\K]bNl\r]:iS|!'.TsYp7b2g47y۠R4yj|Pe҄&k ,trg[n$+q;#ؗxT8}y0-0]k5,$Oy@*ar 6~|pnPDV}5oF1y"JoV-EE"jjy=/| n#xKnH*gҝIT W!VUV"5t #ߴCt07*:C*DPG㈐E ԩp ~ M"OLovPc/GzF}>@:8 n\ WOZXUTJϣyovNBg%o0.\UmU󒤿F5#Aطe2Vk՛+:b9cEҜވk 9Q{?2'B6}B E3x"U*02='h6Oppz v2KY4P/uUy/,nKԐ]t͔}_0i14`IG;EI*&7D!=܍3\~ɩ;5 ~Hj8B74tLf*aW! 7fk[RFSyOjDn>T~OV`Bs$e<%e#u{5S\L[y ''~_ItOXb4$DrWb nj׸ ~ϱNhHb+\mĒ69ͭ޵jUDxeaͧ;vS'!`9iY WYj@s/:^7ARNBP1VҸim= wUqk(҆L3YrZo}]*Q9,R{b7ߜVk> W<NJ! "\?d~ z3C6TQQ't6@3}5#RErαaOs kl?kQv!/GYNtq=6=CI[D9bsve:o\ ,M-yS)*ShWڹ6b]>k?}}ߎCqX뢌a<0G݄UZS<\.B/|Y]2eHez@Uѭnh\>Q.s]Ak}V<ʈ)r< f^j "'|]`Y ^ c![DxZ=T7'x0#p\( /T'$݃-[[YIiL7N.\6 /;Q>"7IfpnXm6)35vhiw2*V=6xPƻ@m,n;0+~w/|8_#c#0ҁ4P2_6ICMD9T 7K!RX.*>^uu% ;G꟩VP-̵%@bq:fpUXۘzN =ݨl1U )ۈbJAW8,QO\nKɐ&0pRyo!#CS W AWB I KQ|ܽ-h)T #{ÈQAX;vyW-@NJ/$޷N“R3LI6zqzxzC^y==!YPC.F"@a9g4`lZ@QpK%t {H=auv|T_kձX4.9#(Z]{S;ny2h  8*߱4&-.nj8SqO:t9|Gmd!+ j߆?."6xexEE/=ǣso p?X|ydNz,NSXwceb\KKK%1!PK9gFdDsA m֬NB!tHF(5?Fުȫ–dq4D" Љ&QJ2冶NDR֪u8z% E5[JZ`%ϒ,tͤ{Y/a|>>q+=E6B'$ѝ: &M#O^ʠ:j5[쎇ZSyA'':_/gǕOcR,rgXL*]DS];ءtAX~׋e鹾1' 9n0IVVsG| sa?4ϓ<6g6|N-=G&krGl\"8 ̱M%.1xh8-JAnyÄ Z"/$AD/"cWpIqŶEٶbow iMYfJYbYV2M^cCP1 XZwSE΀\@Qx `wJLi0bwE>=g)zKRk(]L-Px7x"pnI%8BͿ9^f!:vz6MO J:ƍ@̎ mMVc;ɰPlŧ&#C@~eAi(-ݑtד6Y"@1uXԗW%峸UM7lס'4w0ܽD_ o_uwT+ __Ϟn'vO\#ތz_1w ؆9CyU4fERE*[Qjx[Oؚa˲E%s/d)Y9P`޹'p@E-ͮg*pm'iic`rNPBaN/&A@Su$ ܛM?BK&0|!0xAixMs|#6žМ>d`7Rg(!.N v+i "]üT6;$-t l6v7JG&,FN/pCL'ӭr<h̅O1}06t v]kI#k:IIXt0Aݵkϟmm|44lM~l7QMz Y,AF6EF)Y^4N!- :qА97olEՄ͈|4:l5U5f&;"v}n6.Dg|^D^{ Ds2Îdv]>W9^=y7WI^ʳHEV+n<:#KX"c<PEKiu`+ , q嬮ʵ:XwvF`aXt}E_𐅲*pm)luUTJ,]FȒٕe $/cA#=%9e!qf| UT"Nn&liƮ ׿|Nu'WE8nR@ܜ)dnjo Yͻp̊7> p̯ͣZ4H8hmAK|h2r]E8M2!(Z9Qtw ,^1-t `]C[aTp r$t#iy9GǕ¤mh4/}^) Ce`D[BqЇ.b!NEg|\d "Ax`?5ѱx·),i8m/쎧\_Ôy4jƂt?k2?_ 'U,D4+>/ƨ`-M';*^ D\ ]eeuhRTΠ9UHXpL@]䏕] ɜl3fx,,0Nh!QIƁH`F@Lneͦ]i.rǞbn\"= m[,F'GYm&m0;)GِRvv9]|_nh$ŢziHQ8s_ I{9Xk6ST5?Q)KہHG=,:{g,0iFN<4a^ԡxL4Jetky)DaŠ?/C˟\ EE`)Iy W |EpX.~<8 RVٽ)ta`;ڙ(^J`wSRp9 Cܘhxpw\܆Ć8uFܝ9!)EB=MӠ3AF2-[H$13ek>}{! +?sE lS3/ 4or|iFADFi vm#q]L -^w*8-\WmI;x *);(Ւ## XQYA6OG ͺe"=xqp,_]*yFw4 T-L+`îi3Vyl%q) B>b$B峏Xhx*45:xmW04%1(pTS6"iKQ:3!Z`'ˌbj$}kz>i = 4uХ l+ ,F z2) 0u! \I17r `cѾ <XEzR"E6+tzπ̺T'LBC3X3A?tRp*MU˶|uW/ld̞o`ݡ+ƕ{kI0D50 TO#`b\V#$%H' 6;"kV^,x;ڱc'/:_ XtD9< ,e@ LF#Ds0nU1W<cԩ;01бl'G-؍ei*:dr[ aB͗ a8'7PJٲ٣T$Ĵ691}$@ܕ+3n]lh.bZВh2'{!i&׾ 4,M ~ ]fiJxqpRX^n*?llOHUG]M`vNN+oQ}hf U1PWfKOE zp/.Ό\?昐̌>F!5c.ˠ;Fp1Y< ٵCg-b7eV0 qӚ}r`SFL8>a6[qLnncE6>/j%VN5fbJ0RlO`1$!pݵ% 25Je<7UZhyoͷk_iC? 6-䏍?F|ӿ6J~~SkeM5~'6o6sN7!6,^5mmi>ٚO~^>mGMo_Ӗ;lM;hM{[S)3JuhC>X.m\Q>Z)h[ g[Oe}U;gO90W kme}ggg%$aEV 'gưƖCȫ|tX? %W;_bL z㘖.Nwgl3>+x^3 x$V4\ͺaW%@&~ je/y~ٽgbb_u&stK{u5 {iϑO`ޞNM>Ny i/LG]PVD7LG2 zSD!XDigڏ31͑X1cjO\b+7eWjoކ3,xUIg9jW͕k(|Y"ݨXXZUQGjeÊR`$`S8e,zpDyCH6YF:}/WدuW+Yw;QAo{lK|ȆC9v 6FcHMnc1nIm2apUŀpt(9;7DVq.AwFs<š 肘~(n0XvkPv *A$iMٍRLɷcM-ƣ&$Ӗؑ2WIyڴhy(rt)жIaӍMoyݤ:*(vz!YE~^-msW$-݇s&ޢ'a71cDrIH6ic/=r#F|˥Q|;PV)4{f77V']G I~M7 *1qu@tMG3X8wn[DodmQ9M !.%pt<!GS&s΄AJuC sӛx &+~}khRvwk2O,)fio\]/^8&5ƮK%6B KE6\ tGv Fdhc;*G\W߼k|\BwmO7gm Yuߋ!ܦsmnO[JXk+dՊ^Q+(_W7#X7l3>- @=X{烽>?BRF嵩9Þ)nD11Xh| ԾVքP뻭!\J&5 nɍ:4 f?;E;D 9F"Y'_ kq|6⃸ `)b#ZXf@ae<[,G:l DD"8N0^Q Yq|0>_9\&GisIk.R?*]數^AJJY*%hq$h-dkw#"vX<5?ݧW@f:6fQ>B/4w@eu Uwh]|ԽVtCu?wQTP' -O\0֛"Վ1hU+9V}8 Sg~Rm;@*X~v'_1ϊzDp"'뇎9?#ƣaE^g4OS+(wCPK(4 {1~=ؒg!n Y4<'gL3f75w87<@J@8S>/|cҙC5YESL= !`t^8t\ |&(EA7JGLlE\'0Qx3s`H}Q#i:~б]ZCZkґ͖`+^% A|AAbPX[eR=z7!֙>twMΠʖr./҄xf;⛢54D|kx1HY܌Q=ƧQdF&x!얌Kh߱9'2Yj>;HLZ{Af9uq# lgbNP!y4QW 1\T1Z,|yr'h8/A H]rGEߢq \\s&; 8xɲ ӏ̧aqХh/.2 M\Њ06Rz#e0%߇5)i`kho-9Lh6.@|q{&k#كFmENn 94'=ib/lRgLj\?;(T4y%w= ;$y xkEGpГet7 7@Q}:.YsjWyሧO#ZIxɯ3iyl*tޅpDkȼ+*w}Ϭ&+oōNr`Fz5x{8RV|z}@vwFkCA9RIU/RLrvXNwV\N;FWcsFnoD~S>WۧaU ڴ[qh5D_Ku}R~wRji(PX`KgwJj5 9gޮ)*- yO5C˴V)WCv䘄׵SRuF11tX?tFg n $4vQ]3Ssz~W/<q+*Uͻ  ³g;ݭOσ흭7y<=(LJ;,-d[j,g|t fh}L%z(:yL훣D>_Qcwt\[Ahzab\h?eDFXnP^cI*;>Ekí<;/٦'5z] ҥ.6|tFXGo !+E&6ZD^KYG^Q!?hVs>SrsQKMN!6v/BCjW'v Yt`bIׇjN@FO+KJtϷwv<\x~t{i缳wzC`E4nyB+QDVqQMnQ_P A#wrҲ0J|?atϟo; lX<asZpai[?18緧]YdzvX ׶w= XUJ8 γfy[uO_ݝ[O7:so;ӧZs @M!B߁cd9rh~3s `RzY 1(HlNqf/?Ar;;K=4<@\XG\DiCEa q|^;8Vǀh䘮F0(BH=] 6{{LTOPRkH%־F}B?6wvk4&7w?oo>{S>_z6B9Wu"ynASY.7P%PʻBFƆk:>!y>4q62=jY9@LwЫe?jZ/NR =֜}QUd -s6L,X 4QtXŚHZKXML-agBc-(s+LBmEDGP5"ceDXB,Z|0vv3^/Z }$|ߢj;(MwLWZwUnԏl ,ib-”`.fggan8 ?Sv:85#5rĶn&\H$>E+XވS'Pw"!?t֮DK^/ ;VAjhwulДׁoj^xybαAСNgzLVrE=M2u>7:t>OQ72rm~9g6|$MK},}ݍm. E5fZOMhF:_SE}v F Y3x&cڢa!£PRealȶsFt,vԨcTl>wPU7A0gqP_Ob"A1whmD9=eQeo]U+&sI*/FȺ.*#bTޱf L 1- GpޙRK /69҂Pڻz+ opCuؙ\Iݦ e&&y,3)7"$1dN `Wh?NJB']X"4],8ux2eSCv;HNq$QC2PhR4ov,w!yCmuʂ4VL6)a6x2$!I0Un6a+){4*P{SY@ɍoI.unCU<#T0%n)b븴:>ȱi*?QE.8szK8,jhh20jDu![PӮnH`w2HxCtpIY6`DrK EiL֯hʚxځĚ2Lwxl.xQY[I"3!r&ULl*1ekefh"nGX#F"O&c:CyzqMќc$a<5* 2Gvzr,_.)N/ah ^,~I gϩ)x6s$-P"] s45 k'zq' ɜ3Gs@d]HtYl/yr12"R,|ZZᬟ2Gy=Ghf,#٪^XckĞ;9bwu|"ATg݈X!3 Fs?bHbT5 q5ܷ՗QJħ/a%X($ rI 1lTe¨Qj,ǎ\nÖw?$& jY> ;3Tu[ Wį!׊d­paW.rcԝ;YFed|e.t= OIob>0&Nd}x&%;?N0xz3>wG&Y,fs6^ͽr'j3$֚SW6zәco?||S>K1\byޟGbTN?,.4kϹQLqbԍɴLg+KvՊT1K`N+f<7lSYj/q:i7+co$e3Lfk3ukvg@Orm(f:b\9LO('= sO5 G-n_`+vh(u91,C@etXu.+hzE^J"`F%} yo7=B߷Цc}[-t ~6#~bF{n=GI)/3&K1J?6 ːRA~5 q21avFI+Qݺv9: |Ul~ .+ m42 .ł` dvYZkԎNԴ c@ DyqJJwSL[/\A7t4%{L1?7&wk)}mumJ`ciu  Ac =qY۳6\A$%N %| PPTR^Wkd-; )u'W 2v`wjyL' SJm۶l.DrJ]_W_{39[jHAuonl_7g|߷-!}cTFVn+Փ}e8ko>3b:KqG("Ծ  4< ?5NZrq3ppdst=QIUTn(s''?&\)`vccCP. 6i޷'gJmS `:/G)񰪧Q*Yg(*zѾ/m廜Wp~EUT{#YCbd=Va&M_Y (uTi6 VPiv1yi>-?M v}P:}S> W ϋigyO ة}UU(DfsA^j!>bO l( x>y00b/l6&Z(dɮaEf3CB :PJ:.C%巈F2'44olTf`,d9`)n}bAmuja^v3"|vh' WPF)}G 3D)URbJ>A@jn +N2U'9@Sl ސZ" B\Иᘱ`&DE6︞ gWWȁ)vz]oAmQSJz^^T}uK>9MU>VuVMȹ6j&:7ǭzYPu4֏_^$~ToAI!&uTkT^arPoc]:-T9;,7YYbD,Տ1yMˇֻ̾A3~GTC[ZxX;MR/w5N2(8+Fea$0UojIZ7{Iu֬V6YNÆnqFm0,2dSWaNPBSt~N@'ݬL>P,Ѵ=ϫcntqYhN.Qx.cĻO ?3n@zA!zЂ3I;Oᵀ -T6աwt͐!eEʘ">C=LatIИ٘l@$7ݞ+v>~X MxhHb1Ǩɺh_V2փOCBf)B>* AIKe"<*{=a9,9uaO=d%3[lwwLǰӳz՘'T:YF@(1LOLһ`V,ޭ|ڥh)Z~SGr*T%J\YT=Z,Wۍ47{n O'XE')-zb\ w  X/otӞ}thѳ.K14e@~Nzxrx ObLw['?Վw3;z\gRMGR:.CNՠvdsJPM3F6Q @}d@ $3j!1ޓ=;o|^sCLok&F% 9ϚT[ϷKMp E68 PIi0]{O9}"-2E߾:%&&tMEe4Aofj5 }gW+ȋ/ +l|\<{ ɉ j՗ռ!Cm#l[!e!-m.Ti+7@0=H]M!D)Л 4*E!:[tm;f/j6ՍO&p.Fɟ\m#d m$Ռ7: t6KдNY7z훵?Ն̫޺s' I^ r]Hi혃7N}OEA}[ S*4p9*=-80;zDߔ<0cJQnp]vh  Hݒ]'~k ;<a@C@!#r< IXN|]|SD<.gqxs5>Q5xAih`5:tSHt=͐Bǂ|XE>bBP!Za`F 7#緓"( [_ PlE&Qg4NN?6Y%!2ʤ zL2qxzjZ7UD"]l[3^֦DF̔ W)~E4oCjas)< Л_bEl~$}L2AjeX.Xoa>v{B{I>g։ |'8JӜ i7zJA+.#=E5Np*| ꜗHz`*BjB{i̹1Ld$c'va6y!1&\XmF[N9֐C,^y]yб\b×7'aė~t9"BnMca'& ǵǚ}r屺GӶrbRH[~`C[jPn6ojTDsg *yj*W#=Z–pBěB\|qWohHEzrckӽ)Dyȥe vX!XE0q@:zWiߘu*clmH0ț[5|$bH \h5O4 tِJ1rm96s1$ rhwzn6s7vdrw~#_D~5z J CNqFKl9\Owvw3h6݌=34Ip&Q3 6\Gagun?? M#OdNR"JR#Ck7|jІ1+,'cgȔ]iq+L1 /`(՛2&zS^XO~)حiP_|~ JyN<{SNfV%YM<ټYZ F8i Q {#GbCo[8 ׆H$YPtEĴp"iҗ UY$% T&!1d^m_\r)W[< 9\ZrxM9-5 jjS`LӚuYOkz%SIz{j.w;Ms-i Cz01#$rn12cIΘ^ZGà:ũ.(Fd|Vs]= Ow~Yp lc MP<Z!Ϥ iՑ*o4|Qs1k!j5ܜexrR13}bgGV8r}d;3w~+1i&I3KjWR-:f"~qjIzlQ /v{&DB.[T;!?N# MX9wo( 2SO W>&tԝ0xd嶇0mw8R}RJ,2HTZ~丛wwIj"M&}w&$j\I9HAyEB?$rxb cTM$!Ûup1HҎ+`R,Gj KW^=hbk+gL5SE L?DQe>5]KbxsVM0Ǚ;㔛 C6FSi=ܴ&5] %|Y~X>;n[m>i_d|WͭcGb45E÷b'-mOȳhYG^jh,nOF([eCo 3?@sJ7F69ko_6wF}m%lcH-@0t?Nv(Fd1ЁC8I{|0g\FcKL#ahq=..j8]8qkhJ# `! NC6lgx *_1d)2FZ$ 6>(~2C 4- F }jPXᨂQ`+8S$pofAgp;!Lk WT_M; oьF3)Z zXCd*7 ;#[!#Fޱ8m} z rIqGlg9 /XE$U#B[af[Rc 6&`54K7캻6q#7ͫyEsҾ-7sy%cvdoDrͫ_3",9Oy*s՞"4B'ǕZ Eʼnpʭ&hrTMAa6?!:`]J~r$DOaه][QU.CT8)g9qZ.\f,[L/Qh800Xx:^)X{D6>puy4nN}%p04({8 ۼ GriLmʹx\|&ӏIpaOk'I^Z~7MVǛ+IfkFr1Z;ѾKD 3^@NofbQcYr1Q ܁ƜN'I|p+so )yQk){@)| Zi<j U@2JTfE!}ZdkoJr0R]{?)ϼ8qVc?0gl 8I87ϣg+js-|J|Ry%yE`]؀J͒S\brB>̤p6MeTD\ܧtF չyAmU+ -| &y +ΊΟiَr\(vnL`;Ӷҁ6@BcIRyECطհPP_BWM ߺn1Zr7ё0cr:i1/uhwqKk3S*o,j8;l+4\{a6o8XSD>I6n}*]J8; ɑd.F7;x%݉QJ70@Dnirߞ$M)1g1tՋQ[#&)>~mhn5" xEko\ߘtҳV|xv>4s[@a'"fS )3P]bwsX]Z-%!\tLTӣ%ՕU۝;j3h3ZZ 'F@SXR=]kE]b@;{=8uJY`HU$hp~U Few8(N,ꙿ젔`I|~"Y᝝ (M̹9+,$:?8c߾\41fV)\OuXylT<@oK!6SZ(nspU8 f>bޔ'Z,zc~AOiN>A}9<\@3EsPN2pzpܮ={U7jxV̺賥c9[3iBO) N 9/ZG+=(Q$iї1Hg?jLlN's @ff"?ylJj%5sjT/D^0dQ3)տT%O{&%f\i՛Za׬Cl5vjhvl`L{VhX!$dQY)ۅ-Q6SQyJT)1wL;iv bg DdddƖ%\5*".l>qrQQ+Wo m[5Z{WFmva1ڮTk}%qqn%zHnL%s^z[g%]32yY)(tBK|ZG`aO\!y'*(u0Q}P6&;ڍkw Lt8U)0??kR^!Xw֪}BzFCG-^樗r8䑷fHw=k\T&B9~BCᒩ]*Ǣ=E*}Y2 t0&ޜ=yALгԂSPgDZUrOIR^hlAnžV1.ݹŇq;.9iac[#G'm&F&Z?*&?FBx @rڵ&x uHT#]W^=zmPJ$P?Rs;`*8Lw#e?sI!1>r?}{@%-?RஓhIL77՞q9rrPYkV 3oZ# 9̈́m0O}8R8 WhxS+&P; c|>(.t@}&<OLѡ`Y/Fib4NBK첽@dbLDu%9pg9xI!Dq>)e^]La`/GN[К!c yۥ2TBw_>B}Pjcw{8F;W%m`찧4)ͳc7> M#3en4F*$t/.ayͥNȊ-bUS=dG{bπф f@T-2ȅڽBp"2l- śӄ(lh*x[r=(FhƊ+p"bt&^[20c۸! !.)ޯr3!Mt+~C%CNO5u`U^*?OUgnȒ՞lE6ӹ ?=Ҹ "N$l/ƹү+Z3Fb!t@s:J3Q.cfatR̷}wO& 9o.e^)W'k*׳!yI&J?bC$׋B|AaVTS)zmΥf mtYƬI7r] Sڑc(S%.MvDt0v&9ZPöܳÛz-mWZDNXst+>ii=N=<~[ԡj<?j;^]]b߾,d2%9oZ[-`Pe:'lRE Љ!U5DYʭ{z0WӰ idG P;A#@G whnP:кnFL)UDi6"$N\hkr1цS/ƽLݗ_v]k^7 Abl«_r}g4 YB=r7&pI1 U8,3'^K#rGOɅ F߳p(~Dr#6!94 G0eCX &TLJ(kEz788M\Il|&;Rcڒe]ܰ$X9]\Ʌwl 2TeY-2L7>ʤ<ÎG|CFp23 6\$zMQ'mj"MMb`r@_ i?:{_E\Mgڰ~ q/Xj˙58MI"sx#µ]Hц#r-1p#8$5>]yܚ>DWic/N,҅;?un/`uh>0-u46 7j >HE-ϣea >}l:L4l%Jb唶zwHxiLt$e0"Y_".@Z|;[΁h~w'K% 6kIo+颈@'_5E e$zf2Nh[͉Ahi/xfm#D∽"gV&>a`@f6E.GNSaA0O0(V݁ <YHV.l.5tu/( `.WdA'hUv0\D-cM"﹡c`DwԊ62 |).TdRb1 ֊!-1ZJ$wT{6Q .[E&2R~$#a՛e̓n#+ tؚYQiW 7-s :_PNnf2㳅InC y| ]V*I{:<%,Li)-v }V0M*4,sV1IV}]n?emJg%9窶db?\&6pm6>G9y? F&%]PTz;j?A 2E^.~62wHJM~} p•Czļ3}.@0P/p)"8\jt ۃ+% Ѿ1f@̆U#o@eX ڀr?Ν{ztoC*ibUu=GEZ'S!^9Zj3b>HI 3~ظCcܹyUdMk c1b R)R.|zB`yg;v;fFf7CAywmfmגMP`h]4CC0X䷩7,!]],䠤WQ'k4v<T *3Y|K0-v~=qȝZ=c`;2]Q>fu2aK0{/)F={CI5M+\.y[Ŀz5A<"f4Hiǂ}P0Q־P"SCQMro`:ܥ/V&٨kg[}AQMG?~! Kp~Z Jr8c(: XڲԆ@rJxџe:åBMBK E,‡ZиK QDg> ųJ#G1ײ O: A+*Cs=c@x$oI P!ߧ$SKcLKe|b$a&ܱ_:EG}31gMz OK^NOEi6߶R8yF#ܮ)|_*E:BP8ttLS'bspФ?ӯ|GG4qkOkΤ ۏ:Y ag>n  ;M4HS k[kWkJ~« XZO3^]U3oɃ/%2J[aR;nr+UiZYsk6B8٠:D)(N/BAQc{)mMWb+G4b}W̳)|(^K/tˋfT<j]ըR9>h[k]xXoگkjra GeTe^15o%fTt9ty0f,xxV> D6l#Y0*GHWD齘DlI$J0! [h 4B]2$ g<8NU (4**x~FF>|,Y^q%qcط >(Y/Y,1-= ȱ  y :;x1nösc?iZf1RXH8CsumXPzE 7+ôTMONAǫX̱_{FXRGSjNUzv$oѝx2js{Â9JEc=/8n"֗i5 ŝ!=qڨ)jŸ9)V2!%9YK^eo镓+`N-=f1g0kǝ 9ȓأ3:^ T)R,21Hխ% %3l3Y^y1Mc)1)A>;d:̘ifJH2֞3`/zslh#JZ+_Π"ެGJ~|`ex' s`9L=f:٭39Su[/7  ^M5_E1^B )2\o#MWͲÊ61Anx*UGFdPJϣ!HFamKӳz.hzD=zD]zXh)&Qt[~UwwQAK>YLٖ\mLVF֬5Ԫ[ػ3.9$DS~.bmYrH6sifMM,qd:7Zw~v'q k.F)zy Bud R9t@$_% ݮK6TdY;BtXZG8XBq:q?ʕzĵ-+ _WǭzFeSȷO{V^)*kK- _ԙ'hkQʋ2t/}bg[k6JzI5?󿱽,>϶=Ϸ߬ͣyy]f~k*W!FHEI#OI=_xAO怑(s`<ձȡkgYPE_$QVOȘ@IB00R)jݦ*s- CDŽ Qہ[ HXz `mTjp:#;Wj F\R0EwܙcP@O8 #oJ3D 'ZXFj4)h>H E):Fj+Op<#Q' F8N̥hƽG\:}4 ; k_fA 79<9h-7j 6Nԫz^?}ߨzROFSxVuhB)+&]W&*gFU5 ~\9<֏_OZPaނŲNQQy ?/{:NPNYzPgӓfMas,jU7j.}bNe ډ\ VF]J dU`pkWZ_aLjУr}AJm KU-_Asw LO#l8 GeUojIF:bYÓ& YM[e 1=ki+5g΃~ ,C* 1vL Ʊy(k#K#VơhUZn2{ekjǕ?r֛-^Cb)] g}ZWIvӫqIk5+&.Ӛ7dR$eU>R&S䧵0=&vTۄ_H`Gkcem|_T&X}TCAz4йT`lPV)*9{ʼrk8P 5 nXAIl)>.u6֋4Mn-]ƚ)V<+"&$kc)Tlt_U!U3Ylyܱ6v.zrsxÙcX$p|$FR(l>%SQlrnA]uV19FaiyqҴųƬ7pLY{ϣ9"C2šs)UWyR|BK9o#lRh|dek'Ϻ$[=\.ćK%针<%:e]wy^G!a0@9VxL 9!}N'T4|#'N]pc;?|VZ_~q;yS[ IU_.&3D 3D41[|zC+4[&3,帓@$c})f?N0+ab9pbd^/Y~* -XBt7٬<pD!(p)RWPm eyO%O-lSkk 4 -Q/L x'c\rmm?})!ZNQZ_ɶʍ±:6+>Q+]#MHjƓlLbkyy<|>y<|>y<|>y<|>y<|>~HBgX