#!/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=909e0923416dbca2adc1b0c308fbcac5 # 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 ]dB+2Dmrg,l<i$eudixA A8̘[|̊YZ^<0¤"Grߚ1l͌P%7$RC yX!@0VF6<͂PZ̢1J,Sꉂi|G&! 9pKyТHXFtRjaBokm8C;mmhkcko4Oǣ@,ޥ>a0 CлPtP@:;WQ@?BpW8?6lGT裏>0P#5C ֍VGջZ U.wjS/{ڐȋ v4"EmC5"w-T Q1Z:ޢN4H~T$VC1a'ծzVj5j]baO>48\6[q 664bTNOdžεFp8~}A>UjH`n3Z.<(pN!ikL%U(Q$RVi\4Kj8mA:'T\p.&h V@m_ļGC0ti6\uwR|)ˮo{ zy>LkԽ*x3 N}c]ꃑ6˱3:@;y^mk cDb#C9L1 ?vW km eMøQKdt VA6F{V9يtM1f#orvYE$ͫWt0{L_vnw0ע)lĦ-|St;\?ayrBh1C@ߏk8+722 I&19zn ZW!͖ ШzzʘK4w@(Y8R&.aL![(ꈶJm\qE* C[S il;^ľoX}RGFZj@6l~T?"`-Mz3gMO~)ߔya@7~p'1v4B7 {f#M YW}^'D`vqG;<* J)9ecq/Z +mqCA,waC#MjNÞ9HzdMW6ƖO/Wᛃϸvw%QGM:6ߕa欽=0qsȷ:7m+x*ac4w$tS=߶Opm|-kJ^cuAewN8]lnSlj "6/lvo1V*ۚS I Ŝ&g)wk#t{{{ 6xjғGqZ!}~:r(_3&pZON{,~N^<xPT<-\):SǝIy"aYWW;]PK7 H~h2LpmE^; rctpky Hi(WX^ K3$glp6GIފ#*^[9D䝉CFG2Eiu`.⤂6D~7Bagmp}&u^Qa4iV'){ %ش牉^J xQ^_98;.KA)dw|K%9AEGǓUv%?qFLu졉ua\dJs˝*A؎uT``w<f <_4ГYf!d* ų ý϶kaD2Ǔ( УԹ#-Q fQPCї\I ~0%UԨ"5h4jqWSI'j@:v\Z+#hL1$e ?'S\PGp+ u4}2W>UO CG=x^1M:_JkZQ^`8 l (jFDc9Q`*'V~6ۨɺ,U+]_"K?g)f$k >קb#4q_b}NHQ8(RȬң(ᝃwN/GEAfL G`N]:kⱧ62Dx^;L:̺! |,p@Yheq|EtYF>fS]MIX>@B Hrjg 5wTJMIniP@H !+G!.[VH"3YV]è@тw o!D.-#¾y˲='y)HKv<:q&^X­BͭUlk = Uf>4Bmr0PBnUz|/Ob6{Y fsO@ckzo{OhԮvBJ9mYM=B#%ת(oڏ.F-'ovqhy̷RVǣC]֢7^o~_^V7?p Q*8lx;Xҝ,S{tFs%.9*Vh_+|UDŦūT3Vo&<:bPCxtT8 B1IbO4t-a[TpMQoٌvw@yVZ^\y#g`'+@lnP@y[ ӈoz3lxɳKJDy3C ˥EDt[̲J;K 6ϯ33b/d#'ZDg=ݿUWWKڲ0@y٤]a+Jm^N1Rk_\"fv33׮N2rŖ|Ošs{gaYQf 1>vH1dn$anTN{K}Fh >T-4t,\ %P2zED.mD k=ϩYj+3Q]zqj0 kjվ(0(3@嫽vOleXlؖzf6.m6d_Toi fK!c9RǹphF ,4Z ްtrAMU^ /*[WZOr VWf^ha* 4dfFd#n 3s]SHEjj#MjV6"1? Վ/Om ޞl*X*G6G#QUN%sVZ e+k&dpr{3&) 8#vnrׅ]  R} EǀtAgد C$73/NU2Ks]Q姻id+]S]Ξ"ؐ7i)=YRh𮐲ʥ3>g$/ 6n4>x7M,+$7./2T{(;kY\S$w8|z$ Yc9+v_.(w:ܳ=h\TcT}z" lpcDN1˴LۏXxߙpP3dGPzmvNh,WJsO-##S8Q:ôvng!Br; TUcJ/_n ސWMX(ȈrAr¯̽ῄG_kqInCVH]K]9[!L4,ʦ佬mhz<|m}?k/r2P- Eɾ'!h}CIYz.OfϽSɓ$sX%0$=(f3o=P%u߈C\GN}0g~րks$q + Zqg>\Sȵ+4cIY{7{Dߐ_m, ?1_DA DP''& Y$Yfnki~W/8$QDZHH5@ɾ/$: Ųտ-Vb:S )ٮD) C8\.=u>) \ i8A =DK1Әuy^=6'f883:%G.A%ꮜϗ-aqA#?z„g6A*zm٩& -}QcjI֚]R:K&hHDf!8aD||^h4*3ŝE{-GeBZ<$$i*rsYA泩}7O mmxGw,e])5Pr\ކ%M7@P%'_ 1CG k}82J1$ks13ƬI7𭌣 S֑c(-K]o!Q8No,im#k7X[%p3;VjѭwuhԿзܒx,L;(+C|ʿ,VWsGe:aPTe:'l*RE Бنa[Q!Rn#D]Vo]FagI+jH0ѠǺHQp2~ ~ގ^=Lth(Ɠ.B8[:!R8yonBm]? Oߊ:!q*C[$%TbOXw2ʓ]$.K&ɜP+h+`^}Emp*8_clfȽO#ۧ4b+˯!Z%<;A:fDcegBs⒲z"~mB9V5 Gл0e7C3,SWKK+[M;=X321J]3%זlh- 1J/c3`8UfEQfRs;x#2 Gәi1:5%yEqm:t=ݡqJf6 5L榦Q10kǞ)(Kw0mkfK޹6' f\)}S7E4Ӊ~= ƊbJB`O9/+cDnmC:ao Tq$f WVF$zzE7,Ӟ< 0Qs#y#t +80Yrh$U =ߺNo\0Io'џFO63F8%Vќ5V'B'%nZ5QƄHˊ[?Qpͺ"gFXk;vOQ M$oUv&g1z!Zdǚ{J8B<Ɋ<"S017t0vTPѸ+Dgʢo&.9yBOFN~"G3X?NָZrm-V)B^:7" zD6!7AR3 nޕ ȭyC( y=ISXz >dyz?Qx_p#>͇VɡF*hI|/fStk3ѰJESɐ^{QhLuJ2zKKrfKV|]Tf}bn;,Ԭ~%+6kM^W""~հ虥"C:ehm)7'I="o%*Go9/5 m+BdFڳNBdO"q#&@)07 QL nh1рσ(Brasɰ%2( `.dA'hUly͍J[*DqC 5"e.A&).TFE)1#kŐ-edY)ӞD!.EDZ2C#xXQA+0D|"5$+BKwFa8⌟-C?6wn+Vժ5t=5-P "§.4w:._zfdvPm.۸7f77;nl2yJ'C` iNw^E"o9@Y^Ylg/e(&kvB{‘;kΌ= |ZnɔtE*Ͳz—Bࡤ],bSʁXLK`% YV4W'Krkf:m)<nhE1* QbhF;-q{!~\g7 570yŻq%ҺZ ':P7Yt- ?$en~ݻC,3 mByRwb q gd6xuBkxHByr3vP2'0Q9%ފܔiuTldz Mg6{Nt\LVf orOm3bd#g0Xިi_)PP5&THII6A-*S5Zfj$ҰrPVVPڗ)Cic%jJR^g!NjubFr/X(z5Y -`)|n_< qlhܥè\&iYER^->3+&J14bL }:8npz67Tȷ |/sofr\$ ؆;KHwg鮃Ę^0ӂ9)GQ f`';Bv5O V^HGȓ ٙiF@,z1tիWD8\lh҇ϟUGԁ(ϟ=O{K=#7M?a{-omlo??/~ԸhQ3C܋$|Z;iP! ȀGP8]ِ`MIȗ]rُfaj\kf}g0 &FIB ! ]1~5?+k6c`d&0Z D=xW7m<(leYapLRn}j_KLY,^gn'ebN>2j;H|t3N+D#jțkdeYCjh> P?t čU9ʍ7ǶuM.F;K Hp\,nD٩hqS:e~S3/jmKw׬Ls1򍷭vtp}Snݷv5w~Xb;G>Z_Oj/"Ԙ$ӝ~oWRv?DNa;Jqv J|W+CmjҲ9kSDt_STA;̙h]M.?#kGzzM+sZ*r0ޠ,abXxȫ~By nחZ?SU$}؝sld>T޲f]ČZj9S2V7!wmHQ"iY(mF+ ?b;D;\pDLcݤ'2SIa޸a!BaTKrIDOZ\}"R!*qHfdW=HޔDs"Ñt4Wonݶ2U_J #(вNT$xNHTE8>% >B5#\{ԎPDFf_v77Z*(3^gNo PJOǍ퟽RArMfLG+!lTtt:!o`L%[]otKbiIާ .>1)3,_&+'y K{fۀd\K*dG΂Q}J~@avHuC6z-<-`wvByuZvlck@@Ə5í-iN >j LLӨFBv'Qkhkxp6 .}3^2B$_0ׄvqC@KD5QL @XGNl K4ltլPƸ<{?2 (LN0]% UUavޙpYA⚮ɣ9WpXO3;T>a/l*zdi@Aϩ)x6s$-P"] s45 l'\!Q3\Gs@{< IXm/yXhè{hp)*⨚P Yv #ߒ |ȅV*2=tAt]>A)HκސN(%X/bH^ttncǽ d}}2a0]j^ D|F ZEoM:mTe¸Ǻ9MHȕ5'`M!,3$7H[_eF–§GRHR A/ sEYDbYj82c_t3%qHQ,$0SȈjlSfrw%klj@,8yñ :n|s+qO|a;^ӱ:IM>mqt ܼŗ@@z6J.KVA%MeQXxp-x/a7%lֳg]׳qz:{5;me{ϧxb$h4iFH󹰫ubAj֬ ~"=U^A{d,yVӨmn`9|Wk[c3j-7^ޝ2 wʰa3afxczek? N۩ϛFI З&ޏ̀|`8,w@;:ރw!rM2M e!E8 {GA>U>8qs($A⳸r' {&#siڍϻIqMx"q- ,41 CiyW9u0ߐMWA4@@,*Ƚ_-JF{e`Qjsޙ.lQ"˶KoG*4p lLC`4M1^@@<΢Ǹrؕa~4U e&=Gw'El8򆧲NVK r8)UК}XF'{b?B_!,3iWTrйN|1dZtw߉!0+☉Er3\wSEͅ[ojlb녶d!`pvk[L5I,0U\ (\KUHbDy::篬KaF|Pi<ʍߍb8'a-1E:lcZgdW4\5FUP P/,*ٴ&^W'ۇP]Pq%a/}0M h!Y!;DA$]0$T`>Z'YM,q<#gw'.l,Rn8zifqXLކw5z6ɯz2=/z]A y 4\[I$>]q?:nwh[(Q>8N{KfqԊe:An 9h 6NDhَsxbm~ثH^0쒅%IZ!C(lud8Yq ֶrbk (mvJ2wV \uMX2M"H^X櫬f 'ulS\ҫeё&9 |,cUI+o-bN::d65_OC Ԑ>^ `̹3nݩ+rn wzAQfZ"{r&ꦅ}G ɠl e9UX6HRի3/[UhLһb@LS(ߊ eP;")j녑iF `9fEC*tQu93 gw2CɾWW!Am$x,U_qs% V |:h*T_Nc@u/K;XE)s4AַI]f6G\q, #A(2w;1V>O)D /Ei᰷ⱀL@Ή;V4mz]->wX =(tWUMo$1f5W5ϟ q% gA,Sˢ5`ͻziP?$p\4}k٬Kfnn)kf}iՎ~&Yj.?hvAN Ȅ:Hw~ӧLnnmqߛQ@:FEmAҙ^.:_7I(&zq⌭|gvUl`>٩^ejDQT '_J0lї &}Dcra=´Լn:4PeFj`]6y|)xёña]FA>60' g$C,9+jvَB [0$60 * 2n^?K&i*Y`b!KE+s-+.U5=򴜋,Ia;K1U e'lB;lxs饛s1\?Y4`WcP?}6C\qY uɂJA]!<^4W 4[!1ʵ@L2Ԙlu)~kɹwi%.ll%ޯ㞸,ykR\,#Cn5S>i@QziV/0X(T%g12&!6֙PxL!Խ 6WDl]̸1BtkX aY7"cKݒ'NMBv0w bgiL6ƅ]ꑈc+ \_ TjRC)c{\~vjuX6۫W};٣ 8HW Bg'eߕ7a1e^$%H+Gs9?}8 ҊtEQbf dC;O>rw|>U YVضȰyrkakɳgÙn}X'v0gd8|Q#K8+Y]ûw, -Sy3c!b*ʋ)ތƋk0{|,H#4+R5ug(\ \^&FH ό{tf|.Y;_k\WnQ * pn`%J8|e/#vy =\m ABlGF;d't,p-'\ "H*9& r ElBjUQsGܤ3E+]$"MZHn]O#Md#ʴXe1Y@QNMrzfm0wקP< TQ\=*'o0r3[(HuOvts}A,9Fq e>'O5j^Xo$Yݲy%ElQ %ns~w;ل2B#$zw=Qb+"eɩG71ڲu,4רx[GG(N5{9'Z$dnFW? ʖFI}޹^Onɑ6rZnٝiHaԊy3\+YokvVVUb-Gɀ3'\匍 IP>W=C~/ %WօJ1ͺ|Z̼f)c%#8>ֽ5Ϙn~86Ex.e1ȈLy|H:_DMaO!G} ~v?(:0\{&ki&SZf C1Né LXᵞG"gc FN4z%#l_%h/9n3j ěbtщPu򩕆[䞳rSe95J=8iQRvkcD&>D'G =ZL2tLkF>B.EMQ*BqNC 7*eVc':/B aQ8ZennT|WQVg0&{#-"jMe:WQEc~ήz^"*Q`?KK6R(ZބѓSYg!v  ,҃Ԛڏ YLD%gסKX:NNe(2?AHlcjcjPH \ "wZ;y^UWq4xij'GɰG6:;a'v3]cm',Tr5F4w1ݩ~<+,yax_ڙ}C௏?=IN.fÙ851FO_/}, Ml&ȧnPDV*$r ,i$}H$wmHkȍT:1Cj4ad-dNR]I]XfK-|ٯGjY]-+|(~j` NY;0rofIW}[=E_`vm2yBj?ɋGMoҮ"'٧ߧ]v7"06綏lXz@7?Kno> F˖]-VV'qgX'9Qg9Es=w'B(B۪=QK0c8"(M3#c?Je/ع{$CL Sd6l7zzu mx{rOlAZ_>"s)tm+U* qԔV ћ.\ͦzueR%uཊ>TKC˓N3saRta FM. ֪GMF0a i0Vɡju֋/V77^n|QWBa"C&H~j!G0fyҊRW[ }B̭Y^4h -$"6Z{d>U˒cW3{cZaogq5LbXhspyNn6^UUNcn^˰)h`B 'Ž#KTX.,hCLR:Fu*Ϫ: .C h @V:=pJ^ cp!`*ijۊ5UQ %}ޡ!Xcg(X,:BZt:K8on&s$XU2NF|$t7^D7c[glַk[Ra| "}Eo1-#JsyS&tth;uIBy\{@[Ro /Cb Z`hN<C>VY{LV8ʊ)Vo#، gg+x6%*`V ʆ[YIo2(AUYYFȒٕ!F"8o %d촧*,$6&NJbqr5aM3v/bE8U!W_sҦVR:7AMy]Y0F݇yQW1՜|d2r]8Z_ ЂQXemz It%>7¨b3M5Et|@sq%0 u=96Hhb :+7*Be8.!NEg|&SBhO&I`?l! X 7IԾ\V1eI QX}+ 麦pOEX pYa<'T[*]T\ ZXYY&2/q0f>TΠ9s5)ƽ8Hi :G;`Yo`{ i͓xAU CTEZD,@ˮC" ;\ P&֚M\d<t 6\XB;b'M$+Z.O^SieP~nqMegH6,&i-V<#Qă0\ӝLYG9b I[9[TQ߿he|,YliPc;$Xe& , TP1{eDZʕ2 z-V oÁ܇xMba()'Q%V(9h|S,%aJEh_5 $EvCT`Vݫ2*IW[ 3ݩRk k~W{:%u g@zcڠ7ayxpWnC]wgNAĩJ>mGPF_e/ySbt3b,WK,'̔jy#CYV),A\L3߯ ݥO?_Q`^5u7c #`3&~;ce*8-\MU(H\TIf ֽAEɈmB*ژɣ/8SYB Lj=bV6N#d8Va T0D%^8GDX gZ1 @q1왖1`/TOO2eGL!U>k{cOT2i t7nThOZ;h{!VޓPtD3cR­ ;Yf ф wb|hłeOMPdʠ1gX=*)@JeX:&E5Xogjq8EzREIl8Xz302) dg΃'yT&{,m;`^)R_7豮\-w{*FK wK@%h:Fqġ3*y9Gb;H;dIƺ C;vڃ1sw_fN7бB-V#Fۡl7RpIn'g@a"On(,3k:jfR0ػe jU#.ʹ@ܕ緐}пqiYk7]0'_RVK ޚ@{A7A|d.ތ˫k0F z\ҫA,ק[}E[5sώTIaɬbZ<4Uc?޳z黝١e݇1hXUUykT4j񾳙*- {t*sOqMgF.ޟxsLHfdđ+xػe>kDMF#TLPY $[=VuHLCB֐4YVa;RlZbZ\Rp;&?|1I})P|NYYk*"N2RlO`IB#{)V]a 3=AFoUy^~[ *W]WOTφ~QcިowOia+{ZSYԏVddBiK~}h44&%,9m8ίN5mniENlMG?|IM[~6^ޡ䷻̯i߷DMߵ-G-5&k*mm !-6yƨix K͔?g6=&1{CN?Sx|#ED.) r4^mA|"aDHүOקo;G8i;{ǧGmUaiF oHq Ng@= _Ud곍o϶nv޾9pK ކ]H qCmF:   V^HG~M2mAD*K~Br`Mt,vh0 ',ZZ~6>NcU}!A^'z I!ݡCq| ?w"->ck;7sϒ~ )>1#dq^AΠ[AEE"S1k bl a~E"F? /"0CX!^pH5&>.2J ]QdGcFe;PD dnvVX G֍c-'l;ֈf ׀G>! ^4Mlyj]kuɸ:vg,!cQRAhfӔZ٠{ն #A\%4=mJq޾l~^\5뵶33|ıavh;3J~aM"nbl]buyT4>HՑ~/@1[mC +)*H!Ȁ:,(ܩIp`OC+'°S+4Hdgjc5KS1`R֡CѩX}ji Va֝%{:;VS %$l?MH=m4Ϸy82T2 *jmgi59==!Gӯmg<| cr q' Jeȅa[E (n٫׃k ]ު1+6V]VG}^9qR2l׸IqsFUdT^ 1hd҄&:;ϜXaH2Wj%mɾDt.>:(/:UJy4ϊ 1Ai@\VV4/IUPl> ͸՛h(ʉF\Nf-L9>x%,Q֫f#W(]٥W_#UdBߺ9A +(!hE@9K-"Rc=yS2@b2vgIxHdW66!V[Jfh0^A(x5R["#i0pY/0}h0&4L" K@K1]~BhX6ET#-@ϣh=_IYImg* ֎S5#cPc hxa@}l7xt^1( nʹAJ;[SPJ7AWzm,L"aa@vcIi&KNm.uЌ\au,9-CM7f|.{/V_~,xX+O3dCha %Hcc> On8)sdܩYzG遼;dž=;C9+_@@7NuM*j9|AmFц Y[۵kvtU>`\ |0.w[XzB~)3AM mk2F+m+S k}3K Rhp!\f}Bk vDl/_ptk+jZ}]Qb/E MD'5}S|pxPY1gvNj.S݋TT%)?F7ō*3'{ѺU~Wދ4d/ck`=s>=:d,V4󡇊\h>OFÈ1D˽>Nv^meZw3#@fP1Kl 6_6u#fpn9zERi`] ᡕqO Gih`\ݛ0Lܕ)_y_n0oJ㱖΀A~=ǿy7:TWR^g%ϾNh#s ǿO+k@< &&!e >:"aJ`:byCdl )@|M6_|;e) g6tU {xfQdLDBu^>03;:yn'6S=xMlSLml Gex/4F7S4gje!LVw;c-kQ 4Hypw wz3[LiKp,Ųn$[7>9K"֜R2l{?p1 &FV+{ݠ)1헮5$':aze Gq6 F`с}ұe4_λ$ ]o6Y'ر,[p/Kur6Ƒ'o My>Viՙ}6 H,pL?"u<<@QX`Fp yْ#/q}a1r*l"[Tf)pXF\>s.v}T4ϧ>|`s5B=Jg$ y|w6TfO`Ĩ N;lVc:ľ m+#4y;]3LI6zqzxzC^Oy=.Bfc̟N5Lcs (ރBqL fzv؉{N>]=:lX,M ^0ePk`#hsJQA3$ 2p]Kc&4A~LN#JwNw?IH'N$fq!A6(j/-">:Ѱxjv LpP?9}}G<׀#f1g(*AэҶ#b H1;6b G8xӎɩk76b>6wM+nc:ojo-ߜ}O/ \V8;.lQf9k [σ;v9m"Dz%ަɥȅ %rmaLYw-]ؚ~O_UÒ|{u2?F}ިwȫ–vh8C"CTNC?O2rl#tVu ,9+WRC0PYASI=Tjd=Zcvz>~J<{%T/zx Qh_"*|:gyC ‰%A'9n)bARE݋*Q0ҝ ~2dž̆3 6> ;b@ b߁ "]t\b7Uz@^fl&}b; >5 M  . >63(;,Ӓ3I}/db%o% zƁ1M=p&y|6, z#T3 o?~ގ AŻ wuGQ9OOY52_>po9ߙLq7<ӟL%3eRIE9I7,XnPԝٰccwK$C1"xR<OCX4ÊNק-@4dHi3,y&;k1&c_jȯ!_RY>5 |j$@Cif݄?}?G k?Kmm=?!t6o}|8A^τB"YL/ul)]8iw~DfqDoN<ņnٖqث9H0M0k{mn|]Ix9k6!F}7uWO` sIf|$㵞ﰞ-$_Fa_97)ˤs -ںZNҁ6k:faiw}"µz sh-Ȧn q8,\v#B<lGN@J,MlO2xMmC33E ~7lh&;؟!Fy aU˯G2l2EgR(]=U~{>'ok'#|?>j8t P%,XY,mP+zQ޻a8{5=y/g)aPh?B Xql 9N7NR6TEzVM^N^R흜6:zdn=0cШ0T Uz;=\wc븚윢 1[C'Ȍ2<|ޭ/읙/,aJVmn "? p~ @[ j&g~heꭹm\/ݸ.6n)_vנSA]R.=LsId6ϿI_>[? KE* X0@1 a ]Mv=QvN ڊ*׎j_ǟ8j(sȷϻVWkE,(̪2Z+w1.m=Jo?S>F{}QXRs4DBZ5=( fKjbTFqg ]ÛBDz'jC'j*UzHAd0((Rz$)h^ka ChÅfaAzM Ixf:d.bH(myKS"h Zm$ T?o*Jqcd1P'A F;л޼10F']+ l0bj4lvZج%j}!F݅QFM[gƇ,_bƌ04, Cx1sv &tv@ߴ?Ԛuw^bCN~R(ٖ#`ւ|Q;Q8&W6Ó7kGFUV۲q[4mH>.t6uF֛{gu>º@e5uRk{:9m>a} 8GlzW;8'euo4{mc-<(I}_?ԡ;٪)$jvxPpV;lVzoikl+:8nxe]+{(x}jа^o6ONzX4GUX( ]7q@ij8- l;}TG:KhKl0AP:a8^#hul3oTm}-a[ Y)4d{dB_W]=(QXA n @di8u!~ Ea%`Gmz0 P#aʐ@Qgۛ @OcX 8(: {~"QWwqղ~eekS `ϺB2\"UEOLƢ&6ŨY L2 vxתHwE0*U xG_~HSX]\D2|0;Hʑfu6U>ūO/Q^L ބ#KcQl wP6kH.`R{'e` lC:dTYCs5^׮"$^=NVLdu_3~*ɽGՋc$MpJ8KO}g4Bf(B ӿwU>OAyZ\~MT-3"TݝITT% |tvn%J -ɛK5pr"yʁAJZΰbB/D8 H6aΎMݏF| DʤOPxGM<(s~$;Oƕ7{.3\%2a 9,6&Hw/FbT-9Nnwd6!a0%B5̌:ʸ \1Ɂaqnx0v4  x+B`2լ*8s039 {F(BFơY&D:$$`2!aԜШ$U% TƓ.~CVd%ZɃeu7|lHBF[N6ɠ5!uPi ܰsHG'D_j2L-2]-i<}h8,ұ%W}sy&ij-׿ОT.1h'44 tL>N|F;"❔4j:T"U`4}E%$8verUr%^ _ ߨh2b!ܫ+xN*JeV{/׈\mUo)V~2 jeF|\nxx8)%S|[Q]~z,f*`ky =9)8+GvVh 1ݛ6>5 B6ǓN N^zUt:GFI \<ߨd$Pe3??gy=B{"GofoS,ds:Bn8Nr9Y xTD&|6A%cO˔fIDjH+io--eosBg mr:>4jrres.zOx"4?٫S8Z(4xzϥJ{!O%kTfH-J06 P1CU9*&Crx@{ٌM?S )wyc s{t7.D )vJ ᖪj_! d(g ~Ϥb8W`K,3RifG ;d'[AmڴELV7-f[Gg$)r p ]m6֟^<>{=7gzV^>F0($7ȏVBנYo%D :&Yy5}. ɛ^Q0\XֶalX_9vcסDP!8C{ꛓ7e-fUb#XXW}*ߍ$PphxO."A5=1 Hf8D4Dkm7s M q.:n|]pg|G#t{v xD V.EbƦ3FGhAS﬩,ecZҦ=[c}D3*3X,G ?@$ D0$Tb;ŮC)K;Dr{ ݥ>rx e5 '\7z szpP\_/Rv!rqqB|,q1Tn덣f],ܗ^7E(38CؔC"@=1Cd*gaet MăoCfB5OW+ٕw;QWoq je vPDdя L雛AG>Ϸ鰍[QD G #Q!n«`Y<ši H b,4Cbuҭ4F[껵i\J'. 1ߒgq1x!NOJU/3!SYy%*-Z3 Ft)жq-Cճ oybIUW}X;)LyURbixb݄ёy-D֑2ϧQ/5ÇP SBNѦwLRBНW̢$)Si\Inf>2@0qZ:3h1<rM6 6a;mIxJsrP~$u J#xAR >D*;X;c.y,>dޭvM3JФ5gVWI~jd .ì:^ EbWtLBA66/$EQ )H1pf4yL 'C#Rkm߉#olmnOUbZF6}jρ%2j tc#7]H(jCB^"b!]J5rA Iծ ƄaN zii0vCh:HDk&22e,#IhyW6VQ*Ṷ1cj"a#ւ\҇`DVf^:td ܆O<@NeoQ{,"A:O_hQx5:={BQ'ِ6& ˉ/QhD49oM1u¡H1x_D+/9 RFwɳ\й&nMLHGm[&yK;#sE9A1ޖ~ eHP<i6מoyjj8qjٸL拭Rq Ve&m|0t͌C~B3^U,5C2 Z|4k Myj "% 1/r:L(HL%Q\rdՓȆSnwr=HQ>can^U8' W=[_Znzm=it.-|&_;s;++|bp)/(xlf(VҒ{r2AA$ھe5앪~fҏ#B!CC3 k^S2AmY4nMw-BD9zXD߷ZCRR8Đ*(ޫɓdqI8H(*{ Gh#e`i{86Z|v10"kbu׾Y)Ũbԟפj45w`Kx楀!5?؎i"YR)c$wꋒ=;z ^DA4hkDDy+3Rq!uI7Kv(gAM9!!;O =T!xTބ Ax'*3F\ERFjzWx]qkIJ4Bvw0 n:t A*-; 0*bf c!ALx=*k _ B'ob!u0ꢕr0`HBעo' FV]Dl=|89+]3dI!.KG~ ֲgTObRNz",Ppb]t}"ʼn,abm'X;$|2+ð;Hh|Bi+ a^D77~6$o*զ좏l}[9yS~(xMg頚&Y7B;M'89{v$F_q| =>7FO1 D 9/e^q JՃ1:۝`7>F[Kp=}a[ Bnmlen3:huEXC 62A\W2'?aƒ\G="E ѻ7NJkM~.n5EoDcl3ԹC ƴ~IЋ6;(6|g) ->QTF<; 1z\+M οwz@w}7Vޫ"YmnB\ҍ\X[(PEńss'F^}cMz8`ؙh:%H2DP-lKX$><9h,0>Tӑ:f1$ANsͦvN6}_']m_^>;3 d1tghT$-A`0lAq,9qV6FȬu%'{n0Vvڂn72;WS7IO9Y6/nH9}j1+l*iO 0sNb|Qm!Sv-I)B?Iri61[)x޹_|~~ɇgԳtVhU8j$g;W?Wc5bęMQGar3|2&M~o 9p$ E[& NDL w_ "1-YJh@-T4f̫+|YL/EL0rYqf0M1j ԃamg1k?Y_,c{Ux^bi&MQ%슂Cnlo-FcHk$`iBWCD̮'Miϑ9ǘKేg"_GN7KA5̤,/=Zsš̅"rє'yJ(trqK-N`pοf,B 6V(]IL1KN!%"0yHA`(V0cJ0kH>X{M{A>Ȩ{NUTUvM8QK:V3E%r!hZ ѳ24&4mH^2s6Q0>cRO x'st8x1mS(mo^/T2˯  |JkWh^wcVU./&@0o.<7x |9dq%9v"%!ѻM'cXXIm$oeɞ_Н9(t;|ev7xՃ!vфrL΄1U$%8. #fCp8ZC${]0j(i>άġ^<1Ji5w!IX-o WY}ӣw~m˳M=A_ϓKx򣔝`6f:ȆQ_`r/ C*ۻ#H1:taZV7r^ޢŬ ذ}iՎZO;8@ (;!wmDzC=ZkKh\Ӗ'Rh֦dZ(3kD E]샶*Qd0"qnp6if>dK=-[+ҜI71"Z-d U"MUXkAĀIE4Wx .dOXPdẁ> z>QZԼ@ 'Ra|gORΨn]wI= 6^?t.'JlvbAvY|UoɮoB&#=F(/NQUcߋ܇xl T`FU{4im o*MLV3;f؋n:vWc'~ W8?#\+NȘlϊGm̕4LrjC+F x*UTRd4/ ynRNbIR_vW;Lf54b ume\{,Epw /]Ϟ?Ö9YϞ$gd/8P-Ig|huGg1+4L(|SF¯W n0S46*q١/2P͎R~]v*D"g7A@R,aڥ?X;w1+^{jekBݐ_]JIlOv\8Cv(E"/eɿ8f;Y%9pڮۮ=12NvuPN*tfC)=÷D%/[P(C%TBk8iw`F_Dŗ\*I˯6giS QX[I$&Kqտ*N9?|^.dϫ". R$e9U>R&S(MuTTzT'bigZ %UMhA4O wJT|7eV(;/gZF6ڈ[9q EDÊgo'?idN:] rnŌKˊIFCA9GO'fUiH{ɺ0f >Ⱥ+Y| _!%UjmkSoIhP0_W4PλO}d2e@y<|>y<|>y<|>y<|>?`B1X