#!/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=6c66025476cad98d3ca79be25cb7f6de # 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 i̊Rh/ ah` 32N9mYPFeÒ="Q%13T2X%^T4!$)Ž wm2x÷V0hp޶o\v3LaƠom]ݡ ̼٦㰡ͬQp6e: f q\7` 0֭Dwؠw5 |5.徧,w] mcaVw7l6ۣc2$g9ݾaݚ#ve[s2i0wFK4.&nF,HSqFfׂG :i0zƭq ֞ ;[D/rǮɮq1Vt~`CL;&3\6 3ϗc"Y״ȵ:p4`q< 3~${wc{9K3pH* um&;1 6 m p`VYW轵y57d j5xJ1KU*bfvh,Ug8৕7-xukZh@22ܛZ뙎 R?W)Oq GcN4Ғ_k[׳[_Z[7jE=ϲ}V2/\w_۬bIW)g=ҟEyۯdN J=ZW;?휴gԻkoZ>ծGf!4Qg,h1PՌ0y\=~Y: +)k3(Ϛ֞z+^/51ĹT_@cP%&?qYqqt !vKWy-k2"+8d' A:45 ̋-:5Z'd1sͣ?R@w>kzY @Hdjs'vxjTC5 Nl˜qv'֜tmӀ|߫x-k ̓jJ)'CX??GCK`[{zOÐ@fapT9 *_ dO-jj\4K*4]G*iaQ&i`@*tLD_G>ҴҔCG2E؛x> yjcAyQ.u(EOet*AbrQh2zg_%WET̾ϩZhm,$=TC~9o4ʬYWБ;Q:"_Xe;$G)#gK:NQN ? M$eh> 6_G3y7N7XDh5i*Ebc0)r4/x-xSeAp2;n ->Cisb}|aš5xkqhp#G W&\cWR*#X 20l . Xw\YB'`4x 4MtƷ4(eeZ1xL>lT+RuJ)Oj?C$g4)#T\c1oN byHa,A&%$K&N, dJ|s6&/zd#Fj 38C&>0|*vM4ⵠbRGH& y 7Yu9) ^:)*Am,Ja$Ps]Mr̕'eIW@_ BoJSDSf*aW -1=ȟU_G5Fb a}Q{TjR"d %7BZ18?(U2734ijZ6o@ݘe".dP znvOU2N՟T:H~{tz|^(7D(^.e½O T!F~6"ߕ,m(0x#/'\*+cwP`;:4~ Gؖh1@Pd[@R.C>{5T}B`Xب{yh.*VҕU-.]<&/zm!漆)bF'婏MNr Y>ϔ=/xǎ_;FZSg근3|Zt^|OV} O~3uf2ouW4+pǶVVɥ4஠TjN*ke;PȽy]]W=O>}Zz?Ϥ=!wZgKGR#+X -#D3b={"IPs ^|}O^Z?:~ Oozw[ǞXFph|pnNJvpV/s|A- 2j×ؿ^2<ۧN?藳_'jחP#(z+Zi# jP>SU*fW^=(&vݽ);{I$!5V/sGsᦚ+`ʭ6.7G]P~ ̪Th~2 jt:ݐP9z'5B@';fc̀i.=)+'ϕksk Y`с(T,򂉎Mv4I} uG@G6k l.h[~9;:=:WSSc5S %G'&^xßE%*Q 1LIjz}H}Ag ā#tFTB ʩ~#hՒR`kr`b>S8PI_ 'uN^Jv dQao;7uOwUe!hJᠥtpаo'36ZwxQg/FWxz[u9(I/{3(qO H~ـyyDGY'+:"^rIhF`Ei/L}'?/-vRӕlAEvp\l)J,6Zg2R3j`/ t/\SeMm xvR8ryadV0__?^3/hujf37$߼kAͳKaDsvJP*Wf .d*, e_GmhMdc (|"͢vώW/Uq%˄nƟ@)$@ `dJE7Rui]iU3Q[q>g%F~Eͯl ^2hQvjք-fί#6%[3 - L m)]d45lTS]V`-(_(}-SO${f MoM$p ="-]IO d 304G,1)Ŝ&S+kH,:7FYr=VjtaB4*ճ'<5hZ^Wn#NG7w^Xl` WH @U@,H :2SduHƴÐElRμM+𢅼[R0%ܽu EDШ:De[mC-}鱔/K6lc4NbK_ڪg1/=F_cͶ\-_Zڧ1Nc6MNaVfE(Tru->9 ` p<'}=ᅭoPnb0K=nfpr[2IJuRUľzts,+x ֎F-"?jO\'iK{G$39:f:~ mM5}_6^뮸,ӝ ۇ ީHr^Ld(T]9 VS_m2HuX?Mg8 7.V |0APXa!bCD!Q 2Wn2e3+@&䓳yCᆼYGb)NB] vB"p@J0tC"nQ"eyjQѪ+m&z=hQ_v@*R<XJ_כhG',;a r[tiOwRcT2/5|~NGH+hB2zUo)jƢ Y˓hwS;!07)qv؇D6c.X:7ߕ$|y$(ˬwx݃!uhрK~ {T"^a Aw`Ez^V)nz|a)2s$;]S=z$÷\^dF?Ȍou*~7vMT\@#WWY2(nF?njj^Qd]Rc֕W9IG7C$`SKzML#aɃI_ɨ5iBH7,pq )oU\UøIJӥADlQ܍$}e)<][Z-l=vV)%NTTU<٥ PERTcN\;H4 h|lBHH'K1\H :>4xL{`W$QB;6Vތ{uzY'&+UD.MrIU'8@]͒~ai&` p�&cB`b_ P'bո`)4i\.6Z-x2knr`6'M ),ٙ o:pa9z@H(ZЋnD)]躉/%h,Rkr 4~!KKR*DR-LNBu 3|Towv#wTǻk}ߩԗCgaii1M4<Njg羂i! QmnҗG5D9Sm)\fWJEv>x#`iX2'@ޫk`vGzLch4X3pzYHomDj?΍=S޲FepُG~9fX[+sC!|_¤RWuR OBŝ2d8  mfS~ p3 :Rbnvʇ9AG2stfBKVbEt$[[-E[젭H=SW~Af8kg;-L=p2ɚKQW| P1Fj)U.vg3`$ KEfl3pPPHV9b6qjؿ[mEXk%eGw\[ނYYTק i¬v#DD*`TeVui/빾'YGw?O!?ZJRp=HѯօqeFCeGr{# D7Y,I3T H IՑ)^}ԚPJqnm"!sI{[UY4jSMЂjsիF(륾lZ1:hrP AŜ2=͗ ^A.`64Q.[Jve#ݐ&QJ 9lqeҨʝV4X$14N&~ \O뽝ص_b)u{3Z@jdcRSg2]C`=*H/u ?EPvul}c#%Ր~\s5k;ݶF& 釲 cS,4 #x@8J.5vcsO ļ9V?kUЍN}4^igh iIyQ07Lޕ"bW! mZ^3 ֌BodBq5v3D=B/fR D8yՃBR26i:UrG I9.dOSOHs1MwNDjU]Lf,(I4hӪL@ƿHoC/6 +Q_F[|Sc|HSa(vv2 Mks#zJaB=0uwuҹЂk@Uh4_'@hpl,^I ]4)x3eDjFgy ,ysNB bv2t&hK$E;Q[ )H!@4y'f8/4]/+ ;|>Un.i|9_aXNy/$(q]?tSyOoCl"'y1 %@O4VQ(VxST[ ީ~CF}(ۓ:@V5o"wuT17JIh(1QS 4ׯ(+  D䓍)l* ma>kn+GUNwD\)XQO% 8" /ǢH3Z@s.eM֦Ӹ/olFA*rEFU!,jās#ɶmŭ3b-gʽ7%RႧS+ lzhOCƔ_4`B 4UYI呤 Yw4SxZ(b)__AIIF$vm)A?Yv,)?T%xUlv^iݳ=OS;Q޶5\nֱAwGiò'.dN?.@Jq~K3rTRnܰ%HM?=l7vD#u2t*GH/PXEvB !Wn>!{_v] XS? 5j{1rWe%!02kA5qt#2E:g-JOEXkխZs\vn)_MS;a|5Zc#=jqT=h>22Kkje1gBaC; #6;ZfS"A(( ):NkA%oH{xO=A Q߽[E;sWrز+&/p0=d^);V_рߤC$ɀlĽ/%w8 {lMmf:c7e>]Tq菃_.?ly8[@6Sa/ l/dgOP3[rv>"e賲6Pv0BJQ:pufΔ Uĕ_6:jg򳿧90P]ؿcX$@ Vu*_KK은i 1s%i+5 s~.PudrD%{\R_Ď-c$}׎o͈}r6j¶묵/QNؿ\CHgNR"L7;=; 3lK1eϸsQO087=fj5ÎI 3:jBZ{V"Hkoel#r| bg^?JB?؅ŲH~YhP~?nŪށ-Mh (eRQ_O_ 1Cݣ՝k(S-z}._6`1E:B `6ryxJò$٥ɎN~#֋{u6%pxFZ} zj =+i6݋OZ[8B¦]VA=#)rC@oӷrKK 9G%AQpf4 R~!iě6ڎQr^^8 EE" $@TXQW'U`%ɨOdn]T@tן۞a"Ÿ{4n5 B UR*ٗCG BqdNh/E`^mH>8kq\Y_}{W#g4+0[.΅XtPN =}n+);A8n{@@9:8zT74GyG'1 iSҮ+w?oUo!7Zo r2g%3{rN؍m\S`Fgp:)CSfȣhfh!N;^)|[}4ܦ$a u.)2ձps߲zeoղ1eF%OO`0n#f̀pjn][ЌM؎5%Ń5t^] R9x3lSJmk 4̫4w3VcBc$S@44cAi# d. B (2'UC&1J]o 6c`Мr#yğPFQH;XR$qEvpX9Dbb%Kn vNI)XNC y2u\7ǺH6аN%B/n&>,R^\O <IM7&FCzW(/v*:@73$U* \{NISX +~K)07<tΧ^F*hI}ϢfS鶮ahJH,BBcfVLሆfsv|]USbP= LzX۹q2kEaT4kZLb`/gc? 㫨[Ydho s0NZ:pW' OkfF9礅a CP)1<~ 瑃q@ɹkVK}lTr A^BF4CqK<,! . I^I#]b uⰛBVTF) ~iN&<95dWZѤrRi3F@'&W[~i#xt W~is|Td0 8@]hФY}]@v'D8:)~6ަ6g=>ㄧ\R#f-5! ]B|{)x(G;ar46M;0΂|>~T$aW:}U%ܼcga)jЅ/#G5,"L?<2T*;YzJ>GCfZA0'c~EjH7N兖ئa8̟!ocjq>lO4R%m5t=5=P >D§.4wΠ_p_5T1nwFe3t 1/~Z+x+)BJze;(l^ yZc}9Em|6g\ 4_31-7EO*z9(f={C)ջYĖϣq!RWd_:'wS*%}4A3xF/7 >(17N{Q{ѷ0B*pnAjs`wXC[W ] iXg:#pgmP!`}4</i>X'qܗ><s&8^ZCfLEC 8E'0`M`1)胷u[T<7e97- 7ӷܔU9! TaDg}Jd"N8/[yK0K[·zeSh@R<BY8XrKbm>鉹Tj-N.F,]"W N2$LZХ? '΢t䷵dBȢaMw)ʩ}kݵ4 dz667pФwoqkiՕ;o?TKI\9sPg=YTWתma_ko>~Pʯw~tTۓ1{^oߟ*w/KrtX%n2Pgq[I2[>{}@;xPzIExDsY:Z0 Hc$Dh!1AXSSP#R}Ǔ>*IR,˘\P b l;#iYE4+@V ,%Gt`4jwpȚ[=@Bﯠ.ʽ!.VIRkIC'!R溏eN^T50,4 xcmЄ D} K, uGX|mi9%1:cE'y( uI]ⳈK& bB2Gaj]Qp+y4`t>V#[7nmaaTTGy\UO 2 ;LDjZhK ӭC~-< IkPPU/I@@jX*?)q^֕R#z>JzBvGU-fnVr!e7C2ءr7P '$KyQ}k )#Sw^ey,)vJaCR7a0&os¡Y%Ն,?mVBXIIxQ6y 誨'[_l؁*++2j]~f-߂>@AhcFRIi@'8ZX[Lz#Նn)Zr3ib:Eb641sa0ğy2b2uhZLQLu>X!ۉ1*SlrܡF" 1h8=>3F#ݛBpL|yk.;T˟u8+X F>w;H̖(W%`+ "7Lt649OmYu HvvosYYTY)H}_+q[&әTG, ´w`Vo0Uc?C9A\QLru/9.Д2Rᶉ)킭V7A&XỦHOьv87KjyLM 3W )gTc*f4nƅCb@GĘ7ƴ_#J\dFiO[k |Dʲ+L坙{GТ5n<נHWx㠆Q Rl8"0S#9;*$6/On5sL㻗f1oR:k%mY__]֖??eZ2iVSzG9I>†#4>t; gM$0:e7:7Ee=|Gs'f2h hpvOXl"bxy\n<~+d#YIȇ|NC-ͺ6A$Pڏ" -/E1pR%s)3^w^q$bK0SOY" Ba pWam0WbF=GOAм17.غ͂@xLq>ϊASD"-'?= | \a{B JBMxM`אH x#}"I}R] 6řV+sWP bBU^hu%h;ҜGmvw#?'fu˞2l jJ? >߮=^Y?rhQ A#lBC~D}H^* ']3%b7=[4ہr\ei AI(70יZꎮ]]Ys钢N)(Bo/z̉x sS!4@*xX$%džT,p|ְ6u6@d&vx]sl˟NA q6>Bsy3&SN,@ ?{="w`j!,wM{W{sEm>D>55 {; ~S&2 s 1ӯ!l7\!ӊf.LLQ+}MՅ}4Q( QWqg `*f(^씾(ET՟FiG$ͬ)ײBM,nW]ܴJ &TX>] ib8fn-nHm*{'ZEa $!^:CbtrIW*N8%ˍ%} &' n[Bĭ0􈝄=_08YDC Tܮ}Wc d&M?3äX?89!q&w,dϜ 0^& k@㡍?1뒏y~M ~n 8K䳔.[P֘IzY䦸r7_BrߌʻӑF 7c s6@.ov-b6nJ#?ZQ.Ȍew~1J%u>(t:[yw1,lPlř/5(jM~ #,%$ō]b%h& ÷dIYm</#JȢΝ`ur$Ww(p L)(\nʐl;cv3 {A#8KL3YrzoxgRYċ h1Wb7KNyh)_ 0MLee>;7WcdChcI~#غ"Y-$!V'3Qdɦ'jR`ڰMal?WpcVm4#KZ3y| ANɀV8#O`1H'9I9p΁M[s0Ұx;%EP-Cv+ɿz[^buZ2Jlrt09EYF k{+Qkh:M wC۱,ckHX-h܃ѳ\V5{ 6VVtx~ g/ŸG x}]M,oQb 1ߊs황Bh4!dЋ IXTq~L=6u-ln3 HӤ nOHml QsMw̨D$e,õcZнP>;Xv!m,{j0Nxa!#պnu㔭vr{|oDZ`&uQ 0^ݩe<^NS&%sm&rP9={ j΀RO<+;*.!eScHjIZ$(ȗՆjRg7%CvLo;9bC Xt4ZNOoI S{HPݔlX}`V% v!t?(Vhy<%b|&a5Q\,WdGlr ړ$qc-k64k-t@}yڣ馯7cndㆸP!Ų70ҽ6 >9K!֜RBql_[?zݬ6~J5q6ZZ=I, _[ސ|<;}.9P';@oD2{[I]/ӦMyӰy.;ܱIX= SrR 8GW :0ͬyWzuMZkOITo1o^DN "U0QO԰1h o ]E"(6&n"_TfpX^F\"Tl ʫP}eA=W'5\0 jpV(4J+,Gɠ}]I<t\Y[G74"X͛ZϜCO!oErZIżٖL3[39ڱO6 g=P.fCYS(mi2X٤TLZ cT[ג 1-_q6*(Cn}[jAh@P Զ#OCɨN:l2ljZ:2C?6np mB ^yL_p:">rKFnY"N叵_nZ0۳±, n);"OjsqC2XͽHytxb!tGwf>6Ļfl>a;}Lλ ?)d: 6Pt9ay0C9=j6؍#dzobi%+r}O`NYw=]؛O_QÚvIQJMNQ? p$Y8q*59c$~;M@N?@clC흈jUR:üQ C/E5k) !PJ?3ӽI5b7a|>>q*t3D2u  GNؙ(ayC/<+=NZREA'72;㽭7ͣk{aﰔEOO%%*DŢSC;NFY-an|5 ^R'1(\ #qҢױLeaZTOFQl.y8&"(쾌|?<6sV_sbjA`yQӝr6͟Q;Uj%flg}q*n7|fS "|]ofjS6Y-2 fڛu4wD(ʥˆZtOwDs"AXR;DҺyoDn;_sC`NZEWQT~çl5:7)pRr6NWs:iMtt0LDLi#P?:Qf#>~z>M;wTVv:&US~&šiI ά[q@?$}iq zk1&؀Oކ5O}~3QLo!S>[xf1f>wh>[M3sd?zQnz8V[ ppw\/3.0EtYZ> ԫ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+1qy4㵕;oAO[?JwB l[o @(q`wAP$ qVض-4ibp_?PոzPY['灱]cp<0Ⱥ>B.sPYY ֌ΊBl:nz &ĥu L N)\R!NɌ pMK:G\ozwİ GcR0dƔ=>ei%O;Zk} ~@oM8^$jPNuK&u!҇*~4]ÆjӧOӭ<6no/~}Ql Y; \gus4o`B7kOVRw|&ҼNtyQ qiU=PۄJe}%NQ'~ߍ.bmpWWVV?|ws VS6jH{Ng g._猯R>G+ e=9R~ܮbnD($K :<*.L:v!_eFP)WKG_OGy(v9[Cr˳s :!-ws S6rgZS]J36@pߩ5 U0)M=V46AΙ(sZ3L׿|'#h:_s٬D؈HPhvjЃ?17m𲝚s(X4,imRy fcpﺥQ Rj˨ʿ#$㭋75hkKOݔNm3}W[[w9#9YCE8>=ѩZX8sQoH TejDU+^W&2Texn&}m=}?Y_ŧqs㨶uVĴ tTdǏMn|fΣN 3kZt%uvxHEtCKTKE/{+q>w7T~D^uF ӏD\iq}HX *~Mk@Z7oUQl2:ٱ#̗~}qT_I>l"9?B3gk|2mhkUa$,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_]([Y}OaR]j}<;dZT-?wdt*nOuڦŨ0|b"`B^wC 1XMغ+"$y IUVVJ!bZ@RÙȿt~N5A Nkttbj6bH|%tNDejNWĩ3wkp:8וpH1h]_OǞ&SʭHuޣꯅ 2^XQ*m{OT꽷\F$;BFe}c2v96۴to08{ }/seb4MP]ЭVq[ـCLvKPaӥOV>{ZWOyԇn Μ}w-*٠S lOQúl2J*l<ۋSgEWxfkP`p.қVKp'ɀN=A(N%Q\ձ-CK:W|ԯ7jI<;#ܰiOӈ+$BD]aW v(=2dUNp kދEFk;Z|Sގ?KANB2; ޅaɱvc0L'E;d2lS9 7l$[L`Nd*\E, aTh}F~(n|zV9U4Q9> 8>%'|AjhX\Z}\$YdA̽$N %ZٝE:v)0Am) ;Ɉ+};'>K0WqA3NS G]a AfVA<6'$4;" `2T*H19p昤8k7jXSόhSVU:wdQzzZEUÄ:E&"U$;0EAmMo%Ӱ3HYA*+J{b70}N=&e+F5Å95(ϢqtÚ**N&g|Y{IP>}޿A|s_6]d$5JMU>pL7['xVWQCmx0T @|WVMypi)! YN .EЫ(n7!Kvkɸʬn4 A1?ڱkqUv[Lgǝhjc9PJE-<R OY,ʪqy҇ j`Q%5#Y2rVOD2QSe 8n)׈jD of^geFתve}ofߦ>h?yuZkɤ Bp\F@E|iF7>:5K'hJ4;pq NX.G nK筋-<@ dF9[lf͑̈цu;a5&VL]x#Iu^if#ae:*1g/ KELgh+am`4%-ĸmz 5uHv1RTx .i3KɤAFpڨ%DGTKpLGI{)}:Fc)ǽ ;f ф w~Jbdȉ(!v΂/AﰠL}$b 62DIs`1O#hǢs+<yd*) 泵 }Yu/q$֝5Y {;K5,3A'}R&|04R_ٰ.}'fnƽ6\ߤJbMG~K]z :#BX /%yJӏ$6- RmDo+bVn5(&,eHޫ񦋫c_ 5eҚ޿!ܫ%@#?$ے@!!}捎 ;LNҵct_fNXW0\5AI]4%{G¡C8^;HӁ<[3JHDSݱزXs5u` {^F?k&ͨYÿ] Nȟ 4D8ͤtm'4Uϋ c2rD>:EQĝPP91TFp@2+[$cQro>z뻃79e݇1hX#U~mT5j^ؗʆ-VpמZ.~x5!/#%vko$0FN֠CUu,|qZ!3 1[KH${->ggkѫE{ExEݒ(r\nSE6Jn闵Z&ܳ.4#ƮL@>Kjy?Ǘ 'e ׅ/#AFG>׫b}bzjz$Ug|]S%nT_T/}Wji[֘WL }^nt4`TC6jimu ]LKOɶ紴i-G~Kkl-=N~S[Z[rn/a/ b yo`s5Fa3}Lg9!sG|֓d܎ɥVB4%BU΋JL]XѵKŕ*#eC%E5in!ؒ9t"S: f4RP|["ZۆPd\h~|5v>aJmQe)VvQtоN_t,t(,KUb+qi8jZ.ܜ bjatYI65^hG,Gq+%y" ŵT[ő :<"ѽ']Jg-/7_BS2Q5Z43lըY+BoYMC[<{{rj6ICnUw$q\^޷Ir#/:cI}̞SF`θWxJ=E >OqGUy pVR`q:F>`p$Kȼi/n3;1K0kKfFUCxGIbo&6Qz|f_:V7-UԶ@9ęt`M]eV\?n;D-M #i}yye7~!fyR~R <% /I=xGiDm۹娋 ЮڥՅ{;%`:er3W[h_ӵnd~P;wLշL9&?gRfh^.K՝=8Hoơ_t&RDB:ɥN:ӵ">>R[-g6.*09yM)A*'OV/?[tr?^Lty==][~|jVONx&%A> r I,akW8vl kFhYnn56Kv̴ЍT_Y R2?-wIM_9ԵwJ8<YdFvX b{ ЋaR~ê.󤵾F[Z{gQڳG+։郣Zh ac\%'7S?xza,`M+qv Nt ;I3%zt)\qgCvP`,ṩc).z8"jL3#YBw0(e,NQ({mW⍛3ݝ7@BZ;'K_ >yh*3e5;?_"Wl?I{y1=qsh\2,GUaD 帼P̫>*1ؼ-;^Dix\yO 4*hW*zy!6 J.dgJ-YzAU u𴟍 -,y.~Ld#e^vd󢨏BPۛ| ߐ܀2Ty =,n_Xq[Kc*`:a+aʓ{A;%;A M_G=X_K^E !`k>~|ASyɍN-RvQ8HzF Z^9>@r~*r.0Ck.˥sk_qq+Ąr'!Q>l8Mr%ԇW393+O1i\Ez"N9$?bmP=z{3,+XS&ysMx`$[& 9N17@p(J@Sj$C r<Ymfkc|ë@MG1<[D'&T6JͧXAذ_>Zcgo!aАECcKGh[Sc)$? ȮkCt>OmhG^0'= 8'}[ɺ|w{'ɺwp*cAu{}']W4O;,<ŷ>2l%\?j~yNg!7{S\:e~$`o2 D||˥ y& .S=( n'rsiL3LܟOnO~ۖ_MH+`fT.l/{/e//|N=hHئպW|FO'{yڢ%)|MxDrr7]y.7rr.sG×e~ U~2ͥp)zs}>ws}>ws}>ws}>ws}>w<ͬX