#!/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=416451abae0b117988347b56536a92b0 # 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 O^E #D[[63pepnl0XWUe&Y|Nwh㣚~up\~87k߱ڷ$*ad}^.Rw{ybk^1͋zX{֜N,!nSQ7b9s=rzVp&~0 ֍"$3q'Msp6̍"y߸| ̊xZ0<) :%,31}hDY3m0B>(H B]p4$`gsM3?L b% t $EV9`yyPXFAg Vt5~ҵ;t۪nf G,;MPWjl37jHS2 P`8ZOhP7ATu?ZW};ڨu:iaSiqX !smhuZOmWnwW@3Wud *;UiWɈն>@@b xdGMSYb5Կ :Yk/Jj qSc# mﵖj Ii7GMOdžF#UÑ6@@:@gĨ>2L6OeAz(*(YXEaZ,DR^Y_=jgjb| j hj0uL2TTgՈˤVuX^C%8I!ѵΥi)(씡(i&R-s˾.btm82f9VQ5?۪1)UyaIbbkC?K?W/%i }%EqZLP$|b{KYA37suJ_DA;z:yG?toIT|?b{r-8hUI27-\۴ѽm 1Y:1>@8`8[*8pzȞ$H)40FyHx 26 8O"ɶ,!h .V8Wd{cv= `uk + AFv|^R:&C+E<T޺p`oy@"}'$ |ꢏoEw^w+A42ק08BJ͗˄ ;|MJiHTa5\_̰]~wjS[,+DTl cZ!C׻;.~Qcj8}Il4g3Ȁ%i#[Hyx `,ò/L/;t?ER9^5CֲsmQf/JX;q j `^flAGtDz[AmfojF/I'$#1iMϯHG郬dO]F ۠dGV,FIsl~Lu8)U+Ax|*P@|+&Z][Zwqbzhp#7܊=i5+B4_nZS Zܭ\hv Б; pKrzjΪQ`ÕiW;6-mͱ%$3]l"C O.@1zqQNCŝv&IˈЩ, }ȟpsf-̓-=C9اԒ:eE2AnXNj{tehp1wt1q3PbeCPj-BL aKll.Kdk ) ]bA0hq~R$Ru揪W%6aG)`"؞"fȣ {7Zpu'I'aF8f;9a7Gsj fpN Ա\ػ>lfbL^̰ {a 9ǐ K 4Q<\wJP (QgFMNJ,AKk' [!Yt4l$ YEvJM'8 yt.|!B<[w(όO!_%D7@t^+#4\m2Qf  8 &@VΪltE W[&&. ۭJ |/uTkByU{ -Af<_l<М(L3O-0ʥe,^*rEA8HgwVV|˩>#[CG;ڙQwIp[v4-nX^^z>=s0t6+"i@Dc ~z{IEof [۽Y_[lEa[w&?0DW/J$ͤML~eA B<E;FI 08kۊ"!zįOP[$jCA`{gI~=٫ 2(Ӯt#0vNsTg•xY31 Mk~O&:2D+BjC]{+" b ( l۔rb$xHi_#00`z<RN^;9F' EЏrVSd7xD snJo)zl(WsAJiA 4s14e?=e@Gf(_V0fшg57,D_IW(KFҶڛnUDY@AUp#<uh,Z‰{7o 0< (Aӓ/|?2¼Ǘ 6Gc]5 4_Ac.^0^;3^t@/.)u;io sIG2X bq"97$ aE<)]<6{MG9p=ʂaup؛7X ػwe vڲ))3$[:RKX,JVB%&g[Ї2Hq I4G#}]B[=0>vb7M%䓻\AܿEzYԖ5{Z\.*%BN'aAo sFH}ܵ k#‚ӂ͔ 1]lIlb*_SEzKC]yi69mU<735s{3X;G~.4,]aB,6܌}ŝ[?ǂ/V,[Ō29~-F, ݌zky]UJ#"/akߍI؞]<6MJ00O ɀd=YiOnlˬZ?.{էW_ѳhxm?Mor^)2Z):2Y(M'LJ,B )ŋvYZSfea{\*Wk*T+)Eſ:M"\Ct:Ik' '*E}OX;nr`RPɜrI5^0WK**.̭T$A@_|I*+TR$BRyPfyHa #7"GTE ޽9%(3+LPI)7!1:Pp~Űq$?P)_|Ͱ.// &{$Pu=ATL5]Mm bKV?Tn`NKAXDVxH\1#LUptF&5cUq`t%^1zЫv+Tw1,)+1A Bn‹7]Q08 RȐ0)F˔z^a&}~Jb{b vdcϋ%z#2'IINDn^DȪޓ,Jp& "b ET֍-~bRz.le'DU_92s|> j 1L[xp^aCə @0^—ܮ`CUIBd 7 k kfOY!BU$Cm2X|K}|+0B/#[f;bye y8˖M4-  ~^f; ,3LKݒ|-o9Y.B4l]D8kkXT#;,zOEya9ĸ~"_0KQ\ܺރ^4[AjxVˑwЉ"zK XxT LZvWšaB[LQĂ]"sI0 ]ĞXz v ¿Ptؿb>AnC-w1΂]dt, `c  E6lWwbd4%h9WSrs:˜W;`+X4Ho-1SW)UQzɐEM,ڦO$k'#AnWlkʭ O:2v9Y/<ɞv骈 z 2%h( Q?ivW0U<Ѷ 8I2]HH1@. AILbm5"z)JNoeYi x;_k5LhN==GNb/]mWT̆A-vSJ3QaL,t(Pd曂){;tv{ e])f$=1Y8F #XHK̹P y(̾s F` xZ=hfuAP2zA]1A~Ə#<=%"Mah,Kםu7W0fg!^@@^Th|u4/QOs-?9h}˾MƷ1Yhn"2Q/# c!_D.:Jǃeðx؉iYHw!r;+ec=|ܱ$ٕ|=4O~jώ[U0 EIjnb X1,?'xLnw|e>sOLS^d@8ƅbݻyfuQ,2{@+Iee BN#&1z}Tn* {D{m IAKG iZ7a<8k J)침Lxwܑw \v\r/`?`ux'$mi3j=Gq, EA`&9_|V^p2wFyG7ʺ|I^:Ш%KYM.g Jy80=>.ywi!w$~mp7UZFg= &B>~**{{a)yYt".'UJj<UVj;.FA w.am줿ao:Gy^ʤjR쏳g 4xd! iEh*AXp,6H!#*xM=X2ƘbJKDؽ=0.Dkb>yB+kC${t[b1ڇr)wVڅ{' #%lXlI|txqt!8_]\gsЁ%cvD4- ӆ7UzmAa!ǐZeH`ZtkaPcBD,D9}q9C#,;Ac]ӵ5ʀT&6)=JOT^HIzUH`*2fQ',"Hia"99XT\ s`&JԺզȮrx'%2#m, hLCu#9"5վL` +l늯g XxEgHjꈵ8Qd8Qg.IޘuP0.pz r'F|,ܻߊ5K$h׏ƈY g}AXDđdUr˟cT%gT$9,0&Ie}8涳&.CmY8wLą;D1&3(|Ӂk(QG 1,[RDxfR4l0}>#kBmv^> ~]u /!ēI^DζYPA'[l=G, EKdВj!nxID̀}h"i^&VwK|X#~z}[D!v)?+O(/d1l2;"p{;[E&+WayL4%;,hQw0s/dg'E>S}+ϗ+?,7H|5D 'Z|:tn6 ;&PKɡ1RӍ*sh7Q~3>=n죣{W8'R,k]u1GԻxuFo:ߐj?Dj9 _L hYr$R(VoXm .B8Zd>SpȻ`z c?rvgsN !?cRF|;=Ng;tX6({ 88 ImUT"H!m)4<# gz| dp?o}J[mܻrw*Bt%+( fIe1-aH|YR+ /OH,|1_byPWǟ(UUq{r(|T B`?f-6eicvOID=ʘP$m+ciu6D6qx1`aT#YW䓦47ꎡh'Z}>9P%4|G*ՏB$0N67czՅk yNб->B!0L)eIӗsj5ڝzb)|Ԍ3 YMU0:vuܪ oaDOe`s`Tpr-[MF#[b^pcg Ϟg0²tjUiWˬ g}%j%У6S-[xfKPe\0e08  $9+0!=4~Nd}-4~ܽ BxaZAsăq?|oV:LJQ=_^5_tPp,3_<"x"4 'i>e*V9K*Y&eR`E5trdJ:V%Ҽ4lo2-%&K`2U3,d(1VF7o3τ bQF[,d-G;h .,,F fH;)&@GA1H&w%_Wto&<@[՝-%:d}!4(9"V;Ǻ,T&dx " ap-*0TF*ر+x^61GpvxX٪!rRecs68fg;#LEnl`.#¨?^)e$X2? E1 gσF< K-9D:M6ϧ QPy*1dVrķPxNr`k9 3+&xnfrwδ!WnT[ .;Nb|'(&3dFU.aR,˙{9mi.?k^'DÓ'Z .oU %N^h7:Dedc XlW)_TB%Yz퓘4 )Ȥ_GڋRkHv',r5iхķ+,T6XCo| 9YΩt?.cT?{ys-u$~ʹn:1!qu{.%|ٹp03a:l?̾{d2t'^fx ׄn׃6(ySICi٬‚vÖ,ܢpϏZm<[eD_~ ?4sMqe2 Q yw2<[FB.ī]W_g?[欠^l@;XR찯}ZGo쩺sJIqi_!j4Ie7ʸ'2 V(p_F,㒷at(S'h߰ȬWo4Q&~&?5ˎJcǓAwxӽU OuJ$59r5׹uU<6>$|IF@Ҡlx&|MnŇZutC ]݋F]BmLH얩ߝSs̵F֠>Rܵpi9`D H>g% ϤŜ4yA/{;\JFOH6BGll!7BMW~41N/93 @8ޕa;lkY/$fR L+LW#ݦ{9~D8vV%'?ؾ/QLU(#XS" C%dvS"Zpȑ@[<.@V35-vǪ/ =bf&dt0)ZI9.250 vd L.l?[!C{ S1v$H,W "ӡ#Es! l1v̮^e5E\%4*xdY!3'ʳ޸m/U78wW?< ZLx*i 9(:Ύ nt '@NAx}GM,Olu ͒qflWB##daĹ6/t:R8&QO=oTGvjb^QXv!Sd֪!EV|Qi0@-F$)`3m-vԞݶa=GR4Q‹mTbs@N.nQjoEp%$xiuzC=`PdA,R9mjDIgaҳBg"D瘞2ci@t40fmΖb= 5a"-ZSTD0d1 ·$CO ɘIfʈ1g7\r\:򰜣7ݢa3NS2a$nY )%o2Zl(3v7XPDl3!a";pl2u}vT='yF٦rQzA=V%gO0[U=)sRW)ܤ+S<4Hc%֓ݱGD;yc "DUaj δȪG uQg!u1a a1T>>5B$Q=rL4ň&rG|\Pg^+1)@%eCL.a/wj:?`$,9Dϗe$-Ux+Z,u=k#Hg/џ7<'jw CewylIC'Ӭ하 6j8>X渒5Oq̒ .Ai씧MA2TB8]e2Lx²}Y]"ѝaBcp$=Ba:3eHlࡎT[KB̊E~_#IjF(=D5CVu$qn?قB}:XV?AqyG`ppnMٛڇܞvɶ:aCrvLOG>Z%΃CpE%[`||y+6BaK6Y!LFrdFh@SU &q[QLsG Q?@yj8:< J5Jfn7ȓтsXn"j'3-)AOk:KNEk|'yQY]"z޽ aq>NcrG(O'/Ɍ?lxb#ܴI -{ʎǹͫ"紀YUf H"A`ʊxc>X _)?eiSJ2 h rZU̪ǕFV@$Ȯ7SV.SJ:"T([lWKf)l#krGp5DNh|R(f[8d{Jg͇zv1! XM>A÷L.u:.(ƻr>KxJ(8t:H_jԠMu9wHkp2nv 0ںEc;X j$a-,<(PT Qwֻe x ɴ73EHRh&<O8{̮qRh!)cdIuR$dlv,.aL!ĴP.>o>dW^ث*lߦ r|V׬ZQKz'y xٗǍ*[lgQ-ɲ$=5]0.}DrW+(j۠<=|3YU$ :+̪ m*jMej5,ȏӸf; wn+ 5 ;|Iṫ*b-7u;Qn#Uۯ^ۧ.6N¾%<5E \ 'bHP93칧/@f:gّPeW2.&Σt ]lOO~o=dKO'DT> o'0g+|,3o1ꕉrNŨ"=YOs1Ecq'G,Qcp_plY~D3T?ekٟ*:ϒc{̚FryV9ACl!ܦ?&AB8hj kT+36ֶڰY |n,9_UjnD,u #jDKVЋHe",zYЍ\ҠMn;\g%m4}5ʓ%!/5Es S&ՠA7I+%L+#)N$w&3W,Y#VJxk rRYSo# LDFY< {hBW%W:7} ]AuKfoL u9/.faT7 e4z}!t$$OPw)3kC0X1gɚ-+7&"Y8ciC6 ZNK`Բ(&j} je۔#~pv~o$RV|кw;+uj.pX +LH_S,SdH|Bʒ1wlo1޿:d$~u3@5 w=1~{}I=HNޚsXa c^|Rw;vv|B`t$%\Cl%u@ϝ>:+njcqoM}|s|6?"+RMGT&$ʤ!uT^sLY)Zfgq CZ(zW73>lԛg=D$Jy/x>JPXl(5#&K^4(qMr,5v ݴȧ'ēA Dl h[x5>Ltk=GQV\z]/K=2İh.I֧tnݡ1sMXu?=[]~6 ,b1創fNڎF1y_]>}s[Z9P&r,㏷=@8vmv%̊#W`9POg,D.71^ LxuRLF49!0׏١p`\Z?ga}،ěMm@!XVr.cfSR$7dG:o.ȣ@S'nM#'|S:.ڔXM1uDTq-_b q'Dνs|N?"s\?ja =UY+bus񷛿|ekŃFۼ?<ٯc2*!8MAu6Ns5pg{9>:?awG[Y>d)h%ߓ?~>g|Ǜf:Dsj|c" yHƻeD'iYƳʲqG!knpD8=]5\B"6U$xD\SpoUG}xW?O`)jls硜ۤ1ԭne6k 1[&gngI.,y9d[Dnn*t`_HL추Iȑ"z3#b՞7@ ?yTXѓ?)?+kjx#UJNѝRv &QJP[hbCKp6CGq\e bfFAt6~ }nN9,C8S_2[o|7m1%M' xJ~4dU=2Viw7 Pr|+xZ1؉{Gͣ"Λ?r3seB%S5(>F#A0"Y x׏'Ke2]D΁|v+h%LWTiuh`O֮kݚ"v.쉭3Ϩ[z0x%LDromPW}qj@bN57D ֗gE=|(i&xH >m'&fQU.ը?-J%m[R XB{lQ<&O D{tPh=]>`,-7uKH[ @9;M:lv[C8N ©u\qnlo%n"/ZP_Zχrq1}ͷ{c@p[_|Ni'MҼ~4YE e';I߷?ǧ}s8[Dkfr*G'5'kre iiasxP>ȟǒº2l2-tQ֋  J?] vs4 .F33YZ4s6܌ѝ`Mv}qFD?.e 0,P"X B^N6S&-Ao<RTȉNM`Ypa|"!)|^M6ڈR\]LsMQSdC؝!(b_B3]L3^"#yyStk㞧05ts8vt j,m$i(N<Qy^c2hB`F]^LGur4n)&>I{Z%`庫z85GwԤS[rM 'a{=H~&q1cP{w9~ G-$m׮V},nw;b 'WuBAZH.P ]y$9iFږb+4n1%9'4;~Ϝ CENk,TͶCK@ }5Tf/嗼f;-dy#uiʉS[b=E2(ʪ=)rDj`/N؊=~YW'?dtJMr6m-8hҟ3Su>E3N1Af:(C?NpQ&Bضkb`қcnjHbUl6w766j^%.s54\FY0md$ -WL[Tߧ2FHxBbzF&x0 xcCGO7>_V֦ (Y_|^ =\:ID 1&&jFLPrƷSHz[ظSBz+֠|s1C-i-}!?˻E%t?|7rH3 &̢D+*x43WG@`AR&p+w̶3cdVq[sYlRڜSyv8i'*y(jG$) PLFw4 RP@Jڜa  XulHXLƣT2wgdH$ 5/#uٳ?k @[J Fڳ$-jߗD^F;Mc 3в2+#|d,U!7kĜ0ܽu 룼]7Ji n՞8O%_1ʍGo^t[nQ`v Ġ_dDL?`2̧( 8f:FC9?O^; X 3Zp<[O17%rA^ Xp IV_/ L8h.2%"  UFxXn_uC\#)h6 \y{NUțn;w^U 0cϩܯ&1u_T߿"}N.#Vvgv2C奴YĈy1›1㭳x6_W[Oja9ggzD"U"G͜mDw4ӜB^T{9yN$NR)VSO˺MKx ..@f?K2ج!uuVVp)X7I4[x6%:U*="Ix.u}H6@A Xp f)HAA*Fk$J S{쌧&w G6'GIJãqs=0vML?=ݪ*&uG[niei> Z4iAgpf*)-'_7qM=󿝏LE W!иk\ 1w5 Nl1U oIN s6 Q OO"] W1_y` =гRWR Ҽv'K2pjņ]ޫ*^apSHlS],6Rd291G 1@ټmMe.$ G z%̴Jؐ];k龦pOU*gէ4t S:31Y_#4D1B-waTںQ9,)^7Ҽe85¸^{Ғ0 =CtR"{SH6Kꚾ" ;H"4IvɷdQ4Sm[8p!늝䈅v4. * D8)-1M`w2P9 R )<0a`!`T Ca|k HW, ~'-_5j&JGr1޹w֒se@tz+ihXJEU}̀2 J_n#>Q8𰄁Q1d^Y=A\J쀭e/,H0;#axW*mUܫ6@IW1cg]{S\H6wKҤpd9GeKdy@fJX۔Nݬhwmu|=փjnΆ|1Ԣ:P_oFkw3Nr6KP C fd! K\ũlu&YuycRmQPL%͕DwgۚKd :"Vn`d\"Fh7$u1#gY4YH˂.$1pѯZ3iKEhi׺ʞgDhn(P3{fAIF=%BMIT? 2,*ovy7+$t Lk~mŒ#aa`W= ,Y m@g|{MϷ7OVEåTYrzlҦez#Ro7uЋDSMu6qq9 @.| KZ(m g'PI85@m(|aV%V c3.al` 34 ˀS\r+N٫1_AD#؟bi4X,K$OuÀGahx(Cg9+"zRrƼ1rx8TA9&h8"oe&vKGX tA]dQ&3J H3\ V{"pk6Be }.-Q7 ^`<autSARTik0FuWC#s~+ u伻28=AO* T>C.r$H`3Aߝ0 W>,?|&R T/͑FIRP6re@b˝'+#o&2b2Kp4&8!l7 raS"лkoĞb໋&)6y..fMζwfCV=IOa}ӟ?e9w&~8β'Z$t&1|P+bpFsg-ad3g*{H8ϓu$]`a!J`̐Q]V1C)=\LCS%9b饄Ȉ~,'}"3BLMx^%݅ӸP;< Lip ~"0+)bc켿Gx~*/-I4LS=@yvpؽ%y-C@BS]`ڙCh m{ E!9Xk~OoBq^¶8<tBs롖&xPdPZN? Yda=^FF F 噀5̗+Ӏ7'G#M&:DyLirYZc0 ۹rB acdĀi.i XS;Q0^f`^c$A4:3=A `aieC C,L[NffDO{4NI=RdgRo8l znxK劜AAP,'9 3@^aFt#%# 1b=5IWo.;8NhxXL7[=MUWd8U'bbٹpµJJǺy7o"J {܉նzl#TXj@uw5P* I`W[5dc\m964[(XDN>$1jBME腍Pk>.eh_wǐz"rmv$csF.>>/<͡4pپVh.&chs~T087Rl<4vp]KFy6ܔƮصC0 K6fpJ8$|֦E˩(~Tmmw2+w%B sD0Z߅ٙЌ:˞8F@B+7r<1j6(0YL (#Qϊ묨҃W1faDytzlSc\NJ {B[u?Dk 87ۘ?V_\k2ꚃ¥ξHVv#i~U=R|rroV6LYQcb"*WjU韢}>蹚$tz$)Tu#, LsIac$yg3H/`c}{;~^?I2*MTV$$1K "@0ʱ12inBu ɳgMr?r `\te/8Y0?[8Xrߊgq~M)d^2)^Ll&a`aqU#1Z"P(~fR uyoԠMZ8l!K YPUQ@D덬YA.W(1&Fq Up5s8/XZpԛޖ- ̮/v]J,*uϦgVtozFv[OGf C/N\qD-d5r@&v # Մ[_yZbhlݙm 6r/.?'"7+⨉"N{lFET31t4J\C'˫3pqo MqG{}^ڗ&;R21V*O`BāLl|{baKTxRmos6+=,靿'i A ꨬUIϥ ,S?\RYe a! ,^^N:,NF~zM(k]Q{V0W?~2pp¾ B7 /R B e]_4'6wAdrbY N,P~md~9`^E赕ur 2q<yE ǜa-MI$!Et_Qt[͉t)cgJ/^9vp8d?*7{ݭ%.ovJGfȵoH*hs*/$9򞣬),~/ظ`ܽyIn@h -qkEDelN6\Ill<] V?'l;[ :|hvqZp$knyTd8c[&ir @a(DS7Cmg9KH?|#ҶBjGl4-05ʛ) h)Dx(F@R;+eʬZ_K,%22;r (" #3bM[X?c 6=tODgt aE.eev>Ymɜ4u)`{4=B {K5YyL[;i\M, n bfNdL`oȣ>,\ZTQQXtij+e)3Lq&5g$LכU\##BZiТ&^\5y #Cb+"7)moN>X [͋6|h;Ve ݪA$qLj2 QoӓDPߩ>7Pو2я"/naE&#|+IŷǗ"Q|W*ʰXLup1Hq:SS>5" !z\`NZYxZ1L҅p>Y7Od ;67'lm/>&Yop1J_Io5v\)UGhd&EzvY\qmGMrM$ڤX${up/KUd٠4bXD{wO0`hQx:ˠyj{ke;IA-,4>0]0/}[2Iv|!i7zoNPuz9e_@VY8l26֪MylH5YF"ι/P ˿^?c9oDj4ȇPkJB*7k\SXvo?<㳱.U x潇P@ Ma[Gf=LF7q0vv; w~8,##e6[zQS77+~pmj;$ߴc8OzȿO?<GU%=H*[ٕa.nuN,n0O0 # Yюhr3V%]w\⋰ljǒkEm#NxI8}袋kJR1EV1Y*6Cdw:|+I=ћP3tF6 xVP25ucN2Z8o9|р$!Y?65{L_ȭ&h[1&m!ȇIBsI}!d FM&ʓV;lR&0ݱKv l,]%ylH  6p*qe &p >@!z5JQl$l;b~BXՅ朖Z8ǭRTV%P3}:m1)Q,.⡌9zm"oR,'< 5 }AWqZEbNJ$CiSG ZFQxy?SEPKbU;-E&_*7"IRЉ2Wd ]aVr7Q0&%39JUԧ'uJ K(`(o\f zy8 Z da.nK.X88}a#-41>L8;G(}3[ABucD> 5cu}fnpFRĻ 78IlLd OHsdQB:et1' |$qU:L|[j%-YX9K($M >VVrQa\oKYZVF褤/VM`¾+N@<]UYE1ۻxٚf_鴣Z/kR /ԯKRJZ嫯B FS}n:0`2ݧA}W~K[sbWuM%xz7p4nQzk!93;pdH{_vvǙ޶ B Zܖ{Va$ |÷gq,F:PdёG0 t;D/L!Z|jbwIZ@2)yzM<dn,x1Όx23}!ޜ|NB'lbC\G'>Ҳy@'TCD3Aۣ48o{|qUK[ٮrԖFB=Kܸ2g /-[n(kK#Y68I &1Q L@ zA"s% GS&d:+^u>Cv7X A+e`Q`+KY݅/Iwbn؄u.7t􆙽d:(>X{%+ȷI4s&tKĀPKgͶŤ}Lɿ*\dtN/uEzU"IU[w8<8 1$W NjM]bH~O1Cv .(zI7wZڲW ƺ'FZ1gN?ۏ?N{uj@c_Q*RT0 "a8k`kJQ:3 u^rq^=!dDꫵXHqFTorYuN?=k ~k;&xl;ZM"gσFEaʉT@\fUx"8:?gl" ^cK_a'np* x&8+4(p (ρM AM)`̊Ȑɏ݂ ` lڀm3 ױt0c2\Ò3`m܃?_ώ1Mz8c5"'kwx0xG2bBX B^y평^m?ox~NĀ+U:$ ;13gPҰ+Єm:)Vn7Ht?h7;öe-ȴp5 U'#+EQP-^925E/lȯC0gm)y(A܋!V))F Ǫݮ \*ҜeQsflBPfx_םmpyhO3>xHn?U"p{Dow5K8 zm=QΉpd/ ysEa?V {s'{di E o?dXxrr̜Nl hDs KPOb{dF+OJ\v6rC6 -]s+ahsQ6sEn2P@\iHcFaPهhvP.Wͭ x1K"N]Q8d;>S]"hJX9yq#RjVdmeG>@+;|?$P|g)6 SVBQ5IZT╏R0Л4_8q2Pˏj `I'@8hW*M[qYra/A6 xws٩sq*\xk ܤd ~<[IiH$NuF>(fN1 Fa9qthnzns>;yR=U>&h𑟗Oy s,O51&6~ek"=hw@@4 ᬋm[T a4@n޽HvƂtΚ찳N%qWP_FԽα.Q\eCmke6|kЁȘ*·>Ԓe:\_x%r>Fy^ױNjp8h0y B3$v2S^UaTie w')A30:X#"ɴ!7'`农O}RkC}.&f D⯪I!%1 UH ~"WW(ED4Y;9a岊YaQ3k5x'a_W=mm " 3k>1ofegip'os$=,-~ fԥL.j,>\pou$fN'GպKxi2{?~k΅Q9xmzIqUB^.6ޥ4;陚@L%Q}_MAV;ezDroJf-X?csd2ƮT#9C w5"0e4Mabk:h?L\9䑌0! _Tu}hP 1?Koyd#p&!M{[ ?IeQ6\RnGK=r[ۙ@WD`"H\vkb#M9SdB̦T]8O|V0a6?| Y3|PUo"cM1VPǻ9/!-ʀx`?u1XQE@*AoY_y@ no.{L+Rm E% f)//M2UOG Aˑ"_iݐݦ1@?sJ!Iq[Kϗ7BL;B:= +`S,:Gl PG;WE ߾s%" 캒ah:."_9 kg]46s_(i:BRObnG(ۤōz[MfSR-s$=|;]~X?;:].G9pN_*XJ?xI͝o_o~ZZ[ d'Zy~z4)5nU5"fyUYΦ˿lfxƿqOob1?z%">Y|>'_;ݼsjZԨq0ZSo=L6_]XdY6|ۘLgñ(-2=$-kvs|x1x#CnWU'n bjF+beh[o1O; +*&*rB8 q{!WOKgL^Y <V]ЈǗ1I}|B)YjD=%Pb)ۯIgA μIcN,џhc 7PC خI S, RPԍ&|5iꭟ+jgP ^te`{Z#8,Gyu8*e3uxҦE;k7p(N:F`͠2g&nΈ3-fՁq֡-300aIglׂ޼j,X +qA8+;Wuxy|8olM(ö5XI](@g4q.n +B^7qR% OGX,* E`G,/7EA_f|9& po j>9k7)[!bQdb}LeQL1SՋmx?66k_4]JtQΝ凪-kTz)@7Dorg=]g~n#ǵf#FRmF& ժ<ڵ*2̧;Lwj4 "EΚzuv]Yrjv)47U(gד7E;\EUb37қ#/U 9zakQkZ)9th61T:N~۸q>]Mט ĭwE%07Uv0l1hբw:ے?ܘ]q3%:Io~r*w-Vb oޯ^/V@M1Q+/91"oJz¸-n ƀϓ9|:2^59cϣxk ނ}ۘ-qxݳF=ktݳFwb0&Yei񼬪Pm>C