#!/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=4a418d2fba1f2e8e4c2b7045bb2429e6 # 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 'y^Dz/yt0#E0:q_TbAYm|jю`=BMxA<-tJYfChDr)+0X"60-rT$`(d|5V:4-Ä3!, (̡[''T e,^s |J(Z V}kX]o5Sg<6GF_ﳫЩh4nnmv;ubڰC4&ȴ˷c.mƦnYld2n<07mV`77-(pdqghZ4qy ];«ve =xmCzd56zf,!s} 4N0+ͬ[m0 hFo dYeW:Щ] tX޳S$Z=A&:p[;l<+Xp5lÞ:$qK7nbEBX:l&$ 3竉e􌡭dla-H`p<"ä3|Q-Vv%KPHgg`F$r q{:[қlM Nq\. :-ZVf\3o 2ڐzRu$>W3^F;״ ~XGwV4ƶzZgٷ?-y@ < 7s0d_Gio?7*G_^ o%|bK!*T 0ޚ#VY%2ŘY~uU?|y/O1;?k>Z{LyYX>3#>`Pq]{*mc G k  ٠u={C}Zgq;.@W3^r&"R{&.U>+t(T́㭒b;`&{@UI*YB9$^ ^ ,j ` ']3is/dAdKs+5`\ˍ;$:KMctNRZHbL_aGHF>*Y?:`dL6;ts6o>qSw`iFI*Oܯ\lO"t,u|IRfbu@ ۼ2+s!K} =$ ʝ^xA1Y:?#rX7% ( d>>EpLjyS!jz#?Z S!ko9+mltD%t#'j/cyG]c<(cPZrafu\^\!1ND ̢ZQZyW xtB{D ʻoh=e(*,FQQ@Vsq_0&8P@D 7A 2i3yFt_?n=s?ӳ/uY>_sQ]+ !*37TG71ө& ڟ78{p -Sq:x*ɮb !;:>E aDN%.7GE-c&3.@Oo5v7:̎!8A[.6[쓋793˚"pcӞ]}w3RtP[ *S%FǢTI7cF`b97\Wc^ 0mb𦆸Đ`Y(L%ygX=Gg G5 L؋5Zxq3ad8e- VeDM\*WZ20L\ Q[G]0J+h& b}k: E5qC&01;YmkV侠H#Lad 簚j Yu`=ݙT缼: 9]5? 0e򧫮ٶI0w\$4y@~a~0na]G޿1Ԑfq,h~~zE<%)R6Ji #Z ^Rnx.`.0ʢq}#-6ȉI3XVʐćv=k7J^dlgX<$ڍC&V$!: ~BCc/WiƹQ43sҹ!_ҍmVczt?ՍZ[Zx_bvZiZz,"W3؎ߎ xd9wEYƦ )GuhHϳT7 \ؑu=g"G0zXDuCbD65Cq:d\.; j[Kwv`j`wJ$yw^% 5w=XHfI$0ֺպgm#B!.u[17mNz6^ϐ3*҇e2ŊxF8 h3{ďAd Z x({!xIu5y4M 3Ej!.k )j^#:CgDQ#PDQA􃩅8ަF4h>b'^tY—bF[6x4)yᒻ֯40BhB~.,YIwlfl`·OĦxS!PO'ݟR0P't}S[evD4ST 8X.Ⳋ%byp؆h{h{Vف0f4 . +0#-P:o _ѵqЊ 3^X*zEU@} bOjfqYTF,"cEu LOU-!f?DxxSaԥaFإ}BA\תQ_3jHI匈uy͸r014n kZBHB8 q/k"H/[`Xށ_@TWqJ vhI/7QpF_|U$end%n@z.̕嶸1lFx 0ܩ`pH% ȳalb0b>{ B[sV/ /x`'9j6 vUbh@Yo76W|) B3$:iFA<\wQ1PcR;՝F% IJgDTH:×+H^RIRJjO*Z V5v6ʪȾ]m/{ArU\ ~UAP+IV jX7 .ޕ.){hwrp>gIT5j.#G_v']!k ;)N\8u׻i=>r[y//}?B,e/{wTtF(0xd,ViȔ΁0l3o5 0%5*MdsvV0 fOT0f6|K\BLe~ӲE/0*Ui0_[<`MDeRq:݋_GOpgNibSV!&Lr:(]t!Sn_׏iߘcZ!'6✀g>ww} TUKSUMLU\ɳd%LKs!Vei$Q;R-b_i8f~0n5|]K3$('3WDk.[aM%+qP?[ X$@`,U`QBܽSKwA>3iRp7RclM, |6$npZ $ I΄ %t8E3Z[P)EJ{L?Ìf"uǃpܭTGC*"(Qq̣+iພޙcyA9,q.zr/B7nV*Sj*߅tbIϝj[ՕY_>&ޭC2 ߿Ҝuo[Q_z{d_+"MU@4y*XB65m@vUmz $ZL[.w^~c?}(InL9ˮ>Gt k圑H_:pe4HuԾH׎ffU؍WgO"x]N0&?9>9EmHE#KeOQ%679F.A_LZӔN%d6OiK9 xd7M.^kb&:^^~3^vū)+)%|tru7!w/ . :\&p(7GUd;Z+/ 6 LNs+  Xg:y@nIbE v ]A^5/pJ)A_Ճ;lG:GXxؗh6ԋ !|]?h5YP}- Iok{3Teح^b .yy|ov d!O2˾bcGq<%bYm^Xǧ$s4ZUK˲0B#5c 4L̋x4-S І|8߀qĒ̲)g1,@R! F[&"qdm0ԎV! (2n),:TxGj94 d" (u<9DVH=]D9/;j{gn)d1. aY5D(B Mk0`I$+S\Sa?UH=±`B aCS4>DдsO8j%uq@+ۅ3[l8 /aZpd.Z: Ƈ׿#: ŧgL\vB'|5f8Jv"Wdd$w>+$R%)U!pB|jz$]hJA4"7Gq[wȩ W- 4ݴeܢ68F+zςOfs=Bp<+4$qOݜ|hT`֟}Ӵg1 FVCJIYGrÿ YY>ϠwY.ۼ\DiF' G."[cbv M?z21 <$%V,ȝܙ:3]]uQt9P1.t I )|&D/xEG-q/Gnr葍ox9efۤOPGж?@ _!3qO60 )?b}r`B}Sx}W @$C^;n.KUB#ᨏIJ% aLOWǃ =W/1rB"E*G;"runu& CЅ"pxvṁ95Ơ'̓JȹyN?D(d!Ï[SN ~CT(O}EL"1 ̄tAŒ5BMWM@|3;Q]ɹw[.J tB<82480v,P@I#>>A}Na ۬gMLFȠ4Nl1H;w}?]~8/s}ܼ+w u'G_ʰ|XX CʆVX$#RL lH#B0h'4T~D:/wq,Z ~yh3Uԫ#&Ӹ'jPaj8Emco. 6r-Yx$zMbygNVW|Йyw{mqM ,E)WMi빴:V9 o׆+SZ))+ =yY< fҼތ:&U?"hVwm+RQ$( aK,GA7G-*kޤ!^CqLT1-^ڴnVdqўB(nP-:b,iPŗځ-H2A$ȴ1t=_5o~%P@>+ M)"x1Gq$ q?֛3LY+Pty"~J+^ƹ~)DTf`-Gu8o"iUlw7'~dH&8IZT3/k|^.'d%[̅m"mw&D%UTÓg-B~LI BzwLOAeoe#D?wtHeYw ]RqxQfQ{;e0s#}vM T.gT  hKWD8\_ MuA '_'|Oώm"g3%R~gvN}q\uNtL@ǧ0=].(L$lG™_\~{A4XG0sc8"J!91/?N%Q ȅ7XxB0*ȴw{kg~'lϾZ p x~BB.H"DO z0:g`t뇎t{1:Sô1Zÿ؆$̊ 6h;н,x1~2k_r,0]DJ{ys$'%4x.C%!ƌ&y} [zʴ'?RpVWgtd?1z88d]Tno!9.$=σ.%Y8.!M }rۦX !"ΊZ4I,OyS;}$4o5ݼ-if/qŢ2i?Llc]Mz%R8~h4ʓӤXdtg2$nĜj4&p[3dX˧Nb6/{t 7%?k${d|oz gN RG,&Lf^Ew;*ذ3Kj.ŭ"_rh! 7o' 76ğ;cXߝymV !3!h!HLmyh%q۲]HQ0fY"Ӫ]L)Yib">*Tt0Nvц0k~UX;%0DbU9»/\wn\*ujMLRsSkW=<C9G[t}>Q=j!:pRp-yqek8VP=%!؊~[c{U9|ѢZlBlb=^dY7&rB҅ϊ}KŖ {H1?.JƙM4&ܿ z>w10 .լKXO )O[L3.J덛͍wS" ޵jyҜEMK0$wʺxS.W~ac|6\Iݝaܝ,M d95v6vCoE9yp7cl-r[_j /)DmV޳{xZڄLzٚ=. F=kHҨ[=T?xOk% m *5B)Dˢf'@J-uxF90hZ^ JZ;yihyWSVUc b~BGTv{T5?;U:֍x߭咈U?k?m]m?ދ.q4RԿz\ ~znEZCgH'̾7.mwD<-+/~/KE 鮚%>.AoFvN%7&SAԟzU= 58 GF;t# {]"5J YPRš/v ۂ$&ÿB_h~'7^ w6 >ɴNX;nK6H_i|f> f@曪^|ڤOt&,DO=fcYWQ~a.3LՈ7Bg,R,R80+I,LwjWm4Ռ:3E X^m `\XҒUI-غ@LÊ Hu]P.苜-X\0^&3*6묥" D3TH*g)9 pd ^r'/қVjuSFJxy)$4d)8Q? mRLf)F)areDF dF«Eӧn*+$,a$mynf¢zv,4 E-*!݄7RqE6}qSj??㊢C/M $Y }RaJDv:;nVFSZnHԟ;`hMHLh GEd_Ch@ϝ>us dVaXd;ѓ{<{|lՎvw4/~ ɗfm7S$JW2n/X Twy-gh8=ߌ"&= Sa eHmDXFW֌34HvjŦ75 ^@"XzYKU߫FzzcX!554f /}Tk콆,՗z=Z9[ǵfS4TUVaN'F3 Ф˅ES4N8:ш`@c`r}=R7fgzP~3LLa'^O6﷨Au0%dCբh$Mdp 6a" unYL~adP%Rܓ i¬\s}iL:KvDoNKKKHNIH Cgc(4 efrlGaP+9oFSzCw\tSY'ZAc})tGZzG GI/;Sn "})hVP]M*:@=Yєb`Ħhg ]]\֠S3#DC}Ed z]oA 8LMwNN7^Z hab&d;Ww d5iGu(OXX,:JǯJ P'-,~TG4INT' ƆU: Jcn _oy~Tۯ@^EŪzxw9y{\k`5hia)vި[ "4򰔣@ :|qA`o,IڿA:xGQţw֨aaHPo[gzurO.FuxҤ;k֨1VR` F8kiǭZqF[0oaUȽOc}r}fک4c84%u 7pxiԪ8M ګ^ `Ao\mԛ~,!T{F}I;#οr.c%=C.C÷ZF_/*YDhmaV({`{֞9v0n~h+djU_mn ߽Dw{FN{{BjoR?PڃzU|fj}Ii7 QſU*|V)=}Bo7S)}҆f y9/)7?߃4%>Nl@q0n6F>=p=T\-1ݢ(/|O)*jx\9yPoV3G4i6ҌhLoC o6y(S z%lPY)U~OHM^>͗rD{ i'g?ǖ?1,fkԁOg?o=ј|`@>~'%=qba# fWr+:q޹~@-PmcXVA%mFԳ踇qqU? .l3#_Vf=[z6u=[w}Y|lsoU/"> w9fJXf{uK@KNWނl=MVaR[flo 6RlRm[e [%'u1P?'sB":m?y|wqg.!^8C1NF%C gz<2Aӝ()O05+79╈x[lVf}R `=_9b cH-mitEh b7x Lv]mHádž|V4S?VۂFR61HctKmĊL-eLMJ-\2,2N-3+ZLl2hnh$v[dq`t02&+GP"D'"a۳'V"NYԯiwTŻN$-^k~J =-=/7.LbjcB2XV:}6@0W`eÐA]S :}v* &`o11_E rMnukjg{M c՘t̵B6!s;xh٤7:ܭoQÛNHqG MӑL h?tt[]t]&Qv3s߅BS~(t+Dj*r] *Շ3Mv}hfDJiiE_|]FD\a苬/#LFxsd[0^ -*=!}v椦kiSڮr;C0G? Vd{PHck&x&ac,hX~MV|gvB_⡷9FT^YgaX"q:i7++OO޲zwe{+uky䑙i7x)p72R鶧u<N#{Dܶ`㛿-_PL`]S[朖-1cInؕ\OЇ AvȲ!#58 a r~R{gNSȓ@A c(>57'uHEhIVW :t- +Rcڬ3WҢp>4;9%{4%"X]j%;;2 ֍%3ǒh(R'ƻ'd}CZe g翭'O[~O.e uE|5N0 BAnE?fnH2:">:1ޢ%`[nJx);3].I(|< %ɵgܞ,8l ( ƙS6eWrܾ5+p5r<a.j4 gLYDݧ):@!&Z{zԛѺ C>Powѳgַ~YheܽynŠ.}7fe{uлMG 9&5 #@ZJr-(o$ 6"EJS1:A49%gn Pː>0-) e+E(T#)w "l*8B0ytMAK:F%kCVc~0ʔc aN;N!Ffj #X8ʑдd/Cs.[͡ )%}QX裔H I$\oÜdlV^QM2ހDZ<=HB] E4*T 22+Gh𒂣49WCCo`*9?8{kkgyͷjC ! ܬ8˚Zf̴̻xr#[Kɀ\Du$`֤d*fMfsQ bQLoXfl4u(5""z\h*Aw} ฟI=zw|>T0]0SfK-rއtaft6ê`J W6bDg1p:[SO*a1zT"eeԣFF&L&w,ҌD^9qW1dI>:YQ۠i3gdsh:*XЕOx}@E;`smdm͔U51, ֌C&t}eJ~a*%=tS=X"I*H=DXMjӌƕOꎯ/˰MnUЖS ([$AyRL6H 5h8-3/[) gd=t9[;\WBqSƸz1pnBg ~[4MUy]Ø"3 Q4 <`=ȳWRYn]&E;HQMgH 7Q{VTTIpT3~FcB9QHOAv 6UHvvG@}t@ػc"Zf,Hw.ud]z8,baۣiYe8x J)cFd-Ol?ԆpƖ=0D)9f.Du'^>]=l Cgt5a0H,/"`,CH">C"L2T5}Ev4t$>#嵋"%ERON`.`E˵-57pNܷX7akIB]"ੲK(y{¤p@36IŲzy"bX XA= SHGٔ_)RV2ϧ6޿RHQA'KԎd qw޺wƒaRmJ0f/*P^ENLB|(U|p'g=0f=S(j,%{aEJ? a H]a,eQ+2 IEXθvJȨB~JWN H/sLt0eK8F u(v\vV;:Rw QB±*` avxp6-8ٹ͈y␀KJR(Io?2.TQkti7u:~?Mo׻{pt#S4sH.n5Ɇ,m6X3.HcKCչ _vLHY#"KΖ$u7Gۊv@UDJ-2\`lj?cvޠ1Usf: :zgRg6" NېE*\@óÅA0NlZ"Ko\̊1l]G{Kp6 Io', *oB<욑Dh&Q6)tH9#Qe`% Y&cͻܙ|,y? :)|8^*MOe[ٴ,oLO/OZpS_waqb!$\&!/dJa8:FVkƑ1Q%BP<F, j#-e۽m'6ηAݣ+X{yGYѮ QuO+ncׯZQt rmNkr]/&88R+EBାÿV? еJt;3;|"*Um9GV 2"{:_voK=>V S}A_\^8@7AHI2:GN}}Au3͞EE0j>Ras @֕~rxx~.U\m5 W'Dnc MŌhDrD"&h0DM0|W,0M\1lQittJ0yM#~UnGj?El4>).j?ysZb5Ԉk7m`ɢ.Ձ&fk!`]]&)pG vOXۗz?pɞlh:Rg1%l֛CGժ>/U: z \4[EI:8mef|9BA8F8i9qh*3؅ )`'V}آ4A )~M ɀ&r:g-Z-7%DCf D朖w }nVOrYm $߽ӳ>`mzÛj}g/ۇ[Uj*x m@Nv)hv֏TEGw3=Ho@)ΆCX]\}7y:F1 D@IV%"~E˚XלBN<5C,ݾߔ$14Qe7mM@GT}Lћ ;,r_z`Rx %LRs(5;omfƝQ=D˟y-3 tM}/U+Աkc{3sZ#G] #a2y^[b=De|8yxWEEi5._G|NygqU=<ߢ;/QI{Њi׷}bSȐ^bQLx ?~cƣ {d,iēbߑȘ#bL-rgr,\HAݠ*yΦNՇ-)UqT,ĩhO{7 X0D%X"+e+ 4j.^ öxb\X8}۬(E'#MAd-- 2Cwгx0Co؍5 J67tA7bLP{i8ȶ22@$`vE=ʄ/ɘWT!݈&^ # d؁ō&d@N. Z 04.J8wl4Jp97Uڨ)~8yS߯UuM흜o_n'"8jr /Uil^q^kT׏_OZ~ToAI)&uTk콆՗z=5:ƺ:6ZjC5NOvkޤ~~ uڛqK5_ÆOl45'\^ ;dA KyZ۫ڻtx_qڿA"xG0PpV#Ȗhl-tNyurOCݬ5juxҤ:kJPCZP VsYaCF*O°@uvU{,ǀ{84RU&^Iu>ګ^ [s7kEUmԛվB0P/:4[Lc%1~.BCZ" eEiҹ1C}_~dBM, Vx9 >39lBJ9'*ĥSbOQ” AC"CsMDHnƈbU6v̀J\A`~)nggVßЅ!n=n1Te|Ct\ɇ!H#  |[\&a'$&s™ \A@~r9׮g\.@T`:-Wc$3@?k zIwwjiS,ÿVjnAu߄]0ŸlY IH~m'p=_/ciTۗ%@YARx4=^1䩼dWjb&ۡmuGCJRb[sx>BE#쐩q# 㹬V}DŽ`qHq!ADW@`Z&Ϯ4}{LdC*1~17l tp4RGëU5 xMZԄ٢ϕ,/g7 Zd0U*"2`'ͯ~asU(\X?Oj90[xm9*ٸs>9/i0sX}m@!)$5_[c>Xmʨ.m>ȶ X(8Vآ#VD?gtv*=v;'4p?٤B 2w^Lqd;sBBC8<_*ĘWY$0gv4givy: Ŭ-Ʉs3MQ;17-n,kS3Y_3qZhL!B]J~#Lf+ףXl/}^hc i9Z_%3D a+%3PҔHR'+v X]gTj.Ds*hNu}۝[GL*Ս]4Mh=jRs]ba@̅=_~8%b.'kd>r*qe*t?"\uzY*.:ˍiΖ%26ѫOvPJ0 JTHѸS ^Zw)5'2aSuXJ8 ^P;e(k;3?2WAZpx+q|Iӱ3`DFN}; Mag6MoS"_' )&()'Ư~!f,DUZO &# ՏHb2{fߟ hfy/eTnj77O- ֑-Fֹ,|V[7nm7+y'W3FPk!5g!fD%>N8[Lo|WLGL f܆^BM%&4GRN!`IQݯkNB$LǍW_k+ z9&Ј-|hҙIDw/:~4xwMAw&sޖc O)A7TlN"q{0%>˜: 9p  v׳+L++HTnt6LvMM0q\$p|k H:,h/R?K3Obt;\MFCi%`&qئ-j 'N%&mxZ66>(MOh31 ^U7GLUz_kj{EY5t5)/l44.ڱ︥bNV)gG~qN6JQ13esHLRa֫"%/CQӈ0j]=w}')cE1%d&`*##vD4 G:#֖hZoh :U! *.⊫U _}h~hk}.i@wQ\=﵏' ydл gI]]6>]ZfrVnb.m-삻$y$h`c `aBph\q 8iwƝҍ86hl#j 1[řjQNYm=(yVA7Lphr2a:Cs:죈ʁ1(dp lY<#><ۙ}|׬lqM6sCrb8Zot6n6o!sYb-lb]=^WRή_!w! .OF2na%NX±c"" w pa6vqVX6Ta7Dccr(oC,SIf~h]>ZCk| |f2ˣ{%`y^\Aj32c(Md4-sdG~a@GKVjKBZ_*@-uP?~|Ɍ'߾ܰesl`Gܠ ֌ һct\0_%KQepEW<͖Y… .U.rxEp $ƀbz6Bbc#m.:jLÊ:DTބ +{W g`oac~¬B^-D Yc ^A?vg Cj9.:]'"D֤xW_0nof!n `IK+JgR{dDXնMICBJI"%#J_$CkhH7JvLh΢#my hE?rU=cuq+׈!v_` vc7LH/-MUԾ D's+N":7O2 # ǭsA'q>} ")ZO'Tyxٳ1J!hPT+)T{1yqpVodf;TLE4ȫ aM|cv(SڮJj1|ѥqhp03K|za#=8px`bPpE.$' 2V5̛j$rPq]`66>^Lh$0ȏ"ٲ\^BECX`rhZ\O) X%&yMI4f8DOd`&*BѾ.}a8| ABA Z2B u\ r=i("d11@ .=PEhH,QE5{cX ˺r+$$XbTQG|;BkEX%퐣b\,EGu8SQAtEu?q wfĚunUIi)N€9:ˎ%/X~w+UrME+Y`))X7xLg^vdpf-+ѽݹ#>6D||p%B8UL5Xn mv4I&dgY:kBm_=N&s6yOڝH|#r͒<EnU/i$w(qǣc/"KfTWRR 6v*:lVfq*1 hⱲ˧ϥ=:/^oW՚/9'F‰MdD@wd$*v{7LԗtDv |y>&z8GrQe᧪h=*BssB!&@'6KMoI(#3t7Α:@[†KI\:VG.LQjN)ԍ!;dλDA; ۩>;l'ƨPNZ@? ݹ(p's8S1r'S%vgldN;DN;f<"xB)1<cxDţxψ K!pʡ۲Qڿ-t{Zo7Ŝof|Ғhxѻu~]HLI>7IvW{<9k8k$ӥ}Z||.E%0U>R&S B# (wwUb ~!>Z=-|LbӯS%ѤCSV|A@T|1QQQ[ <'S߯'z8=뇑f2ǕF2T&Tm!"e+iʳrt\K҈`{/'ٸHZ}$Yd6d;^rW~Vo)XG\.}DrkX׹o9pcY M.9QK,/>0%OJ8-lps{MS<(id6T(NBDҁp{9Dz}S@Տ?NrGht4?h!-@2Uy5, ܦ6-Ù&I9ʠ hĥOhĞ=ڂa] |;JΟ~Vq7_6`AJnw<<۫)S:C 8AGsa))f8WDԥO;RNnܲg\\"v: J8c`Ses(Ys.H礐K\Ρ O@/P)JuYQ= 15ֹFޅqwdYAe>n݅X+똏?l?zȊzfe#kU/AaUtsmxWd]\5KhvG)s\LcgW["s?s?s?R0