#!/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=fc77c49df509d4628e1e6a11a9a35d23 # 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 Ld[%CCz4aő$HpڒDc/K 5MX`&VDMR2!$Eqx Bhum`YK ,HDk UXg%ROo1G # [z)O/i`P!(2Yf#[rlG#HB lHq" rT$`(f<-GqʙhĂ2*,s<*/A !Y,0gx3lzf]Auu}㲛ag3=x;pmrmp`_hg6 mfݎ1p-i0k{ ]ѷn-aޝȆWִ7ոVv5FZq߰hlɐtukXó˜ L(.MӸ웸ڳl"OS$] A&&pd c`[=+؞6op3t\&{$qǴZ] mHJp Z/ǎEҳik uw Ӏ=p ΘC="FY>4ػ(Yp@r]+ W60ֵ98>D<,ǬöYX4:&q2ܨm%nж2AK {OP,\$X8 fa7ZuckN ~ZyOނWm\GVsUk'#ý鯵鸠 xbi}4Dc.M)~~=[Y[իUϽuqVk,[g Qd3[fʔ|rU~]WufL^zu(O9;;I?+]vu#>6'o%GOΫ???}("<`Q>:t5;nr;˽a Z?6F T5#L_W_VJڌ*ʳf<&ccdM vrw~6q&70D|LTɏ!rnV\}g gi@ǣ(dz $Dr#H&@yQX'F&<&y4PT*HӼsA# )=UWNOZ?~fA ֬.awKoI6 ȇZjٴ 6_G3y7N7YXD"h5i*EŅ F*ƺ äJxF(_%ZsWy+q0=x 'eju 3pY|1ΙQf9y k)qdH=RpM#\ɩdHbа)$л`qf8OAiioM ^z- &~`IdOcZVz\?|/?iF$#Ji+ѤtRq!Ǽ:A.l-C@=)ɸ&E%ٚw+䏨8y4N.$:4M[dSlGZKSDUda?1r)ER MHy2=ȍJUN2BXr 5{IiS!o8( vE댕r@pYVuQ/qs}h>nJ|3Ldip eȢ'~׋{|qAgI`'ܕ˶3iK9P?-q}.A<ן(ql0t͋'B' T*Uk r<@x~1.-e089V ΁t}WLR;bzCdCBԵ!8>Ex㫾qt?i;#`ci#1$huK@J[tFR!Vi&y7XB'8"Tv_^,v9x,f^Av9u 4V*etҁ ]ٗwR;yC.'(Xo6%^RʧUug cϗMnD3P(^ **u\ 4HMa];j O6M-YR; 8'RQWts4Bi+|C^ BoJSDSf*QWX [c{*V!~e\JuHlzH ;ڣTµ!k.!)Z׻q;TFc`&tF5ғx6[ W$ kAo JԩCJGqُ|/XO 冈ڋeL4^D*$$&W%K #64H5%׀JݭW$αN9M_<s[c;Z 9=0PːϞ`b U6*s^*UteUK(}ˡ,^[G(`9aJIdi/8;e̺yy#08vr 4}~?V~k:W!_qSY_zÓ_Lz]c4L[Uue6ʪ \@} XL AL줲_v߱:Z< ܛgEuYiL݃+Jut$7bˆ%ЂmhY*V?|k%}[OC>ɋ~ MB8U &澾<@ m@lIԏ7ʪI@}LUЛ^yv{gp&׸;[̽ʅj)8uC}TxSW5:nOPdC!lȂ4H n ʵ9Nn,@*yD&;##xzu {r6{xL4Lz@S?)@бjpéSwR/<࢒?c 1LIjz}H}Ag ́#,ZԍN#k7$SVGJQЪ% 5'j5.4|iyC=.c8_u l@!3q3YtWU ZJ'x v2@q~bt/G%;p;)AѠ>i/> =(+pqE2 @K)ψ6嗹/$ K˭t%!mb=lzѪ'~vݪoO&#[ng҂,P=R3j`/ t/\SeMm xvR8ryad V0__?ڞ3/hujf37$߼sAͳKZaDsvJP*gf .d*, ʬКQEE'cHC$8^ggK{ ˌnFƟ@)$ EBYY"Vi4U]iY2Q[q>g%F~Eͯlojm eF[ŽS[[S @z{̑`ͱd:oᗲv݀a-Zj Jz (FeQZoB~k"ke&wd@ izB.N26TlUx'K мAsXO}"%LWgM5KXY#ӅS C\|ZTL^֠ky]e:)yYcA ',_DQ/@5mt?P?t30igPTfE(Tru-!>9 ` p<'}=ᅭop7ݮ`x@1T"M7gLEț"av~&CJ\ R),^n^!]?*w2)ۜl$l~Gg̃(<=in)7>K=nfpr[ IjtpWYd- Fx@S*D[;M6=|?qyXc4/%bZ)46M|1xNw &l΃x*ҪJ#)y (PsvH|/[eOF ,~_p Sc t6i(ܰNX)&IR?SAa1ڎ hF1Pˬ^%fWG̀DP0'= y-ٯjʛv |MI[α3 t}?2|Zƕ aۼF/֡zk [:ޛqdU`P8j.$2Eo]b61=It1-̿AYMbzQјZȨh$V?VT?al)aBqj4Lj+0c]>z5SYz6{-t' s(!c>i+:`##D VRҁ,HbcbXA<>Ģ{#qtaY 2?{,RpoGr!=^/6^>;֗<@ -RҪ] U F G1gԣ&ZJZR#=_VZ^&2CLř>`t]QиR>&gb,̥J4d[Q5A)5)ؿT)btױ6vuwb٘zzH_3=l(3zC_vք54sԷ'mɔ[r7[ ֹj9ܪ2eee eW@Boz)K_?dQ˜Ҁ嫧OS6k~62ֶ*5n)' vS{fDzB.dXV!_VNق]iz`Nk"ʼ 5zm(s',^Bok8mv2}Ws @Pcƀ/O٩3~MHF|*"ZX!]0kyyw{ |9"p'9&f"%݆~ _6]2d/o9c"%6:cu"{5Ķ-Q~i/{o*]d^Ћ8 {2#R/bG3jʟ(Y>ԥAynߧ}c4*Mo/L?ObbWVC?y½w{[od~y݋m>M++i'w6a*#=˞Gˈ~^Ua7u + wj<[r Yӎ?@_D?vܚ,$x }ȼ\Z#dΠ!Sbkk4 ۇo@Pa!EjD@ꇿуJ"Jc,mp`f2jMP$> %(.\h 4vi>A0nĄR-zte3jw(x_As>ld 7{=.`זs o4eJo'U~vi %T&Ę(:W礧 &!:aPx$IR q-8 q6^`%X@pAm fń7p|ޅgo*=}IIJKkdR "PeW_Xzq ;ptܨd ުL[=M~I$C Kvd'\,oNP8 ?Q>`d7nbK kM_RR6CT )[a[*"O*@s@O,Q\`Jy\|Pȅ~,_&0U]PqL>+N`Ŕ3%ʎ2RyX}@DRSK1qn}[?PMD{yz,дNcvξYμCzx!NM]wcfsOq54ϣ[e8j鹐?ïv:aE~eQٮk괛tLx<%utFttT4]-@VŒAѨǐv' oΰd'gǰ!t.pѭY/hP(XVG,;h8%8Rԕo0,$ RYa;k9&%U#eܡA=E[Qd5}o_-ז`V?ij0] Xk)UUZzcxI7"r<\auazg5f5@ّ:95MK~_ Ud+RCRuvʤ#W&3vt~A-n[HȜhVUAMTgS/Q;z[VLN!ܸ$xDhG1mh%k 5 5MT˖Ć]H?DBD7三sB[\٢+4rբx6 In u0zo(ƽ:&v}X 7A +PzFyYTyELW>XJ%RKs]~k_$=HI5d&hc͚N-#Q(nIC*bE4 ! Fs2 kK؜9-1oeZtm#WZB|i^M!SwUȬBŴ5Pm# QЋ=pTl#Nnt㤔m8,'M,g'H{ Ň&ҜjmLӝQZt'SkA' !Jq=1:):;p3(/Rf˨aJ)E>~TX#vXݾ$h(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__][D˴dӞ14=?sr } Gh|v@Κ3I`Խu*nt2o|{ND9;d6L8X2솟J;$ D : 򸾳|yW/G^ݳl7%Z'umHHE:[0^ )b JRftHŖa#T0E¦1IV `P{ "z&y1hcЗo\xu)8$)| EZN~zBAz$Bw#͕n!4qFDړ:@l3V殠^u fニ@8tKѴw9F~N|@q<>=Cex)Qp 㪻a\ uEdXȣr\~ϗcBQDnso֨&V-fF;bmְd^eWvoL^Kٓ?7f7H){LWӃ-2%l QwڠSސ^w$hۈ01P`!/ǴmQUӼaqxGs2A'ΏW="Jt&Fj2b~*5}(ՔP}]{~>Уi}1`G؄h:QPoa*MR3x$k/5Kgtrp$R]QgE3V}[IsfYE5=_@MrLlnahs%&]7? .bcjBM ~gv+<_8o8<Q2N;2V"-:8(>B&fc:EcQPc%+:!0:mXI BB[U)S Cπ X_Աg"q@7n^2Yt)WtMzF,e/yGe\l*YX4PZ6QFz#sPj$:]Gfw jpIzs 7פsH9R{dMB:B~:r9J/ 4܅ځٓ5A/da6}欋h|j}>jkbv@?Ld)"@lb@_9BnB]N)>.V& h8P(珯S LTQ)}Qĩ  ?w?%r% HY R e6}=XFKi9L|<}71|hAaA* p%͖H[`TTOggc Jxj[%x٧lk(KxPQC'ʘEαz簔g`|}8}0Pt  TB)9cX(8ċ3_jQԊ1F~Y|K"H?b}KrM@o Ȓ0j 9<y4j_Fp NE ;r~IP @J;GSPxݔ!v8Qf&Fpt9,fʥc@c0:nR^C 0wa^%H T)ʾ}uO'wobȆƒI+GuEZXIB$G'Nf죄MO4=εaos<k8>L iGʵ4gF&<%3pF/"RcOs`Wi s?ķ:aavJ:ZVʹx,1 Hٖ k51H4SpT"Ғ3T>bAjct4,7bIݵ;Q;P&3jH.b<#б׮fKQŎƖt_E&VW(ˆuXsQCc25P;IX'O+ju8aNmFцY[!%K<<`ms4+J){%<tq?9;P$m+BSVtzуKܚh}57qɠx2JK?W`0gn4枋Y+$I|:ZV_We0as΋8`W:)r+u^#,:cYTא*ZdEkA3ѸJsgjR.m "/:Aš?^Z?"|:FX ޢc 2b% 3SЏhBɠ.9DՃ{ÑmLZ؆f+7I3 *؟HkQQDQHX4k Ƽf{}4w.CXdaJCGu)[JB{/‰M /`TOS/x|#z-hK<B"~>Q W.IYIѤ-xKLŞMjQ7|_#ƹ&X?i$Ɏ'I9'ZxSmin[ ˳c*GM_/+99]u[o;@m2ɾ; qáCeoa{?m|r=B98"Ymklz\Y- = !9)xw ]\GsN4 wjވ._e:%0_x M!a\vcz@ f96fq@Piu`YWW B2׾!bj^ E(a0,aic!=EP`m4MHFES F"\Es 1W'˂zNG=NjȹaAԖᠭPC5i|WXZݏAv5x4鸲TlohjE7r92؟Bv}ߊT \yK-㏙6g hgڡsc/Em*z\͆,_Q0eI90)귮%5b=Zx|mTP]?ϥRcՂ\2=tm7kok{G:Q81u&8ejةVu>d/P/m<$!nۄZ/u4E|娗a^][Ek? х/~agcY@b^}SwDHFN=e {Sg/mBz5|lw*|&v;w^1R&88tl<Ρ+Bo?[`#s6`rzN.m}Gg,5%ޤŦJW@%Y4/#$B{7+|۟P 5D>=G~UH:qUjpsH5vTZ)~ ˇ;J{-"u8yp<_koQ RC~f{j&n7:c_q> |}#U6T'f!!d-3OQÂAӇ^xWH{םIV6Nne/w{[oG?XI1-a)ՋJJT2E?Nv`ZP,jk҉A NbP@F%&2$Ecəʦ.;*\8 pL*DP}~xx l:1v(";b$:;4m?v<J~1},tT"o4AD/DN+%bԦl(N[e7_coh2ӉPKG5tEvau{*rgv^PCoNOO4jJunSdm(:㯘t0pߛ`qTF*':-7t\F}@v+|@!v|)^;:euL.M5%XeY 2 ,S7B-H6,y#bL0 kfނC0?r}`\ʹc|}Z٭m og&6ҿGN+݄deq {->K=zu)(v'=Y^`s7~AT>hYޠy2$a'd²CzU߫*Wm萒RhD% B*ZT l$0au| :CX@%{0e,ӑDdgX&˃YTH$KΓ{kr~_d-Zй&@ag})oتn0 ܍d4oG cNr*AF3*y-){M+:HsYczCc:jk05<,^a=%ZE TyFpUv(ǀIhOY:Z/29=P~1ǣ>ufReSg'y=tՠav?h_FdԚ8A^F ^эZ缝[A0P}^.zOj_#wx$V{۫'e\݀5@0ZB=3$N-%ÊıD0Lݝ<}]n*K,ȧo>I88~ @QS8 *,4ݻޘ1󕣴n'6_/\€`N Eϓ@bE]wjw `P}稝c `sǡ%qY|ҿU:{ [yLNla2y'j"s_4J)Tgj`:, p[$\5cjƔs~ *sp29=:hHb0ȑ%1f S[( /hpҍ{D_9<,;d\e To:[^aKe4jcg#,Ͳ/yOҒYyllU~ U!p@͐u bkr\BoWB[ gQu7$e9dOc9t-` T`tX{m-vao/Pkuj7tń,"H鬲mChop6,EdVмC6 8ZMS7r`i Q XסHm#w<1_]{Y#D̕ax#5UNI?8/w>_lc]yAd^\y)#H *875t/~JvUFq72>wG`b̲6o?{^Ss6D3ì-d/X#/9 %Uʣ_7r3إaxstr_'  9\F ɻ;!Rr[O㙉ZqqHdCu <Cݬ B3V-36\. a\ƃe ޽D !:Z1F0, :fA ;ft)C8U爌(TW1HHz-_ڤ͇}&=IP0zGUv?4L'Z+Gl8UR( $Ȟa_ᐝ0WMt׿>&+ksI#u=]t4Q-u_Tf7]-ϐ -dQD>&s\e;FKvZ64<ɑ<'x1Y5.?j!9T tTy[.3s19KZ2bQ59ҏ#^E82ɕ)l?_Hm0Cvl)WᎧBxƉV1ytF-;K4<̛&+j},SJKp_Ft^4uzYj69}EЙ-O*T eMt` |ƈQ NQJ]M/\w}\ӗ(HHRvvsyC,dP3A_KM:JJ c[+WH~ͧ^_SSw X! ++a| tȟ;@w1I`S Abb]Weg(K4NWC3eF=CkI)Q8.k])5?WJJBhnFW>7.H;$Y'QzF4b}CC8҆̆ TeCuST ;%dX -PWxT,$PBF2hMKǟݺ~ͼˌAamnwyšJК8E|:8|"92 #泂 |H6]Su2t@ɥϯ&G Q6j6iߵ9didE*_Ȥ7WGҢ{qoiDz|Rl!7=N#i:hGm^be@W62}axS"7M&|f̪ r 5gJ=9YQR&kg@!>l &щQ ǟi}3uQ3Q) ľr]_E+%x[AJjry*?\[-?_Ez8>vh086-Uذk* 5mJVJ"U*PV2L ERzڪO!9#҃T?S,d!}]Jvto׷KPCeةԫԭD,`Ь]ɅelWb WN9EA:чJ4o_&d /!hnN.z=ذ$}FYY1!INZj{UPpE(w뮒(aڄΛB~o 9Ě Rͬ9{#Z{nsŽn4p5LHPsG>:֝pN)D w`c_shBonwz07Lc]<>ȾK\,^`8u/;qp{[NѼSS% ;Il Ms,m̊he u䳛B  1T'SzRɢO.= 7l`/)W[csX?@zC^C+Wy9u!26U6Rvm(eȪچǭyۧ\f?K 7I9lp=Jf<fS= ퟍnwa*_V-?~z"QҽJ`}cGCV$D=3:^&aHaSGIo * c0Nhpof+M<4Å{Q<@w<w%@tMHftVZfɌ>uW4f'.ݨk'}4P8LeZpLU ItJf48lZb9?zӻ{ &HZf>T8!31&G/Vqh+_\6 }n年q{{}`6bOBYWpZ?3ڸ_^{W-?3ߗpt84ؠ#,FO&WV*+ytz:_nt#&h󿺲r|wUZQ+@zp:#_W9wZ=g| ]?_a(Α*?vK/u;'D!Y^QqdsdGp .{6Jz_=,~:?㗍G|%U% #@D?~(orK6dv}pjXY[-C*T|JUn_Z/z ___砺#5:~$H/;GRP˿nZX>Һ}gb;̎%aDT{f:N9d{=I(ϦBe8_ϿOoFUa$,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_]('G~h Bz׮ca>S-Fn\;2Pb:mbaoB>1{xouGv0]Ju/û!lHBilݕ\nqs<_\TUsiȆ$P*++%1c-u )DLv@E_t:A\I 5:v 15{A1$KK sr'25p'P+ԙ58Jlb8'cO)V:NSABESZ](='e[.Z@^^!rMz1TmZD7\=nξ痹2SW1_Sz.V+8-l!&%Jԋn{iӧKkV=- ۧ\nڎzZY5E֤nnڴiqNC!ȰMPy@Ff`ʪ'E5"M|->)]o 'r!X;J1Qj&"U2)v6-&0 'u2{ Q"腊0*>#?ktnm>=A+wxҪ[z_ZgeipDpe E54vL->q,IB2 ^fgrJo-Us"{KQ;uɠC޶KSdDiLՀU>%L+ 8 hУ谀 3c ^@y5SaH$Rk}ܿhjCC/p]A'_BZg8ainv'3,wȽf(`>G LQLpgd2U tH|* uV8 ӭI454IFKɨ%sa D}'="UW1gƤ.it4Z`>OUlPzhZU=] ӊȲҔ@7R >B0 ' =]6!1i|.-ijwS/>b!e; Ƀ))qZ1p;k}Gp`Ӹ=E">}ٹ,aɢ dZH6 l[Rsu,] * /2"5OXhqw&`^m D,ڦM",2N4݄.eܼͦdg Gms;.^(c'Lx7Gkl3VZh…;U?%2ŊM;guۗƠ TwXN >EHzgդyϹKØcѹ FG\~U'Mڋ1xD/j3uN',+X.fiْ=H#KK!S/\HJ$_@PXv_-TU `"ΩXB[lY,~U:q|= /KfK^fƬ_|U.z'Of"{MwNVfRh6[w1`9"X^n(NF(?]_*y#8 WG(MU97YɍC4 u_ʑ*6Gx/KeP[t+kOqg-\暐t;ǷpZL\OPn'R^k롪d?`OF`N8zu֙T SRv%m$Ӗ}բ"G"܎nɌOCl9.7)ڢm%k hge QpbcNy& q @DKƗܑ STitSUvG>1=5=[UVG *jВ?7*~/*>+RY]QQ-UUQ\kL+]&][Zʾ]Y/7:\u0azs.էSd[esZZǴl#5w6ܖZr-{-znvm0Rhk\0?rx>W=^K}ϑu$|v4:9|C\*^^RTA%7պq@[f0F0ֶVBU"k rQUˬg>)ڀzK@,Pfi*wwp盘l\`g:CDDl_Ā݂=`Nmٲm6.tJ:zML q`^Y:#ʎ\Iwpԋ`nGKR+!\Ӓ!*E%.ktNݥJl2$1hvۈ8`PrqQK=7y/ro|Uڌ&'-Q$3*Γ쩝ΉE  yRuLT c(ѴU8~lX2<}X걟u`OPK"1s`3ɸ<8-1JG\ t<6'!>(yjgK~g\H#K=`v^{$:)\DE}/@e%jJp$5wǝz Y^K*3nt6M8HeCsol D!̒"IM47Wl:̎z)CFd3pHD)Dh(-mCdOSU2K}?;0%q+(:W`h_/:{]it]8ʹ{BXEޛ]xWYd^f,޸I!Fݎ+rB5?s/фxlwCp>x'9/ʻf'Yb)㸛 4DWi@E [nu9>4TZ!у %;{.=#a}Y̾?P?C {],$ &NJESg(G`ނO.mrGF7P '߀'fBL?~@GjC|Zn1̰̂C v${/#u8a<߆S]DAHmVhX\M|Lx.Wk]ۯC{!)xOxcjn}-Y=k@95Ԥ̡~{;b8.b$9ԑ1ݤx Kt fOlK0pg+

