#!/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=5be1fee4be0a93cf18d336c9afc33f18 # 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 [d=uIE%}#O=7u& )u}j5<^ p@ ZYN-yzAd1D`\4} fRhE4~!%BX7",|&_& ^B`D4!~Z`Q!x^(~0$BK6 "3h6"%Gv!h?T(D'hذ)GEb#riIa6@,(2a)ϨJ˘X*L PTH*XsW;6<[g{4Yw8zo[7.{0cЃ׶.v_ {fލlqfo:o2g  P}r6h݉lxnM{_Koi+jWCldخ h YNoXf(U̹1m^":˾=6.?uA@bxٵdbG:濎 Yϸ5ڳm q8KǵܱkGwL5XƎ נ rX$=k=pP~: #109#bC1Ὅ%( $u`"yeo]Cr:l EK*cb (ÍVm+{k! ڐ7Jd j5xJ1KU*bfvh,Ug8৕7-xuk5Zh@22ܛZ뙎 R?W) Oq GcN4Ҕ_k[׳E_Z[7jE=ϲuA 0k&Lg)]]ǿmV$W?S^DO￲Eo^ħ[yק35PQD7-ȏyrjף~}tBkv娳w{A~lAjF<BUgvkO=Y/yMȚl\Mn/` 1C$8ݬ8@:"G%CU+P<5~H2zFMnMÁ$r=NdM Y#yL\hT*y皃GCA"RAzZ)\<Pd@Y]3N[6ޚm{ղi y`PA)%dp(Qhv mk/ZQq5 =728;{qR5a=ӜB"IYAeSf7"]T@p BcH#M:L *d>;H3m54eb;&O,lа|K!EEų:>X\" {l 9d,^G@"XDkM7)r"n_zmzg_%WT̾ϩZhm6?XH{$o]CNa {5N#f0 wc3s 4['S$67>,.zh GSaSHwԿqdǟxR%<4mߚ2лD)ٯ_%SҌIG>=V>I iBˏySu\7Z c'{RqMJ5,W.Qpgi\Htx$Uk3d ^ HFȫgxЁ>PSTh'8 ^{)j 5HTt(ƕ'q!>Bp[=oM>C@/Ҁ6}h.-H\ل⩗- +d@>bReAxDGe0{#:\|y4ݯ?9Q5~_`O1N(AT* (Xgy :b\Z`prN؝噤vPɆh#kCp|P< W}9]5~vF`"F0cHf1떀28.& C  M xu Yo COqE(© X".rY̼ps2iU8$ O:/w\:oO4Q RmJl,$tO6됉ƞ/S%.!0,lT掽<4EULPcʪm.QCYDPs^Ô^A1#2c^p(wʘuLG`phk?~˻ǿ 'ޙhr3: 4ܱmU+4[S߱v]ADZIe촿c'ux 7ϼ몧i\NKיW1N WHnzKP yXtuϚsu`W/_uW֏?wj QJ9 ]ֱ'i#9_l1*ҫE~λ_4O}фv> |Uƭ~Kfן)SH_wOE~!kpTs__B RNPg $G~e$>}U`d{PL {S=3vCgBk^ޏhM5 W[mnԡu> @U*_ N7T^'qM(2RɎXdA `KO| lsZxsCXt `cczMREC<:Cw=?=M~>D} _|L3aul@KtFTB ʩ~#(hՒRPkr`c>S4PiaBsUbcĎ{ؙ8ֿs~*@A@S -Y& un&{T͑)! .h>[Ug O&v/ytkٵ2Fpo A" C5H(BY>h kLū"ӢC 7K/:4 SnIK-x 4rQߓ΃mB&Fm^o-ݧRIJ.ٰzT:U-'ie;Ǽ*L+;~&|D6۶r2h|Qjh}h~THrh6K(:]N*RQUހvo~winD־_7nb0ԟN@<1U֎Ifr@1u`e-zvV@Hj&{lx]qY_;aASiUUEvQ9r$>حvz/[8e)Gై:4jqnX]D]$gqT)mBĆB4(eVdz+#fW L(䓋yCᆼYGb)0NB](vB"^h@J0tC"nQ"eyjRѪ+m&z =hQ_v@*0y4,㍴RZ_8Js/*HdSO6jPP@fz{ի7bW5xT;\&H}$-KN v:N1x*2_Q Fd~:x>`R^d J0m^#DKA5qp4#L"$Q#MuA$$Sd '$"B"iK{x "z)o%L1e@PTշDdq%8Qht^rh87Ό~xx<{[; ʲ{Hc}W? %0kĈ36Eɺ7aHmt(;+šę?#SdF%mD oğU$' Li5N XnEiϖ?Rf.TJäs <{_zP;ܭ7P3eWiOG!{b>7Œ>۟o 62B4kle.%gl.9f, %C,JJ7:gN]Rx CZ-ex)bj#j}9zm N"%ڕP ё{mxcyK=j=_حn:n⫥T5)5 9he`/1dYS/ F+crz&\LAvu[bY;A1-&I7}kjWQGzw?(\\K iϑ9;9858Pha[23?e[<`MX8+O;(M}+fLU.|C5Pn˭ mí +SVV!kA \v$)rLX/AA !); Xz1ngn#^nm;MRSᖒKq`] Ǩd 5_j  J;㏐WЄd7L-R*E'~'G)wC`ro&RP! @^m8Lj]1 uJi%)n+sIf9&IQbc,3YHmaK.һ]ClТVo")qEh1,8""y9㫦G^H]i}7FSiR&Sd,+H}%i5w.ܻ|zIo׽Ȍ qx[[^atmS_YYB$u1OC{IaGQsU8eB?$s . &~uyNqPkn-$}V;8ְb/T̞[Sda]RRyqKeH\ 4-n!Z9 _)༪a*$t0`4:CŊڣS09ZFsͨ !o}6n\Al46ό[TF~ʐӨ5:v&Q?Hue&SƣhE5r'!w9[[knW>|~$Go +]\ T#rW?TyWK+AEֱSߪ5j6!LKj@7RśwTXZ" r"n)Mkc0"2A1;j@hlHs }Z3 N TXR_4vک*ܣ_r.HrmoU!},T~ ݩ'nz~3%8hF">dFQt5$-Ѝ~Xݮ<:ռȺ Q} =X+r*ܩ7ojmH6F $Ny `n#6Qk%o(YDuFS߰O Eq'&"h;K/TGI a#Sqy[~{1/SJ~8xK /0%#D)ֹ:'=]wh@0Q  P5,#N"\b3o\u}h; b-B jH0vvm.='|S!O MW\Z$Np*%ӎM\ FqMSG&aLƦľ@NŶףqR&h\Rm+![Ve5N%?sp)7nezA BŊHZT?p}g A[)z>~1eq:v[.X{8d5{Ku8b ȍS\f&I5؎g;Y0(r Un.eO;[~bOwM7g _$ f=f(!r'Nb8aQ$McbG1E07nԇ=dU-b{WG|i۞?3?q&g9 $Ds胆B5+@Xݟ)O{IDlN>٘ΦBlABzTt/Nĕ_P؀#0p,L 1e N8rlkF]܊:#qr{yNp}.PR*^/.xJ9;¡慎4dL)HO & y @]pTIJx H{[O31xj1XHU_"vpRiMbזBS,eZoGqRIUPw_Of當QѬ=ی:گm[^ftyptX6,{BBz 1#W@, .]v>3KśqUVl2?%3txWZU|֏jgVq=:GT>2 ܦh~%{W:YWdw0 ׁ:Xc)nPS1sQ|m Ѥ;$C ;:kwLt{pӼ-yHWLҸG?mCc+/?{'oH"88Lгԃ}DD٦ZW[ƑG?eiKÿ́=1 >E a Yl~TZY&kG܏xNZիw>N4嶔h“bNiA۬ oN06Eu~ TDe *Tk)~L4/5zED Iv4nLճŸ7Diu4SoocK3}E%"oͽ}$p2AO!7o$&n"^Sp0 +WtR `ip`dOK}:}Ud0-B^ѥ ;t krHF5Pt3D1& C_dhzJw>ܒᇵ`:] fgMO4σt.ܭn c_{6S,xĜQ^Nل^Yv5'ӆp{eor]3# Ӓ _Y ?on jiieQJwxmݙ}1BZ.8=zО]B=s ܑnlQ/$xynY217C?3j \/xט'٪0O7A&L |ȭS4XicpmSr+!oH)N1\Q6L O9ch/CՈ`(aH B&a Dm FLjPtb 31uV|徥Nx{Lg}>gо+nJ*QzJtO\ ʩ9FW ` =̔=6ab]q$Nб!lD8=evU)9 C˜ QRxeB5㸭Pֹ,.![zUv[#8{TsG; c]~RjYQIuVڪ58e'ao4e:]#56Y80~6GգZ*J3.c!/pT{*&Xz, ^60B9j{S5h68J.2̨T>E~xUc?w%- b7CSje MZ?D2!K FKZOzcʰǶԶ~l6?۪3vSJh{CޥIׁ8!3昇% Dmc< ϦBv =eϘ*G`#R>+aS a#Ĭ쨨^w(PnLɪP?νM\nO}&?{jo0 uN~܅;JB `\`U}? n3WRS 2w U׎O&gMoX \Nw%EX2JWp֌蘺'gv!lZ 5$=~$,bxs9ڳnA!Ȼ0c 9S{?7X%tcxNcf[=옙0&/i,,DV&W6 w1 vfi$$ ]o/Z,:F 斯5)XTho8WqU FYY ]"=t(C2j3Q12:gBL  ~y+`:\&ZHd)X*>438=Z/(Xݩv؋ 9bHBm#fZ[\/f~N+P4,K]>Bt 7I"\D_iz vՆӸ%,,y9}VM#>ºa Se\XPE:S7붢>㶼9 Dc:ffiG~cI1\p ynN̘6/R.O^y?]61r#+G+c|\_2'݈1f5fT| 24e<9ory{YGmjJ2QQ'j"ڨQ =WP-;WY-SfdqP)ia Ʊ_ 6"o ؟ gջU ͨnX[M\mԶ6` OȼN3q81!9kU9&4~kM:iNCcZ<z6"Nn> Āb,xj[5YkT8Ɖy08 n!;V9 )7š~J eT蚭G+%58M>KKZduʻCK$!FpX`g Ԟ 䙲뛉 E; 'Xqoȕ{z+`gd}Mm0 T"6il"Eq|tkb$:wbq tC9cHR5!d4Y!(qW} qÃ@|{5j",j0n:^M$_T̢!Q(4fa%hn>gW U?%΃w *Xq= x2S\)Yk| - ԋxUZ(#3KgE 锡ܝ4J>%g*nqj1>''Ha׮z@boxMBKSA~@ kD m՝hqр?D?˅ݥ, hH?A')v{w `r"w3oUt@=գMe.AW)!VFEv͡$Y/ i)JA6=eKƉ2$n50 ya߾j(|PJ  -flsNZ(0u>' }LQq9wofVO%,$lL<4KbR)kް9 E>K%Q7)(\ dE`B7KmrɣSCvn/NyM*g/%Q6amQ{2nrGyN? ōMj.hw8>~Iqwimjs֣3Nxu>_ >RjRߞ) !5q/b8r&MӾmӴ ,GelA6~|#W_k0f}zV]xB=rd^>[r  c#M"MLC Ds4djy2W\tT^h9Όm 3)x=6wmD(]VCރP#SJ.|zB`} 'ZU#~=_@vg4Xv>LL0X7!R,wQ/λSBQIEpP05֗Sasf|qʥ,M@9rKP¿!'Rh3qz nu0uЅjuV- J8 }YeGb_s%p}ʓz8X-gB Nu5<$ifh1]4SThz6>xZJ Esc]v91x ݒp3}[9M#~L9'>#`[x[-ܥS+O, PԪbl b2"ԥp QtMu ضjp:*n _ڪ|"gư1nc8\!Ԅ6z*SUþx=@A?и[+AKtqi'|DVQ-#񲕗%| ^6Eh,3 E( $#~Kub$2щ%R}0$Kt]0aq|,JA~[ L?q.,&>z"HN`:]Op{ᯫVJ/|wOG=)l֏~?*~y/GU]rsbW;Nt#Hr^ā6F ?[ˠ\n˾* Ig܁+C[B::&u * $øSTW TG4s4FB4iAp&Šgt5E= %>x*u$oI/&+s%YK#@ hM#`u=u{Z*f@FEUU$ sOP0dlOE0*H:dB{b.6*n?X UTJXfJ 5|e])j9r mc(.ĜPXawtaZK\mf-.[x3i+ .Gp3x pB"ڿ'22q祺_F^ǒo6$5x&J#Pkv1)URm8/cܘ̓W%{JԀϜWqxT~LwW޻k5օ=Q'fRqG+}y.1v8/#ۘltq}{Iy TmGu٘ۺ_UlĴ4'ޠڹwJd{t[U*"r8Ma~8^ i~幪\cdRNKCӍ_Rj9[yi:*ɰK>%/es8]}daJ ݚ//1 KJj4Fmm3$f/k,ډ*i㛗>z_ j Ȇb."+"UY gv-6fԸ*5dV {c5ͤ7\-_m%7ӑ C:]t,fL0C '!F(_6EmtTc3<& a$@#<3a4ݽO.d :kȗCi^ϰnskl9N}U] "rDgC &HUĮhgf:H5KEҩ17-q;).;No2Iu Lۛ~' f}ASz;S1$9UȔ*gQ?arsbM))/nұ.jun5!\ɜ8_hmsCktθ]k0|qL:#\%sa0wydGs/l8BCrHSQvySTۣ·x4w"i&aƩa7U!!2-oB6=ꞕd|87߸<("8ѬkCD" (P܂XxOQ\'eP"<2uG,:1( 6NwfN{)h3 |͋9@,~‹L! O,4e@,r %'*iv} 7'Ҟ bSi%2w K0\,TQX∦(-yfw7sk_'+*ըm58LևW e,'B{dÈ"2how{Fm-5:l70*u؉/o= 0. 귃}3?f:g]ȞtY1,1GJdr"hA)en(c􆬰v޾#AFׅሁ yQ8nם C8G :1p~,U3,7R lKP_@P#Ꮝ5H닱;&4GKHp"5S"vӳK/%_yn~TԉzSi zs'\|Y=+T%/8[-ۚL4[͒-nC|`bs C x8v(q6 ap3G֖PVlJ<ϵ3v(^~.Q<8ቚMi6AEs‰@0BSiɳQュZ 5ѕ:Wo.)G}^+ǜ 07B#t7EۡJ2j97{^BlqlHEɢ l k#_HPmMHfm폏57ʶTKiet{ʫEn۟-w%$gͨ;<oęx31g ҡm*L}@ڒ<-hv>EuR\9;}dPCVGŷ&h(>>6f[CE^:LƓ :QƼU,jGv%;.}5F66NZq?+ҘJb%9*8q2c%NvlJ}遼,v {hs7^ka_Hs=T977 (`34} Dx2Nk$1ws( SҩX 2n簒KWνÆ(geyM@% v϶]CgaA!JH1ӗ P dp#]O݉߁2IUQSGtv0]ڈ(vd5T*Z7:BFÚ+}HoILO~t:}ZQ sm36, Y.9_nYQ$=L+9xm{PDlف'i[q-GRD]zSO4?\D7 &LǓ`V\y %MɸkfE[`BjuIJ&]o^b:,wlV355" L-O{%Iv&ޠ=N>ϱ8ѲƛjMsB'nX Tܗ=nZ~_1iz7oI>9n5R,{ #iSb)-?u>j罭^g#Փ0hILe I.8SS:Ӎ u9SFt!ޯ*)ԅK8m$ 7 S;9 7i,Q0+sd|JC̺Ќ}WgI#V .E,BQXDaA H{ӍF)0U,MliB6,EeJ5e*B+϶ppHɸ շ?^su:qRCe m2I4~_ וIǕud;|CS+ռ99KV*᪕][m̴I?5\@;8={)mP!}ro6e=Ŏ҆(MJE.ɤI0NOUu-Cm2.֗u&/: x@mY{[;tމV[m!9;B]0XxȏZR  ͭ38ݛT3!w#-Cms]O81 I$Smp䄝y>BsϼDH%Ztr-xS=zULhtNDD^ 80kpUG<ךoj:7t,ؑw $1șZkpۧ)LX~y>i"myBγ2cI-,L'td.Q!3h9U ҡ2sp1h1 E>?_zV%-t&Pؙx_0DJhe,8wc!vb92т蘨J.̮F`^KJo4^!aӊ\hX;u^ИNښ*kMKWXOV&%B-UzE.1`R=S LNOD>_ .(OTIp^]5xW$7&N4}@t9o&V6<Tl{Z^ *Iūm{7`)mLn0ɶSKI鰢?q,ã17%Sww*O`W0ŷJ, ۾On;NPT1~BjsJ9 Man<7&Fi-{ |(ۆɴAׁ0 =3B0бX{F0R1"bg [k6H=g' AJx+MOT; 6@z"”JSf Xƞ%R!'襰ڻs6X]tPqe7LW)UQ}-OpDczÞpVhΛ.[|`$n ό jw7K'~!j6뻵m > ⓨKB\dLW.<|WVD>% ;aqRsʽvoIǢ£S{)"oYۍx >"ԉM]\cLY!tRmuy؇NbRc@ "}/!nWIGk[cP ,wrC{}oAeLQM"H@%J{y+>Kr63[;-MzhXJif9¿ 5׭M5Ogp$%$ W uȚ" Zx,[2}wr:s,,e*˅DŽHޝSև5h>iһX q`$l3藩͆l #'gq}a9HQLȻ+EghD35Rb#\Q"h3Aϩu%5T9jXXqh|I@es:/dހBVr0jf;>E鹇 .cc! Ry"ՙ1Kz-V0I(W'hv1>">"6BzLNO;A '7 rda ~ 0tWN"E>$Ek@՛֠WXqXH$ Kn(jYG4oǐM{"Anvԍz8nrv<-´uyi:RgFfȝ3OLy^Hms%'pm,:lM|~pbK%]0`f~sb^o{nGzr$*BJ*|72 @G ˧]Q܍yru~ݑ$.inה/$Lm0h F vN.Cel׍L9via<&\' )@kv3ACv.Ni{xf:V@\%u.PF]>BP7uv|E)jF m9$?F1 UˮČ##KC>3՗;:aA 5FvޠoUR?=}ljgfbNqm>%p0l<+;L0t;Dz ~Js=3y;c&ϭbO3Mf)q3gwWz3dCA1&g7Q嫏ɤ*\9WkN]+b9 OECcrd4$}+@u̅pmGkjvO8i+j>lm:U7v+p{V@g(ELgLΒmrfÈvLr%g Rl;Ц![U)qb 'UEefE&A # n"&IZ1KR7ܬmצ-!M^3ڮMN_-trbźǦ8U{fqC}A'"51"mS .eԳҦeׁi& ]8?W/ R=TĽݜC<n LRF6FzgaJ/,b󩅗׾TVHgJ$eLdR>XT{XAf)CJ!0ULQZwk l'omWJM|O"m,QM 6NIVuQ~3CHN/(f[(A,ЕL_%TA g ijܧ쮩BAYRONV @=Y"P5h?It"s}!}BgZ/h +C]LzTx>u~,+ 74+GWrat0UfշS1S/" /tMy tKN\S4o㔿TyɂcNr[+H1{Ŝ.mZt6c#y즐C"{mGzCa (:զ^}哵g0h>H X(K#}WPU;`rN] h6͢}~[=Jz3qkb)O9Fl9 ?D+9N;sOR'O/T~g}nhGXWjc6'iǫw⃞HtDA@Q0 )Q= I#yTQ[[-*O1=k Kb!SI!$s,,>z앱ad~3ZŅֱia:ʦlZ-OS x C@Sj /Gb*#l-c7bHΧ( Wn{_ޤ;`6.Nt"UvE1c(qtFZJ|wsK2ZC25Q`'b}J=(:mc[h:~Ρq_(N<@c9& ,px`?u}*!s]F*$]|%{gt2tl@,MىK7I1'A4SD1ECADXu Ƥ`Ȍ){} OJwx:ޘpH:uIRL#BԥU%ix OզO[y.m^l/,wܹfhL6nמG+w|&ҼNtyQ qiU=PۄJe}%NQ'~ߍ.bmpWWVז?|ws VS6jH{Ng g._猯R>G+ e=9R~ܮbnD($K :<*.L:v!_eFP)WKG_OGy(v9[Cr˳s :!-ws S6rgZS]J36@pߩ5 U0)M=V46AΙ(sZ3L׿|'#h:_s٬D؈HPhvjЃ?17m𲝚s(X4,imRy fcpﺥQ Rj˨ʿ#$㭋75hkKOݔNm3}W[[w9#9YCE8>=ѩZX8sQoH TejDU+^W&2Texn&}m=}?Y{|wOeQmws3$|i-|| Ǐs3ʛr^BWhFe9}o9n*n@>)ΑT6ρn~ߪNett9c G/;^㨺|zADJ!spP'f=/`e|5۸ݝo1*l$ssl wy״GBTTZ+HOJ]bQM]۽Nd|}>LO3>øI86;f08ӏسsGH8`ҀtN;-i)GIQ3F&`<`o4bPGbF<Ȍn`,]A!hG8hCS[f)1F 7=Lw:mjc~n5 h̙ ]{"z?t8l{К &IPvpvĀNMd j& */L Cݎm]W[= #I/tZc{>2t7S4/? 3ivJq .NJ8E;7j:zW=)8o׶˟ћ?͑z ױm+B _mpսUZ:N*{{GZ{[;%#S߭AR;_Z}YߩLyU?ö^AcUuP=k9 :GG5zQ;|[ߪ56~Q+A GUd56/u6vw0-*MGC?+9/޽CP*NAfl)m9cT{;׵fkyWoԊzXo`:7 mt@F+ٳRuoeДmYQZ<ӕCQOvCrYZclP" G#!4.JvN|(oWhچv n䫺]]=tRptZu*ul|0MFJDt--] $7 }Bt.v;Hmfָ^G:~Iǣ݈9i#&4ڟa %y6VLD6"~J" N#>~]|<>_Z'lIxdE%7k>M7x LDnk6fOe;7/-U{=AHp,cCvEm}GFBTmZ9 Z'f/ !T)ex74[(-.bN狋j.ِ$Qeed"F}Ł$8I܎:N'7[9tF'A!f8h#Wp)PrAW{NDPJ{E:ss]M t6xpi"9܊4^)~=:Zh "C뵋rܶD{o_ H+DIoT֗?&jcMH˱'2Wf*f>KuJ/jE% :dD zQm/?]ztim곧eqamG}̙w}ޢ :X/>& >,.h9e{VtkgVQ N"ɟښͮi| h+kJoqrX2eX:sHG:|SQO+Ț3 [4"Ni(D|*?;`hwڈ#CLQYXi9%D.$]XkG>1& S~RdJ&6Ӟ[~SFf$Nqµ!JPPFggͧ8hezy[ZuOK##Q= ΀߾SrUՎE5N%IHk YLTP)] ܑy[{c)j[n#tۖrijӞ( i '{S s%04U1z@dflcsKH#f*1<XJtx \=AZ<{h>ݾ+Sia=#eL_*p(ief(1h㓘 N# ‘: &CeS gIvv5̈6eU}M֨5GרUTu8L(!-Q8m"QEB STV2 ;K:sh0HkM⻪g vӇ1cRk[8\HsZ2,G79drƗ lg7u0icLF"PJ4X僡 t3au|2'jqey]5v\Cx : xNWzeєWgn7Rȫko8$R*)omovyT<OaW{o>/Aàs_uag!=Mxv9j0֝X~A/^_=Ų{qw'}ȠUR8%s*):oDDq/S 5\`/ᚉSZrL=oU{xqVothamW fmv3]WL t ed 6JO&h)`>/g^p=*C%|nF I* J s\ aZYVF!ChW&rKpSfPb:$q}3UrC`<, ?GoFd1\)Uxȩ0`Q,u+:I12cg^[C\mVถ{KҠpd9=XHL4=xގ+#.wWNA`T[߶=Tq&cxXJ}>, Y)[1,RT~~JV'NY@x~Sϗfk}## ]3q>Dc'rt޺+BQS.Ifuf`ɌmXZcbmх7IPY\: ff=V6` T4tvkFo0ZЦ F3P҂Iۦg XjpX[li(eHZ6CL m9 z9]Bt~DA; 0tܧh46r{mP+MpZ{$OY߿Xb,nt9 TAۧH)`cP,C4o97z v=v,:3 K(Po>[RhЗUGh[oGbYS Ű3 [2?s}7. .i nWJ#e} wrm&^9m[j Mt+Jtԥ3*ypXR4HaSТ fK6,f%VBmR佊 /Qoz1&(0ϐPN\S&zx:Yɽ:]=A?Qn>-I`訰Ô˯)]{1OEm鄅yU,M3[)|di):dzk CK?0ȓ *9TL95k[h-1Wï[G;_e=viٌz 5o ѥPO: ">@AdɊLMq~KS 8&,GӭSE e3K%o$jH26*3;8~Q}hfU9RH@U}lJ9!anw>N◑\2R2nGС1NCi+)jDo z=T PGU:juJθDDwڲsvZW[Z-i-:E[mS6~Y{-m⬬=!"N3RO`)$!賔x|pRp];dj} }>kˤ rK^ٷ+FGF5>OosVŴtʘlK{,~NKVRZz䷴TK?uE--[m ֐ Fa"+ѫb 񔗴b[%{ƹQߍΦ il(t.|m13dY]$Q-CQ/r;=sh lI( %m iJuiVZWc$NUbeE EBw`"Ͳt\.vOsW@<{ O"+;RÂk݌W31ѨqEN:}Gz%n#D2ECy $_l"ewsaP`uFJ"8 H#vK­NqR;:gҧJk;66z␵~Gpy/6ݥg?/ja(ao ڞE!DT#Zb^)(sj֜ȵ; [PɥMPr#(vjDdL!H`B Yvh1AՎdoSxr'2l]r'P\K(HU -[^} ˱ ojt?prsuh!9 /UU~L=V"-O4%˳gͱ(ft9Ϛ|VuGL[}$g:3Է/aiߚI=m{ {*Dߓ>\wϙk|]^ k%  ;GcF]7H̛ Ra>33sdfZ5qkϙ$l"li5GoU.,_h%Z}yREm $AAIW ԥXfZ*Nrx 0ypX[ߩA֗׋\(Nx#lbn'g[*,˩S1ڃw*JT19^]Z]׾S6KOY&g9q5͍5]6 yOsg˴Z}˔csv:? eu풺TCNdXFjEg"nK)t\8]+rЙ#Upr1y6l"yCS '۔ /Rxdz{G''ĖWӵ'VkGaRZR `۝`NIv՚cל`kAoEvZcowL H %j|t< mm<`婑#M`2xݙa P#0٦hY{ī,:`d^Mhޗ<$ԥgp㛝g[q܊'V֟<[[Oۧ'SV^kOW=zZyZm?9}NOA;jZzuZ9];=iNV"MHjCU!JvXk$RAN:j.# e~Uq_aOO8ODˏa.8Z{zz.G'O(ɌWD~k_7joSq4[#J][}w#qUIfd'P(л9&:(+ \8OZQil?z-=[^{jxkߊ>8}_/F20v1)UrPи>xq3s $/˽:aDc4^Nrw6d v=RNg.4C=r%k tN:}9 Q%gKɱƊzE(/޸Iq<݉|)q5@+G?'e]&G_Son/r~% f?t'=s߹ ~4.JyHhyvr\^CU l^|@/U4<5G̓ћM(hгOK!~|M'>87tmBLQ&22/;U~yQGE!MU>]oH`$K+@ɡᷧT~&y*L<Tߥ`n@H<➎Tv7/`ر]ktrdYI=`f ,/S"u 5?>w)ŊVFIUgFEe)($=bj- 9Ry\?R@vx֏rJzpDUy5X\L^Rp9ƵHA[_ظ8bS9X( 6߁&9E+׃ʕܧY|"BV=zLm'z6fy@xὙmpFFbԦvRh-h  P8@%tC)J59,63ɵ1>o SFGspY *uS\vm lدzdrӐ0ThԢ_#[o4-ީdwGd5!:䧶\4]#c/P֋`zv \Uiԭd`>;YNֽud;YJŀwtBDIQZ ú>Z.pPngb[ ev蒇smMrc?߿^TWw).݂F2~su`0D7g"Vuh>LPRQ޼LE`[fo{svs 4maO '7U'm/_W03J *sǽq|~>'eyOt$OMmljuuūsB>ws}>ws}>ws}>ws}>wOX