#!/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=9c47d4827113654609505229714c702e # 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 +J! 'e V$C~v @HΩ:U"0`JH-c񒻨d0GPhq,XSdz1:{Z]BON-v:4dʰCЏ&0KE1al%.Ɔfld0}05ڟI 6Yt Q&Fl)<*Gz_.icl#(lNc<25Wk0+εS__+j.TvQ_h=T ״S@bx̱p <`EqYXM& X`C srdZ54v2ff$ML I)Bԉ{ c2Ѱ~ :#6`md\"bɡޞjn gc ΩV fFVkeChCUyZ ĦԠ 0PPJ\'2)s.ՆXJƓ)~S$n\ U.j1qo+^6UC[f,ǖ c:=|^i RkhAИ Ɛc6-s諕9FYM$XcЭ?mAy .>CSCQ5MW>3/`0Xb^U^AXeXk|Azk D QD~D5?M[8+72ax.m$+pk9q_91yAΖ֠ީrʐK 4v@Q(m\e٪t)S`K^@tqLR[W#uyGd,jTe̐/nKѤ)memY?`-ieQrK[.kG!wݛdz 5c#%{0Mayu qԬ_HYP-s07Ԣhvv7'_p(.k&-Tx6wCf5bgM_wNf|5V32G&(sMy+^R>}K~Xu\ %q**eebdsXqnFGGB@ z廇Wf҇7W-# q02bA漽gQhXE9Dä*?Ćv6fa;C\y-w~\wؗ:5Rݖ.[ ?v=~ <ڻpc?ڗK]Nh%ך++6ڀXk\g- !/"pz/L|F&µ@@p#jr r/ )e ?dIzn6{ ̏o]bmK2/,h`[*XW<2VA6 d0/*K 0 AA(4V CTFܹ!l}86M#+I% "~@~ 4~ehy|2rO'eu s˼]G lv|L+:6uW1KVSWs׆ڞVy3N>" 1za=>{]7^}T@4 b*DE]I(,)3Z੮U8=)䂪\ `ۺk5vxHcC?W,m-s+ǡő+"AJ?ASiȴXZ\T _{ u4+VӐ-ĦZL^W@Ew>rd|tE,#rU"±\"#>^iL, ?<BWH=QY>bpT"5 ,5,FyDS80eV{ YqVĸ*yY>~. ݻ*]pdb!dBqj詾YB~5uG[-R^A&ڂM ,m{dkVÝ;}S$7XrԑυBz.SډXSR_Y2BfaB9W:3o=FLYf͡3Ac=e|Ϧ[9DAqQg/hA/hE/hI/`M*d2D(V蕨I+S5 T%[ǟNj?8JH7iwZ(ӫ|ru`j "X?hrP*n.AbY6'%?2/L\ϕ@Mĕ.:gYz) L*xˑ@ ~@'PuTOҐWP"&'( G8 ,srG+G%s< S\KQo-0[8W2*w{V+:6ȻN~j[m7Ƚ&/~owowwGUw_qAXvvl_1 -v;U%RpLġ60RF '&cmcP7IW'5,ӹG1m y0lIj^N) V ꑾ}~i;,3E76K7ϰTju8\P ^BT"x%8~ИƉ"-GO㲩P2wmBʶ0~bK0i3yأ!> oDou7T˙!_d֦#< 0+ܰ'731xwsGi781Ө'L^>oUb -081mSoV1ԜuX1)g0SHR "(Kr6R]ћ)A~6>3HN8U6.st&J҄ϙD %HNFnv)N(߰ #Di1~%QFl˄F1n#y:1O+c&e Mʑ'\ܟ I!8,@j_dCD8Ɯ^F[pfI$0T2Yv J׍\'#1SE?$ r) E/Ph1-/9DNt~K!}7'"'߅!,r+q^վSC#:>Ce)㈌uqd N-va%|e]tϦlgT$:Y-#NS{XU DNvӍ&a~,zM֬\6,^%/l y3ѽ{~En}&lj[ѻ>uY* -i5<0ml9˷ I ZPj1mH8FcKJD fL9w{oVpae 6Ѳ- KIMN-ؒ(1l*]Ϲﻂs})JΚb;@9Tu.Ď9kL0A6e4,B"/e`ȄZu\[T},0[@7]5,t9!6BmJ̭u ak(tm$eDr*h8 <0#VOPشO;zo؍m, w)UO=͑^lpZm` ˲F -ޫOK3M3 BBewъVՈg>SDOY }^7$@F \|uokF zS-> "5?C?*j IQwraonY| -}~04q@F_scMv:* _t)9-l<1AH$BZ X%>GbG/(xk(+L|]K͸3D}.lnQ(Z1hIM 0נL b q g(CKiq,1/fh2Ի*zWN~%8Io09vDGTJ?lA3UBQizw={n# bs7'n̑PWt13?6GK& 6."7?ILOr\Dc& ',d"^?Ooal֜0s8X]5T&5PW.ՓZ$pA=: _tG~n۟g ED S݂ ],rEL 5TH؟b1R@vDpw7n#K302j9K\.ULmd8ւ2FItܛ3s1M4Jg_'iz+0?$e[<`Mز8;M}:r\ncrrqK-.$ ־ +SVVۂJ;ˮ&E.%xKHE>d! lGT+X0]FkמoS.[>pUjoij |'*v3{fDzB.dXU!_VNق[yv`F"ʼZɳ wБot;a W;d8 }u+5 @bK/~~NWo^ώv)mO0@c0oV^Dl˞_F3$NġB ڽ"s?$vh@ sJ.Iq]&ew$b(e,3EoHmaK.һ]ClТ6"q!Ae`2r_k+Ӽ iлRdqV6- Efb5[x8T#j᪷'?&lg)e>mB@irk&)qdxq^|hQ>9GmwNRBq2:YQa0m ҿ43 E`F.2*`s؀A"?/ (pаۗT|:)H~ӳÈJyA#x 9y2Rdԝ;ڝ4sM׀P/sӌ8@[0D{%u6Uw&t1*!_ ͳ3D>)dKQD -EZpgƖy'e `8/g-U+Af?Uߠ=J7. e:j| dԗtD!d25gN"XE,.T5R^rwq ofnܧXJf+.#iTh "Ctb[r>zo 8Y]][&7FM˱٦Et+zm\b81G~+3u3mL0x09l1^Ƕ U ¼ 'gՋdu W77^lx^Wwϋ%.7BC7 I;J}ڒM֏0+l|d7td-lϊ~s{a:){]7s[5m`&J;k~/ Q$.ؖ׽kEY>_alJ<;ܰiU m]o9,Sq̕a7|n=lUN0dTFwJ1ޅ! w5V֪X@K]1'5(Tl% Axo7T+xó&ƃ 6"GTh%0iTnBTgQ&]nӎNOޜI.>1g@c@,=<#]pX;:gULJʩ(85R'[rrhnsQL͞E vx+a0¼xx"}i Q\vaLT.Ňh m?7U3c'1VPd8LPz?Iڨxb>qʶ'N8\?6 QW5Ǧtl d0_ࠈg\NN>Ql'?P|< 9V82r5ӫt8:( 6VQ1x`pސsm+Ow¨TV2 ;؎K:@#f:D!>HeżtfP~gź:6ҡ|QdO7%:$(ѳ3 \}S:Ĵ1>&%f͇On\,ބ̈́l8=Vە-uj8j{: d kֺUY:&޺Ops y%5z axK4} {[{@4_%Yy6K32G{s\=ot6"Wq-YV >!h@fAUO(k.+M,rr2q]RA*wzw!86@o]LAiSC~> +5GsS a H;k'}'xd;D>w[ŒVf2BEzwnۯdVqܧ"*)jZ~^v20ɵZǜP?_"qZCn [yl`+7MEZ &j.|XXo8 R[9DhqHv&`YmkSD'4;R tERi1킹yh8RlӭkqtEnteRϑHs0dA:do c=XpO^,>zxo _#!_rkʖ5}ib2wJ(Pν3ƘIӄz)ihzct){Q&@h˺h~bPf<]^ DR'i H=;"XJx}*jU-ϸ@vif$sXm910ˆA'X#C+Cnk;,{$llY8NETT/( KEѤ(pWuP_3VXb/u{y||) A9bc 5.ϼd FωhQfK4 $Q iϤe Of{ vjSc [[Tk/V,ghjK +n @ÂdH)`cP@4o97v ]=XtnEf#Q$T4a3 fʝ2?K}M4Qn+W\e~>wZmzn+/Vt̀hT#_bz:#Bꝴd,H9 6;bf5+ " h'Dĸ1BDH(הIk^zC$<:xH xB6#e7:*`z!!1OlNR%a`j\K̖A YZ fM#|a 8>)3jڿRR0xpwB@X>cW@IW ƥf3(;I7C0>cgW!Io8M&.KCtDoc(Noi*8&3P,'ǥ:GUĝPU3?_*y#8 WGԦP9 gVo}wp‘"'/|Dm Z:@.VHߘ#-UVKe#P,~8񋖋_F)_x&edho$|D[hM%# D|qZ!3 q1IMKH%xo}֢WjcpK-"!=>L9.77)ڢ6EJ"闵_8kp~Hӂ{gYJTY<9I%w$((Y4UvrbWYW?WT uS -ssRK땍ue??ժ }~Vj͹ˤ rK^w[F')q6jisc]LKɶttiiƋ%ZJ\KO6u[N~U[;r/a V6䣕'ϵ^o1]tcms3m~E/R.QqQ0x7M}Mf MA8yH79]$O?IpA' dEŀh!Ƀ!m6<"I9=qTt_4&ɿjɊA ?ԨB&1{mBB~w1cOozadBHL ' -)ʩ\;4 |Že#a B19gsRYr Q{Q!=r{P/\PO; FDn@/9KŒ< & -;̹5 ]/U[ hL}UCc*YՄfk<"/9n"Iq+~M,y˙r5;m>#@I{h攳S+J= THO/8˶WGV1k-I{E)4Sz\LD!VejJW02}$vsNK Z5KGDž)տT#x d~vymTokݳ=OS;Q޶5QW],t}j$N, fN?.cn|ybf 5y|ݠ+ڸyqӁ&>9 ށ뒰 ̓a}ުj{%C8|TQAҢ,pꢁ%Я:j6*:Bbv %]QrGcPnQ]i7 ]=ݕ*a`RZHꕸ%~? " Q«<~H`g{ރ{FV< ޽ARRRć::=8 6кګ6[=.ΖTPsLǸ..S_D(kA#ffu\bdz.ii}T8~s P|ߥ)LDmaz* aԪ͚n> +/MTNj-< 9g,'Jd;kc$p 12&idCԧŷ~*xp.E `_Bk$&إn[X 7Yz,9UB!K*7/j) ˃tv.)33Ӭc&d#Ǭ? _LS)|ll^:D-/b<,S0;SF5K pt׌gf%(:FְxGP+dE>O~<@c[wfEx߰ϐr_ٜCm7 ٜmgc\=sspFnhbPLF$;EgmĀ&E_%(Kh"\FitEjB9Vڇ0B'ҷkZ8Q"F Ǒ6;mlڙYwϤdXyYhP?Q˭bz?{4DA]W,ȂzZ8؋ 9bHBQ@l#f^[ܠ7,t.f~N!s(4,K]>BFIO^e<9orvڑ|hrҌq65%yygzM~N%E6uU+<\A^ٻflN h}%ϑO ;D6qQU<Œ5@"zj؏ÚhQ:N)T iz|ZJ}& ֐f4O3yĄ@Ꮧy&4ufY޸ijS/8h0xs2HPW Gj;cۯAo< Df^ʲǃ&1J:> 6*9FYk$`/ɻE! `"gNTXcTDk\qT&c&l9hJhIe< fczd 4z,r5iq7Udk~niD]$]ۏHCs9zbAp>Hj :7 ȋFTM(4q#4Ynů` h6,pd:sCT#x>Q3G(rW0L4l%H")}tH4fa5I=L;9nfWH U?'K4/m0XhY\9Y[(+.WhD,u\D7S&ڞrwDn)b|Q@烻eram5t@lK1׷qVU'BPNAAA;AR?*oE1o]I )'{Iqo$uM86Ut\@=5me.A&W)!VTFŲ)1z8-^])~@bWQ `J79g1#j{4{̂V(J  -f(כ ],7OKg,nRc9&-`KjN&<V=Tr[^VѦr)ɴY~kOƗ\m^[+cy{qo/m|   ōMj.=o vD "@2Mbrߥy׷H;92#f+5!kcn ]B|h}܌Qy21]`7L?a~T4aW:WqY_u_];yl-N]9!641AAWu^=6LCfZ'+.RCq*/}g^ 3)x{lB314m0A W5Ż{!xAC%^"o0c "󚔳'cY&cDeތ2 z1Mͯ{s%pܧ4:͔sx]h Ih5\ ]4SThz SSMA5mcݢ1iOGrω^薄ine*>+FsΉFUBELAHU&TwI)I6$(ftnUAIJWk=,&i6_4I5z8(:xں҄Tjup:*n v _L9חu,Kc=BO>} r(CgAwk!1Ktqi'rMZ Qz+3 ޘ 6 KKVROFhnLR"z"HN`:b=I =ݙgcl!54wh_Lz׶nn7mo {a4dTdk-$_@7 F`]bdaMpV$@}2qx.R<7.&XP&MFp3@ KF_L4uN) ө Di +Qp~pzE="a &HIL!nbUx߁w0d!@-n{l;m̍l'zCwt'`tY'ma2M:3*; V13H#R;&xD%YQGqOlbʫKN15BUBⱺ$팝1~sL s4N,z4pUz;IΑ)~7 jn_SI]}^}P5w|QMU=ڇGTJ}PNf!9jy_AQ^kTht~utRz Kyl4:~k~Po}X4FwzPmqaכW !}]oqbQ_ՠW5n ƹ_oZ8 Im~p<٬ jzy4wڨkyf*oiƻ:Ī&iVZUd5wNuQ ӓYi>V}#*qVs@_ʿ[ P*NAflöa[QAM tM1ެUQob:7 mt@F+ٳC SLJf3dY]4ᗣلh2Nʯ T7Zִ ]R#EUIBha|=T$N0}Y~iFI7{]ڔn|[MM3{=qh3T { P߈ӹG RNACDʙ_\_ Դum:<sޣ;kxt}ɓL^ڔ206B\R4RW\" H eB*fL䜦|VgQhcC*_X <S񴳊uR JWIԷ֎_٪|2%;=WgVJ+ |oG?"zWnLJMD?TܾvpspN' @% PYoZZ%iiU6k6$X i@rM EhlC^HQ f6N of)MxKV2,`ѷ|/Fٽ:E'd'(i ]ߘ,hh68l|֛CbBe,80fFlVsa߁lijojЧ- QGqh5#ln'g[*"+u{ v C4 #Ubܻ XzUƠ:}`}GJ" %g>)غYdyPGL ș,1C˺vI]!Z-$AILv8D ޣa^BWTw|IΆ<0OOU+kuػ`lF[C"T\ݦNXK=[^nnzzvmmoLэomu:gIeIA> riad:OʵΌPv 4+9׀X/-ڑ0=lɣQJGB "ޡ!ˡhgF]ijis4R;?vG.0&#l(׽E5#{0'Ʒz@ͧ:/2FuNǘ&XKDRR3Ttusc}ݵVw"~vb}ًͭl{~~o$a̹Eakη?<}9묟ougZ&{!lAJ꡵oTkԚ5x:DydqKp?U3o0g[Qkݳ65У[kZtbhQpEϏfMNVi NPpG/5t:Ȧ$32 `OR>bp~󬳵uG/:fw Qw{kksmN[N4dGS)89 卛K(o󿵵>guUlz89129oCnF* wS="\T C/¤?B 0H HyeVYZ NP$I~t|>K ]x?ry$/$GJ+!T)3AE>b2HX,GǓ F:_i2E:Zƒ)9LNMRJ' mJȦѐtU [0QVᄋX/Dݦpز&mq&4Aiq?պpv9Wn(I{')j-X6apehow; ,1 CΏD&0]zt|j| 7n:v}.5.^a9''t8h=wlgZ)Yz]_e ^ GmljΤ ˨+l_'kкň-^a}h ߵ07X:"t6._))G!P Zq4j"~DBYo+Nb=L.x۬5ـw`̏ٽf{'p/W0S?(_4TrAtlXWXт.SRk&<*B ʒFKGl{)O8QHaרU[5'qbCivpyGSmH-X*Wƚ/dZ b~*5}(8gWfS@ϛNؚdF Ƌ&_np2=uh gf?0_$,N~yTԉzi zŎxZ635Karh\>,r O?lՏv'ͫf@*k4!&=TWrAI;7J\/\*Vr$e5OL9T'+ɝ7?#y5G :n19Kkk64Ax3Y»OFiu6]RI8' ۫K'HT4)f[oCdqwtJrBEdal뷤#AW4B [Z["˞Ѳo`^KZ[0reQDyx.ɥȨ^&.@̫>n7(lEəJ׈hW^ůBA$ {M 9IT=^]-;9%ũS(܅kKyuou`ID[mt8g"em #@lk@!lyE3ks D&dsm!a@@ {BHG^ML%e L⇝Q2',?@?~ JJT4@R:mz%}4pW|-75QŠyxQW;`::=Nźf3j=6ݰN!/[s]ر\$Q~G#3BW4Ls,!#`CvO>lօ/m>S*6DTIw1:lQjJH"AB4 Xߪ0b(NICN,OzM>y6Sd-tcw o$bP[/i#0vg)p&J,Y2d齑Ke/ \emܬ9@K+:c+*Y4;*+pƋe?/EW@ܑf_OQ %19I'FuEVXK$9j٣i'Ryv KaMa<kH?a0~4v$ A|**U_We鏠8JJ?]ñ W!}x>v$de{$Cճ\6PH'{] =W˛!`' 0"U糔a/E1"6v% D ޢ$S5`!׷bш2Ue4"C9.GAR$H#H9Ǚc-ۘv,6@JG *8H߰-4jVj~h9ڝLpm7.s5Fh3+Q%ɒ=5yP!չ].-K_|_~'NFWg(̾P?#,|=ǿnf~sT+(bMC>?or*VXΪ'ʶK(cYG\G\ }WClo$(^]QߦƋϞtcz17HE"&HaR'^I6`"ŔDJu^>0+y'vSfCE[鈗=;m*ic&Xjsza0THpB9ܷ_J?aIq VЄBRO׮<8+C7ztX_mֱ&>li ۜA# T ;A34 $nj'Jmگo^cW\W(d: N.G/CW~5+, ȃ%Mn9̸.6K.66*y&f mӅYqB#t@P(i$o[UH9q=#ôIh@mN?&* 흈fU @i[a٨!;a*8kQ RY`}f{i&$7zSp> |obGlӹ3N4LJ/|[49ag0+3;jUmmp5V/G{oۭkGlayXRnbяӡ쥬04Vy/w<zHkLt`uL”t.{hanUs848cFI@7Ekqf4h,\8±-5Α/cBD͐qLzۅE=N-qDBᔸ[f6eUq/q0(^ Vj8vLs< hk /UO%/۹Ghy)?GMΗ${)Y9Χ+Ph78}2@UN tZoىr5ۭuWgjr۹%wݴ$xxBhmIiI^`|uڤA&@~Ad*@i*-HYq v k5&؀O߆fP߂C0r}`R Cie݂m" CH? .6n,u{|+_;?!@5)FiU v'{ \sl|J.t+suܫ=3\ns#-&Ѷӎn;\,NŜnaL5jب}_Ͻ kEFqa>tO^K  }+ԣfBաWԛ >z8zxӹ H3ySH;a}i$2.w˳b_WtR~Fۏ#ՇRĀ["mB_I N:it%ǀZVG&[qXrC:<"=3>¿w-\AXEPI8Ɣ'(]fɌosA]6;w5Jv2rLi5.QEcTѓ<R<_u HoJmq4j<>T8gD6 Lfҝܴ>F0<'>=8?:7Ӕ,\j+]cB^ؽZI,]549LMԅr tcnжV (lKA'*%=]Fq;Mf )0xvHżB#w9?/N8fbѻmHw}7 p:gb^ϵBXG7 z&ͧ㠼jz!0b7 {%-^1hnu(aƙuj$rڨZ@+oQq*SUS\sac  hGͰSz0$ (f]šp⽵FɕA!q=ML}`|VϧZm_oEW!I_'LE(_v%w-} )KN@Pc2\!3`11_¤Fvpׅ? 9앩h]Rεvh,, MҤR "1X%w-3籜1S'AƮ]hg7kzOmxgd^k#xp]zJL`R^dߦt^Qen *$7l\A#w)I2l.s U[D\\) -zV8Ҳ57d|=r3 /fJJ c$e,=ޝ<}݋!]|4|^eD뢩G$v4Wޏ(z{*uu΢6<)qSMlIW ÙiI@Yy{tRхx7,C)~ XV"b˥l':iD9"#ܮ)9>T^*6mbڻ1٠_< ex!/CSr_J GH7BpnEl5 Ao޹PGn}i:$F܎Hs-a<05 {xtD. 4H!8 S,PfAs; n8/0޸I}֖xnKk Ԗ 9oʟh-nz$Q@D+({jtqI/@8,kSNNH$@i5=@BDbO$R!%׬*Gv BU W}!}t.霵C _"An*N {)vNHQw[!u&"™ԉM]{+0+ ]*= 8" 3zX )cC*~WzIq !1H^^5v"5n 049hlZjDH*;#|1wnǻ9%Q?ufK4wNl XJeeXօ;9dIQ\=F)E;9apM9MHP2C#C$Vι6WkТ=Mw1b j4 @(:v\ڐ/@"Ya7_!D>2q>CH*y-!Ks}@v@ُ@vM@CN\yb$oS꫾u8Uh1t^@s9D6+G.iuI"q4@ϑ==af8Q#T{+LYdP S#i``$orUNqƪqoY]>"fX!=` LfN I 0L` |cOУY?}E!~IM\Ʀ:zk+IMXD"˲K !O}dUpVx۱s5<i b2Uņ܃8vpIf9t㟂cpZ7Pӡ+EU_|.M(&&6OdA~EOemB{ɇ6wÒZDlODnXMS7rjF+ Q :H]N=32=p֙'ӲK {ImÒ`{U-rZNo\y5~ i!>w!9`j'$&(*87O?^%*Yd/_#I11ײt%}N-=򬜋\HqV :|y-LU:إaXsP~9pN,h#e]= Ґ m/CJ;O70EӠuɆ/ng'N.r@[!1ʵϘZJ88RrO<]9ƅiXwt@޻<. UCnu Â-Za~ rع53^ӝ ՂoT]b dfR^v "Q#K:qز?vɚLz(Z!0_1~hNm̿DžzĶ ;1+lyLRy=8>R]<8H߉;Lᴮyq>7P=ِJWۊ0kES0R{+ߩUУQǨIr$gZxvHt;QWx6c6!u2pqy QG^:¡t >Wr/(Y HxBaG[GĞg(-S꺯gd3/g3c 10Bէt& fKh2}f WusNYQ292GDߊ.H;Q$ٰ'1z^i.c}CC8҆, TeCmsL fwg{6.YWEqdШpjwk3rq &NQP⸫ ΈsX *|K؝19%_OG_j:L_R$2muk7f bK C8uZ߿+ [E|(4ӏM(f[(A8ЕL_%> h҃2LN4 6}[*Ԝ*dUI4Xï%XMg͚&>Gg*4V̰6ǒUjO'xBXQLLwt}zAJj2P U~Q~;p̩m[D La*x(GV^)JLyu/֠طBR(ڝL67T]T|t tE]N5,T,9Qhi}5:;$NwS%kv݁i~9 EÓ'缈0d&vOO 0fO]v芍S4"Yu,ܓ=bN UZtyFVtF!ܽ#0aj&^$-Id`֝|6}Q./)W~lOiEC+W+iwrofQއnY\@1Op<#yI9]?Tk9N{sORO/T~WnhG ?onml77ϯad)xN'Q++ B-l`1lhk$ǹJ𠺿uAl7R~KoA6>8?oū_+ iItD 1J?4R!Q`0~< \RIvdU]Q"}Ԡ0̙Jq܁Q߼9ߜV$(Uq))(XׅxLh9G'7K8tF/al;W-SNgoT,)jC A%s φH)X^_?"a60#D:$ZړއZ wz *qى@ }jB;'4'Y1(h$NTl ,c›kXhhגZU{1wPr(d8\/~w5v*Hqxt47A(]oIʯ@e6{,[7mQ0)P3' wiDjZh{K r#r=hb?XxZc0N9d`6To5])j i^p2yabn<JKū0%EfmHn[9Snbo`&|ǐAXu_)!{p8aekKuѰLKȀG2oD7H6oG} S:/cܘ K՜"oNt+srZ1Gp+E-Ur4foI U*"r8Ma~(2^te}GUn1 )%+Rjc|\1T{׳qǕ)6wV |٭+?1H/):3Asܧj r ևZ]QpR}K>Z4"NxSX_*wׯ?b^-@ٳgOOgK=-:I?umܒyVj77~W[]6M'nUOomGr6Lq2ӅS?8[xz6eskZ7VD@? 鏋٘Fuim ~YV6y4?aQB.ݻR EVCE߮?.՜9-zmȀ@=W>6߮Qy&g^Tv|o Ka_-¦}c`_46=>_z٢$xV15];x$Փ:٘L*])-G:SJi#GSA4=4Ja;d6qMIMRG6bI|iLRn8߆΁U=RmЁm3x k%vYQ)LSfPqn}wӵ6RծŐ 4[3@tu#X'yXέqN~:7u'O=JdCMmmRCĘφ?Y,ڹtQL:;9Ta1\_,9fNjg[jcuYDl\MJKY)ËN#i.Z޸oүһG͝;h(rϝ\\Evr6oY؉٥ ho_y |no۶E]tv4[ӽMsm\t:85D漻!]^n+⼑.wyғrQ rmǤkXCsy`o {<%,$LGZ!XAHSާxw}6r>oL^3l暂妑@f$h\tnD;QjX7 ,ҍߩJrr&(( bDsvKY} GʃJ)~o:qO+ZUk*ƨJch-<ceWHxOq1Req@TZ 5--;iB˵i?*9Ss\)- Poq5nv IwWwl#2IwxH`r[tHb9HkL"CUn8 "dE$D:W<\Y|>"MbL)Jؽ䉝x Ǖyqv77^*)? gcwRzY?noJM|&Fr2MG䉌;aܔ O>7=rȇ=$mN`k5_l_2ɂ2M)ӽ^P)Ai9yu?"/yaixc(ƽ!;:nvLI "YKV "Ϸ˰Gr`ד0?4A4ypjh) Pct>iV_sFzb:J<*SIljz$&]N#Q22;{C-!)s`1% k`=[E'0#ȜTA:IouTQř;yrUC x~a!QR+ڣsjŽ,[rˤ B2E]'O\PP*l!&8x(// 2dcK #€VC>GvDpc"NXZ* }ehyb1̓"RYI=etk(6cS8;隵sxd-EΤ7&߇cOF~!}kY,^c/Tanϋ HT41:eh:͌bpd4tX<#F$}S P I>P#lqꩪjU;=6iYS8zSUЪqO5VB5@CUjOhFmcBJPOW?aNj0jCIjm| G_=­3˳wڨba:zUSoiƛƻ^4iveڪRP @'ffoف~V}#0qVsAPRygfSфkŠEH:9c=ZujzJ傞B7qU_:v^Fhe)8**g6? ?BR[拖4,oaVz !N>־ǧbھJ>/U/rDUy٩jjTON@ERKU>߀oH`%{eu/1AJ1~&y*'L;/e]z# DegqWV9 ԭz)w*{X>RPTfx!:ǕZW&RYDDױjjge4ZA0]^?n&v?۴6W<ϧS.)H~pG@Ǚ:cUYҫ.u6\h\.gIw.GCV~&j'uB画8C(K.w+zKRn t<2#/"#YD8 p2x__MeǙ9xd=Balhx!]7Y t|j;aaCv/d6=VpOC=(MQ̙7L+w.>f%\/rs9eDS\ @lXJ?.A_uF@{+똝#08hhl`֛m t4_>"HGy}hFrBܖ +(ObGh8=?!.@WgCk P~[;~tW{%^IWG)(S@f~C:¬1j-[i s y# 62b*s}2IҜ6lBì#?}emE-Ol5:G vJ?U S`0D7g"Vh>R9[JFL|wɂ?/wdzBJRN_V%̧exG%l3I08F~Gy˷Wiłrw;˓޸դVWBeܟs?s?s?s?s?+??=sX