#!/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=fdbefd1dbeb1cfe072e84cba3120ad2b # 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 ;is85{jZ>㤝-EmVdI#JN.5D׼> Er餷k[U)x 0Ӳw_ӄOſAſz>A]n=jZHk|0!߅{nw9.?vBVՍ 4 +A xv4mrD\E!e^q9)Lh=3Z,x8$ez*̰Bb<HuZ O3IF:R g;̍hi FЈýe&aq,aH#53~XQ(@0T$`#5-C/bD bA%xBόP%g:*,PT/W(Z VRՈ6;_.Z+c# *d4\Kr9F1.rPG|h8Hid |8NU:MVcuzQ%LgK1Q%L\ΪdvNߪuc[!Ku dZgB&CJׁJke$p2 `fȲJ*@DAdձPFKi4*HG u`W `d`{Fr8[m.WK\fc.qMY\#E{M&3 m)HxrdJSRY,V:V`߃t!,s1Ϧ0eQ|(Y.!Bɍi\y%Sb^(ӑ3^Ք lU+8nPuW*VZEtPMjE7P*Yn)C=(lX.LyimK%mZ9737tJhΗZZ-ԩ0Yχ˳?NJ4AR<9@)p')m< bA,^uTbBD%_f 8_3=vGm\AU)2 >eGիX9;->3牘AU/d g!CXǫ:}_|J#/#|Ob(xAoB?&PQ!P)_'vam\F6bBNI wPy_k4`b/- \( Q5%tq!TDzcta6Yx_C^85zǨ6IhXjV;ub-zGZ<~w& ekݍCk}gنMGI !ґ"AF?|Qxx=?^Drn=c ' 3af:adg)EI d@\>k3gˈC ֕ORC6R7a]w_VNe@,?4s"_UCK>O\3Xh?R, my&ǵrk$} +Oe3ꀇ ?Ԑ_{V ώwvǂJeq!^> ؏]FckExǛF; 48Y>m; ?wXN#:I,a2h}Rv|\H0)uq`R?b -mw-1B8D}q´v´OɃ{#!']èjrZ-KG%u1С^u%`TVM.Zȝ΍p J"Pv6x_aC09X/1 <@YbccMCŮbxr/Lq\"d1 UMYpdwFqĉ=Y}[|Tjc  f;YW넂eF^e̊p]z O?T:&}"# 4X7fìS~,_6<ev;:CEj Srn!MA9L^D~efxQ;iD!Oqݐ;o nq1'-g腨6GyY'&ހ½15<(/Om'"AF:`%̜A5U#a( ֵt&#I _KCu6D~aCK%L'yhW$v$#wBN$so6q0r2#MHUp#@d(ÛlD9$`1U)  sGB0X%V*H*PTJ m68Eʹ٦TCW H kb(ǯggu. $&$V FD-[lF#Zy3lFt0wFX&oII ȻmQ7Up䡖`3^I>(_M%·>az*+܅ Ǔ# t\Wϴ{uTmrRe^OsĖoD +$TGdpk\_O:=;vO pT8K!D^($EJ+jtڭim4.c:e@Ov5hݗn_2;`ku.w )7Ѽ~yRRbBZs$fe m4?WFL+?蚔1-6ij/Mf6ffr-gRsG rMAn7ިMO|O! n/iWg ;F4;NRɺy0L֛ .hv'i_jhY9:Oj0\bWt^n:x}ψ'H/o&yD{f&8K(~rә8$LC",IN3>7̓$B&ѐk RRK(;Kw<Ƌ9yK{+ wAMu)\(jW~2{أ{od5Wꘘ+ZF |ŋ}t=3M=U|V@8RFfGSN6Y%Ss__s%睾i $յ[TEyx!^iPjeWPc!TU%,K(yjK `ԨJ8rVEX^hi!55׀;֧9}ތ2dt"l;`z,?LEW'o'(`$kQg49 M@ :CU[=LZSC񏵣Im.Go("HJɃk^Ul秴z5arpJfCfnGFP$D;b ڀonwrD;47[(Sf!JӃfY~8yTP }$J6? OAhެkoG/wV!)؀Ei/O+]O&(ʫP;\ %xȡtFl.C2>00j̀g҅&ϫ9siS_ pO*{@lRkMOeqA4>7^iF[s>DP( װ[(?o$ k_6  7x]T=}zo!:>OuCIA*n*Ȥ<oK~C!&ҵX?6fBB(+z.{P<>1 p|~Sn~26pLn$_l .ȫE=$ fALzJq97웳pp5;)+୞x╀%=rPvA#~S,bH蛂Td'ZY? dm5Ԗ$ZZE,?B(R8tm[mn\?X@g tH-١{br7xHL\T"Mfg|[ml &ml=yZZROj؉B0^š rC(jV[k@۽.Ό0%M]2 2=1whը^.9D1 4B|-|8EF`JQ!E)1a <@) L/;U1PM;!%B&phleKhX@f!gHG%md4YVd;+t0Q|"8(PEuJLPj(*@YIp-چu#1@5svqmƟzHzɳݮ | oobŨh;|D;xieh^bIx1R+Xu%FKp!:OUzQ1 x JG [{gzopbq&2QX,{+GbCo[r!N~_#Q$YČp!eҏa⯪3,JBDcɼڊEQT}˷x|+8\ZqxZu%4,jP`MӆuUOjz$-:쩵ۑO7O#?g8wy9gcieYj+zwMւ.9e"$Ĝ (bѺ]ߺ0/pи>>4^Rp?g h'T3j$U U)Ν()33#rX,V-eGZGb9 D5[% &e*쟲) gilΌo-Vh4$`kʪOLG&H\ Y?J,rd(~}_CLO#ۭe',H=8['M{|~jD-.ܶ{0rN ]/ t;SR!mALe74p*gS4<-"(d9V0aJn6nm<{J,Ax}$TuSt-2NdH와I i7R-ZFe 1$dqϲX9uo ( );jnב) r+`V;vE` %  |I[WH wkc({gZnV`,r4Y0Kyyo.{ |>d$9w1 j~HnN?3J!Iq[$9N>Tg.‘SOޡGD+mݹ{PxI(d8thղ"[quت)&8sbH=}@ymmc4*hR+dBXl+૭W޽pqAMoANIN~/hXl~cO'z"1󣄝Yo:H'q{(HDuH0Mc&DK8}'}z"v!cv60#YK*Q"~3D긌|D1;;G]uOq  ^(\?f3d(d/6G`EiNFuF6腀﷢⣺EeQѕP!)h1|p6[Onc0mϱDXobDXVh#^gn6>5EBzcʥu։BIŞJ{:&dkKIN 2_.>22IYɷ6~^Et +uܺ:-:6ܵ#I^!%,=Ṙ%Pğ,7on?moK>O3ˍ'Q Tv۲o-Q&y ,r,=DK֤M$N_Y_2e=n%h =i+f}*Pf~&wedB gŋ?R}cI2 _HGH;UBيP\Qw㸩!F/^5ւ~g|'aK/t]8g[) Dc,}8_Yy B,"Rrrf$}\-VVlAɋ||VJߣ58f$Jsx:[inB_d,Qtr$JLZ}Ys)kt{q>j z)WUi좪hRP_ƞ9mu#–>.d0^ m#@Q7zd(gV2u 7.=sIop+d]~Si᳢ZEJgDPIWW6,m!^(j)v^h\8qyЏi5RSQ J^]HЊi _ d(Soǂt7nAlL?h|##7'1ɶRP&pWۛFU㯵ja3u [d>) ;(/[Ih-tjPWuGk )5TH\G+-JnmrQ 'mP1Lw|4l-Eބ&eyEG$? JCk-py%2pLyFD3Ү`.ҙP.[hH<Cy~|g"]O>ph{5l# k-D|hA,@뎪ZiK.]sWsN *` r4ė{LFa OE|fC 6Z,/ RO69ԄO\tWR/4z1UD3!x%X+p8HQn22K8glL9u54W&C1xJ84EN0P"Ι!Pe@U z4_Cpp”If߆U ~/&YS^p A p< gV%Hoݕ-̟2G< aSYxocv|E>zpe#O3B-7I;+w$;m!,QjR_ 014IPy'7eLq٨3aJ*A8 1pM 'ϖs'[aLA.sb Ct)#:EhPAn>Bt><˃b6:da-Δ68|$vA`M9C<_C'Jtq-pfX4n<ޚd -E 8f<^P+qki Uq]Sdǣ=G@A/ xEM3nRjuvpHn# *#W1ƛ~iƂ% '8VDNd&۲;&~~\R+/HI~΄4E2!؆,K4BҚc.Pb.U_ЭW|Ej_ͧXq+MnvfL9|Nh˳5^I2wsi}SBhj.~U\T@E۝ϓɮP1qW{L>oGrAy(sfI-"FIHvnr_=Wpn$הPE"Ǚ',vH10:)gfn߽b+#I@0o|`&z;Z]H>ySpM! ~,3:{_PrPqEԊޘ2HAo`XMxs P.(OiZ$0 Blp@Y׎Ws.o*Z;o$p#;QncѣK+tz?z, om$LY:02|`1R6_Q3GhEN- W̰y!yeMBNv]R!Rn] E7/LhLP7j^N< DfU/QGqS4ꆂY$8{#ugq u Z5iE Y6Ğ U P E  Rwn#" rhu5$cyROit6nzc&I$P1rX=/2IXNRVg⧜2Qω*Lw\@hwx2W\ ج%i]&C(+P.W i Y8(;S&ڑp@n )"BϬrY[Wiq} k`K1dY !@P C;`(NNdA%:$[uZL4` !YԨ?5$81"s<`4n˅Y'Ԋ>?7U4\B= 5 hme@67).UdFE!1kŐV-T^)՞tVGIff1,6pԋd:z IKt 8Zlͬ(ܴ_M\.'m^\c_ڡ&⪸<8, sW⌙э`' ܇-8EW%t`ܞ mo"mGiѥPji-1&N`U`XLx/V1I8TkϞՂ6HIDmN-<*c{Q^x(a]D PG74i zV_:УDID\eݥ-X85B|ʹi33<9xH\hcK}'st4ĝA|*߆N񕓆|j/eD3 cJ̆5# ހ>b)&w.|z|^sϣ!lW1O$d): =Sy;+0EEq϶%W{7x6a,JA,P Q"‡nhlt8>F#&dvV(i(_no2Ms $Rn!o~z{;Ҍa!%}M$8u3Ҽ"ڝ<@1k8K0mƟ\qNQ-Ҟr(wEOc%<×Bࡔ\/bKɁ4Or`~_}b,4w/)$K'Y07NDA x.xΣԼEPVC+옕Zp̺0l4n70E1!?'kN© .ks ^}+5HBYjhQ h()FQic(oEtnJ2VAYT_Ekzv6H~K^!l `맾g~aDa(ǘ/b N0Av~Qo7-Z25ژo=WvLq_O?vl ʄ4($5d!L* '^ݘ= kI~S w/1Mji~UuЛ&B >&=D<3Fb sF[Ď\:s߱=V3y%v,]hҋQn5HB@'!ޯ@iEs?<?l__"L΅Dɛ-{D'xxlQCb4B\Ĥ"¡r3"ZQ)}~iF&N]s[\;t4λDvc< Wi^ Caʺvs' -Y8\nQ=lAwX/ִ,JܕXfj<S1w@ uۆԷ,M/8Oʦ钥c eH# YVXxGKEs>x$pwvʖr {JqvcJp~Ѷdd-](e-j<g߇Hekw'6.+e 瀊`g \>@xƒ,",Eʯ'>x*Ⓚs˧ex(/SV>*Ltz#P7pO@W!s7R|"wXlj&Qqf?z׸[4LVosa!Nd5Ӳlyi "D=6ǘ~gG />쟉yBpiV8pyzi :;MLÝ"pQ3䠺xUd#Bͨ~ G8-Y\QF J_&ΎNx3_Fc(Y1TD(D2qHF @mܲHPrͭDiBAJ(\dSnozDWQU7${#,6"hCe8RaOvL F|!qLTpN1 mRU~0F0AXf ۋcS7؋1s5q!E)T9m:nWW0fpu,P}7zP4X߯6Q_ݟ}ܦu5罎^DD$A4PN>6{7瓁?6npcmW`6hSX*GZÿY}॥WK;>ݤOQ@GJ$YR*֋8WKU~wS(9-A2C6 q"C 얯xZg+*(k۔.BOa"{9۬h: WT2} J epf~~>C{]%7(,h0UۚJw11Ozg{V2gOJNaqIX0z_Cs3Sf'Pܐu4$'T}&V.8̐߃2ф._1y}>yqtX9QVIh?=c;@Ӥ/=JŜV)I2a+rzsU3iWVl>`}&6se/)µ nY{pK gPuXoV*j~tɐqOMzHw1d<:S3u|[w0cbn#Lz}aɤHTEBՑ^! mh3oT F fg}X̫95] E~AAj!11 #u]ԓ}=Cֿ $xyr>lM*eOJs>FX!=:|4t7 X?@vɃ܏^fZQҖp2MQBKR 0t>GD'mbdwD C頄̮\hQp Ȱw>dt〙`Os[A@g"A3CCtGd' jtٽŖIr'QmՑhIH1}8hR|D$  GBWb`4%>8)د5 9$??mÃJjE蝪="*A{NGzYT~eQA踥ksi:~k+Yy^?@^[G 謢N*VzzPiqiSʰ@#S^׎Zrp:O; ܯ7jN~yRKm Si+fOTCVRr`%ϛzUS/ij$UMZf=*E|Mb5wqOuZ6@FuB07,0 Tݧ=> 7aܛW5x4aŪ- r樎j//kG[ySo Ҩ7@}S>a9_#ul1;/Teu-au9)dWeJkvB9^,MьG&օh.Ѕ-<tp # 3^糯N]JnEa7wvK1 `_vi6#=r("#7&hzef9۩u5@C3;9T^NM~kFgvzqUS-:0E7v3dS%%mlx&1' D_S0°K+1mN;<\ _;psZrPs]~appc8sk{>_S?Xaw2jFVdS,rN<ʙ[jHQvڑ"9/Α"=#X.$ьֿ8#4)znHCT^=kwSa@?E@Z*]_auFޅchs5FmoW_T^6qgYc]Jַ,S * Jw2,$ EPn] EtV vpn8nx_<V)'ㆾEN:/zC1",tf_{6e ̗umTofl_k7Oޖ*K'a2/ѵxQ~`7ʏ@z/ Rao˼paUU T{#9CQa:! a\M[+_$|&U:gRkΠ˳I) C./ g~4g$_von_mYvYϻa?H5D55x]n ƗH>'8>J>:kS#e3F{1]I5'?5Q~~~}|Dڽוvծԃʊ0@޿PŋfE7t F٦մ֑J,8;i E i)nP i!FM&ZiRʑyj9ysi>s_b/HlҶΑNt9* 2G߱O˘ؚ~%c?zShB ?g$}Bܣ~νE[|V;wo]_=k"~i[=hSu]bxh;xi/x ' B'"I]]Gӈь1N$E~(,\%YpJ5&?*N29_-%GI:}}>:t%n:n^m7ޔhuDu=bNЃPisR(d8CӵSf^&gϚ]<sfgK}h/J" )uQ "A\Ԯ^0,`$"Z6jg,"ev[k3'a 2ЛXN؆ M]{"{uyT34>J)aY:֞>~^ol6,_5aG` !)wQo&(02DFMWZ*x(`VY m<9Bpl-C0YAM|(X2DCl"O:0 ܩ^%~e~wrgEC6Nү(q#|y5IoBeP ,DiXYۊPcƊ,^7P5/h&b'B?c %AZLM9h V[ĂP9tܤjx MD.b4?3r)~#I=W'8}y2~qFd Kgӊ0L*{$_+ 0Z" "mJHhȼыv6R47FxӨjOj4Q{[tF8A:T :DXV=9kJ-XK6Y<Yn'#9[!= C b :~ Q =e JªPYMo0. uh}>Q)FIzͳ<~CM:7(1od )ښ%.:2Xvfjz|M%F՜r 5נj>Q{ /dOB =H{@1:y;P2^H>HGt YA\&u&Qzv;=D`WREK1WD%e<8FfP|.75ϕqC8-lx6kLG^'gI4vC2Fn]Q;FBsfJcԿvLh | I"Qь3EkTQX1u)` *K@qъV{۪LVzTNmM~aT;M"M{[WX o`tEd.LH jI&oƮnsўת30[ף_KF?<|Icg |mK5팪wEeW/-IȰ>ofӲ3)2nzMSx)B՘q7x߱"O຺$O~#|HaOɶMA(FKmܓzHe=/kDBCV]:R6Ķb\ 6-Mj| V ohL/]Ӵfu0(2aU`z U`bt(H"@TYuA41` LS[ O9<e0 n,]lmiIrprIeJ;W-+N? Gڙ͊{?Hx}اݥX`3zɅf43b7sNӪNm<ǫ WTElFe?/Mh:XDpnJa]:t2eu#4s.OQYr ڰؼM#:ۏTSJTliNU2%e`#lg`i1K`/zQp|m{h;^caJ\{H,=v -ʹX<]圼$ H@ \É12H$AB%d5B-9Cq)76vt6 w…d0dD/SBTiHPvϡl^ lXuˆEzXJlM*j7M1{}{( 5ɍ{MKuHv,aZ4ˉڰ Kxˤ]#`x # 5Pu@{ vА:'pޙ1E|*<"&i+Nc`^ؕ)00Tg9A nqo"MmyרFv.h^'ڑqn¬a/f`BY i[vD(T_7e4\&*RZd&JG1kl*X]\@ /L$ʏ:rnh|4O*RP$@`h|*TM9ͮbfT +&D[vBGc#妟'x?! {\v3s<,6]heWq: F`0!4yXߊX~I0OшQikmC8"4S|` $Smt 1; Z>AQq=STj`=m0{yP9=j"ˁⰘE/O9*=DS];'X0T?:@~>‘ dc"5NdcC15UlI粇&΅>$Q@@~b[zpGd\"8 ı--fPa ' FP5a;賍gOc~|kF8F`tŶCfVf9 fhbnBe6u\+BEoY+!~s {NH/`ont%j/UEb `3%vm$D1wuQOY469PR|5SCe 3oCJF7/ZMiqͿ;^ 9qz6,8$#_ȼl;yv!v`=aMdH< Iw ?AB nld}֗E|0(Q{ayH mcOQV&f&F"8ɜ7Ob?/x+o>_X)wbøԹD: F8y=R]Ga0Jf|J3>Qۘ*!CV.(&BnF/7co6O)zO*?< UN& l~4RX ۈI* E4iTV"GD3&O fË$UtMÁi:ػIgڈg٘5STNgC y L!3 E|>@!-8#&+q6n +5BQv V/G7캷.Q#?)nhLd2 ];piH.T"x0'/l"/Ot/V':wQ]`/>\)AL GpDޥl"YԡsڦVyg'Y1u7Ϧ P7}]\f 9j҃ agZqЌ8x Lx4TVU1x\ D$0IʆcAV|Xj&'-O0o'X\.-'+<4p? s7OW7wT r^d vw4]R[;plhKQ>şVV ށ W_1n}X|⴮*P+)63Co4ܧJ &gE}bGtM%x^< ET]tVvDWdNc!##M grV;0(}iqKZcd1A9Eb>EƊ&CE/uhgAc6f:ԞFT 4֡!%B'#Fdb qC`9m !"#o#`foSXJA*% "N^GtbO`0TI"aɿ<|˷7W).sI3__20̖Uef8h DN[M4t k;8rP&֚d)n2љ8\nj>6 c.XMǬ03]eNgAo&k/ZAF$,l&$BXNdu? !ϟSBu.QzW"X9a2M:[ EjU"aٲ:9spFKMd '5%`'_W9 ' >:.ogr4C& >Pn7O2=fRO??g]7ۏc^|BWC9GXL8[хc/ ZmL63[TWֶV 熿Vf?[~6u?[w}P l>^y62"b!8/Lbm-ʼ (}k[5gɭ:.7Ɏ2rXKYj76Ui+/UaV-UaVxaf,s /4#q"' x{cO-Jmp4 pHegIrZ9I2%)#!}6䠀q>F9YW Y9W6.}*#9Lxg_ ƃl JnC tW]ԭ6Qݜ1hs;Mc-m5yJD|Tg22'q:$RDΊ[UՎ J>DY5@"F=Ko҄IbenxCl<$B T?LJE~:@8 2dEKSc}Nck7M"5tJf(#9%$,6Vҟ07 0+ͤկ+T4V<N-&#Y縜q vno6Lya2ݵ'&Dr2MGd'!{m{'P8 zqJPi;+'p4K Y1u.)Ӕ2ݛ9M涟aӌqobcJ.q3g\NffєGZGJn=-<˅VOBümy0;J`Cl<~dq~Ob<޻b4"Sħ:Sl22tq;FÆDZw&@D(-,0L4s %vR5Xt ۠`D HFcCpf/\tը-]/`-ŪD^$ \[TURp[)Ѧɂ29ǡs(~"n8,"LC3]G{fK/AԗF˗sa3K86%tXc7P,z6s$sDA4ik8Ɔ nb:Vn'΍ި˱ ̒(OQَn-E G0Ðy ؋PhAY106&hZ(N$"x2<u:ܙwwD\Zu ]CѯmE! M9>0DC=?:D|V) e5DoH>J]:xǍQ]Nɣ}6Vp-4%K rXu]RNXy''D8'iH 2U$"7_(&:w^VM2zZtQ$wRΨnWy P*_-Ӧ^%HJ%KBŖ~Dv@B| c|#ړUk/p n:O%WWAɵ,t2Fh/Wo ^%!{^f,WAM6n |.SJ|L:D#0`XwjH`?Eu>Jcd&LoX8F20 I)3<&qHn0u-aP!y3*›n;֔VID֞ Wט:I<>tN&! BxΆbhƗnf^7#[gt67VSt4VOStv^f$j%;|iF!y*ӀאGOzp#\TOOUxu܄n =S2{\so@C\' *Ã5*:Xwnƚ1]q _ ./ĩ1"5<&۲\5j[-8VqxKV*1MF&͐Cgw}=ݛƕsFL(*iɆ':Sj U\,'FZSxY*b5Er2hMJ]!Rwz!u)^oҭ P`Mp+>b1%"jFQ`݆EzR/׊XIBѥɋl`e)Ů6Ru`wRP{9"R)0 ĂgbIA>A!1pER񭓘T` I;A߯[)__4jkmyM982$sIHzYK#̤eRqJZ0V/=*}Pf^>J]n=: Q0 oQ13gb!U+dN_$ Qǰp,{4(0pwK] Zq]Brd(%]a;+Qؔ<wKҤpd9 mV˃t[\-wi⬸s R6NJx5@*ț'Ag6U/k([rC(h9 `^Qw"O~c(f8]95@ 6<&WP$SsY qj]eU uDܢ VKdE4(vsfm:M <>J`h-jCR,!j# T0M lw8 Hm~ ځE fdL XjmS@tDb 9GXB $ vuBA†Ib7zC ˹ADtcdA&PͱS 7U܄&o 0]EKd"6S'rƼ*rꢖ-ڋ~ei+8d#r@9̄ʅ%r Mn ,3jfsG)_pn+,s$h@ԕ+SV}LQu(3S0j ߩ1DR)\doZc10U=zed0ޯa1Ф[PѪOYZx ;An ;9H (>AŪKsQT2\nF>fgMr.TMHedj"!|:D WGJPx3e-]+:}&т!|(iQǚKmEV=%U6[nS.~I[-u,3!#RlO`1$D7~"] +3AF]jvxި~-73u~Ÿ-s[=kǼQ)fyFuQPh>wfxxAi+zq7'`rXCK՜~$$A}xzojZӼ?8V0m:yuS9m׏m+?rˏԏ:Pڈl߸Ah:ɑWYIџQqaџnM=+>_< td.s_侰TJ6K۔^ IE#S^6aОșQ5хcD6?b{%V!GQ_!IS-5.q-x"h1;4,wsFr8fa$EքQ$0{~t Lho SL'3.p+dz&PoMH xgsd_b85,qȍP@Bn{фEg, OC6TbMǏ"~?=LHZL񤇇ok良^՛yҨ)Nk;xYSwW-`'U9ڇG,9n4Jҫ;U{{Ҩ5d~xrPFU5EM?qP?`H'+֨z:^7:4ZANN'͚כՃJ_ SR{];j+B3oj ;U8M(Zsߪ0ă"zԪu kRUjP ^!E/\؞ivh>o-<>ާoZsW7iN5~UΡX3(AOuZ:z6N)3m6 iptfjǍw0CQyU \YZ .EVrA8+;WuT{yPY;1ެ`M,P(@4q.n i[U쿮8f] -],<]\. Rr9NF*|7+j!' l`\nQkpRiڃx&=;%uiZ㪫n𷫹r@U4{ BwOη XG^]_$W$x(?O钗S|;ˏ%[F3U48*b?@"noIOZÈ҉0\,$##Vl "phz6ž\>Rg-)6D:n7Be*V1MYOn ibnlW'Կ[ ҡXW\NWpEUix-O\^bcs%HF ;#<Ϋ? _PRC<6Ad?`%QP.Rn>͢-LBW犧Nq#{8GsqD߭Q#{f[6ȈzbڱÎYhL381 LՐ9@+zT:I@/Abi\~k Qt5Gץк:6rxFln>%v PSl,!P`HfѴū7@{tGHA-8߿QS矝1γ1*: pr:e2,z(r1o]!wdzD<ݍ-4Ø&srNFعL?W솴fN QAr7.q)EjjNҨJ;ئ׺k!s#=X#JRt71K>l>M{t^W|9Vhęlû2X\.![ r1m_?s?s?s?s?s?yX