#!/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 sudo apt-get install dkms." 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=0053febc7bc394b5873193905a4f82e4 # 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 g`^A8fvgRacg:߽hCNtwZV{59 7jpZ/^Go;8zAH[%u>!W{՝\CJvpP!+7CsX64 > CjaL8M%Ko[LA|t9|[ḏ21}JV_:aHmdžpnCb}t+by% 2ːo&i<Ƃ3 "Xs` B녎E0 !/c/M ~u !0!I0joC PpY%uCS.>=>Y!sĒg @b:l6w%E6Gp@68P;2HGkC+E^H h Ă2 (3 YUBh VB%*rE  @t:H%p? .&gS%H;?&ݶ:I߆xMƃPv:a]2N#] Q?TL~;ik2?0p<(3ěɠCzgZW`;ڸ:ias4ZnsDpkkzzj V^174fpWG@UrͳmmS|2чjK[ 5G}à90<(Xdp>9x2V`fхRt&")ɐ 1i:Mcm/b_t&Ln310u0Ql #,XEZ0Db^I_=jjb\jZet1Ԡ up:i%.e%Z4/"P&{!xEǵk;0w\EsgU&jt68YֵyEzk ǺlsEtascPҾ 0X}6nf_BLI>PRKf+6m H&0ZO=tL>'\U/ ޼y-+Տ!{-y'3Uq8KG\dqI{kB*b{m.ș?vo!ܴ*!s_8~"P-;ob9ۃxL@ R!GAX z$EXR姜Eg\7WDf>Q4`$Y$e 2;m` X!$^Ɗ?!ԥ>Hk[Y#fpVA;625U`+ [ 2yz @'_@ϒ0ɘГSt>g@ϓ43yz `'mzoHCUL_4ݱI:ᯙԿ @jCvf\:> u԰3fn_V99J 1MkTi7lz;oHSy]"Z.v a{ܱ}un0"^0PX ړjU+EԐFkN C"N;'aq^\›47*<5ۚ![Ӷu`#yBxkn=3X\R=C260o(N3,&*N=o!2LxRD#@Rn<.],rY\ !y6M7&;մ Y@B k6oz&ߟ_ lL{02pvK*|1=Pd0uq ־+y/|@Al9o翔bNL< "z1 }jڎmܧߐo':+}`5ŷPz:,t0xS"$3Z?{O³j}W/SP]HiVje 6b\)$yv־WCS'ؘPBv!(ay9@>H= hXEW!y%b(vN4(w&@ -#o cÝ6%aUA FSp.|l:øqYs xeYBnwU&)`-D bWvA#4lC ٬6hY`ȋ,MVN[ ]㰧F7[W\akx߆=s{ڀY=5 &@"hh]iEmFyo4mַՕ7md"`Ce_`lF!nBho?T}\xf GEsb5Zpq[s'Z-XzF%Z(;:dc1*G] CU׮ 0zb"[g,AXz6~inpW tc` pf3QZh#opnϑ|\QX?ΓW@}־Oݰr\VN7U OlQ{zki&SK BgǤDO'† Ib/^201NMz]',{5x"W.wm]4rrF,[|@#d5Ɔ\- AJSM#R`39}en>2nO\8S19:r[^ ƙCpld.gbXJ;̔ձ1DQΈLny>1[cnE x̆w# baކ$7iDmFvXڛko+E_76 v $d3$*"ܳ[4,Rvf pblM~oYJXtBʒ2јG"^ `Y*Yns`Glд #=}$bb2UvBT*=2Hts^`IvzAGge`ejX"L,)҂1eœZKm]ig#T|ČIxhlQJca[z/ʃR/jj6/J"_,69d=\1q`p@&-)nvb]o[2TTLDb7[0P/Y]dٙ ga#KW7{j+gx4ܯ oqR2'+C^#X 5Qɳ"Jtf(_-t=C"2kZ љ=cۿ~J!VmȌKyA!J,if3#a41( Hn6ffPm/Sg1u)4w*SU)CNpym#זy*}( C NSnpwЦ3Rӥw*h+~ߜ.Hm0=!."%cKO2ՏwlZ&#8O?ŋZk}.c܈cRA fHERD]̵_Do.,֙jɚw lf"Y57B10 K0F}`'"+XOA!3iNaf}z!T~{㓹>OF@"+O WK`ky!{ [\9IexY9ذDi? Ey3*Y)'F~p $r&UAOK5K[V‚-$ED$$>g\Z q-|Sc Sw+Aށ#t;b,MFL/>Ph/Bgv|q | r:yfUNmCBlsۧ bš*XLBS6)I4p[H4 t_')+0;2%e.ܲ:/F]<(+GHPSG ᝒh]7eٞ$LP +0V! hCQaDB]x [~5>*8GXQy<':{\qK/"^ &`B7xC^ nY>?q| Uq:H5G[,̳3 BZ7$SJ܆$@I$l?[\JIbȕg4'1Dn1drPF. Kldq-^l;VmiBHY95ؑ(X&)[BXZ=R+!72 ^o(q+qJ2%tP+nlb +h p){11"!JYl3@0C?z1cb$0Vm :]+|P"j7\4& \{ :WXK1`('&A ;c\^D{_'h GdxLr_@~4ay<XC31g.O4sF1/ AoU*?[AL1_y4S$gR |kuёvI(8W*).YvI%ֲnG\qdSdRbbt{SK@3#Iʢg'ײLf@ VFD9-sE-13r۫OTUpqĶܛ$X#һĬz-=% X~yiV^+L:dhI _=?lZAo9GƜ,9,҆5Dd|?Ȥjjʓ#) zLmE rj֘l` zÉsDq焀'Ꞓ(e$Tsc(!GG173"Vq'֗7i`LO:f1Ci;"0 eh|m쨒ms~M8U|h >U&L}2!e5`HHK'8^"Q=U$D{!H:]FVk:PwY4}+K)F[ SX~NN DQlqw"[^RtοsNR֢ x#cm6蔫 \BF$rM RY,o3H5ո ꫐{XB?9"?iqBgJ?咖.R 1WbunГ*.H˴UhɃDNg5DJ ?.`pݳ_O'^c?@eիj2LE.$u"GDw*y9FȊ/@(?>FE3+_ ^_*ΞIB 1() -@g{)&o1o{opz)7M7Mj=/` ^GyS^zS@'5@Q>Z|f;"ԟљ_!8).o2-%ݫwc3gۤ5WTvnPYLo*['RV{fYN~Mz[R/97v]hE6M>}L_ۚ|F["2{%tWV_6owWVY-mRU󪮱KowBCmw^-4'4/hFτ4& ě2=IsgJs*U_,LTzc#(7DTgANBb1׿G{}xJE)=>o/9K/9K/?]EG?3>INhuU,úc)U@\Lq-sP(dSo(2*_+~lo{gKב>dn3i(M9+0ճuڠk/}(M\G/֨BR07kָ7Y,h&ؼV䢍ZŢUǃkQE^>1RfrO''''nM=FMgF?LDm7|;\1WT`SI=ͅܙR;3_Lbl+oMg/ }`T=U5lU6W}Y޾97_sYبכp~oOvϟiW/o+%ҏ=qtwʻ}>Zg89ʏ?w+*V߈ܒfpdƘ0mƘ.mܾ2?)<~Wo(v33Jy.a ::ۿ ~B+Ceӽr4~[EL7|y#C}Gr![Gc;CZ80|cYj4W(NJ?'MLr.[ [!xپ2JV!G! |F> 6HLO_wF;zv ,4Ip;0i<Nm[јtN(n)dqP) E#x ߿C&s~8C:v -K`z\o+6 a]E֙&F>̶9>TS39A4~pT|K05ǹ}qy;8PHtzt md9^@^;;ngev'0Kʂ^ eiF3T4bBiS_|>1 I0V2ujXjy$qA2HZ@Ё>EDF΀ev:o/dvki!&nQ|Cl> .ŗpp[0͞th-iĂ;)Tr.kGw1"rUp9}-o>xmY߼Jҥ(Y:AeN@KU3yi}IpAMx :Fwm|& }ڀPN2,A%`KLϋCw=u쨶_*٬ۦ*ܹxw%E>qpN]C*G^ո@y{Cb.쥥F{Is1Lt+بBq⍘8hix*Ko^@^^ 77kIJsTb#5Y觍?-Ψ%gQqa# ]M<3q?UOI;!yJ^pˁr øbؾ`tT&a4޽G.ՇJ! \^q  :n7j r49S,JFCЈLRL@q֌wC2(BD+_E=%Yq  ^ޜQ"t[ =Wkn<~1͠.]D=ʆ-ۚ ,j"}dF!.3q6GDƃEz 6Kvtim9'8Q'dcكa?~( z~4I' ȂpIS&bڿ'@?m*)?_r|M{|b_lf]>ŵ4[[ 8 F\}.c]02\5.@#\]pRu3pBǺqL#%A+KpV m .@c]b@y A #\D #\Du<H%A3wF -Y 4hvZ ]t-/ ~ 5h7A]pǻx75E`ظU7'*yȈ1/U-͛%>a'MVh(yOE睘&+&H9zoǴl7')NװqJpwZnim.,a6* an#*;K(S)zoΧRΚGj]TvD Rϭwo=hwzE` 2z]oxz-lwc#juף[{.U1ն1he]qRٯӓws,wjPv6x":ϣ{h:%_?MsFt+~=!=$J%8MڧV TnC+لSN`(UMgko*dR}L[G238FMt5QT.I,c S%3Rl%CFm)M77RKF!;ؾ6X%XA{[Ǎ(1(D/]?FV;/`o.f@nj+  K …ʘ]9f0f\ymi&(b'~ %[\tQآѤaﴷRtdwhϗPD~Ǜv߉%A{xnx{!p&G{+VQ[)*K:ڗ!/]Q J%'????mqG~ g[p<ψMxi ɰx \EczO=d㝮L)1' i}ۋ7L@sS?]/Co}3#{Qg`/mF08/iiUi,Je~ižJ6AUyvwRWYQ;WP B\!EFXoj@D.@k/gV۱/Cw3S4͵ʳRU`:»wjN+g*ua Btj@J; M;6L l8MegUe⋰ܣȦ:.q0aگw%7uK)|PPP[º1-TtǀFRr?NE aN8͞>?PL&Z%Yղ .[&:Qf &쉰K F5=mCMYu-( IKqRr{;a8(=Q,n&3AJJ.>Y9q5R GP<3ݰ5; eWKhNIְ?jN߉P@s=t{=L-NܠJLv3 q.H7DEDI1ӕN)H.DszFH'xдMo&A&b^|Y+gBo("1̆vN) @X& IӜ&_=?lH<^4Э2cZ[Jl ڿ4Yv&n >m"dxXʘbAKQ̯๴0CrZʪbɰmypP^zd`'Sذ1x..G:عPl]n711,skE `=ֆ,si+TW^Պnu8ejac )`ۭ"Z~?,UB_z=>W%_W%_W5 p<+RABzr3]}(pj=EGsԾ'}69 8OT譺U={8#e|VmY+#a;۞qdY"ƟoPpn]`ׄz0Uzp+sܑ N c^meB[|#X{>=Pf|4d8TDY[T/ޚDÖ7V BiԛGU v`t@!H]E~ O@-4#YD+̡DD7-`E EQAPbqT= FkZ( F1[',#!J)0ET j~;[p-a&`BS |B.$jE S] -v܆F Y0 4oGG? ,!4 #z<EK\5';6a^aC@2vM옅AyhqtB&pK΅)c72l'x8fҶtlZ6/"WtZYS+J%)Nٳz~g0AΞJ`)CLp;:TCLlO <}0z ec3&:/`rϔXD?5&b:XF s5#f<۔ w# "AjpBu9zFk Չ`S-z:?_Ҋ\pz9fCAi~oVfj\O!䛮d!SbL82ĥQX"~GuTYp;4FLBD 6͍nOyBӓIULYw~pr]w/{ʭ؟z3(]u9R\yA#j$˽!mf=1dq,Y``?o N;lrVVqIo䏫{WcwqP>lX e%Voe 2hu(]Ñ!>[yKF1) G5r &(VMӣK9so JAcJwM 0O_@ȴݳg <3 4| 3g0 \d<L1_jPy+Wl N,j NhU}sP&]ˡ[ !|qGz W>6'Yml}~FyiWPʏ^CT&@¯6x*{"a,J5rO8O%օv)sE֚9 4^xk|ok|#q䔒k(axZ`vqɊ<&I=QIXT5#'^5[S@v;=K8& xPA>AVhJb0g_'<㲃k>zVƹ㆞rAfQG㼉頑x1к~t_%x8̞G6wnhMX Gi3%lcȸ=gCQ3W,rXw'{P0\@FL%q뿋Ja5KjS)Ӕ|$'G#\;h;6 ~]ȣSU:c!@[ʼ&NQ{ڔM1x(TBa35MvO s[)ႆ:&B.HV&w[x 샐FwT`2c; 4؝tꂻ 88&~1:9XB+łH\k7p)ea-"Ǵ'aT1DKb3&pL8gFЙ>`0QfSۿ;Wd\9ʙ>y'B/ H QF9sȸ 9e t+/V0`ⲴXPqd?pRgL/&DE\uq(mwxgv5ʰNer$6(k4N@0> we}qt GP=[˜wIa^JvPF|G?u) K!vM$~ߤ e vԥq&ah `4gu(8JyE:lӑi(3v =ò!<֟X`ܳ jWC8d᲌*"ό-00v:PMZ5n;jC5!]M&Rt>sYgdt:憈s?\ٶeR&%HKqFAiDM蓙Y2F l]βF]=';VOR,Ym̙zf@7ˊ 1> ?׈'G[,aAꞲm(tn_l{G'5Ak"D/&VLjߏQ7o =?pdLo+ 9:_g*DVa7ix.팆73hKyR:F)Q<(Og? (_X@=D >aVUFӨTvOHxQ5ˏo"ŊR Xc_󿕺N"=Mvqk]Md@/]%h wmҤSrUS8&`K…6n2n`_0< HK<#E%y!o€: l|U(ԥk+DAةk:"ºawX1tRWbݟ7Oal I|#zI3t$ÞԢr4[~jeh~;26k>){|71ņ5549CӔ6d-4h9!Lpj1e&ƒX<5H&!sTe{4&;ZA؂bۧ/5(]xY|^|T)f x#sC15^]]}R&&?0ܹ:!Iu~+ KP: }~t7 vب=? Gls; X޺f] F\ZGjtwSjI~ k#5Mñieh0ra;TKaom&mMUٱK0 p @y=/Z Mh@鵵Z[S&V%~v&3\ta y,2vKfvy C1f#m71gm9,~xA%B!-|1M;`!] \uXn? .ĪFnjئTj ȭPS%7bE.[|ka0v5ppX{¯rfh .P85L蠳z D=< ^KC1q 08AC)1j)|ԊKNa(\3}{"k9(~_`Q!a}4yc Ґ@ 1@@,99&)GlxAEEe@;"l3L$]e~{M\FTt SM&+|hkkȹ,:୷pXqF |n+f,&A}nx?<7.biV$_]Sn-:M'GĘ Q 5ǃGX̄q( v@[(յ(5ZiH8>i8us-_Df p-)|9M4ZA #A8WD#SeÌ/Bh8)bȋOE;IpςRvkΒc%ТvJ.ϊ{Eq8&([<&JvNK^i)u<<<~W#..t2x$ҬpOD> :E107[QEoxQ*G.KV g}Ş_2ڠpp]`7ÜD--mq1a,&K.2&%XQwb1n2 LDFjx;[# uNPO1͇m0yZ/oiл萳vwEj6K'Qs @?KQdh@)gfb][+,D gJϡ/;$9ԹqT1lHMܚᄤD 6=0oRZwo+Nq1pw˿'TޫGDt`V TA~,rr&Z`UQ= fr 4n,VN1JIf+Ra"@{>JP!ŝh3'>:D=r/s/-f"&f~l@j@w p*g|Qɤ&:dAOR/K|".ol_z%y"}r?>2*Oyu9iW|^}L%d|^H43^GկHdԷ4ϫ򼪓<#XKHJo  F%L>3ȯμv<.31%$v^]B^%u^]NV%%u^}|N%t^]RFե$t^]R>s^Š+ ?X ExV;U\6^ҳLi=϶vo:Pwؚ CO>bG#n0M < ;*E2 ȠEn$BE>VGw&{E!*/}VŔP#\ 71k *JWc`c`H7 -Y1*?h,\6hm};^99׽%l}zE~#RsWyޒ׼aJ4 ޤ`I<qOIJ135A(5=׈`2v0wg׹%kWnu]_q]<yg9W{<^ [:(j׼WKUdpG-H{G'ٸG c#E9U%x}t?Jh?ZlE J{P:%l| )Ds*iCzhK!ODi-eGǤ y;`F2~YU%~Z65\ս=H)/}5,a'8k} .մ7Z"Rk5IǛˎ0sH7!E$9X&u*z-;sep!cNE;P@>SL}\2ί^FrH9TǞ oc>?1qzA!m V3G)lG9j/IE[xx>j >51[h0Qr6!|u0l'HBGFSwuk @ -/\"/+sFJw^՝H%nN|8P4nХw0]~VһWn+.6TtEukV~ TǛHcl: p o4=`I=@i}$j&a2 ~ .v_,( G?\1>#!STu0B2L[`!FmS2{~HfM$8( 0y[m]5$k<ܮ7T+mo0e0jn a)ݖ AFt6%f7&!2¹X,N`6L ziBB[_R͎}:-PA5D(!Ѕ=̞2\&QN iCw֙L/\]f]>W%_W%_WW^arIVT>yL*g<ܡ (]fY&s.zGUq*+8塉kf8+҉ߙT`yʜ4("QA\dN'$ 2&\)Q5uJ!M]SfFj/n zC(6UNA3ATӨNOkTds`H ~!eÃpr:=٫;'Ǚr*nIӁ~ ao^?r~%Z rv #hCesI]a.p^nIgSR=dN5>yt`I!wc wr^ 1@jlB=y"3Ȱ (k/J֝Nh宧 +Α1r20 Kt3ݚ,{bF$'L |yqk $6G#̑2>(Q"K dh2 ǫ= DX (1Z\;ȴP]0}J*Fi7R1SγD&Eݓ8DƲpgmun&YDDzLij,xX -"]?A5PDv?hK`]Ff@Z;cBxv\v!H ^.GVwZ?vj%- ~g\Wo`a~h%W'U<2EcpGZJ(;6!aNy D0Q$ifY[=L`.JlSlә,8=dڧY]76ԵA\x%]Ҏ^`PQޭܢ|4sG} հ:.e0oN2Ј{+qhWzr1ND 62"GqZ9Q]P1H[)+"_(RLTqPk `0kfU)p PdEz(D; *O@cV30lJ]Q!9D{)$ Wf o`p]{{g)\eP1ssEwa;bi[HO{s4QD:G-RuݷrjT+gf}߷.DPF8!( H1ӑV*UsKሡ'~4^gC {/gQ{;gϞ^;F`Љ-Uc]8r(=w%.9_)/z5(4ۼʙلꁔ4r $%3bNrs\EË'\X Eu7]ZwBKOZt¹3o&C(09BFd,7NvNfٿlY{|h,pIuO!'3~QOՋU_" yEĩkrq;y4 < 6lNM%sK3G~S6vOwzQ`Q|DqGvbEÏW%Ĭ߄XQ߸"(7f`=pmq9K,`- > _PD?yoC rA_/2@Rx #=uC`r墛f J[# rxW)g!g&a[ !%,֧5LϨSQ×n]/0Y£*Bʛ.ކI­uY&z b>d8`e k ):Mܿ [~M-G}m&[fj*^oPqn\N׳C"<qOhFM|=u>[-" ӻR{sx>Fs8=D-I%|ud܌t.#I vL8~3Gy$+%[ o械6}}7*Z~ )rA#'Eǔj^L Op"9ĭтיz}֡]$TF$l-WYW+)UHIãyŻDrU+`*N 8ңFzZis| fEoGr"N ̩ݢSc  H\<M4=i:\cm vbB2Dvl492@ۋMƖJi嵮6X ZB/h':qj_K,9$}7\81Q1rA-@!yq'l\HP%)3ª9|&&}4uF2) "5Bw Wm =,RšayZ%VR=:ߣy[:k.  C6y S̛Cw_#Tmk0cjcuʐrxxqJFhI @D]#C UNd"ۢ x:r9GQ`ox`Kswp)ã[/c(O3ZⶉˠCG:Oe&23l;{^ZdL @Rfd.tD'Mb7N|@U >(v(+ヮ<=^pY|Y4nCsӯT@i`vЪ^J :PVᴍ= ϖ-x9-vs.EaL3̞+0` zaxx}ƨ:+첋qE-\A9rëRU@ܰܶި1ri!EL!kK96 vaKyLuCmR {kEUW!~mSFߒʮ>GU"\9uYtˆ٩=>]V:S̥ܪ2%E>_H1,\-9Fr{|or7M&wvOwu?|urҠkB-[=E7dزjh!` QwYq&T%55&A[J/6{-e*3{+:gIq a hW*.CaU4aQI@m,AY]ʳ5k 7 v *;uVc5ե(:Ksp.AY]guI%7KRoVݬ.IY]nK!N%i, ?d1-J+ٴ`?|p^Bث7jB䠨ӳ/N߿_dnW]Qdk_¾N[.v Ll4EEa|{; SP+Oov钣v`ԙ׿_7qsV`w,m^s.?U6Xџd6m71>.R*ƑR}""Q?TWYoC0Fp:jCf {at`f]wWػS\4#`Ntڍtˏ"/Z#Zt1"=0JsBYNfXm d<-?xS E5 Y"%J `r7u5d?G?oY3m Cj'<@w6m51Nĸg$LG=pY&:o~r3 S|uسkƊ!M::Q ,/;hBII4 eu؀;?Q1vHn`0tV^apb8H~s0Erz$k=>1h zU;O'Q%Q%Q=H5BP .H,||x3ܦ0D_ܓiw /2h9钰^2 OnɢmWnHop~P޿_)ϟ C{l~Gms_mp.WFu 8=H0AKu1)M<WDԅm'0e'KĆ$lq(isoH3JD:mP%Coo'З8Փ]¸;N)`fg{BTHzskD73hOeǼexYN?#V뵴nTހ0Ï`1 Yc˿ӑp4(:-|OI>'$|OI>'$|OI>'$|OI>'$[V