#!/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=ec81ff28a37253f2cde60c5499d88278 # 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 ^ C e,eo_wIPrW[g|~c?O`w_t}_ n`D%.퐱oۇ'7}^_Q} ۻ5FMtm;1_Co B;)5#Ј<=wCš! }"3T̍5c4Qku|LQ&3ɤ+:2g@r>Qq2buD_# 8ic4 2Q#EےX ?l\+`YɀzF ]FA05sar6 UF= Pb*49 >_IO/66AٯA:@$&Qg[D =+u,ILAQ AU+RT!ך6AmM .qTP(qʴ o4$^!4J Bz;e6=|z= w[>R Z?nm}H榑4˱65&\1~sc&H8ƀvc..0\mQNܨ}z+{Qkk, R178[Y"#S7(>:99ᓋ oIT?57~x[6_~7/Tߎ6 z:"AVGw?3aPA ݯ/@@io~ۚc|u(2~{!oךy&{hGjtqeJJ *Jve=#^x+of-f)Ƶtho |^ebI9<:^8;:" C [0~ko#f"*Q#!Uŀ$vhM:"ZIxoLu:~ς-" Rr^+\u:V_S dkA],ZQ*^׍tX qvZ,Ý {n9!c#v+ڮKF1kS<@j{atjZ)DЯزcQI$tPXdF1%ZJpSϷFB y%X adQ DòpP\ߓ)f*UUZb GgT_o|*O_%S;ϙϱ=5Sw+0VH^4L}12o"0 K=Wa? 7rjxltN T qbHyy~RQc7 "eG4Lx(,ލK u YE{uFp([n?0<9A: C{g@lab5}>bTc܉0 B vC{By!dS#6{ ًHj/2Վ1!e3{$C&L_3O)(KQٽZxUhƇ`A"TkywVq ù`'ͳ0"SBx|p>=<={.v;p.Bʎp?E>A+v ~jfꅲd~iYYGװswGq:I06lpЪ&@ 4] sx.{ jѬ I6^&Fw|"@3ϧ=rL}K<ǿ!è UUx̭+ʲ)5}9dԁG;r8{S7PeWi>C]"^2rۛX,}Mb@t ;w۝Q1'F愐S<gV>6?=WUdLڟ-MD/V^)UBհPtO4 HM~|O;t~}?y{A}5|T=T=. hEx} ͜TaBbNG#[iգ _.ح]27ɶkہwÖjpRGWsEs9/1zCc]haZ7Nw,cqnMTۯTC }J !3_".1RDMZƞL 1"R_"WG?`AⓉsr]sLy|"צ7Rc~V75dHXIEޭÿDrn?2745EoUe/׊lYty S|7v`2צbmp4X-K9?n%:9.D]V>iOgvK c 4Kۡg/ ݲMq SJl' $pl9LGe#vV3H-[`g5 3Rt#V%H 8(0U ^TI~ ¹al, Ke66^D| ́&lW\ KFK} Ca+ P`*ڋZ}q9a%㒭`XWBn@4QU`\q,AHwa aaxNj5nq g?ċBJQgDgrܗ '?TpkfӬ8B0]ūlIc어 4Xs]V>ݹTwjP5=*`"ĺ/aݩR=HhEK@~n8x/.qKboK}L7rZ/VsurIg8h/81Hl LςP0^^CؔEM>xZ 'ũ!0R$>#%;682cƊQnt65,ׅ!>n6w]hh$ॖvTE33v:{KÝXVHs_l#o⓮n+իz@Az"Of~U Kkd͒!WiMLfSdE!}֡T'dy+ObqEJיlKI34_yAb$ K;B /Qd[#Zy*~ʶH@~T3V`S2*t/ nt]Ct#Nߐ!M(XJ 稉J=1"R p'M*ay.ra;!h2MbEN^to!sDg!Y$|APn+JD"g/cƂ Cx쳕H0 rCYh.:X% zD}`!2qN?,h&7-mq O\c.Ռ ,= K$Pd.Aޝ/ާ`bCsP zR[wr+")2S-!1rw+؉kT;3@т4GFalnj]hW`~i!w0:kގbݢkO*>lK&2yai 5UU2NjQKx ]t <[L1cL]${?! T!R+Q_3jɕ:"&'$Int\4pwF:̥1ꕓC+]r@1}7^IF9&NJAH)Ȁ>l: ŽNxhw^xZʄKH>D `ے;ya|ŏ6+2B7OpikoI!?mg_?~/D̈́'q\>< %E_s~^=?+,Mj78b  " r3=v,"q*5T?4l"Jl/&ҝ,'6]Mcq΍ =NrEl{aAU4%$#*Fi󑯷לyWApC9QCcᦤ{U!K!}~@Q{Vf.63khJۃ 1o$mxDKzܔGkBRr&/Aa1p޲tm쵒5hq!ç+TC0 ϳV1yBW/"䷻QF98]#ыlf#. ż+r*7m@^ۍ?-zbN }B(|E4X \i\OArT}huҋ7Iw}6␙>a$ L3|*$WIU+BJz. v6M;-ÛoUCs%R B$dZE 4'eOUZ3޵\+GWGcňy+i_5sU.Ri'p,b8ٸ ͹}>iD_v-]!k q3 n;gkeĂ{.xdN lԩ.y^;< [baLIM&I2`nw:L>%1K%̯aWB&WNjQ٨4nl9i1S>,ڃ ^iqVY\Y!⟔bU\sa{ՓWeKI R/G6??y{|>7v PGi_ [zrpEny?0 &>8 ۫(^Ds@W(\>-%o"d5Bj#Yqv~  J:NpmL/Q\gi)|*ɎD2 Q.Edw3ƧOLWeQ G{q f7ʑ!!QU,QIL|Q'"gC[l^wy}y0 םot WSs:~Pu(PN;q?pbl$n<گ[ӽ((#wlޘTjQ`|Jd۩qAa 8B:l/._\H>RШְ"W߮4kE˰c{8M5T5}?LfW\^;p^d^ 0Ph;@G%$RyX¿fСX.DT;*X,GޯAm:pPA^8~m~9 X$ߨH]"_o/n߫7W*qhIDS7j5U@$ڇ]d{Q DVu,-pf֋uV%Z.(YDq,mīG =&H^)xr pi)^GtFsyCC[Al`)^=њ:{A4I.>/ՂgSr}A/ o!2<#ќQkғ( N;yqQpx^A̖H@aѫW"- >φ$C}9Z ?j"q@ԂIX z Bcf0S=~*GyT̉"O0,NI;>m襡?~) ؔl!}x[ |QXMW? ћӱ/9 $'u8paңGe˾3ioFE1`73hߣhaO1E׀m|{Өkmmhb"KQ0e6KM-b[k#~#:=دwko08s/&nimc},QIpOXfWa!BFX/6k?Ĺ& vl]D"2)HC9M&",s&cKaIUW $[ ςZ _=Dq%.QO| LZ%7YE0Xףgjs%?}>l15.U!R9J6y;׷a'CM6A:yzzm.:!֛:Do52]969:{Yy$8^ZͺXnS?kCE4Rfi$NߺD;^k4p"Q衎?}"?VhaPm7N$wj% }u]Z T;^8E"jE4%B KwO䲠*zhT(@ XizwLQ ҙZ2܂%hP(X__+r[0b0O(E(WIԍj,y^W?8yti6pWEkVE&jF+1DŽp6R<5V,FɃ & 'b ;9:<^beC"-,oC,ɛ;n%DwCjZ%GeE2.0ّ_l;I csh8{yW.HVG~Ha@<ͽcqx}w dzTzqTJwQ̆O6$lV"7Bk#FA:s))YRl(ZnP8=U: $Z?)w65lR-H=CF $CN*w@c.A!'Syoˢ .KtRjwO]Fi{)ǣbMc vq4qvWaO9&wcy@y[»sԜ3v0rKYnew^)q6ɮ|>&,2,Tړ䥡(>U+L "pcCJ1Mkk ]a^2:t#1l>!3LMxkhJ{iq&dAө< ^a@,61i ?= QUŀUIx?5%ZlnmM)pzFcz+z|@IZS@\4tH xTS +Ac!MT$蝟gk7L$PdϠֵi/$7l/9R@h\Nz$:~/ L䧤BJ#dMC`~Ӡøx) rMhj5(\XGǂTMǣRJQwt(H' >-%#nJ"RR6 uSsծblAbt-HyC4I!v8IJޤT֕`20%zʱC;`4"8z!WDz:]DTX̻)-t {VnLYۢQK3#z7^LFv-_`BU}ذćfft}$#~WP/JT;ڮ6ͫ#"S*tmFu|o d "ɓ:WbTB}'R<:%BY8vylOig"),R'G8#mU^0AjQՕ/j~^"[+1:AZPKhZ6f`ޛ ZJLdyNԲO=-MR[1_` 6o= h9 c-M#Հر;^`b@W8! OZ@C҆CSCpR},.*mBQ@@ 6.to0slsw`uH{м7\!, csF#"xٞ f6r z@4e2kPqB'9DPIĽƷPDPh^A3if=L\jV gq6M(5% YL}NykhƜFlw|HjՔy,Q5NҨjʥ,;+k6Y?Hཇ#[ˁ qZw4VGIApە̚:zr_6? Sg JќOod"ާ:KArARX=Lih+R yQטY!n&QUO$]&b7 F nhr|P䨾HhwDt+bCYcU;lP?F˭]b- #nqw):=Pj&': WEz(j儌0YP]]wŏ;Xahx$)Hޘ[+XťM2S젠3 #<#/F)ŖwJ-rWXnCq. #f]Ǻ{-H|;-Y.X%Wo[R&^ tIol,w! }T\BѨժMϢ Ơ,}x!\aϟ&p2/jG!Ibr"!j5`JAqπ4y rz%wp◴)KgqfIsw,rH K BBнz7#˦ {= ɐϘ3p6f8Qf -Z*EMUnqD ƪ(*;uD$z2eXc43_6lr]_>k `iW=|JqG,+5-|Ѧ>Xeԡn4ߊ%6"rϧ}H*TդaQy;P^e@h )_CdfnHYۀH_v'ьZ1҆" a#g;ҧ> 'g,էHG\DPFlxǏOMxJY`*lG2W`k;AЃ}΃E%dÌA2u\thI"T& ToD):&OY%ҧe:q^ ˒J&7rIC 7]ԳӾ\2taWqM%!~%S2[?GɟN:%j6` [~H/T6!ŎQz ؜\`Ǥ[Q6ﺅф2<1"9 ˋh+<ĵFIFW#XSc\蓒2*0[ypl6)?PfR^p5Y^34YZ ^wM>ICM|ͳo2"V?F7h *޽տȘFϺgAP.g =S)i4 rtB4kӖvr %MaP6#[/)Oi Oc~~_Hr9*DOThQ=xY\ϩmLy=@eص3Ti'3K,'(Ӝ0CIWke85Vr/#ΖTiTavCkuKགHr_޹ jRƹNh d:A8?Fz&9l<.ypX;8ƒXs 8 SHyOPXXf9f!N;wѢ[ߖ"<3(,]ܞֻ _o+ fq{DŢtٖ/(#-G<)\ɱ *ڲ^cE  i[k,K 1%FNs7H#UތKtB dZF\#/)ԒNy0פ ?yzp ḍ&59Ҟ-^Z` ;Mc`C7[uDIp*7a 29Ekmis4P yiΎ*X2׆8^O-CyzޗJ ,x%4[\#qI%/WLiqdvPX08DxWQ4lu;CzGBI+ϊgzOcgm+۠'l+O^qp9RE`2=C!I[r;:+tq b;-b@p(T X)g6{̝3KpAJ[aGרb/CKJ7͖_t=uF0+C,7>G4`R2,S CU$l$VL/A$X$|1!`NqzZA'㶞/3G&Jz.a=$>Qa R48NjWf06g07XYCWH~1)h*zMs^zc/^dž<9r g]%;A+ *HzHO>yʘ1W1PSyIZ#o?6"ƢӐ1Mګc"'ya.e%,2!EJEoF|7L'Lld0 D_T H0c%VTu)`,aok(` T7F]!KN H/?loǐXgۘbT\Ô ed̨Хл ZdK6UOـCYt~\!CRdu*ha}43zY)y)OD%&FHZh &n&U`oP^{,A80ej;f*>?:& k=LO=r\.,3GyɺxLxҸ+X{-5,e#fbc(yP֖)ZI,r2oPR%sg@WnP8B28Rҫ8eAcN*I.Bp+ƽN6PGC>gdS v^.QΒLJLzy8•G캗3K,nj1KeJБijz)%xMc!U{@ Xhrۍ$b<5AX{nMAHI2X̊6OU$w#?m 7ǥaVXX)GU?cy[q!\bnfo@NUCV Zt i UvZ^5yJD*)PU_又uK81`51)C6򳣀$Ұ5=mZjg'32 *\~_xq/̻Ȥge6tkEQčWQ 7Ri/t"sjg@RD!@Ʃ QT `p.odFG+W?~gH%hy4]*x?qJn[NUW}oHgn 1Q)IpJpkˠWQNӗ~QbAh[#*xhWWT*\W/K_ؽoX~9Ao34+j {DˑidĤ~Pp[)@kK*rQCͺh}ցK"UD;vLOإqIEFZpM-!*1rn#Y=x$$Y E&ռdAM&tV)M`3zA [q:t1. '9xZԹSvC 1ꓱ`|Ef` r ̣"=g>d  1Du#|. TZj#$mT<:h¢(EdEE)%Lt8'qXYX3B{~Dy717AS#7G MI`1ڟXQR,EFMΜ>*\{?%͔FWU6S:}";gٱqK1 x,8aWG$Gs6Ar *R =mRMckFg&\FAhv7t(׌"/T/(BXL)S`!LWw/!5 >=Ы90?֪o TnӀ^&dZ&[PM.$=@W ^j nk H JAd;`,kFLiYBR`cS!O$ ,Li!ęLJg0)<[,pa/-rz3L锘oyYj9<St'oy,֟Ñ %)@3_jB=$?k3 pOjSS.FnzZj-'(ו>j7? o[Ġy؈'s*Hغ.;Lo[cǔdf=vOqnnM [38# Qӗ8Yt$ C]CmF-ڔ5NM3aH 8 R&atޏPҝ̙?zz#*93^vҔ*Xb;[e v^ y}H7;Ձ2Oi}SCE" xfCa{m!Q`&~+ƫ;PjgOj#?ԥZUH-pѤHޘ t$ ŔhׂO\`ٟ2gef% ]ʬf4N<u24L{.ئf G"M\)sh)11 ̙3bWøŤdl^9[<O_ |D & L261ߗH9>S gNj'[K.iCV(0pT(zFWZ9Kܫ7ּK8?akM<^}x5yz˙=oJq]/0Y% V+;gbCwTd=tevؽds&"eRhyW=^Pԥrk4-3~4THmʰ#5 ՎN~{Um;#ISۭԼZ>:TP& G=@>!7v`x\N{;KN{!{ r0|NL!h l"~m1ఄPl$,ô\"GPQM~iG8 .tuM] gZ֟Jd6D_fibw^٪L{|G.W(]^-'klTf{yh[Cu_ j|{`0 r_on{C~l-Qz⺲\9k\N 32nٱ_S ;bU0d2c״ V`1Xz=@aFob:.^t\Du1Ɖ{(KOiլ]e&?Ik9ez>~)DԞ<ڪkLN{OّdW2P+XS}jxxGqp͚`;H:i^6d\!vŧ=9|i&<8eC;SR*/Cfk_Ϯ>OGe-+ $0-p_]cDP" ׍TlCą388q"l5̺a}2I-`Qƪ"8CE`fmnFI5iP;!>7F6Q?ƣMMPR3OvS:v'ֻo"xC΁~[{*`]tKƒ C2F`Çۖi$6BbC`@)*YECfDm@"vb)^~܌L|4^FT؆UO$>-_Z`@T*VȎL;$U-ǹ>R pNOHėCs;`1+Q6ecWR9&בwϬg TFTk/1Nr zȐ+>Sixce'_diA$N2Za`5{%5ȼb=nNc61s=Έ!-3[YES2 &C*UIJLF+I`Rw(5B-a9Ca E}*I;QC&b8:Ǫ˾o5rF_U'ԓ, BgGS9:{ٔ 1VM6jl3K+]@+׫++E+-9ӞZ>{%/^RYr^DVYL$~ 7ܹO0mtL\1s uK‹jߎ8:8;Y'I&Jɾ D"SRJD#>&LYs=!G3Kjrzmde-#KnնgKkYrQq[&R !vc a>  .~&XT @Jfxug[(GpLO-RF.ÜBg2R$a!LtRMc 4H`l,X>OyB0 hZxV ^CO(uT} qD2L#PF aՔ:&S@uJ =h識rzrQŹO}'Mh(}XD`u9adɋImڲ,"Ƅ6:9Z{ 磪U'}' ]!V*C-:&×, o2,4T:IX L(!@:8:~ټr&rv ^%L_gqDv@`CDgc|<sn(\3sqJ$ q>٭B0= q)hq6U4_CFwYCG$חZ^=It#B<E]؎?%a"}I3UN`kIR[P"=?d~a|_@v&ÉLl%E4 32]K òvYqPA%,>&.vCUl3db!IaA*2b )&9 -1*r5FܧD"#93G_(JCXڴ0I j5%MZU8[{nb&^& 8&!P5V\sf x6!u\w(N;_ ab@sk؜QMi#{qTMU[ 㑌YC1tNՆ#C?%fAm^⍝l"Fؒ.q A1]8450ӭ]#!ޝSOF9 m)%].v IotZH`~@"2 AHzP #D6eb]EIe ֤,5 3Yۡ[&Ҡ5YDrqi6l / ƿB)acT}GaG>!3#9>y,/h2y#ݭ#J83j8ˆ,ӭ H9WPӭP OPqɞS]+:GGrI48Z[f<4O6j'3]0_qcÈ-o%=(*8i_zZ޷+-LL"K(MYZ:vlTdŹ :W:Ҹ/ ax؞&|hSknSkg@Y~?aٻ2VU0ssw6%A]H>kۊG. \'yBۍwGLJp7w CiЖ˩hTl[(ȝq|\R!ȦDkȻ@&k<.xz]<iE1K~BW!̦Wo6v9(A}W&腙nB7@r]c_p(uT!GLNFѪ T,.9-#fi2UMo;(y'XƼв]b}ӀpnDdمޯ6j M1┪JJ2 [y^c'0DdFX݆HZ~347>HַNO=ĥyM )tH+oO9'A\N12SkӖKȌg7L|RK/.pie_7ڕz~$ϮGpvQ3*gֆ߹K/4+XIJ:d:utv\N|n)Mv|&N!+ف#Va~7{0iܺg{\ݵ ΃C'u$4,KuoQ_~w¿ΈJ"5>Un"oJx LA]1Cgu;5#Z\]UF o2 ~{C7jx:L<vtq\BY$~GI]||@5?l$QЪ6 '"V_Q}1OR}R<+zF産' ްnbSjww/L%4 ytsY 9Pkbj8lMHEai)--Gg5q C0mIG# (! K${zqqdpfS[K{e? G򏨼mK1`*Z Ú8UA+UωL@n`2 [9KBZCQdu'YGgaL7S\BbuA\nTOR30,S𢕃݇n./ #׺Z obcD/\d#]m$A"_EC#6$YHוNspE 9mVfo n]7QIT{%6nFStg{V'4$=c̰ĺҲ|H,4-lz(V^zNɎ|b'riü7Tp 0Ύ4df2E%fVg #?[O=۰Ѕ# 8BN s[!9R5.NGԙiu֩lO_˱Yk4AUolD) u+,f`h*ȁB}9ZɋD#F& Vlt$dCŐ>TKgp)P:wZt$ưp 2 P$Amʿ?| W(J4#B6(mG]DN ҎUbF6S)iɕv8 @꫰4DK:A&U@?q|:xh>vcTP$sIG1nyk #.pŒ#g댥s$(c42)gӚ9/ (toxE0jΠ-Gu2.F!-j"d& ]H,`Q"$TW6jR7*=R\Fqէɰۙ]/Fؿ@Z{ X{0aHkYn1uc#Α7k(1Pq*yi]O4CA5r@NAE쳲k1#8^kNhf@8D1''0Gda&Q")41i|2 eA;>Ճn&^ش X_,f۰D4tņWrыp6jNr8%iRՀuH4MuolX M" :atbFk(3(O.:HiE(b Vr!i`ꘐ6:qggUI0a3/ ϳҺ)qEH(ƶŠdz[#"_\nQi NQ"IXТz0tsjFpERh(mʼn8d~ 1ָNJix*7Ac;t= y nh !IE o7-H6 qJ :IHHlnsLBUm sl̨&K!Wԍ5D gPphNڃ LKQkY(rN>{zUF'(u<0B (A-[t@-IV" Rݼ~W$-pbYvh:]HNg-/-)躾|ɲMѕWiYSnߎeo4\PY,Qb#ܹDJJQ]ض)bj»Q)Gp41ɠ0>vs R xWmlW|e$f=e\/.G mz8օVI}D*9ƑE0VcEpqև$U=bGC!a62&G+v\Z&Ì)˘.IH{lIOgɺ O!bp/\@$cR 7ٹ0n%s: [Z@vMD9P@+*̀dڱY-v'4j38RD:'eKg5l]I4c f8 dݬ9} n4QjR4dZ(V!y]?_P}$M74zǜrW^ g#O-sD_hfBq00&WGRp9b6E)%0'h5*J{С%94%"UB@([\0|q 1GAiyC? Zв0G04.+4<30=^8E'HȠ:{& wFɨIg.$/62Rk)B"TRup)3H򪴇5Ûr!TH+(gjrnF~35:J'#iiEMLo(@Vp^bBӐD@G!f&xHL {w1͜~j5MF><خ:gYϔ!NˈŒ( +?^9|#pŤ2yOunuJ׺FW# zγ%S|9Al$j3s~qk1 RtZ vLH /^HoWub ,**9ĨMBzRLp0NRǖBʏY f.B5H8S؊vI^M'#?llGˍ&FI }y&D_FZ7ڊY{g8Bq3p)C&U- JW 7Z]+d6*BF@pOFU~V~q6ju=)@y\ vlX 8EF!j ^$7!)0*hv՟(TLgl-ԝ.roFl`#4nhTߑ3a!f8w=@A}tR)A ^WuLɖWt$4E"x1 8lTג&U񻣚0Wt M=g%#̋,bdi'.pp| d/)eK0 4 ^Ш`*iƓHД0[S -kTJ,@uU $Ddb9 yRƠ')eWH}Ӗl!ȎxDB\t]i]SSɐr˰YZ(~1r)yHN광PS'x񯎣Q`)+ߨV%=Y}r{|PSI2ئfa# &Z}Yx)!rHsN!LvJz`44cBCl0㍶nj CD3(_o m^7 ͿFz߆A=YY^MA(h 2kp+Xl0!0D0hw#j?lI 'pSh([U{vY͓j|7 "Nsy,ʿ zڠ!!Me Br$p x}"T$5E/<8/)$@O%$#lgsXYtM9 S'SlÑh73Q\lMɱCjzpnL-xnD10o`^X{~U[;i[?>5b*\A^!NGF3ԢЦׅHO]}Z]t1MzP_HSaVb؅{(be'+Oʏ̜ x"2[[}"jh8CW`0$'G f%Ӣg&B![ X#W %Fq#H%׎O 1Eu`~0~.&Ȫe#;I=EZnE)'mc9^uی@ƺlH Ff&W8BB;3P'm2]s>zpp)9%hWH5K09(Tac +6D`jF:#2T eB(2qիzS4w|T6;^ѻ0N|#(36Lڄyz0M}hIV5K~wS?xYІ88i0{u`O};,Idy\?>9;2/psC6iN5NJC+pPD':-ahX!ijZvjw4FIyU \^Z*.GVo,]b˽:p5,p 7kEؼz uݞqN/K+;8~YYC˷J:UJZfo^Zߋef\n3o,f~}ؔ^-/7<~貦1_y[ۆ*t{W{gѓQ ߮QKmDeww#W5қUuʮno.jmָu*[ǿOU-˰Zm#l NznPOm>I]Dq1;F>5=R;vcFQzOjئ[ӖӬ.gXg'hUn<ݡ? ?^7@Y}O63ګgG?YBm=RU"}JoW Vz[jF}P(DPWs\uo ejvd{%l*r,)8v;#CVy+_?[">~b̏:EšonjRw{|:?9O?CJZHR1QcmSx+CA BX m s"+0LXz=Ԣ y q尸|:ڹ\@,F\|SkcÄ=YDxKy/S3ęř)(~0/ݱ- 8A5Uf+7m5ZEW}wNjr]>W_J7hqGTiX2 ˑ ;|_]) v')tN]>(y/W:cj 5Ji k_3kAZP6*ꜛWPWJsvWhbš7U7a2/s?8/72m}[|# Z!Y0/x6(&?`h?ǣWWW2 ϖ%-A!a.[Bn*@>숢~o>kIw#j(ƨۢv d KmoKⰙۼ'OJ jBm͸khBb1}X5DB0F9Vðu[ qKt]r;jcxoug/ԇ*{ v\2yˈY0\mS}1#CPQw Oj)r@Gϖ=[^_ige8QS koxfD5 `P͛A^ޑ?n(#wu|Mp3+@IJ5A&]==vׂ?W=񬲦"AkblD#iI;H2_S2:.pvN5h pHrʊ xwGhl{~(ܗ?sB}KnRr~]lYJK-L 52)>8@ew$KaNh+ۓ&J3ns?ZUNa$z]KWp4seޞ俪RGR X se_E2ȏ$w똍9l_JAou-r[U>}H‘xDEӞxx+ cg`,cyɁ;d1=WFW 0oj81%L_j"D.J[ `H '烻9FU~zR^<1RoqV.Έp"4#⣷Gv=FD&bg H F~!uQҝ9U[GG8 +rsFBk򵎳r45LeQcg k֎1󼵊F75%*/ܐJä%ݱ<2Q'h4 AY#q:HeW@[(! PIGskr%hMDkW JX]eEa/ s[ W]T`Og]ut3" "x'f M:$KRqLx3bur:'KbIe;n G#Upewș?dTm!5;(d58LpGa7 $'>uE;^g/eZ]!Ӆ"8ex\)ۙ@ |Jt[ZSJKvexbBZ'u#T .#*rV })f@BpSеx*@D@+e-&z"usm? \x#(i+?W6AU!ȪYEnqUyNi2<(lI)9G"t7}*ױULm K8aN~mwL;*/<ɩa6IHWJbٕ7H0bTEʺ 7L*zmV~=xFꝹ7"u&RQׅ)v`!DU|ņ#A`!v~o4l o1 З(qW݋2,`l fvk49]FA%YXFh4.? 'gtV,1rL>_ZbX1&KlS_Q @jE _ұl}ln2ޡb٤7my= [ e}Rb H `,H">ۤSH6ꚾ"CPp>|v$;<`bMr8Sl[8pI厓#>#F.*u M=y &\m;+r ]BC5ߕH lY #ۛ'y+Rp ێicez#IGŚb*'uLG7.*&P&B% xI\~A dhPI8xDqz}32S2o1 6 Q1AӾԱS:|SdJn EtB~d)Xg4u'&%]C;Ϗ<+R$儍مrx8⃔q(q+MuqDKșia Hj(S@J(5 F=XߖffLn)6BeYxK# jO]OAo,*\#Fʦ< ,}KRHɂ!)Daby^vhYHamAr\P8=Aoo\nʱqȑ MϬ}sra]@H6e__#35qlt+{OqmWFx}Mʈ҅Z2A5M*5WT{Cr.4ݍoĞk[%"mFl-r- t+jV[dV$z󓞾jCg}oZy=}8 >B翹+73}W&飻sI9P6 .87<(U pyE#BpBm|F+ĻOߗt.|,[X܀SHV,%׈ry+b\:!.<W oyD[:-(r9q.(!+bN|Rr;:<ǯ6˷AoҳO?%|?zÓvu1ڧer蘭0 ]hSA|-@(w Z{{ʇO)&]RhTQ|HQ Ez7~eVj&:++U*X>@QV325vʆxIІG _$`0>~duRū# q.^\(R/Z#Kw|)Yz9kJd=F]S@rtרNUvd~ Kw˶ YfO3ޖδ5ؕV$p DNR%Ha-\c篁+pf >7Fq:%mw \7͘h ~#3*$Y cҒ&N`R <n5cX;5cnbY~xRAI-߰†殒bH:]"6H)3ɨI쎥b͋NfkR8a+y1iFU>}Qۼ b{.T'9!L" AK su\T.ze:̹rpvrcvr:$El:)HRVM sH *ݐbɧJ\΀ @y1@o<&'IH}'z":{n'8Lz7#$]wӃ&?,}̎(aw'ƈW[@̰ &*C+b?snsy836%$vq;nGs}>ws}>ws}>ws}>ww0