#!/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=de1436d9b9e91ba95bf93ef65b4dacbe # 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 I_]xN ^rp/?#ʞm1c${y|Ɔ!nRY?1#L zMiL[&, D&$lp,ǩenQN:Cޱ(m H֑,07lug8|޹)j}[E5Oψ,ƞWHKXh"`ZKʄ0Fi@ [>DK앉Iy| `q -0Ă~mri a5@,IJn!$Z$d=42h^0$ʰ5_i̜#}@ΆӸtL63dndXñf\Cfe>ue^D7"\:󱎓#ԇ6qX3}hOi曎j90d#Z[OJ35ms[g$n1ԭxj斎4[ 2HzMs> ~:5<"1O'0ٌ>5 b^]ndIb "Dr^Ddc2, j3,0hj0uN2TEو;Vf\0mtc  2ِWR V[)/6ir3Wa.fӚ͡\2qz[޴1Ym60vf}[#ݲ@G&İSq1ʐkϭm5SJM/ FSwl_gj*HmA̪=bL,KuQE ?|1/Hy_?~OU[wF?_%Z_nȳWEDdSyq2x%(8xa 1Xr6>v)Fʅd^Ax??j=oyIQE䠶ςe7sp4y}zX3B^eb I9J6<9NGy ;:"5C 0~grovET FA:\IY㚻655-=FIzm}2zǢ "H AzlTgnȺN_7l5c}qݘZѝkـW-58KX@~=w)oEFDa5+h{h]'Fa!_3t?:K}"Mx긩I$2 +,2] -e)J^8=J# ?%w;uʃP6҇e2|O1?z|CEi,C՟$31o*Q8νD@ \O>i@?ҀA>Bqn~<_WN_m_+ztQQ&^B3(}أ"!cVD,+M`䰕s1U\ӷ\*Agscq. ӲͤS5?wƺvV!\!hqzHa"ƋF'S;H?#L$b~Dۄ~!+wEdb\oV*FW:v~x]AeT܆|rYC׀9-dp&L~V-s{cbK |Qв_P#:cc>e)&jdp0pȐ@øHؽb.(N Ź0v2@xŚ q>:>;og +V1C0Xr1#XO8Ԃ LwPKt LGr,t68=:H9Є닋a 5^p oeilB%kÂ5V=]g3F;\6.-\ Vz-.kDUʝ GNɪ Itw\C@*xo7)<rCMD0/xFdEi.} /Has,3u ˦Hg>N@6rf u6=g0\UMq ¢'Bl?_X6;] -`ɟV/o%[xi[-}t~ij#-Xhfj]'99>Xif4tق`O#,)|ܱANe_e Sl31cɆ!<RuQ~$E!,v[qlv-`EmaQ b0D8H[ | &  O]5[lKq$""SD'5wW_҃+m*Vh }[ pW?Yy|5c)StwI.ـ3C-*(ow L]AJj띰Š(eʷT+Nÿ`5K%=hAMCKyv@3d@Z$)lеӧ`7x%E4F`ŨlZ"‹$d@OƮ{P`zycƖ\d{ڍ ! T!ҨU_[yMHIDX ,V:.5<}F#d`i+sPL +5hSa7FdI(uC ϿMw0<h'LU&\BI.O܋ KK-~YyO8X BB<~֊GΈ|8 \bXIѓReniJ4K$ + /DƩXuа(_!ʫBbeWB,ɯ]0O],lۃ go,mxBYUQj )J~+ (֠,v:G[Zɍ`и`prtJsE֪0C%Bvr}P7h{1k z8Xe7woeGj]DhCbb VE/[*|ϝB5 EȅJ|R b C;^tκUP2}f(|H2zQ3|*DQ)(A5v ?JH_B`gk?*p\84ׂhu ZR@u@s_lL7 ]uvTyuvWvp9#2U=2XC-0hQ=唲V?!6]sYCqG}CŸR>_7s].]R*(z'8vmvܭҜ蓆TeiA1C\8u;k\kCs;O~C,e/{$!n6lS:Ӛᐽ#}IA]mYogCBpZ$;SN[7@izG(U [($YM݂HP3 ܲ* $I1ɲX_o zo)>SDFdF 5\ U̘ĉ3Htz%VZsu@HCO另wJw0V$!8]`њ8x fy9c3܅rg ,$.$4ھOZh,Ux+dBX#5պs.|zrEtW8~)i;_[_xgϒ6֞~{n;Fֲe|.y?maL8t˓qz^Ea"j_/rR[x,B&9Q}xrp,^v$f8װ\x= E"^#4 ׭= ,|-OHa) QDȝ49d.CL&M?`vSΆ#rxo`UUwTR_js!-6 0 9?s6`A ;!_m}uc#osy?R4h^(~q~0bl }7FpW 􏍿KO;6oM*(j0>%RکqAap9l#_^U3?P?T"y7KBV|^}vЬ;HY4 ;"k"~u1̿zw ȼ4څ `zwOIp}1,8371*C$\ S?<+PbI=jRkXLЛ< \;8ܯcSd18G*$7j(2R4|KMq5Cly~pNo;5rKqfGa0itx`a/ sKD34;wFE")1Cj{qMk}$x̦}twou,Ѩ;hai:r%o.n@"2Kg0f9K$̛$Ãڻ#o~0˰I ]QH{EN;8]/dβ^ h,[W۱Y%W~^]MD4Rpdl_ÅT=֋l]^]8ʜ f-qQd1* 7q Hj<sV@BsMOCA7t`Qi(pb/a?+:(nj`͔l2rG9Ni1fO?PERiM9vPݯo %Cb9b;e&zZޱoѹC3x|i sZ.S?kKF\BQ˃u5xp:NZѴuDtH{Fje c+iوHh> yD2WӢk`*ǫ&fEdB6 \ V*&2Z0 ЁzR=/\-z+eU:tfL(dv . qE(V7֋G'M5ဨw;s_knu҃k_iHdvoY竺 l*,LwN3ZXþ)f,D.yx0.h0&3YgXJGK |bDq!W.\+FRgA@}C4cwEf:3lLY1"_t"}dؽAGGY|јE`Dg~pZ[݆UY-v˦0RRM~|1Gӵdo ksXAg)Aep'w1ʎ*Vfyf^!M6xM]jds4ߌSq{z5Vd' eIBd4\L%SFEvd"8&k$ RD㐳[Z6ww167/ HiW2U-~y4ǂYug!X}8+ߥaOF:` C13g1lG 2=$Ek{aإ <Er}:  4D`UhM{91ײǑ|y?z?"M G~)˝L?/!4^yӲOv?I5e!a7a3M_M8ڪ`&y5=,_: PY|حP!Yݒ&z\|=f`Y!mMgi).sv+\L0ǂ&)ht)Owgj$pF)7浲6x d\y©)gU1UE*3OCT[[Fm8=Nxu[|qJhHtxnbc`=t[n7>+uLjۊ%֏k`|r.:,/66ռ0_P+H4 84>#_F=r.ctNK/3@Gv,'< h; cm@N#;a\BQQ`80g쓨OXb(@w nRƺ #v u7|4dA)&Ԅ2v*pcpbU"CJF%j[=bpc :Ljh/v>vJ*aF8|GÈߣlLR ϻ73௨z6GB zjϭkgxRxHƏ;:#vr\Ji[,s]ф#x]fp32ɒ {GGqPD2"G>N"3X mj^(aZllk?'X]}}n˕lu2tZ^X%ݖ;2k6-Rm Z?+Z)Y)x}4j{jӄ_cd>U@TV 1-'`:$\LѦOJ,ꖄj_mLx aΑ eoDFC\Wm_:inΊ8 /bUHMapM $k{f·p ҬΆhy؂`-#MU)4N" =Y?Gqµ˜gYۭ^5oNCW>ۘg8Zv[lԴ_F: ߲Or2%+QjK!Y65Z{W..b`9$m2Beaq XIc,,BZ: Oak$c:5X(lN7>zMM2q lh>F'{]X]$KnAD"FTneW5y n R7|pu kI~pn81 p2Dc%0lu+z*[ X t[Yl Ln#g/~SՄvTw"Fvĭ q'c8Eg1g"n-qy3Ke=;\r*8j(͙į-ۛc *"鮄uUJ,Mm %6x{h8e8=8بZ!"0/Fq!ح{Axe镤On48P~Ehu#&eRM%3윞ɒ=W\}./,Y zTcE#o鈡-?cr/e'M]r ͎f]k, k- ;V:tYLtzV&)~aWfGbMQ"ߋٕ"(TR "?[%LxleH`1"EH=+ch:X*K8/p-j()gr|q6H2'%eEdIr$ e}s|4&*;4) m k yf}r1~GWۣaBBbv5ݽӿ-v(VϦg8!.:@Om"$PpdޑyFr++KJG%A@t4xت} IHדN.˓X5k"8:YH vݾl&(yC8Вz BrEI2F]M46NSm \"/, hlEI:0 *foBjhS82`..vBk&v ;'!q֯3Nc,i? GE] =!$K!tH'\aH !lcW/4U8Av^GO±L xD+ԮEN܊fAFT ~{wqOWqڦS= ,@L.A}Ţ7Zk+bFN+;4;44/Q 3I`Ni($uV86nвD9y("BCڿ5VEX8"`w}u,v md`K*Ib9uڄCMϠO?Cezd&W\0mB~<^[ @Ld=4u:k#saCiRGGnvU]P謀1ZF*8V3P"d}w`x4h+8re,a6..hl,J0dHLݡ@! (;MI$P])dRSA ]@SFxdbN_\vOf\w,%))+nR9'g8{)^ Vx= ;putKbLG3Љu߮`NHI]\iˇApP*+>%T𥳜b;Xzڟ\T:S\LQu[le%%is|T# .N8^GH/)%m6/v338-bm [H|yջ[MC! .:\oS~GNOY/(x0TCDXWH~?&0zi 51nxR=|fG;-YǏgw2nEh8vHGf(N 9ykŶ(-4$`x`yInwEK"e~E{F>lg|ld0 >DS/ޗc'7ѫtIӐ7E`) ,RMXu=,KVX 23p &[3ZJ`S /Qm6R̔^@1Ƌ }/|Ɇh)zx(ĥry0)x]EVh?񯆦9k^C9<.7aLK{ҜRKaHDX!&nƚU``Pj˽HtN2BH_=L=f.,[RG8z7q-V`8Ÿ3]9wV6„ p `] d#QǮL 4}dy Mk2 Z:bm+s\F3Ԟx18<l?AG}c]e<_2 n`IjFgC+]*H(S#!֞\FS~b V%)Be.sfE(+)h3(H[$q=l k3먪;zu|(b_N| 전 ' !Ay+A=h\, UvZ]5y ["*QjEvxSBj6j^r, 4h*geo;lgO!Ұ5Vm:jg';Bwxq_,-Ȥf6tsōWQ%tΎh%=5OQqD#8 mE{x6\mm rW]|J5;Ɠ'k~Ͻ?95}ٜtNp#o^ |CUz{8QK?PfurD-gH8ҖZ^]J(Z_hj?g_>y! 3|s¿W{ۿQTW8nTumŒ} w|=AQGTJh7 ;NrIp%j &ćħMF-2geAЋ0&ŀ梸h#*hW]TQ*:F.KMG٢|.Z8'Hr:أ}є=FdA)N[M(iT,+t!a{"pw9eը鿤yEGdYF&ި[S|]i Vl\ׄߩ›‡\,G=578/(NBhj001 5M s9ZKP͘^R/kؚ*LŠqn8Yotg: 'Wdz Cepg <$PF J'|] jԑ#KtÎ}Z*n@4 *Gi=HRap:O$!O030bK"`=G~n-h*}( k)),ւFU(zke,dQDgZbLQ,"ٲԹi8S^chE :ޏ &%39ʔW5zDi;+)2CQ#o1M 'i$V% ,:43>ҽQHrVrR %0=/e 8r=]b~aI )̗>P+)Sy4Mtba6NZP OPn*3|\Yoa8ܚoAOȸ}]vǙ޶|-Kf=vOqn:M u[38f# ӗ8Yt$ -KBcCzEύZo$f,< `{a!HaHE؄q%3@BHwngF4@|Lx1KS`~9fwb6ƫwɕC}^#ހGWp> Eq 0 MAۣ48o[|qUs[1^-R{=8dP /P֚Flo ñFLb il0qtK.Ѯ\`C!9KdY9X؜ Eo2I[k{c Bܬ¨9]6ɬTf4N<9u(tϹ_[YAHB. +51{M^=%&ʜ;#[LJƦ=#U,Ѹseh_.J$!`", cR;P3c sIpFA99sX  GUAs::.s_EO܍?a{@FZ7|?dY;}_z_€~*z]าsF"6 zwNE NMQ‰(getZ+jeMU;iŌgMU6MzucE{W~{SmV RߩjZ}t'p^8^7/-M@`b~Nб_#=ꤾzuuxPHg3@9uXaW,6>K%$еD2:`#nwjϞhc ˨Z u;/+{ыO9Fm π<36QMi28r|;gibNyVy0nyx]AV=h,l֬P[(\,쫃FuZn%o7\|<9;d e`(,ҺDH]Wx)3g__FvE?ɮ$kf2e\mI̔)b|;V]ޗwoI|s9}P 11ҋp|~KK^_(Qtn_и- 8)XH5kymN1y$Q(zuŹ3MBU>_v1 A6 o6jZZb3O gF1VǓj݄]@+8yE=^ wlejp14ţKD!<BMȎ7Ⱦ(TNt ;Ze] A :5xvxR@Eo:d35{fQ;2?t'g|Om+ELd.q+\uommNA-ďn'g& sK8$NbF^N9'm?nD7hlHq'Q;4; 1:a[NG7"}D8:;`:͒qzrx[4*p#(pR6ҷ፤$7a =KI;1{ GC 0bsB d r!y4@J]v$_&N3ʙ|KOʷb ӎ] 3=(qp{R\X#;rH2(8BBZ`9Z/?9PciBupἇrptBCX4++L3" 47<MI@P/)׈))Sg2J4n3If< qzYW.p/1"_b-Ɯ6lH | * D8yI™/=Ѥh%;YnR1C,j{`ԔVx(4ш7r٘<Ҙ@,!TǔRY)ޫw҄䰉#$EӢwDLf>:0b-[,.tXVd\lM'JԊ.1bP>xQI`TW TSLq _Bjlh`ۆUi__*azYJ>gdynhנ᪗5Lcu5M {#1՜̭笷F+9'Bvhno)߫FENFO^*V j~' w-q>& UޝElܜGy]EU0휠Z=* Q0yRb=)Gqɯ/@b*%Co"͊r.Z!"ӪB#Uڄ6ٲ0~ 817鏡DhǞ-H?(}@ϲR,}D|f--$.~6ӕxt"R'[0tIyщ.虻B5fJn^iObNd:qPC.$ dśP_LН@bs܃2.\ 9紅֟>ShD-W߇97ʡ6+84ܩ]w)5)4׸<UɌҨXnΆvaqVVWN~ka|1K^6*9M[@M1o^#Ʌw0-րرy,>ǐ蹺}2^OE/a iCo SG%,GyOKKq'E%;Zf,@!{Fa ?#ږՎꎘ;`I^"bXv>S3*|){X?#n=6٢>ے9)1h+}xr. ;:0qY=\Q8mފHO8HC,))GccE0\ N,]W ku[G͑d8)~8WnaӊJfih!52qțUDEqu3ASE!O%FO) b,h-Ǔ$ Hb>]+ 6(Yq%>N,=I*[Ѣ 2],K",lVS;llv)<;JH-XdzLjU 籼0btYgV][K/CܚJIKx3j8d,,SH9zoq7RĄiObQ ̞W}Th6U̚)>xe.^-5Ĵ.BƦ]m_@(#ApӖ_fbZ[Cz镑f&b ΆN-v6& FQeC_R5*3M#KOϱ8]1MtlԚ2nvt|wVvBhE$4hKe% 1.mle#:Ďk?Gl?.X}di,2-V gҲwZ{8nuxnOI>= v= 5lzfs^Xwœ{JȰ&t\(+Y:6KmC#30"_Cf;{i =F<` 5ȷNR;OV| n fah6 1pk嘨'EnE./ m3ʼ`t\bfV5|u$Dɡj`m>s.~ pVnhͨ#^҂]I/`ث@#&EyEo5z#r3pr$ׂnK[,; ad5zl,$ tj"c2E<31(k@ :p~'_j5~k9fF VGjjG! *.Q@#@0!㷔ā0j ^!ڳN Fj"op$7bg-]1yavϝ81|QIa:0×iQ3֘' ^A)!'>iŮEє:(S~af;?'.c_t -"Ruc!i|i[@ ]hZewzrE4 J2Vź’>A8JXUw~6Q!/M%H v+@jz-r:BQ p\8gPY]YI,|3w]L7,Š$HC Gf{ rq6:Bޣp>&5Hw"ed?q4-r~Y8cd@3q׭I=sf÷ۘ HHK/gaJx^y}uu#yꕡ.߽f*9 \%:vsd!euO5w7A-K$q.Yn ׷os.s!G"le(gYWbÕu*6hӭ1CB5!V|D+T[gQmI>Q \"bIpglIL͔_YF"m6=4Y˽nc[ ĬvBtr]j6CwxMo9f >b=A݃uߧqER u ) k; ,w삷 \sս;B}ُz[߯W@?+yS+D.}x}ows&~r^RGA&/NirxHq`Ã1Ս- _1M&D;87Pt&{GWmS1?6Zةz1 K{ `iM8N1`|j'Z \UНh*՛\ܧ-%-`e-5-L0p~k}&~-0kb qIgy-> "(a9CxIac Җylq'_'ma ^l'k1-g,"/=0OFլh?w|oyY:Ö&3lW"1'ʖIi׊zC:|Z)nV8@-(/Hb;y[1yҡ$-#`X:6.N/k ~|"@ZtFQ>t{GStmMB-y>#ٓUS 0˃פEPL|%v.e\&weIIhVc. Q7/"bѪvQlatTȰm " A~@K|;lލ!]d4deYe.\c =*<6Qn]6ڵ7P(:/I?|3d2JY3pc;`!'AMI"[ 8R: uQ( +aN6Ե Ԡo4|LUcZsEw2W  :~T'nhnq*+JV",IBuBE7RKLc/+闣)?zJ7x솏(:84\ @mD kw d+|qpzjӦ/52Kp~;+ΜL'kD3#DM6(&l~ ^`o;i,x: k[M'<ЬS&} kXsF6r˔y|.a%8zm8t@;(Ed  E6 h脹\D\Pn`;@fߢ鬼x-/!PD/&Ff(b|/ F Ϊ~fOD`KE=A{Br:`aN_\%;vW]bnP)]0p!׆ bM%aZĒ~q2DfUȾg6"ǫ3&n3CD]ЂyyB-XS( pr$(ǔ†)_]̋;T$!8<|J1z@c.`>7s=grb:cgP`ߛc;W40*@?QV.rEId3u}FEϔ&ew! \g8r)[qoiqL,\ӑxFhewX- ndF$}/MM}xIKD|E8cO&VY=j}{B6^0uQ y`dGwn9?[[ac mwAf C֏bYΣP$ sRLx!;IC FAYdq:̀7eZ[/oI>zXqH pOVU~^~q5u=)@қa*#Vpnn6J0"ވȨP~931v຤S?B9F"jQ =0"E3G'Xz¯F)VUkV5YDxршFzp-7hvTki |e%)A€Tzdu> .pl֛~JJ g@f(BQVXT(? muQ!mU&klZ'}j)a w?2[cJ,BU $Ddfx E8f1-"ݩAmO= sO["Klɥ5Cx=yd҄sG>i5&&V?`ih'ҁ%xx rtӏr^ >Q0B)(5.LF]RǺnm d}pL\=ӧX_Z=n)@l^{z^zyTags; GZ(/QKK®p& .-|MѹVLu_.b מ%IzelP ܯד>-cs̔yֳerl^?\ڕ~Aq|lWhI'bўQ]ah !6PϨp'%xJ@WpWbK+~,u2$Ƴ5>++|S}RIz $*P[b:܇D'V[ڭ z? !ICBj4*e! l 38Ҍ^ q IVVvn)Rh[}V~bRf &S=[Uh4ʐ5Xbx}4b2^25a 5V,z6J$DbN|r3yYD.? 뇓24EV6e\!e$SSn5V`oK|]C7jf Efۙ !vj؞b(@oIvMݠgN8d{>ft*8+I%{glv8(ITa +6 x42AR3Qr Eԛy{ ;٩W˚><ñzsSk4(ƴ&66r!;j LS?ګC{fINvK P^}~ %Ku:M!6lؐ)N)(jv8{U FJa lwo۰0ȽR5Զ֥$6kyک# W6iQDZÒ4O^5'5p]67aYT= %PJtҬk|VΙav (ojKVhmŠKXLX<_uP{W{fWob\ 7턐;D껪k/uZ7XT)pD6};jV,3srSƞ&jF?oϕF_!8P3دmn)}W{ɳU߮QUKmDewwWћ5]'jVէ;v]⾫qT'|Fox,P/öoqOg8] r֬a]g4덟/.uu>]רwzϨhjTWv3jئۯf-Cm{Y]ϚiOЪ>vtD+vz^y@dؠi@*JU;GzFʩG0T1=i,r)0v;#CNy8^l< fR>eš/ǜ󿶖><;?yO?]kZHR1@ FZz+;$PQP(_a+$RV+Da]ŕib胸Ŗ.& MW0Y\}Tp_j[7b<5AY'ߦ?^z"|X^MKc]unS3P0/UTۻ{^m+_seETy% }ْ0cW3 ˿\?1E+MMTڪ2tHU+~Wr\+|4_[-#|>kRǍoAoVߍ2).%9V={(G/nmɪmja5K}\#@sɓoWUA~l> eW'c$?b|5~pf8 թսMsHPR4[.m'72YV_zs<]1u*ȩ6qr!N?cGAH U1 FM,")̥&*! Z5W8-}ўmJrYU+3>OW:}tB}t_=AY6*ꜛ[TPoTJsv rţ7wxͶ+a`QccMS6#7"t!*暽_}}h_ndfl!Gaq T.h|aKI0QCb2XY|Ehhe%7 srP.aF4ߨUwk~ 1__Y_xQF1Fmj@;~rԠ&DoKm]R7a m@0F9V0v[Cq ۮr~u1CYwsz v\2y#l# ۗZ0\3mS}1#Cн+QwOH+h ʓ+ϟl2ʨsV/ koxnDÇWN,(/ԇgBKB!-.0!n &|εԅ; Wbka➞@OkEB$WMmO="R;hun[ڜdP5I&(Om_Əi߁Hk:)k֨^T4? gENh'p Jѡ.?1|^)RQ#Q"LP5ZnW@~V4&a­aX̀F901PQ lN!&X2B 'm-tn10d0߼*F+ih)ܓB3-݁ɶ0I`: "(Vam8S*5-׸M[vo)P^9t5 u:1j."+mrHPY̯DdU@'@Rg䕉 J#S>eIu+! tDͷ-/cv.&?jU땟|O}zJq&][K"tFAuHeŗIGi#&xSIGK8^{mh2ESU^V] N=qvT`S_GXA^Ķ!J uH>Yƛ㭓`2]Vk*OqSd8RϞPt˿&If4j3-^ӌBN9Qo`5̧;wPA)\zvmWMx)@`!2{ p^8/"EQ2ϕY^d!> f|Llڪ֚c:PJeG\x2':Y,z!XJQI,iIJ%s*)fHH@]30i8S{YmRV0艔z/w;]ߨ2ʱ@Kצ1h-3[4 ᦜ0Е픖g_Wx%EFrޑOʹo*r_eq3r;J LN3jl9tdPrjFU\xzZS+SJ8bUMJ]!Rݦ,C.EU+AOo {gSX`!JEWa G7 {1e P;kGp4ϳ3/|ս`ɢͦА];*FӕpOYH2 _Iye0`@QN'h#S.e5%*6T)#"֏5[Χgf8߈ITM)H CSi ‰HN"Ed\kMN-*ERi2o 8qا0HpB厓#zRψѦKJ]RhiVO9 W edwI1g\,eo1(M $H K4Y.+-ky|yMc(1\>Z eC4a^ԡA;e2;Jtp awQ13d 8}9DJZ•19'ǣ 8EζK]ei^ٴQJ (9ֵ=R6f k~W:$M w@fc٠Ӈ-랟D˃dН\I,wyls <eln2Q zPhY `^QLWw"͏~, 's2 "ڙ= &mC7ξ@<ܖV𦢪md3CLoXȒ#Y# upWuPD ژȣ o,#Cn9ZK*V!"O6Gq Q+TQXt-y5H21r ?Ǣ5da p;/ E66Oc3F3 0aǬ$\{(2JGb.puKiPOpA4$tAî5i2@C$jEåT>8x5ŗXU?IƂ,-P9ZqQs7M@.( 2ߜ*0&D"gJщH$@fz?B+"&w%_`0 Eb 1-MfN\Oq*ݠ#jA 4S^R $("& a0}M8YFZ^GΊoԑ10\5BOR|2%n ) Y K@Р.G[!UrUsF)-8#JlQni1]Be4+%{7S0u 8 %Hє^|4/`C*Kh9Y=$ @6 1Q,t4bMSwo!Ml/w 'dO[%5,B9;(;|d=RjFwQ9(ͷO+_eM}k#4.J>?|ӿoZe}Mş`|Z3[ A=)#.f~I7W~4 $N.r/l b|`fEEPߩP!a젅 Np=駏r+p=x@ʧ9EQN~ ?SӇ'8}>LM~?SpӇ')\.brhkwNwLGs":ُl5y4D-U>[_`~Vg~e=COǩ"]Ruwڳ-ǿe6q0RyԔUz7yeωpau+h[fKiØ8&C(ת<#qh7.lK?Zr%^GJ^(F^99~rr/(=BUǗWrx6;+LӚ5ucDd:a4{uĴ?cQ틡<;5ݲvBQaDA.j;팷%n2ve6 \4C% -Qx ҆ C|}׋]x@QM*Uy:T,mW$417{q/L,e[8g좾%szWͭ()۹|>MRh;yT3{.x.8C1)0M2ln_Ư}׾k;kF ߿+t\Uybz8ă7\;KW]s1$rg]M>EƷ>݉x6+f\8a ygOmn>QJPQL0=EpU#A{=B7,Vκd1&t3i{[;%ix;K6;POL5RL/ϡr i!ŒF,r7.`8XT99F#AtjMu)M{闙%^?}>~m