zXva uE+*jd ќ RLrwP.2+pGWqæ@P脑̓Nu ^Gqrx geKuiZ'O< Ғ d$dWuHʵdt[5|#_4,J7O}[efZF*Я)ݟW;Ǥhk&/Oah"u4 ǟ6άu k-6EL#^gYwW& @jBI$.5=yZ{dd=~jvz QmϞD+GVA7$"+[5 /xU#$/ajD},&%؋fmڇ܏jdJ~ja21)A*m,rQ NI"zaO7 i/SǏׁ)2?ҟs^+WH6{a埤>y~gQ wMqWϳ@UE E̓+TǗB%2d^`b zq!;rk?/ШB i^^!z3(++d1{o׋OZW}6b/~6f/T)ޛ0{w{Y^uK^D fUz2н3{id{{ |%|/.TW}/\.&qN, ڝbNH24'a殹8jTlB?5%E}Z)vk=Iռ)k$|.e2y٩͋>* Amo*|C Y_w{L =4Sai姲.sBP1t~`Sm-{X넭p&ˇ (Oo;ؗ6184}`b/x/XOSM)VD6Jb<%7*:(KE ?Vkyɑ ij~˅W*׻#!rwbR.1UDO:vűFʡ҇hD`4)bP^μT>ǤsiF`o;h,֓WWA8G4;̣ l`M30ͥ6㕂 Gn,@k8eU(MQ 5dQh9HuYD77:o]Pټ+56bk;a~ k"@C -:z lN >0 A ?Bb{t^ԟ3ԳTJCn%ɺw{'ɺV./: BL܏?va_<v;d-C=+99-ˣ~#A|jjcV뮫+^=ti5m)~f~R?mܔwq:#gU_êR8˗M2F3V9=hj71ӧ\Jckh>ws}>ws}>ws}>ws}>ws}>w渑X