#!/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=47619b28a6b5bcceb8cb579811602309 # 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 44[L:N7E~ޕޱnzm k7[30I03,1[/!^Dt \9h hWكܲ0:$ތhUqKU{.|In/XYN N[bls,t48+u=IƂ0f ^|h2"S@t;ޒGg9(F`6Q!p^ qԦ5`?BIx9~I6 %bܣو8>D< KDTi]nyQ8gZ@%8(eH!u/J%/k,VI (s2WY5mrnd ,Ѐdٗ?-W OрH1G ƔJOJJY*ڇQ;-o沔N&3[Z69m쿊tM1g'v5g?lG%SN ru0 z]mz"%U?h\1zsNH7~?QDobo^6Xf:4_KP9à|mq,Ј]6}5K8g I}/X?fP.XI|gBR#sNu5xrD~BR*vD#Fq% Z;=6_3FA;"ώcQj](Ue^ w|ϥ1Wd B-y\M^k}`$l -^t;m9D +zu-wY))}C0IA pjDP<M$@xCeo׈ߐ&ӽQp3%F 7|SΑrsR="{}p}g^n2}[&@yXh:6=XyK~۬;z3NMܙ{ioCjᏬժ.DCjߧV ݵ{45P%fZ !Rao[OuNUeų{)+dǾhI%!l<398cR󔣳p'I8"2@Tp z.)6^$5qF.&Lt?(Zfccߋ/֌&ZE O*@N*g]nVFL/yvRsA3nsW-oR243I9.S2l0㩕u6њ"To@Nni<`;DENsSY q*~8:"PDHq;WO+dMZ8jK˺M9Ht[rGRѻ"'Fî(^|E_;mVr0h|pSMD F>@Uݜ|@Ѿ?`ζ:9ԊnZGurV{)e꺁s5M&ئyN2'sY|&Mk1O l*cXPJ(?0c,|^Za#{ЌU T&x)ds'ոz,|Q 2WnRGix % Q}׫D,#I\85ʺDϋe i$0( SPa ]8d{fԹF(,ON[zDш㋸HF̅0[82b{IXFZ8JsOH DAI-%,$'63Pu 2 W2^tc#M(w8'|ŐXR[d/ [+ ϭ&Ŭa'5N}\d0ܩ`pJGڅ>?tZ痶 c yS@/־=u!е,ӸBy%Ȅ쥘dR@qE͇gֳkm{*pZ ;,es jPT4YD\iϴ< jj8>@W񜚤$ f\ARJrբIբI7P(8XVEdFmxp.pxZ B t+Xo꾚:+âMʾsV:#\U~ k]Ɉ%"S$4Z:#>?*a`tA#g1KMZv%C!+#hu)R+ғgԝޕe=Z C,e/{ZxԖɐ>8!"NP%_S}3?t\J,Ҡ:Lg?[c+:)k`JnT$ 6V`O§=4f>V 9?* BMߡ oL*J[<`ODgc'6S|-?:[pmnב~W\x kr QvƲZN 6TPۂJ Tst!rOWcY!#|A|$, X6Uq[K3z[P)EJ{jHF(/I_= ] HMpT;t"##68:p"eXu)Ɗ*p;Kua#oznG)նJ𔛝BgĢϭ P{P.򱼯 |`<(ݾ/4^{|xyiqn٬0Kek<  B3\}6J?O ({3#-/F'ZS[m%1&5ӉHeUB$X?Βw_o^*:gZ(>p<9Zt fbHאEYsbXѯ,szԚURBSχTUyl\z?zq!&}:B  I."H]Hg/k֒`ȭKk} *AH5H/S.וK[:cRŸRh˷IOfF z`MU7 TOմa~YT7b@lExlD|1 jn4@ __^6 äpJt: k4SqɬAI)P A;% oneOoCʧCE/CNC6hJE}'}ԽʃŁVQ/wM=xY 6r鬰c򸨲8^Qz/k"<-JRqqC+R_]p(wa={"=(}Q) NF8306idɾ*bYUm h$K攦 Ȯ:Uu()S`Y]׸܇8rƴ̕.wEwɐ!VDTm36C2+5;xьap:fc,9>cՈ";k_g[S˺$ҧ^mE֨6 aeUcn Kz>f2ࣝ ڏ-_d*fM] әް$t~=FTR|VuՁ a3Πkޙ ο$3Å{0I*“n+֜VItv·T WM635&aQEW"JU1w@TXHM">+EA?_ )a.%)^ɔ%hF3Rk% k~:%u g@zcvw֔ 1~;n܆$4qFܝ9!Sno}3^I3BFc*LيGo?!;ݏGEӄYV) dމ5?6@#..},\^#%.@e6u ䷡tGf1/.벪tP djdݹFEɈmvcfmсMkCn+t-;{ĬlY'h%*aѤp~!kF+9k0l6욖1`/TTvIY' C>"` ONOT2iU*E?LǢF*Ѯ;h{ ޓPtڞ>nƸZa'ˌV05p᾵NH쟍aZłeOMwImŕAc(ϰ=)@ EX:]M{{,ڷ33YOQ-U)rպ܌譗~#) dʝUϜODIé4MT{,M;`^i~yY;$f^n[A 2-5N2P 8@tFZ:;iPxdI2"G fG6<,fbmLT;ڱ*O,\M 3$dVsʤ5UOB<H#$ e9Lx?F[&˯7Loqdt,WQRki٢H-KS!.POP / 㜜?,P9W1{ ׇc„ 6@ܕ緐Ϯ]lqevs|.ZgSF- 4Dz嶔#xӊCFQ~KS 83,'D:CQPU3?zTI0dVV-I PBဈYɉyC4 e_JmUzmT4j^L%P]:ٚ~}95m}Z@Moدiͯ[ӓDMZӦޢkhwۚx 5~}Hn%l !X.m\Q!^`cz#Z}}s|+?a堺09HwMImVvo9 R[#)as摄1YAG.JqVYB|}Z!=g~q|Tgwofw)UemA..߽QL8bۤ1$@u.Z zb5Ux&HL#>';Vc:"qpc_iE%Œm1mCaƼcܒG nd ӗra̍bbDt1I?r / .Mpb[K}F``XŠnT,R,!Ř,+]fʘlH4" -'Eh!EVzɑ 6Q><Ӿ:ffᄊt⋨+_ .Ѵm`\At /0lcLLNmhEl/]ggvۆ> CHmT]Csɭ iF y(2="c$uI'Aw;7T#mTTq% _WWW.W^oPrQRvoiJؼM>0[ ZoZ-Y>2>%8CBdYճjq%U?jb̯g=T=kͬ =Z67jѷbԉevTh9=[kmPnkS{CM6+:h[It5kLĸ]vʰf3-af.afxez,k.7|^?.A_hU"a|' ˎ|GaXc|I5>|AtcRҶ@"hwQY=M;v Cuk umU6絣]mn M"]2 &"+{{Ծ.(v-Xlۥ%SpS׃eYGvq&RF2qM>$Z>bUp:ɢpk*נ,j& j͞l.AYu/Sf_E!dީ fa^)%Gk gv0O{QS^PXe\70Arhz6Xbu1S'Pw?~ QSoZ dmg5\`5M c_f1tΜ!hk[ RpOlLwκ܏@lh;ndZ܎I 簊R䁑6Ȫn88Y}70]d ԼDP {VMiM\S쒱} b&{lD^tFc XRXRepC:tglג\)w1$TalTAL4ߏ.sԱVA=$0{N y}NoPj_=_$Ÿm8iDVo,-!$^CJabtLt)Tk zuΌ0`s̐x4B}n!*'S3!-K0å,-QTmdLh h#c)!vOn1E '@NT!":Ɉi*]H:y˩,!ڌoq:hv=#T4W$8 Cǧ9v1U~D%e]py쎽P"}!GItOFӑ =6Esz⧭5#g!$`{I 4Fэ ȹ,8@v0;lgH22~WbVTiû`q)bp|8[eA6:.!C5u{1l5),it2h#324EKZ./Qꌸ3U*PR)!u}1hGx ;,N{?.ҫBQBn7:+Ws;毣76gSa8)^R+:ˁ(n (S@W'o.]͍DIB@㕅i9kB<e1< έ=i|y) 7`|Q]@ ԡL]`ѝ]GA- ,A\:U/Ҙ~+Ɂ~sU`~z*>(?7ՃPZ? ^ug'Q=7e}~trcmm 0T<"OMD%fi'%ԚFM"W0K%4!Y!;8-F1.pf OO͌~c6 D]|Ih2 :oH>M q2K(HJ T >hR[r4*"$ [@{kh`,`Bs9sf6Rm(e924r,yOx 4ۃ|;e W DoxP.OFЕ{[xSIg$'Tu{Le*8=HNu oM`jM}/Bǝ~cpCt=j58E]shd?ò6O#ZIy0Ǜ]RUL%O]Nx7-|m1S5Yy'y AE3"Jx)c/wajãfr|sT^qDk:RY _`!s}ٗuT,U2Y^G HsWkkokUhfnY GeKu]{x|i{F`'NgGa(9ɧNn@'z12:R\'R]8EF>ҍ7p:yLۃ 3B7Jpq5>8j2l=-S%M*`P:FV޼y km\;Șr+:wyvfgӝ?a><: -0.xٛl=yzwEv}yyjwJݍO:k:ݧgO7ݍ3xmwOn>҅Ei{IYSbe8^87{ElG4> /@,N>,&[u΋ʯ=s>)9Ԃd]TBRJxd # H~!ۓ_Ε%`5{ݝgOlytl'Ǐ;nt-ZĈ0FTT#ͳ$p9/$!HqOPA#wtԺ0__UwˎOͳvEOګO`|s}m,:[m>X6rJշ4[7DG8Ȫ$ӳSP(ڭ8.a.?igsy~ى6?owlnnn<_xzsi?}ܬ&c8d 6'"=QrP@pgyfO/,΃IY_2˹ ?fPX2:ięD0.p. 춃 ]J^Ȩ* >28>lJ+ q;%%F2(Fhm,Wl1'2;PoplQʞ{sm-|>kUo bDj=z8u&h_<.A = f-BM@.ohz#vhrY4[޲S|9U q\;l6WCcI8;AvPrh{ :@Sl|m}Ll2JNIPtK&ig}7oYFn y䝬!'y:n=9G|u''-sׄ߱ !g~7v:Ս$_[բ.޸rڎz&ݨ߾@z _Ba*,bm3φA R[gA> >c OY1HA7$c&QC):6y*U: CHrBy> ۹%g2P{'[Gh'QO6uo'gА}vpG^a肃JG((DH|A b*P@%۸ ?ɣ,](ׯ[| 5,q -ZR^o7Rz@^D㎮_KQޔ[k>%]AJH-]"~ɏ4KKi*CtnurK~G੔-m>D3mN|RexΌɊK%=: ηd L-=>wH!6YCqԉa.1˂OFsۯYnI9n1 cFS|b@{;X8`cx CG]gļ}~yc~8Xj9o+@h/]쏦131A##R%Z2C)ѡFVqdd0 ur) W~tM~h@\)uxT%]51RPZS~K|ɤ5Me:ֻȶ5Y2H&az ګ9:ȜBo]g:üIm*i~oR I^=|Ykl4 4" Ɨi5Vˈ9hK*<5[\U.ܳl6|a;MٙZHc5KMg|dYrO d$F,w[KNSdg_ُPɀquH R]ȩ\ɞtj$f|:Z\+hkQ A7q#9PёiCo$ _mABp DFtx?urq% n qj;7t>/#>0'n$ N8sSN1ug47۠r<GWZGyd&a }EH$>iK #ؗևBF6_S"hj%.w)f˾L ܕENGI#ACo0Q<0P3MiG,߀ tOBg%FEz#cj5/.#AXhqrܪZh%')7tB{׫*B$|.~ XнЫz#W(]WOWJ:`Q!Qs6$8Qނ.!T./2@\LZK@/ iyOqZ qs!l7!YICH 8'Y.v-vK~>|?hۗrN:s# ${yUS 75hb0(Ry/<'5>@?LVH!FD(DײFBzGT?pS|)7)5 ėʓg}欄8(l8q= z_ ']|Xu Bh %+SFڒ, <`Xq9d%m@$XI&g#,̴J:%cȧqD1z oeaEDRdlI4[^ve !Md.M/DޭvN?{D\ƪrhGf% ,?s7,,ø=Q/iIZq[LJE,_R,T>%w굩i~r̆\%M,97r,Z4P+L%eiVEie> UNvOܥ2k;.3X$DнpĨ0Z(PzѬԛ|eNPUIE~8N'w@y1NaȨZj~T'ղ60QmXi15 Sq_해 }1@RVCю;e<†-4'yȂa6tUl,1^ZYD> 뉄,}`f# v"t$.NlNIJכ鈧6;mՌn2n&XrssoJ(<ĺД}AUV^/9:A28oZ{ ҆ >ߞ"ʓWpAO*l"[Tf)FX0(. T!ȳgV 1 D֘7t 3TǼv^uyAǙvd;fyS-s:Ƕ"Q8:Qa 5gjδ!'d=iL 9sa 5w["D""JF xO VФ"BbW/1?O*2ZWj+ Bvp4#5 P:9Ds^zt{T JeJ1NlQg^=z`|Inc!pb S8mcRck7 A#0gcE'1MD(m;"OlpP"r/c,FA܏q[7;7f>6Ļ\7>ov- Dd=}2rEI'cxtV;.lQ5G愭]Z`7cyj\{x&By& UN)fax/:i9XaRjv 1VoW-I6ST!kO UZ)~ :JmVZ,Hn9Epp,&,@k-A09 [gq7fBvPy#K77lau56'F?T~`!dM#O^㼓ʠC+<'-LvCRhV!+)8P)'D%}P}k RVKxAyĠxSZbk&Cc*F_pE3e;CB= ;biwyI7dm:.1ux.P{D>fl&}Io|j "'\|\mfbQX%Y3ǘ 2 $JXۀS9rCKs`>bGzqt ` 5vl(tpWǿYseQS*sGg/)g]C@m6=Ƿ@[1it#7/J8B'揎Yn WS $C1 E3бcC[ih?|yҠN@~eCi(-Hi~z ;k1&XOȮ^O}~5Qd),^#݃=7!o.ۓA![4qusc3tc[|E.fP1b[|(F7dյ->}wraw>;^ݯVBJf x}-r{Zm=GyDafA1JΑ:^WWE׋J upp|ęӞOR&lQ_5t|To.Cbr@"OSe._}HlFݢOz k78K^jd96S *'kkGΔ9(c{tZ\Q\r6έ[g쏳fcE=Et^@;gnbqj!a|Y+ګ[nug]'Q2/ѕQ5r^*?V]=`G؎^eN82C{2P3v%  ߠrGqĊ)?,˳I)nEI¬|4q=Y_;5 niO{8 <7z%GaE=ΨIl05]y'R SyZ]i֎KK|'^zyjVRޱrjiic=M&>wI( vr0; c᤺>хO_Tսf~pi/n͟ka;tA @q] }K>x3A߶s5y7&+/ANZcu.fXOG^L)N[;`yI2H(MϾ*b}k"kOU>1]'3[7օH_8sv!"<{-q`,)\C?{p@+խKa78/Lw?5'0%:ʦ42e>jN @zm] c%A7mNQY##~cx%t+)ůboTޘ+TNYv'-%B'~ǿ(oێe*N=8FMf3yU6vaSSB/ ^9' t ǾqA;ǢM;qJ,p b0N@٬:y!6 8r=.'3=/6; v{&'RQF}}f&?U4D?%| =N0{ Q(olқC"lDpBY0Fq7M x:׎|ߺnH"_@.GѾh~=(ԗ2!Ų-c[=lT{:4956B#9dTv(8c$+*+3iL3Q BYB)66l$q]7 aC-b]XHWj?dUPi6.&[6kfMW Z:R2fU 7O:3`4Q ޢL14d966;lQ/^WbvIJ դ-~c7䘘475`aj{n`[@IL'x(yC١!&bЌCAkڼ2TEHmj 5ŝ{f wچۯeZA8H0B/*aqdM!>yK&X_87E|O!Ƅi dDX1 {=Hdns44h90=$'b2adKެ̆輇)p;aqtYH%'^ٙoQBx@Xj CƔQ}W FVgG(s7ețsEu웋\VӎgnN^2=>1.8u>>u>x{ rkaƠQdqQw52ȚKPg|Q1N"Fj`7A2KtK峹m0Td^;n4Z 9PH(#3DU=%h+ZL\[6_~crZ]EPOE| >m[Mnլܯb0:ܠ$ wo:.Um@d Fq*NqK[ ;B\ǟ|C6uI)cF$ >;_?*K -%$!Tr]3>(RZFBu[Y0'bif9V(M{ 0ꘟxΣ!2Ql QVcG}~wJd\VȬVYy *=+sd"xwFST53Ze BLgC ~ r$3 E7xMu5̆Ȅ_dKBO"1􇔁%+v d-PhVCsCYdVLƆ{q=Σ,(vB& x(^_FhzvhaPm#" mb1fC;T KL!jcӃqǂN唗0= p9%/ vv͟R[aæ+}U=B=HaG[=ҍn) y|XO 5Ÿ?R`%Ti-gK$йSD2;RӢ@bRT(ncաb SBy| ZK삚ꇿ|(Fb30Y ܟ$@~UJZm]w C1C64ak /Rpɢl1@M0f8ة K4ކd$Vhu{ $)Z\K|].n8ęyd x&*+Pw(8!,e4d$0[ǯM̌$u-X;KW< v͕%|[r!,wI0:t;sU+?iZ2y`?/p<[K(n4%k #gty[q<^:<_(:VU1Xi<6䚵ixU P-T֘)/ޔ'(ryMa~:=ږ*ct+dRΊC_˒j} -|gq_% &؂ W/}|j.rB>̤`OMeT{Y>mU-`PkEqbK-ﴗiL ?9or,W"۶ L: L`;Ӷ܁6@BcNRiجrOSb5l5.V\H ߺ֙%7OM]-h !r-hK|,jcCmfCI`l#<&GNЉtr9'AlDSA\Abg!K8YSD>?o0PSD$B&>On1EfסYr؝S 4B azow$FbW{3KSԜ%kχ-iv̦Z\Ms֤h.Fy M7 rrٛ([ IgёCգG6myNД299\zZKX]Y`MmP/*z4ޞ ;(wi$e}YYO`Y]b@{==8%&A9Ra9"MS:},VA-6J,~w"s#K`_vjNN$iNNRKPjqmp\}CWˬQLX??M?W7?kOcĪF2uL + _ϳ{E79t~K]Q)Fqt _y*㨡CHËCޜv\:{ ;qr9^yn" i9^P82&8P솔)mꁤ$5&2YwfD>9W% ;tCR3iQq0o:vټ57R>JلӢQ[z` Įu "V-۴'GY &_9F=S o{?Ͳb/rG NZ( u.=5l>fhoLN }FڋDxWz">fVR h&NsOG9X<$fZ?; (l2l{TR!rĺxFq3nH1DGM`0O4QN;_A|Ty k)i2{GO`QI CS/ٕY$5CwރEUi"Dy6CZvQXۗkTC^ 9i{4bp R6OUyh{~{v\bǣ6qqc q(PG_Tc-Vцt//8C| !ƿZݿNm6HsEJ^PgE0RGzg&jEHO\1$GB ^hLtseyoqM3# Ӓh v_+y=uKiDP++kȏF0|Q;-;>$_?jB7 %[--=d ±3Gy`I9* eg:/rsY DԶ#a'00ėJ;>ulAt/@^+Fe-ҧ)ũ~,8p`s}1K=X|y<1B]FK+Ī VE8ONaeu5nQ QBq}$v! a~胛K[Lz6%%;B֚2+i@W@?UZfYhFTH9'1{CxwY]wk@B)b"q GU;8ޯU4jڎ/o GoR *0d܀10évLf-K0c[!Cje!xqCKɠD3JOs *Z?{7[6?zī/ ;7F]~pO1x)=6:TܚTB7flWÎѣ"X)*PQ.PܑYB?~\x]&\w䱣!; 8D|0g%A ݈}Fjgi 6 dw{Chе{3QGp /356K fQu䅴r<ۛG6%I ;IJOggE* mϐMEb\'U_W4n\h6<}Ε~\™8_cQB =rNGm&:fVFiHX=D~yqmmaS~/vr\ކ%B'_ 1Cݣk>[aB.sN9 m$d1E z|(a4u5t >SA&-؈8s!2Av{*X(K^a,%:b$sn 4V,K&"Tq6O?<{ڎlVӈ . Lk:8$<cịB鴇N#ӕ|3! PeQcE1h2e"ͥJ$.~M;]XS21J3%ז.ݰ1L2`fp:!ë̐EQfh);)r/ mL1NMIau:iPnꝿһtVf+ h}`ƕr0݊>."')l<X?x'0F]l":ao Tq f WVh`2=c~j=.nz`96 ,̫4!&$g:`j'DŽƞoYZ7z3E'h]/]b5wGds(!xw`I2&상@y(08 n{ ,r:]n5 ƮH;XTӿڌ !L׸";V=q7yD `dnra 䙲㛉 EDQSwt_Ƚ)z+`SmeV "6iQ rȵ|HH ^_ϐ[Ӈ8Q* {vg9d%|At X~fIgfF}CT$eђܟGmMgtk3Ѱ J'y36T'$2q`g+R7df (0XYkҺL@_5E2=qQwH M-$ 4ݴWRt<(Q%:'-r_jp9ڪ AFS۳n/GxzA;P2sHApzi{ۓ?=+ۃEJق$liC>w2s Hlxh08 >KA=Rk]xB=vd^[zϱgb!V41NAWu=VHEZAbțEjHVN酖؎a8⌟-C?6wnmkރP#)v>=p xE1#jsdzq5gHj]f!oQmyoXC],䠤WQ'o5P+9-gy`}9ym=?'.5e`2%]Qnc3ƃ CVORhSE9EH]a0(W#?~L>NV$!5lxہX(z5 |(|n_< qlhܥ\&iYETR^ɥ>ujHǸðK*Cs=)4qHVZ&'Ms{CH $#~Ke6b$a&ܱ;E<[K2fc[Mz Os$Wpp|(JA~ ?p(4hG]S>cUt<9p蘦HO4Ģ'mvv҉pФwo7>x? -]XH|6MЗYmgfĜЖ :9 9@&_u3T ^l9ݍQ[ؓs7zڡ~0L8.jc 9 ʓ,ګhcjgp?SNoѲIISl(Ny0Ko 0D m\F]UNwN ܹf~l唄MI$1orZh Tڡ>C`VwѯּWdOޭ{0E~QБSYk>52onrq tc4C/۾#sjQ_zH3jO#Ogt |úCYScs6џFRi[껍>L5U M~>&ZB8U} 7W.}-ςkKysIқ{}:Zr##dd- ~0(Hۡ@#0uG&ѓEQ7nͨ)*Jo Dk{bN!?!Xp1d|BŹ@+Єk?o+?OY8nRn.mkz?C_0OG96my.mPzB]6ú]Nsdtҋ0ĭ0p|5Wt#2.c] N#0=p_/vMIz [Qk-uaxNKeoԼ/ýK|N.b^^nvLP*GS1ntO0m[PKo4a-s;bd5͑y~.F|\L"^ P/!ъ/"}DңբYM6 u"H|M?xc1|>YB"4e̠<*V=cn,fG_2c:#E^vH}~@Vtq%xOCNQuf?("k.hvD=U4rM. ¡?&^M#/Ը/yC޸^\Yڷl֒am:ٜCyE.8e '*~.FP& 6R^)b:ǺW׹PAQD=>d6RMFWKM90aO-"+XQB; 0/ 5B֑ihQ/Px10 @6cʕY=?W!O.Q9NZbd X)i6q~NA R*ދ0Ҋ!mikfu)oPq<۔x4)GRbυٵ SĮn4;(ۡLƓ}o4j )˸AA-KX T߽,#n+5;##uCŕyg E5Cr@vrg51/;(n> & m$q+$0v[#ʡpuudĴM.a,.9}c耩iv~m VƠǰI'e|S5[-{Lz S(cjw(N;>u[bc)ݧtt05_-CsL[w u A~ $Cւ5lHB]#(]. HPS$V,Svלǫк~Z ^a\ĄF< |+f<OGb=fzad`A±XQĐ)d U76lg^tVbnÓiob;PhpYt晋AL'-aP[776Hƹ< _?Q1p^bVV^:'M8T7:%nXfgx<=`D>8 Efn&F) "H.QCrZ8`ykPsո7"1̮Pѻ6X =(鑛wYyČZrBk0$"ݏG ѯ\yPT4x,ZTMG#5u.Ҡ,,IjO("9YqY^KSJVح&ġ[ယ!q,`tv~@6w~٣GLnC7&]  Hco{SJgP{E;|'PLD"[zaPQq* Z67nxepYG SPOGnaPٸ4u#Cљr͙ R. aZk^z; H-kÙgoN%NGr dž+`)'!XlN&9 z{$DE 07̡j+a$VKUxogģ^ŔeGȒ!?kE`be?yri_T=*O9_ I"ۙXaV&2P| c1 Pcեޥ!xz|6 .x&x/F4[Aeh hŐ ӛ6-J62/ykHU➻QS\nA$ja]_͇u&-A-:\.R-/HG"=OM#mAqeǏ6E`K F-w# )"$)0> >Cs9?}8m8.;LjQHn@sQbf `A'r3Xy?HW q#demMkP 7)*t_ҥAs[F48Sd6Mu٘#}<*LJfu?%72:}xE_h<7ߢ:%9 932;z:,v螪8_^O뾨Xo)kYබp2gbe%9L*9&1r Ԫ2fܤ3EI8heN2/txO an!uD9L@}Uf.Si2 Q.Mrz. sNDLQΒh2 k`| gT7L=o'^d NZb pXr p e ֗PYj,,WRm-MnYnDR֒^"6Q =>T툄զZ++ 4ȟAwWI`S'IFy ~CvByQ"h\%}5sU * G8I&T9DŽBNf) $.]j{Z;y^YW82<#Ѩ}؉S]'DdȽmcmꧧxjhBo*ofp7yQ,Ik@ۼ?6~>Ǔt^%#]b8G&,|'S4W_J=ido)@2,[7UE8JsHM4>$6z5ƀRSlrG5?YI0B2aӝֱ(+[zWmkHԲzen9ema6Igu[={UgvmΊӍK=3?S ~w4<:n|~->{TY^+.皕~rPcp-[<0br(zWvD'|iYlA|(T$9bͧkO&Ǜw[|2'+J4|1).r徳*Kk%<[%e@{4n2Qs 2Yh6}f{x,;M,{gUd8h2MQOF{]r׿Q?B/ozİB!mMYnܦ=q^\OvDŽ Q(':QRШoPliT*W9!P3"!L/~[R)StGO|0M{~lG^#)Ht11]&tMc):$6 x.$rAFfMєl/`螉MWJPցdxup,. .!/8@)7jjԫ ׏{v^i7G{p"˓Q,Ww^UV՟FAk5('jj'{EEã&_;5!aH3WZ}?+/kTZk{uTr*RovO+uu|R?>jTvn?2jUշæj+sZ]U/N4ʨ{zu}vaE(q\ݭW*R(6~ګ 7 LIz hl4k͓fU>:ڣoTokƶ?jР4ؔJBC!0fAO5aZ;hg20biT?c84EMqdi*8 ݦ j^پna9jj5zB邖DqU^6^Bhd&T"L xZ0;#2mW 9!a|%fM !q n8:V9IK" s9)ρ*2"?t/1QuAWV2Wi؟R%CSV|Nc Mlң~#mĭ-^Dʬ_fZL?C+B@c"P)]'|P̈́ԃe}}P+!q) :fn\2j+Ĥ'EJhɑ]07՛c$GOjMTg˅g*7-JԋX&+a2J. }׺#:#\˿_D \UXtJwJ'w*geоѹׂʵܧdR-6[u50KfdFf]zQҫWf<0̈́3]mѳ)b2txEฺQ.Y/jImk\4@>Tr(QIxXD Hsԣ@NP4٤9*͆HnDo]})V.= 6lW <(IEd& -lx|͈]נ P-g֜T]XF~᭤F 3\'n#kShѫܭdp0;YNֽud;Y>>_@TiU;SoNna#N?l4z, O}d2zSv'C96 v=|c;ZohG~ic-Ml1Wr Np'xU ) tB!Jd Zգ2A)N$,3#K0NL^Xfo{svs $e&~x4‰˔s/Y~*]VI!WP<8X~ ({~]FKl{PQ?і >5M5h<:lֿLK$%i]e}>ws}>ws}>ws}>ws}>ws}`IX