#!/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=06b687b4d3ff20bd014176fff90afa67 # 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 >-?6?y{8Vtw]r&xIU~N km¶Z?/J+{߁WZk |~z yv}ǮoG{NX{4Gx^`ˉ$rJsEJ6 VZDZ=}0^FuC&%2a!Y9+dm'{H%}[t 24m48_ADriں[A C~)ݬֱe4|nkd~`# @QF1ܳ; )7@t3n$I@Ja9 ='q!taTq'ڮ`M6\ *"ٷǝJ|.E \q)x!x~| CbB$s|8ĵ^k?2#D &B0_Mɬk:%> !/"pr/< kMk*;5F1 "@6/u+6S~^Y%DS?Bt utu1:T"<`P_i$gn@AfapE_T,܃Ph,-=LΩ4sCp: plYiE+i+GuVh˅i. WX_JN򄀽n,|e#rGzu;w}LK:6uW81KSәsךڜ8$DPD\`GyP.FAe>,oisW<sK:zDlYyDOxT*NzA@Vt^2m];<+Cqhq~u HxABRFOp4nC21KlIXfBTb+mH2璆ln$6򢾔;HFӺ+ % $N9tM$ڧdaf1rHߘ]:v@GY·]d{+=`YY6V3&:|97)70/ʆ+L%eC΢4s90pT@C) URד++i˙fҷ[pUL\ 6eV"XY5ܹ7?.Obyŏ,WJ\+'a".5,T," dV+s߳iĔean:oT 1#]\alUC.uzI$^O*d2D(V蕨I+ST5*T%[ǟ}Nj?8JH7YwZ+u>]/ZjVc?vkL49H S,cL瓚rIS $EJOE|3),[WqXH [?޿{:gi7P"&g~e#99)6jRԑ[q ̿^UJ `ӄ_~}[E5d˭G_'r˟g_Y?W\P~/2@LBFUX )@&^Pq{"@Ķ6_̣6 oDou7T˙\d֦#< 0+ܰ'331xwsi7(1Ө'L:.Ot9 Jb~o^˨r9A<*hIkRөM{OvD]ۯEF/>^>oSb 086mSo41ԜuX1)g0SHR L#(Kr1R]ᛒ)A~>:3HOF8U6.st&j҄ϙD 5HNFnv)N(߰ #Di1~QFlF1n<ļR\٦uP4TPGUmׄ"WTgz=Xڝ>BR]\@u6uLAtnm!ԗ˝FpMqu*ІahR=.HhyȪ|A?q\Վ'BU{tbtk-`n#.-i4k#wFl @x3OX1Dk,xNzɌoX<`&Dw^0ENp%ԋWpYdf'z\8,|.Ѐ0p\!iSDOY }^7$@F \|uokF zS-> "5?C?*j IQwraonY| -}~04q@F_scMv:* _t)9-l<1AH$BZ X%>GbG/(xk(+L|]K͸3D}.lnQ(Z1hIM 0נL b q g(CKiq,1/fh2Ի*zWN~%8Io09vDGTJ?lA3UBQizw={n# bs7'n̑PWt13?6GK& 6."7?ILOr\Dc& ',d"^?Ooal֜0s8X]5T&5PW.ՓZ$pA=: _tG~n۟g ED S݂ ],rEL 5TH؟b1R@vDpw7n#K302j9K\.ULmd8ւ2FItܛ3s1M4Jg_'iz+0?$e[<`Mز8;M}:r\ncrrqK-.$ ־ +SVVۂJ;ˮ&E.%xKHE>d! lGT+X0]FkמoS.[>pUjoij |'*v3{fDzB.dXU!_VNق[yv`F"ʼZɳ wБot;a W;d8 }u+5 @bK/~~NWo^ώv)mO0@c0oV^Dl˞_F3$NġB ڽ"s?$vh@ sJ.Iq]&ew$b(e,3EoHmaK.һ]ClТ6"q!Ae`2r$":q7 $_E.x#D %D8Tw͓:r)F~?NZVdnsH̆"0CEx@@|~ecv6cc50qN~6nۛϲO?~Ͽ(ങ"hI*\0U0 Y~,igH}"̕&P]B?/}MkɡcN9(%v{G|y9wL=绪*Ȣ)ilׯVb}6E2|ߔObN]+oڍ6FݰdhؕCգ eq+{ʢ$`.k4whA~ 9O뷟DAW@ӿouyjg``CG?&(T/=ޗ OߦVN@hPvo!Y ) ;t7a=}eߕ_([ZH+釲VJO BjOF#)~V^9?i4'ļ $e&^鶏+ qB>+Ӽ iлRdqV6- Efb5[x8T#j᪷'?&lg)e>mB@irk&)qdxq^|hQ>9GmwNRBq2:YQa0m ҿ43 E`F.2*`s؀A"?/ (pаۗT|:)H~ӳÈJyA#x 9y2Rdԝ;ڝ4sM׀P/sӌ8@[0D{%u6Uw&t1*!_ ͳ3D>)dKQD -EZpgƖy'e `8/g-U+Af?Uߠ=J׷. e:j| dԗtD!d25gN"XE,.T5R^rwq ofnܧXJf+.#iTh "Ctb[r>zo 8Y]][&7FM˱٦Et+zm\b81G~+3u3mL0x09l1^Ƕ U ¼ 'gՋdu W77^lx^Wwϋ%.7BC7 I;J}ڒM֏0+l|d7td-lϊ~s{a:){]7s[5m`&J;k~/ Q$.ؖ׽kEY>_alJ<;ܰiU m]o9,Sq̕a7|n=lUN0dTFwJ1ޅ! w5V֪X@K]1'5(Tl% Axo7T+xó&ƃ 6"GTh%0iTnBTgQ&]nӎNOޜI.>1g@c@,=<#]pX;:gULJʩ(85R'[rrhnsQL͞E vx+a0¼xx"}i Q\vaLT.Ňh m?7U3c'1VPd8LPz?Iڨxb>qʶ'N8\?6 QW5Ǧtl d0_ࠈg\NN>Ql'?P|< 9V82r5ӫt8:( 6VQ1x`pސsm+Ow¨TV2 ;؎K:@#f:D!>HeżtfP~gź:6ҡ|QdO7%:$(ѳ3 \}S:Ĵ1>&%f͇On\,ބ̈́l8=Vە-uj8j{: d kֺUY:&޺Ops y%5z axK4} {[{@4_%Yy6K32G{s\=ot6"Wq-YV >!h@fAUO(k.+M,rr2q]RA*wzw!86@o]LAiSC~> +5GsS a H;k'}'xd;D>w[ŒVf2BEzwnۯdVqܧ"*)jZ~^v20ɵZǜP?_"qZCn [yl`+7MEZ &j.|XXo8 R[9DhqHv&`YmkSD'4;R tERi1킹yh8RlӭkqtEnteRϑHs0dA:do c=XpO^,>zxo _#!_rkʖ5}ib2wJ(Pν3ƘIӄz)ihzct){Q&@h˺h~bPf<]^ DR'i H=;"XJx}*jU-ϸ@vif$sXm910ˆA'X#C+Cnk;,{$llY8NETT/( KEѤ(pWuP_3VXb/u{y||) A9bc 5.ϼd FωhQfK4 $Q iϤe Of{ vjSc [[Tk/V,ghjK +n @ÂdH)`cP@4o97v ]=XtnEf#Q$T4a3 fʝ2?K}M4Qn+W\e~>wZmzn+/Vt̀hT#_bz:#Bꝴd,H9 6;bf5+ " h'Dĸ1BDH(הIk^zC$<:xH xB6#e7:*`z!!1OlNR%a`j\K̖A YZ fM#|a 8>)3jڿRR0xpwB@X>cW@IW ƥf3(;I7C0>cgW!Io8M&.KCtDoc(Noi*8&3P,'ǥ:GUĝPU3?_*y#8 WGԦP9 gVo}wp‘"'/|Dm Z:@.VHߘ#-UVKe#P,~8񋖋_F)_x&edho$|D[hM%# D|qZ!3 q1IMKH%xo}֢WjcpK-"!=>L9.77)ڢ6EJ"闵_8kp~Hӂ{gYJTY<9I%w$((Y4UvrbWYW?WT uS -ssRK땍ue??ժ }~Vj͹ˤ rK^w[F')q6jisc]LKɶttiiƋ%ZJ\KO6u[N~U[;r/a V6䣕'ϵ^o1]tcms3m~E/R.QqQ0x7M}Mf MA8yH79]$O?IpA' dEŀh!Ƀ!m6<"I9=qTt_4&ɿjɊA ?ԨB&1{mBB~w1cOozadBHL ' -)ʩ\;4 |Že#a B19gsRYr Q{Q!=r{P/\PO; FDn@/9KŒ< & -;̹5 ]/U[ hL}UCc*YՄfk<"/9n"Iq+~M,y˙r5;m>#@I{h攳S+J= THO/8˶WGV1k-I{E)4Sz\LD!VejJW02}$vsNK Z5KGDž)տT#x d~vymTokݳ=OS;Q޶5QW],t}j$N, fN?.cn|ybf 5y|ݠ+ڸyqӁ&>9 ށ뒰 ̓a}ުj{%C8|TQAҢ,pꢁ%Я:j6*:Bbv %]QrGcPnQ]i7 ]=ݕ*a`RZHꕸ%~? " Q«<~H`g{ރ{FV< ޽ARRRć::=8 6кګ6[=.ΖTPsLǸ..S_D(kA#ffu\bdz.ii}T8~s P|ߥ)LDmaz* aԪ͚n> +/MTNj-< 9g,'Jd;kc$p 12&idCԧŷ~*xp.E `_Bk$&إn[X 7Yz,9UB!K*7/j) ˃tv.)33Ӭc&d#Ǭ? _LS)|ll^:D-/b<,S0;SF5K pt׌gf%(:FְxGP+dE>O~<@c[wfEx߰ϐr_ٜCm7 ٜmgc\=sspFnhbPLF$;EgmĀ&E_%(Kh"\FitEjB9Vڇ0B'ҷkZ8Q"F Ǒ6;mlڙYwϤdXyYhP?Q˭bz?{4DA]W,ȂzZ8؋ 9bHBQ@l#f^[ܠ7,t.f~N!s(4,K]>BFIO^e<9orvڑ|hrҌq65%yygzM~N%E6uU+<\A^ٻflN h}%ϑO ;D6qQU<Œ5@"zj؏ÚhQ:N)T iz|ZJ}& ֐f4O3yĄ@Ꮧy&4ufY޸ijS/8h0xs2HPW Gj;cۯAo< Df^ʲǃ&1J:> 6*9FYk$`/ɻE! `"gNTXcTDk\qT&c&l9hJhIe< fczd 4z,r5iq7Udk~niD]$]ۏHCs9zbAp>Hj :7 ȋFTM(4q#4Ynů` h6,pd:sCT#x>Q3G(rW0L4l%H")}tH4fa5I=L;9nfWH U?'K4/m0XhY\9Y[(+.WhD,u\D7S&ڞrwDn)b|Q@烻eram5t@lK1׷qVU'BPNAAA;AR?*oE1o]I )'{Iqo$uM86Ut\@=5me.A&W)!VTFŲ)1z8-^])~@bWQ `J79g1#j{4{̂V(J  -f(כ ],7OKg,nRc9&-`KjN&<V=Tr[^VѦr)ɴY~kOƗ\m^[+cy{qo/m|   ōMj.=o vD "@2Mbrߥy׷H;92#f+5!kcn ]B|h}܌Qy21]`7L?a~T4aW:WqY_u_];yl-N]9!641AAWu^=6LCfZ'+.RCq*/}g^ 3)x{lB314m0A W5Ż{!xAC%^"o0c "󚔳'cY&cDeތ2 z1Mͯ{s%pܧ4:͔sx]h Ih5\ ]4SThz SSMA5mcݢ1iOGrω^薄ine*>+FsΉFUBELAHU&TwI)I6$(ftnUAIJWk=,&i6_4I5z8(:xں҄Tjup:*n v _L9חu,Kc=BO>} r(CgAwk!1Ktqi'rMZ Qz+3 ޘ 6 KKVROFhnLR"z"HN`:b=I =ݙgcl!54wh_Lz׶nn76AU=}^X 0}b2*`V5]/DE#f.K{x20l&_8+}sr>mLՊ8<)@qBafh{Iަ? #F Z%/&[KtTg4ɕ(D8?g~ǰts$$s7^ ?x=q6WF; 060Fk˙\)ҋl߬'X61r%l!Z*dXhpOvN?鋹9b 'L s*$bSEXzS5_@)q_W>ۚ;>ШyRok#Nq VMxs%?T>'ZFU5K~wp_?zSRP::naZǥ<6}MV[Z}U?>PG^[Gkh nU;=6iYMAՏvRͷՃ8(j꫃ܯ7j{-kzz\W?j?`8ƇRl| G_= IU;m f+9/߿N(T 3ra0-g&ky_o֊ڨ7@}_6a:]\#RWR_:v[ 7ShtW(.{1g٥2CKؿА xԅ s:+@i&֛SYdvLH$T(y{Gmz(Dv%FeCc4Jۋ{f1ۡXz)h)BG:~Iǣ݌O)YNh4$lĹn]|DFavvɈb¹ϟ?W.3J:'2G]>, $:oĹ8U82m,ןnon{w'=NB^$Iښe>Qz f$ ʇTKkGReAW$7M%I%xs:ߕM"xEΒ|_`7@g#ۜ>):}rˬN{c_.VmV$$ -HNaҺ=`Ig8n©El}JvdscXl3ƚ\^YQ{ VA^NBV}T, ;Q?qwb'#gTgO1,|9Jb#7_seFU,&y`U7@lQ2;3D+OӈCIzсQ?7="kyRL$aTuJw  NΣ~Rr&Ūw.`>xn$/?Aٴ<:/SX#SdG]PK(m1!p YG RߩxY:WJw%+Z$~okǯhl_\J3}+WJP+Ue&}q|z~r*_KWn_coy ;i98؋c(Ĭ7t-L*5LduO4 "4#Z#E{SA 6G1CH:@'fvI\$juAW|[h9$ԲY TRu,7faM{1uA!23#60N@w3`Ɉ>:nǍ֮QdTQ"XA)I&}0]SJrQ")qFt~zPo475أ8kȑpX Tzޭ_ҕԺ=MQB;TqXӑ*JT1]U,q * cP>>#FfR@Itfr3W[vCl]K,{<#SRmr9fS[Șe].Uwzlr q$&;wjEg"nѰ`/+M; gCNҧ ~͵:]0y6b#@WnS ',%L Ϟomu7_l==;7gkY8;QTd 7a`N\nI EKl@|s h" !؃φ<tt^)Đa!)rL zmԕ:vV:A+C!#lw c2z[a P30h|09|ʫ":[`TgqjBI$.5]~~CGÛh)@I } X>Z0KXfmǏqJ?)  ^U"6g!-E1q@&̜+[Zt/omooyl|ӭӧY7~qoi2ϦZ&Z oiLFyzX CG- ^1uq={m.\=j;|y~Eg(ƌWh4kzjEdwRoN^c@'lJ2#P $l,L7 `8:[Qybov?}u66_m>]tμD OcPH&yD0ri9@IQRJ`LP>a81$ BQdENWoGLlz@~o(qu֢`"lFsST eC i4$GFCLU({8"1pz% )5Q),I`) cfAhmst`.]Nj$,"z2JI.AʽZ"iK0oyu98)Z>NK 1p# L._BM5n_i WXNbI}?Z]ƙVJV஠^Škhע*Qog{q3)23892 ..{1bld,.3E8jXZcBw- a? +dkWJvF~!!}tܨ%M-57p۠ʱXn 6k {@6`8]-B`~;7csvޥ@&0JemA<$jC{P,[nV˔ԚIn"~`І3Cv:NRX5jV͉wؐwrT0yj ո 3,,G_2tMnJ>@n{U>&&'ɗ#LDOa8a-}̗!K_/ɂ%j 4B# tVĢP%t="һkЃdD.YXk:'-HdaPBȲ'f$E9m|(L@Y$6vr=! ``r)2I` G lQrR?5"U*(sAl6I^S`(;nxWWDNNcIq wZ=osX ; O|3zP D 4`uNdD3@ǯQkD Q$ vɀ۹>#AtF-8|#$}:g ӨiؤoB@U{eIHb>ZZ$TCK7n{ӛqM:7jo0I/~ 2A#w(]ew/څ%<K5qVGwNè5AlOa6}ᬋj|nrV'~݀a,Ιyumۚ,G-,d^ ڜ<9\[HGÞP(!WS xY)6VQ9^8"vd3CLQ#`QWNH`x 1qc]LbD=~F(H xַ*'>}&`Ґ 1^F.O,AK0X:g KH L(dqnl;wq39|I{LJ3KL3YrzodgRYċh1Wb7kN+ҊNiyJF͎J"?"ugw7SChcILN҉l]ƬVIZf}Zeɦ'jR`mXnnSu6ϟZ6O)y!-R7͙ 0/rfX<KA"</I]K$1ws( Sҩ-r/.qKo^y/>Ҥ, I&x  k?'?PYt^2=&p,  .BBd&AIH,uX(lg]"('e'(Xi4"L~M&3Pgc;;38Rnq{C6m-|e !7 gd67l ZUm|ev'ǢE?\[Mv\Q+i( dTdyOMTGmDun:8uW~rR~}ߗQ앺Y. /ԏ;8_}//xنu6+rPuzj.J=񲸕%/V2IXi95)W3p?‡`WkjWuԷ'/%#Fwr 'RbѱH> R;AX:¦G'9ԉWj u{ H#z1=qױ̊vij..btƥ%;{y:%br&a-hol $a0ĹXhYm_k7, W|tmuˤ6 I)\ 唊V?OWku DMpklz\]- =ސ|<;JT˸.e7"3> 1ǭdz%ג2_ȄWdM#Pl/f1@p#mRbsd|=J0Ǣky>T zuB1׾/ܼ0(l1hh`&HQlԽhm3N:,U[mg[3mïl  >δCh2EO6 g=P!tROmm!lRzryfD\"4aDӵ','Nz P?Wuv5D:hE[}z6pmH?NCP !w=IFډdR'OX˟ԏt9qs61O&d~o)s>Oɤ_8l6FzvP;9}}r5xlf8H"XRn8?}C3Ro8)̤ X̓Hysxb!tax]Fx}mGd+7W+/<' `#K6`qzI.m[}Gg"3K͒MJ^i6_FY<9eۅtaoVFܟ55JqeU8lN:cFH0m)P?ӏ2rC{'Y)boծ4PVrX6*wN.vi5NZ~dhdY$f Al7ܰ>>Gp&t3 D:u  GNؙ(qyC/<+=NZUEA'h˃v)pX2驤T%c}Xcth{)5 sދ]O#Ń]$67zS50%'g{\8 ">vg1|F b &"v ZDh,˱(3N⿢plqs˘PG?Qj3dSjvakϷSq3sE8%`vžMfUr(1ʹ:/<ȟF,b~Zt8pp47BqS}; -vn$$puwE7|zQS:^JVλ9 T=ixMt|4NDLi7P֛v\F}@v+|@ՙvƩ|ɝA7:gux%)7}oDbz:X5_6i _ EJrz x@%o´Z 6`a(̯l-T3cZٽ} o{&5Bߨ[?o6{sZòQnݓn1@B=FJ>_3vuy7&_N4pt.gëD;LG''Ҏ{X_#ᄄ쫆F|_icC>1֠HyfƶikN"]1{DV܀8#i|?H ﭨ]&v -Wl80y=y=2N1 :gt2㛣\|nNAF].As̀KTQU$:%j]0(қ~9G[-ƨ1Mt'7mt2LO}O>(O4K{9f s)gX!7vi2KB{-MN)SuطUcJ{,ےz Ģ{}IO`QNi *R1o8Ј]O"˼Xv@] G&FwvWsЃ_--?&ro} ?o^xޫ%~“YwlV4/F%xŠUt;8g׵j:0|i;>j5LTFťoL=WzLq΅-H)`% Ke [»7.#!$X/eȼrlgX̀dvg:Tx~ 1ZCH\ 87ͲWޢuI:fHؙx_GN(7IJ2X@b ҷs4orrLM:NvUZRz9JdhǛC=b=)myw ).2II{}*O zE.h蟲r"ߥ &# 1@WmqqBwY'FL:3AS>K# Q璷S~+H>>/ M'ѴQ5 1vh[*ܶL XFK˶`&ܐh6p)) ++Evx4&dxwv/vy wqѯz\y?"6럫);pRЯRB[Ľ[OB49%Ǻ#:\6 gmf/'@ggI!I"|Fݰ %b9ZE.Ƴ ;j| xsfPVz4ڜ{?#;i@zNg~\,/_O`!4ⅼ M}Л*)7<:v1n{#nqטV.y">ƟS@ G}W4Nq;.#5υw^n 0&7'FZ,`6D{^s&iZ[#;-5LS[/H#)uw<9F==&%Hq? L;9M"P 0ef.j=DQ@ ߊ5BבhI?^-w %PWa gs46Rٸ.rJ`wXB&svf0lT2)'h0Ừ@Ϫu 7Ƥ#:ro<ڋS쎃yDh20h4J)F͗-i%y*43AƲ!') Pٜ"3?04*uatɌ{6M٥qh=HX\޿0t]W=4\{Us^'(T~EXY8%g L`~v9!1;p>GYE7o֥5 j}KO?ګZǗ,d'QCzLG&cNu'l/ě N=UBK3f`'9N ;:ni-R/VcupĎsێdg~R' G6wqïì(t07.ʋ,^WH|%"b) L? qcQ_% w#-s"yyA؉$tЄ瘳r!ehQHL"H쨎@%J{CD9[ԙ-Wd91bc)ݗŖbKPܿ 5׭M 5O%}ʢaJ>NKH,ͯ 3Z5[$iGq1 d545#YBYT% X;&rZ|\AE7-0)p681ȣ Qr!kC=֋ 'g|eP )#Uol] ,aٱe?5A9q=晋AO⏻Kk>sATD hzE@|esFΝv R`DdMՍ/&\?GcqDPeZ2eA5LAp GLBU9IƽqLgv~mbJ080:=pDZo$1Nʚz3)Q?AFGgx@RY$I7rYhFj0\A's4b,ˊ/%x<Ғ~} U¡[ny>[G3z[hW}s\9H&Ѝ k@N;^{CZjhW} 4q<R)>Mm' KnXjEG Zò>M!̺aT6n7MkA$hG)Z XO#u9l{YgO.%UD KNmvTi9s9s祒sր),6>,܅[T\v jثSFDG~7?9:j^:xL~ g6|$\Jҕen:Wkʳr.s!M;S[1,*BFPu;3Vx/ZbvcAIx b6a8vs/DJCp)Pfz?UmN>@%ʿQAF7;^gW[o 7(>cjՊ+1HɽKS3LjzjŰ:I27F&@7g8βTT)1IŲ%XtÖ*4Hwf"}'0 ӺiL>ܔ.BLLfC+m \o+¬O+M8JeKbd|VWAF}'۫ا3Rk c! xFI_ePpل`בIǽn%("GݩRNU! ;qa.qNІFg]xOB`N@! c#e}KoЌ )) 0ҵA {N3R6Oux+L6{Dz m/ Oc_i<أ:g%  }n{iX_O뾪n[! DL&@lu WҕFK7L-ugd]+l\9 gEXiI~+@u̅H]G[P%vOT i+ꅂoӹ[,X騆˶:9_5@-*o8cre.o59 Gx^:D82U Rl;֥![5)p̹I3Ȭ*&cjv`mQjYձIn!꡶g,2> [e ٠b&Pk`Wt8xb3૊8U{fqC}A'41"(F炽gKqK>p~K_ z$~;ʉ!o\L<4[Js$o#fTOw6 KD;--WH,j󹅗~~+$߳Ie%NsHsLdR>XTG#N(1,.+sgug<^%5֝蚂?É[A+Ws8eViڅ<`#Dd>\ g{]A6Hsz&ګݍyšJК8Ei@! k.2;#[{-:b9+h0d-U@Pgcw rƀ~E?}1kK0Q~ImモȤ׭ 35/ѯ{iDz~Jl!(ʊțN?6Gm^be@Wv3}a,Kzl2Q3;, 9knPPsVԓU%e`mvc45kHe_Hx Z1 PK~V=APqt]R0aw9u8b:Rm4(DEgۦKXb{'D~1;z0 kaX=/*TeHSAoz&ON[/"o:}C?=ɾK|\pA3_%s wPI9r=Jf_<fS= _nw)<7B_X\=>;W xz8D$ !qL糡ǮqV*>[ob %~߼jH-ߟw`=o_*+B1W$uRf)AЦ3o(АKi F)p"6H.sI1& ڑUaC7 ?6#ܶ_b`y}Xi@ GI8kjOzjqhN7L@ܙ:5ԫf'>a7 bPBdƀ`C O}Tj:aPy4|3 oa5f]KjV[Aˡ\hgsI;P2۩ ]iGj>D\M҉v%J(BFWr콲lݸ랖J8'G¤ CLRj$3'OާiQ-)TK@IHϏ 9Hl `MmjIN:P mptT5yx籇8d( .2r2ôuy "nINUt**CaՑ~lB8ijvm;/ G2h,!ʼ  ڼnz%L9nˏEpcO^/!Ts9ѭɵk5S} -\8Ovi-̤Z;NμCoJw@߂bLP()omFvFxwKL'neRٝ敿CnRx d!9&z6;voTјQ*K_%)L3VTx4OxaӕU9(X;?H 8sP9]ƥWW ܁WXi6}Bf8B#`6LcԖq6j5JjLŎZy7/3|]99JMW;K1\u^I3l+6Ը!5eW{c[Mͤ7R-_]붙%C:]t, e΍SGX_[Q MGF3S5bLXK2,OAZB8=>I3T2"1^#7 JƫD~FtCt;H̖kG~S]ƔHnjr_{'g)p++ٽe)RfRötj7EL4%F5ū7Τ:"U{ALֵ3Ucُ(!S%ŝĽ!4 h& d\61PbY;h`KWж @%F-6'ɽnBr/Afd,rfXuy͋!d R#]|85?f̑ Eihi޲\S,ie7 j[`v*ԠAtmڥZNjwUGsvIUH-mhӈ:YLec]G{hfϞ=?g[z[t&~^u۸%ͭonn.l7N߫߶ێlb)d> ~@q Dm3Rִn0 ͍'j|~ѹѯ1L;뺝>؛lh(!âd]w1 ~U>o]]9sZ7,ېzj'}x[m]0LμtR/zaþP[Mk3Z2?M)*1$iommu뭷-Mwkh# aPeIrZ=ɤҵ"2~3Q;rp:9HJC,G֪M ;8Jf'1 4.ua9Z(ƋԈɗt(5閍C mo{[u^?#h6}VbČ>m VYp7]k#UzZ `Où5 dNW7uNws3Xx2ԣt@6Do$vo.;DlŢKɤC"c& nv{6v]ןEK4!!ѩ?1%R~<^:종?&*Kx܉,׏^^Ʌş(^d'gc& a.] P6nʠwF]m+P4/ @gY|m |M8k-A;7eNC]#0KT`λ;khe^ƟH2-y(= !u ~Lڸ5t8SrYB۟H* |TE4!}xg#6$%8f)Xn dF2HMC%k։u*. ,'gbOrС,6nK4gշpy<8thwfs74kXYՎZ^b$>֫kZ,1+Y61uMizxaz #,UDLER(]R޲ \ b.x=,C*m005ҒP7_fǐOqg:puz7Sŏ5y6S/%y/y{_\INU*$z M 눻 1 i[`"9řGƈ6+ixOq7O3"t4+&~辕8@,3[$2Qe BF;\QDRܮA|͕S/b: $Α{O*/2ȼ}\Gq lwsU~қ2p{[1) 溟!Ws.bA:bܻVmg[/ 8$̐!+ad z| {.F{= CN'Fێ/X{X5Ffe5zk4O.ḭ0;4|Ght ;%c C^712?R>GL! &Sp0(v 3XtI L92̉A$VJuA UX']5?/'p%N=9V-l^ʲ)L ɘ $Su(d†b@c➮ɣ5 c$W':3DjKX˅4%lY,:QGbٳK&is %IKߧg9~vQ6j˂u9Ildkό\IGxԍ14.C;䯨 l-=* h!i5shJd 7& .1ꎎ5W]'C<)"u#PfX?Ivb30Y+>=HY$Lzi}?֞m==>zɈW |?<{|`uLVzx M/俱xG7xeE$*Bu4nfFB1 8\2M:,A# ־)Jk$^'%x2MI'x>l7D@% PqHk+}"IllQXsB(Ԯz30|h524*+9vg| F\p-tW2P)5qo7yFr`D^ B`6"1BY*%cV:د5z(CiфZVMxw~}PN@zj%{սG|V,:n7%Uu-(:.QkuXk콅"[TIѪTqrܬ)~)y*hUށoXG ܡW5'`c4z1ٿ`%yR۫ß0'5Q$6k>bگҍs֙;m0WVuڪ74Z]}UMf _mUq iNWGɷqzPko@?>ML+ƹu(ok3K3Vũhb"L$ʎU߀@^ߏfVob:5 [Z=rAp^D˪Uu];/a#4mhQTc3SV ބVy!-EK{{70wf}Rm} a{\ezeb'߿iUk_{^_]1tm_Vſi%*GʼTe{5H*'~V"r*o7$@0H^Ә]XI<ՓI嗲.stjM|On+VO=Zߔ;?vxYedDg3Jwu}+L),MX5WBʳ2^[kҌ`/@7Ow|G;e SmZ+ wzK?Txχg$?#*Ot|v:a.bfS;#!+?_N]R5]䋓:!wр~!L%Gnh=%Y)Lwes:qFW,E}la[q8tʯ̲L<2!ذfe4.I ,Uq>0aN0!2wCx+!Jokr(Hy ;K|RO9Q_2).φ[Q s Yhsh|vm د:#۽uΑGpY_44|06S:/#>qa4#9WC Ejen˅@'1~hA4}oII :z+J⽒x$+D)c 3?aVTap4Mrqj`_<q|k1> $iN\Ia֎z~c'#S~x;%j*`c)0L3Dz4)[-%z#&Z;HdAܟyZD2=ziPE)M'/2f$B#?WUΣd[bA Io\j+ɏ+!cڲ2:$6i-2WVhẙ3m]>?mھ]>B reoU@cS)̓܆*#'*0cKxd6zs?s?s?s?s?#ͱX