#!/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=3effb0807b86f6ae3d88e23f284060f6 # 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 Ah\{s8Ox2Cv2IujeY#K:Q'{bQdq͇;M_wK#;MmL@uS璯<~y?{O?G2>Y:1c?$w?AuʴA=?8?0>7Q^XuMX_e4f|%i-2Ȝpɲ3/dI.: [EqK,o@$si.91g^%ѕt2]{spఀ-vk%,Z)h }@^ a,R:=$SKUI]na&,iD1.3`&T2rm#71 Ǟ'i$PF8Fplˌ@&(!Fq<ܰGC"%r)R΄,B=IJ$d]42h^0$i1krilrN̑9O31v<>gssp6l6XCᆦ5Sc`Vff:FUY|lP>G#'#QQi G:бGЉguI2 K6߂ڽ͌SdaYss~67dHo^"Y249Ax>:LҞ9tnNXsهCRd{$u3,i@syD Yx;2ぁ'Hܴ,iaSYHp\. j:-+3Y`)͆T78n{g)76i3}+ݶ&ga688s`fNjcmsli~rmhXs0^I0x=Ḵ\RVO|ߨ v{WNChK^[u,BޥannX7fuNv%Ŧ8\{UT?^>~Oxɔj?=n˃g/j| uG(Äw%AG<~ŴQio¡5>|X n4ݧM)^ !09xfHJ+$.ʊ-;f>6s{0f/o-l%[sj= ~59Z;ɻKr f.%v/ d$7 ΂Oy67p߭;ۘl P&`4k5' ƕQ{9K$r~{N˼x ͹ ̰OP=/'ۆh]9:-|Hn(ubJ0A\}t(|q]@΃(B矙cLr:2 G8 qkؘ% Jji@8afLDz !t|g$X,\BF:!U*dձ~@Me@7"88'RNvCVNvV1n<[PDB$uc!e!!gC1^!k3yIoǒ-^[ފi $>ITj_Y"kΪ%U\J6^HkZ^-qE82bd2;YՑV^u xcDWl삧 m;e$HPb=0 Vjq?avx~mZa,U)XL A@>C+O6>DJM+3۟ " TO[ ޿d\ճ&yz;_;Gb;[~DhOb7Dqp -Etw-Ɇw&KCQQjF0/vֈ ^k?b9>{gCRn(44؛C1#լ=a8}@ %QsyiWKP/u?pѕ2GrSn>wb&‹4:M"MYl0YWbwx}/`Kq sQ[0-Ɨ ?Vpwa[qUFBāl(`M7iPJR[½{w|{؀0\Nauǖm(hys2u H C#Z'$![\|79 F˪G@a1)[=~̄);79yK'uğ`Nxkoh葅Zߍr6]_<Ѵȥ<ȧ>3w٣yY?V,79p%hR?{p:ԫ1,.fclَq|BUFDqvnPzqԅܽG1VpK<7ڕuDpf֓NruX)-yNجUbIs5E)% mҲ]faivMScPZl&ȐDN)25QoBѸE? ُL!͖֔Zc#)ciѲިWB @;./Jh"K.NyHG[+5 &!`z8 C8/`FwoF+ɑVGRD U$Ο_c*$yrFu? j+T^x(m87ϪLa];XL.C/2߉aA(,{,nX*#1LK)]K1_A@HR50b',d8#ȟDp$ h$ƒtyBzh1fp iEJ/$ޒK${T@5'ʋ2U֐>n6EY#!GxpO$AgQ+>;]zXMLi]]ZUS/ ́UL9uy{FB _JB%x>)"hˇrUjUBx5!/"Ұ =3?Rs7ՂN=m,jBUM&gUB]Xȵ%%;baeWP IEJث :PNQU]ŒJI'a u=mPT'1 @Wz)iĒMh)Wvp[-?'J3sjn,!2`G)p? 6xaBKl]gx7wn/IDt$*b/xzMH s1%z)/tc-[(af"jIdt6>tv Y"VvsٶY#I񜮾gb4}Z~_8}C!޼jvKQߑ`޲楥.ϭTqH$_ Gb)iٚ^cu /paMer;IrnѥIt6=X6-Q=WNa< l;J}XيUF֞<;X%aeBӯ剡s1M>7 `0ܣ89[#2dž`O V%{8Pp 1;IY&k!1u;k5 c9h< FZWITt1 F3ɚd }&a: / eifwf/\K[Hp^N?"p"L7RyZŔ@<)(22HHhQ,!fpO5*C}B6 5t(| jL7(TC ܤ05fm/Wʈ.ϜD.-.˪(bA殕ip\;1]ξd$i.粴t?m nUsөpCiT )i%(];zRQ[W/60<"98͈vطS䃯0^6nҽ\?!|P RR,@$a*),Mv8x3cL@mY(%x}H]$"yHN lJ/n'u,]܃J^X6 ӢPsk}(篵HJLcٖ@Y2JUT9FL;k N9Pu:`x(,r )>nyV|a'o&lN~{t듕鹼Gj(ڱ&Wta M=9ܾ})AE0m$uIܰkUėĽ-_8ͻB֖Fѽ~rHφf- xcNsKēлA.H b\ ^4~ݽ(tMk X!^QK&M|m"jUv6{X7Ԩsu逩/K惝IR{S~UWl~Nb!M&~s+b.y uHUxDl`HPF\+V< Aօtt؅,_[u%s?umv\ۡs5\x؅9c,8( [>o_@iL@'5!ީtyn Wsu95NnVTdM߬~F/eܛbnµ]qj1}KoTo%Hƌ;ڷ%}{5~w^K׫6uٕ Qm*vMGH'U |fJG:X25+2Q[Dq]<rsՒ6T/ݶ3RZ\\}ExܟR\/OM}w47IӍ3=Ȝ+b"Zs*ʒ]06e|㺫 YzeTIR㻔[)tțD *,#RŐgKFFEW4-SJ'9e6 8͟;1sU ݳP&$wM{"dOI[Ai-ykuvF0PY;FӺǫ):/ SPJ5u~Kgd@:?" ܏F)ȳ؁whL$Ea{44a+̴"$Y0B6cm K;#CH*d2]+K+w;'ΉdgU)Cٗw_ZBOoƗ/O b=Gؐ_0vLѓ`|΃Vl>L,,2 x:;iaUxr=CFI⹆"$cШX/~@i -)rwX7k*};[V2(k5ǘv~!&FQm~W,XKsJ˗d%UPS{s 5=;)?NG]+-xi: wx&n쵷E -S3G(9k4h@6zyRdi3gq#93Ǥvި%/9nR ěfщP߶0򉓆[}ZX*ͩ9UI(.6H)ך4)5jH%+T|ܕ z1J2ȟN Qd☌Rڸf{ q:V\(vHD/FjâpbUzDWQUg0&{#,"hCe8۪NzU?DgDnRɭJDy -Wy^PP짟`K!ή7&G)߻*(t:ήd,pc8L>/d.)F!wCJXBnZQ~0F+AXf ۉh7vcg*; Ng!pJ,Nc5̚R|R@tX#vrؽ45,gOPs˓bFc;&v-n=5uUOjф^W;'NᰖYq<G3]MGoNuit= 'N.L`\*#&MeY/INHKܴϖaHUW\Y|"h%ݐHٰѐrVsb fad-`"ΈnƚRoGvEQ^_\n#m] &δFu A| FF'd]v)ycl=~{C1QOJJԜ݉#r;՞(Kt#fZ`8 6ԌFlt, ( .1J:)DYdiWiQcñDS@r6 zJL)!mӟ->"K!Lm]=8>jLl/e3S)p"C%\/,bjUs )0[:ȦS w@H!ozZ }GVS{C49g{8#ky-7 (HvZpԔU8? fLm!$n@ i$/lU._魘g%7ߙev,`έ+fs\Xj!Vna^7$_a"Cʅ+|c2(ASG]{-dTeS7~{ggkמ?+*M{}XڹgOOά|wmQAPO[n m8@1C읁ttK_DCS2}ágQKOVPI k@ 7a7 wT|y_݉zڀWtz8zVZ3E֥2\Q~ܩ"|\[xɴMk1jF07!LY`QQ5vɪZN~2J =rNP% Nd=yءif#9!<:8@NWzfGE@^3T>z .PqW+l} 7C['lXU6KjR~x1LYQ7ԨuTyj w,3=V1p4pTOOޮUxuԂn yT~Tpy$Pnmq}N iq lǏM[zKelX7J !MF\r Xuҗ ZLRln X2¼HA)f‚meGc9HQKbqsc=0/jzӋ"Z102@ܜ ^A>YƠY!HEY ]2E×|y0|X^0󿞏LEޔ5bS'a4&^A;;cs" S05BbO:5E ]w jO0~q 祻M=^=΂ XCoDksXgb? VTtGXl2@d>Zp9b7-;jcoO's{XOAK_ eްk:?-SHB*YYiTpоsѣ% R]돕0/w^ZAW4Jd>@BCSj '#ϲӭC =uM_-*Tɖ&ӢY<\HL;>b'}|m4(Şw^4M@m;)(>u+7n~ @ |b3Ig!V&\bd НLG!N58O_ͬկge)Gǁ:(1Y$:B}ﭵ4MZY c∤KepS)s+1 0)aQ13g 8}'DJR•{Ï 8EVWqQ*"W4m.bkֺvJUVQZyXUߥ.IYX0pLbr{4Kg0FT9B$$oXAْ4gknd& W,\H8B}VMYPs&YR ͈5 FSϔOR&4m:`Z)P_6YjVXt{ŸrIq|,"!b0~5uFX2OR"q 'j|Lҏ { fW6f -^3n$4g< #51/\2hM[bd)'Zcy32 2QR`r9pUf!%2|c{9ac`bjF^_Btү,mLqD(H4ƍiraXu)S5wJN[9f_5j}<[ >_0({ ZEJF2Odc "yMP~\NOHfi6CG0UKtJ8s`,tVY{A9vUR#u3+FGHr(vۓ_C4 m]*2W'jx/JECPa{.HŻoЄTFHm䂼l @oX{1x_F(*HRzw#!3 1[G  tڈ%y5.ewjHK+B'?^{ԓ?c0p7C3romϗk_I1/Q@,~5`Inje؞>I0B9'F:Hs)Nyw_CfWBnx[٬PXIr1($fK.B:GE[(m 52+Wvj@F U7Sj^Sk֫mYrZ\u#3!aW~a]v=֭6cVRŐ]즶e u-MIos=Mùl'Opşl\ ݭ5N&gp= ^wx:ZNԋ&e65}h#!Oў KYb+َRf[+ʠ 8u{G(~nP(5ʐ{ R/ 6P'n~ʤowϿh7r{S8tq)+xj7OjnyE&hJ4~oke6[6+ }&ѐt=GJ`>&] #1.zlK- NpLty(ix}ԽSe g䤊I]<#1FVV`tQ<ل3,:)0p:5sVAeSeʋ!^{!:?yIx/?U6qp>&DrLf@'a ď.w[G8n\T`kfQB`Kn2 ..)Ӓ2%L4涟%Z3.|I6M??Ɠq%;9_( D|Xcm4%{;>qOM@7<]߈7?S.sVw:lӉ:#S,$ ^=pԏj-c/j =^_Qӫ t I]%~Og'xS^y6% -1isMdSL˂v* WʳV-,&;2ɧ7׫d{[XjeyVUJTaV֢ [UX*/KcnW6$fz cu[`%ADۑ7N{ǟnbdDYgggHOBZʊa&==8=ٯ۹/0BՓf.yD c_A)D/QZUew1t4lSvz/6rV $lISNZG ;#/6%}v?V֡^ ng2h S=❔fo".zݼ|G]sx8_P;oIFoܔ6l"C _oR)7OԎvŎo"PʕGv^xQ4hVw;fEtҘ֕lo똴%F#7Q.*`̥$nY' o.41o[ij8&3MyCRj̗E;Tb) K!%:h|7:LLH8 ,)ʷrWglERCRXbA!۲%4?Z:gG,BPuJ99.3 XR;4ky|`3e`v ZeLD YJj.Q M-5_9Q͂2)M`n X99ߗq3efC82N4SFG#+.M]_gWc-o((1Տ.f|ְp:OBrr˯ů__Q DxFu? @CCOdKred#Tz\؄.6:<<ڎޱ;AxzFݣvqp7{r oGVw(Xڣ]Ԇꔈu?^jz6}X9S?67oI5VQ֡hxU/dJvtx$qܬ4{uȀ(Ә;1 ƹUiR!fe8FGL0~hu, 蹦 X~4T]~pd/a?+JȌ`͔lf{[,0#sZ--("FpX=h:ã&NbpL@-z׷@[-PLoÌ4 tC %2ƓѬͷ]xpv3EYQ0OqJBaGޕ$O\x莛&?jal9 !ɻH0\zScj[Z^bTl"#ۏ""ANlD00y6M6M(n2cZ;n`+: \; ?l㰽Z_~.y;4m6Jsj!X$:H)k/{|k/^q=K"59cش0QzH HR%գ,6(iN?-\z[-$tҨF :b6=+gS.鎳㦮b3% =B—'˓WCoQhözp;J>;A=WxgVl&v- & ˛t{o`^o6;fND,r&o38LL@C3D-# ƞjV;XTm]SCXt~nAJ`/mKkE);ʿ;.f2,KLK_"-=4.zSU4!vńBR0-\1x?"->ABMsEn]N{T $m{ Vsj5޳rE) 8!NX;?(hn1a%](TrI`dbJ T 4Rh+,b>P) ѭF\'&LD{dF ̑v:^FnH3޵1%n90L\"(UAс?:n)J->6DܱI y涓01X œ\*(d:VvlAXg+@u֓~ ' h0hY{A5X9Q#j0 [pZW'dEBżGg>g9[&nPc$7V%I/wב |,8nAEfΊk 5K߬R ٓt=cC^5xBr> W`ЮSeD-0]$fz>E`tzl˴f1J1 c(!)?0 >#p!G1v83,>ǟ0UAIq;@{eA4PgbS%pwr`9[٤=-*>*+tzﰳ{0@J[W-+C'ljS,I0` e1.[Dtf3S,f) =euVDx2.:t,51?oG{~è\& LTk@.K]")8 &BPMȡ7jyA` mDؼӅl;UץTli6#M%CV^px(a5#4GɥL ʹn% K@x>%vKn;sGCNܺ5&h-X'žL,om{{ -X<]e$q[JKZ/Ud"EG x PDhωZX"z11l%Bd WFgE.L@@70̰+ֶS&*j7)$ՐB2-)T!ʩbIDv~)jFmFІY["'΢y=?hKT="'PIMI<(LR28 ;)tN|E0 q-E)s 6b)gfC/DpD6)#vgv8XEEӄSi Zdiu3=NO=?:2eHex@]|zvRjfV9ʡu]U~\KsbIp'Þb 94%GN)oc b Oi$^*Hq_Й'fyE{U:Ӳab$C t.jfGՊh[jb92Ő^&-edg~%ߞ^K(/\;k2jVZvC{"78PЏ,PW#|X_~#nmUwQ&+}|\%<\7Za}W/iH"7O+NO]Cb=y";8-%U?ƛ*FCB+2DuD̔L{-/z𡩘:@|Um)6_|㎽e ?†4'iȼ%|e6\,C -s,D =1kؽnhW,E8q$9Jل.Ktwnwm-<"8ʆ/k ;\Odz rMz94(,1ø2d%r IQ|q:]f&8-:,5#`7o!SnVGb>d3|pRz~N 3NZ}(Ҩ!7+B$R a$C9crp m OV/~dzKPp/4ʭ6 LLvp4@9#99Dsn~vdМar!ߍ` E ,"YcvgW?+[qU_3XH`)`tz z߀+s>0":/~4ìfcp"Hb zPvDౡi0^&Ʊi!6`a3QQ8i9ֵ(.r:6vM \!_vLDz ^QKP蠫sZEM欱ydJ8LmaMYvdA\slix_H 63at4S-d:J[LL(AOD9+OHݤEsD7> 4w,toͤ۩9+a|>>p+3qE6B'fN{ND+O^ӜUڠC+<-LuCRZ> ~>zS?d!"D/zyJ1VH_Cϻ>uڵqBg^H%!#5Dj0MVԌVpsT% Q=C{lxd8g2s_KA;p4c?$@Idjvig6c~|kF8F`tŶCaVv071eQVg'z VE8Ԓ,TXEpOпDhm(dsWǿ *p)?[M^J=@94tߙL6D$~2픦,G8jݨcjm.,tYMi$XjeXI&)C$tG-Gڜgɇ0.؁^1}D/)=XK7gqU7=͇- vn{͇ !GtgqCf<_ݗ7>\K_BӿGͤ)M2{Zm>l` Hd G Qe6X<Is?0 _>̛ևI5KXQ= RZu(j5Y(Q)aĭ<7t8f8(v|AݡvکQMhZlpeWҰ׈b6tS jAV9iq(vgkGϺdJgH.k!A%Ͽ˓aڹ]"}k.]19`,NBB:~=~} 4 i4k5U|7,^a0/'iqWo*]8/3:U˨vi@ d9 糪^("p`V*^}n܄@  ߠRWfiG΅T/̓b}.x~b)F?c%ݙwIWm^Sfm Yɖ3-@&HH\ 0=(54 .HD Y'74'R2S!M>ends=.YXɧ1wy6m> &]N>1 9pr{ `,$b$Ӯ&D)7B| ~c0&i'I6ܓRN.hRhI!p| /lng)<8* ʔg)WYwm"ˋO`pDdh#jmPCݝF-F S7+A=_CBE'M#Kp!8t>?tMi}0plil8ԒDhҵ ءwmRjY먔ԛXqFG1 6w"NX<;vfVx4ƾhQ=L%ӳc&X֧7E':* K*Cw!x,ђ P(,eXPY+lq띹%՘).~ltY}boۏFl5 b2'}bz[tB`͏x-@Ɠqqo&oE.'ێ< ʾ8TbOƺ]yɖK +z bP+9N|6_0E3S~!F[w,J~wJ oOB1F@I)@.Fs}L7e9EWf>[pB/`ك^0BLr@Zy `BZaPqz=8W7K;X?,B+[(0\+N90N񐼶JHM*hjsC'ֿ"têjCyn8[s@G7D[h0L#2#S n8p{pHZ M+ȹPY2K=۾%ӞPݩ5S[,N&J"f]X#STHx= !X[_CW#tjNE@&.5D~rlp ?>d' "jP=wB%yߛ.{R YpT |6Aۥ Zq2$<aDE,ϪaC3F!(9^hz@{vЪesm3$payDHَqNc:Bd &:Gp6.#HZ >pqjϘ Q8)R@^"Y]IC>8Yr^[QBhM>gΜA@J + ۘ T+ PP̫HWgh5F-t 0HXFMTnHF0Ѣ76P4KU<̊6Cw'`Vܓqɱð bsuxTOگh%#|FTRBDBL;`{@AETb=H3l5;acr!70 `]yBż_Iu3?O?ݺ6;#`[H`\V5Lqskb 2=bh V6a HggH9u5MQ k iO}bT&c4"15q`)2n6TFlu(#yB ܮѴ,3ǥԢ$AN Ji}5g HA(UmuN)ᛯ$Rx[|\W+kOWz޳i];?u LBDXy$aX&~wybw6ݡ0Ky.XK^Dbb+xcV|Zo]=nn>W6>_OW{'-+O׺O7gO6gݵ Ã;}|SkO6֞<OV+OWϞllvy4,I5?anם}M`~vrN#@gn,g l\AוH  Wu>iř|C!!d =f~Vf1%>ѡ;&4qu B Dx 4IPqA,F0iKʼn%7{μ<ѐZ7jkM}dx^->KiReۉ d}Ѣk[|/q.@9nNH[?Ʃ9L}71B;xWYtw-yV$уuUd*ةNT=R"ͧc`>>UH{:|d<򡏣:PV  uj8N><ɽ(׭2~-N %P:O,D'?R <9k:"XTۧWtO)QÁG:~WIgkj++QAL <S'O_ڎD6NZU2xZ)Kc}Aۥ:ukݔ$̭:%dώNg ҝE%m1JK#Q0vB)s @J,Pya.N{UtwRߪd5+4Jm{xZP}o HI;C3Jr#烪Xvf뚞*Q7)khyF5эrm4DH #">DiZZ{TjlAflYKX$ʦ| PP<=HǑǿ501o?.]=9ކ S5_CBES PҒJP/TZgʔ0Do]W#m? $lH^PYw&uh:V=&kw%}:D !{+(Q/JӇH[hFFGhA5!ӻ1[ |L4%~ l7/(PAzԈrCi5^D!6F)D:Őa g,$(_,X˂x,%#`Nf,By PI1:CA8;?LAqlhՁ =߷ZES^ A p%g|h33?H\.讬ϗnag%;aSUxo|v~`[Vh+$̮Dhle%YxTLDw=rFQ;Jeu. yc xפ~hJX] ,!TX3)pz60rr JO ݴ?eVNdw(N^QEÙҦj1Y&0Ab,Baűv21).mc"*B2cۊC ͒cؒ8urM{4r8̏TUN[ H'f>J(Oi%VVr11)TK,>|@}e|IYȟXB{msx_bz 3U\F+e.:TPq3e1Q?'J^eLaU;FEf^xAB6BU4alM2Xǖ90i+fװÉq\ȶs+$4C$7I*2Dҗ2ZҚ9+O%zM̷u0|J9]prS+0g1si Jr9mLZK{vr8]Q5lWӎETā^csy2jo}Ll5:&r)*z *'rS\Ht د ؏O$L1WQ wh璖2qƐ)2 sŁ-$C[-Uw,uImKݧpXkIwnZ4<| a mb NgqmB~t@jw$D-my7ulL*YʖM$r7ɿpǮwvfuy@M1 ~2J ` ԙѤmxGw<ێQ-T@!t@0`2fF'`JO" ղQ֑XBZ\H>Ҥ2ۦXƐ? "3:{_PrGpI9b@3\jal#fQsZh0&P.(OiZHvJG":yWm䏺õ܎7-3[Zhԣ0ƆGYK oRrjG,Uom $uB‘v,A/WqX rydv_A#4L+QbXjMG[+]e)6ʵr6`-!q$>B@nR' d¹? c{@J܀&'sp[f]5="եG& 9=3ShR[A."N\vO\L!T[-Z.K&:c[$`^H1Xkv+da!+;gI1 [pXh-Cs H^WOQ4LKm4I=,MU`sL'&C PbhzxYb1PmbnӕbQ^9#m=X321NbalIe͒mKrS- 1Je3`(*3͢hfJh|:Xd̀)&!9@vH=ݡuWp6 5D֦Q3k)(KN0imvKټ6' f<)}z=&c q:aНw`) )ŊdVԻsVT6`' k|KG!K蜶jA!7>@M/Kܴ' cFe}?W4\!LV x &dD;OP㪗9*pN:1h4zcs H\抳SÛ ~(ckyE yh0unl450kmK.\2⏨oFhy /ԈCQtؗ9GnfܤVCc"+ h)Jll$r|\Sla nkPOZ=G@Y6X7de@ q;ꗶ~`*n[;*#++iVŀ8cf E>qtz73q$5[a2Wp4\^HQGt)嶵׍4s'M&tI4-ZYTv'i M=vb^7;/C"$"Gz-wAGA)/6Ds|bp 8@.n$hr^,vGñ2 /]F~[+Qisk=yτXr!}hb^H1 0L#zA lFԁ?0Ʀv)Qb{U6|-pƎ4WV|V48lxl0Yg}Y,9+‹ҋy",U#5;KշVl aXb_O}l\a0<*V?ꪬvxp(_P"…vhld<]F&Ll\qo̮S4;\B&v׉,,Dy;[.(`rPҧ(DUw5PWD{(W13]:kvigOqP-A T_>-7TfY=KvJUO^PJ.JɁ,Kr`y~_}b,4wЊ"8^h \z$DأK^_"3v1`~BScWY )(>7u$-a M؋Yn0O~Lb S2]B6x)uhp" -RCflGCI1J;ÔCx+sS ުR͢3 yݙMDω떸ile(EcFSq,' F4Vt7{jB{ Ԣ.XY1DB^('XT*lN&jdAwF7.h9(K+(h)CѩJ4j+HEV*鸪+L?Tnꇫ|/fgrYp( c5i-x*|n_ lh죅]˫aЅYEG\$$8sʥWZZ" 4b,(jF{CR@$#nKmdHm[‹rEJbt Z'Ӓ=OQ >qe,pQhЎ0} קyrB?;Fs1-|id!\vh7cyߵd'ŧ "Xz(EbrȦ Xnm^HD uk[iF)c MUC+y?fT:AHXm^w^gS%bή>E!F7L7]4Q.`qxGֱQzzUYHrvL@*_ň P*V|)YNKL\`Ema0UjT%Z\RUG8H]VC WkIk!9܍"`J'$쀓`xsYT[lӷڛq_0N= Lf=!!PA+dcQ kmn\b7ћJimv'rGt0Q bD)5<㓗o^W[Oha& sC_CA)fP:>tj76P `E<I$fnexEbī=J?(`x1mdlF6+BƇ%4'g7=HU%z Z3D$\|L:cߜ}ٰOUyeUޮ9oNg,iu2uAYy?6G>GX8vo!o Ry-MZyKerBd$  ?)p8@K0nR:"HT=![tO <:ʇRb$bvǽg]5>;xu`xSOQkʑ)y=ȥm yy-ck,=6cP—_Ֆ|nQRUʘ.X(e=kv;=Б0HBgceᶯ;Ekp c3 !HC\Glv;7O*ٷJ?DB}|B;S4W{ [͎vM"ֵ1(*85(eD#1"=reŷr^AB!@^n} r >(,*Ǧă]mt'T1O(m!QnO-^EڋK4믰D͇^*ĉ~,! ThkBťUzQ! x JͨHk.ȫ˫1L-Gaq|&M%޾o3~mDEXtL]&n@UCbFјZIh"WkW(2qlxNYBX9=g)ilz|H6lw5"0e4Ma`XqlM]I?|ؚS#s`bgpzp04 -kkIi_r%,~rѴWW$ʭqʭor\ g"Uċ F 岕-,4 Œ²k_.qol,nG +|Azl&|vPU/kVWkUzO'q"cM gJ'-BHx42CBl+u<5esS+%X| ^Z2EDB(2ǃ$~y1X~2k$ N*D$!][Q3HH`,r4Y0Kyy$-ph>I,@J *D+!M'c8RX\P I #o9N>Tk.ˮ‘SODS ĕ\ fHBp|ʹ6.߯^wH-~uC'Piyl8 rso >fm #[r2W]˺}l6vvZq*mZ~V=V@-A)/ͨlQ:0<d}#~nno1XjtVnr3CC>5=5+dr^^yj%00CF^`L u&w'\bQUKQ%L Bݵ"_֏"k3 7{v9Q07ad>cQ Ύ$m`(;DP1!#;""ee(dFMҀsds:!Lo;XalDx?  4QגάEЃ@&eqhUoҝf[$he!yB0$'QʬԡE!aITh^Ps H6mA -c,dUBMd?@OcIoKt^7Zu~Wm|'zA_UCu[>쥪llݡ'_lŷyh,x8dPGNk`(8&~pՄN &)^s4 ^6"3S-Scʍ!p(},sZ])ͱq;thy*D~vωͣKE<]UM\A8$FТ;:oV];Ɩ + Ňn2n[FNCpa1 .P b7A5De"h$c'v cLyĭXp݌ VM픐)"kC<'R=pPC|- לi>mΉMz#s k-`| (A:4á 6զ(,2-2; p|I7u(g Q (Z^FG _rUS`jn4AhPtBUlƬ;P/k/XEf~|NL q"dtx*gKrYR[w?!Q4~/yl98/0 ?ϲRjm Nxsֻ9+e\>,I.qZ~&JJjtF}M%T сPCCn1W9-S[*eJ yWyxvNv;+MBޑ Hн[;Ln[ cǒפd=vOqnaAUOzv1Xr3x cr8Zaco1l`øK1abPc}vM6!,V-(c8 6h G>Z0LX) %D78 M8'()rI7rSס9r8S  m N\V]>Zݛ\"%׎ j;L4J ~U4V2k4"ȤMw-dT:YPuN|N:N< չPOGĦh3@EDovrQ RwnhNu,ђtn ho9ka&xĒ9pn2N>VqHG.r$*pt#uܮ+@݋ۭ nlp؛_G{0͒1p[Md7Nj[K.j1pI8 OwZ[,㻗V1E/lafOM=yO?Deyw*X)Ÿ)a@QD(Q_8yK<㛇RR~5{zNzXVzvӓ\g=b^:IxI+IS_mi_M>{ѻäӞ⶧[qOqI/pݣ3tSwsރVRp| *dgLC4t`Gw]|F@Ee>kJFq3f֮j#~]g&Ŏ߼VuIVYSL,MLF;PU#e*[M~..Fa wwPQb ~!xw\~$߳_MgbFOǩS ]X:{ogX,b?PUD%.g2EUٟuYC?,ʕ"ușGPDkɓzA o)}iH=|81&- ZRl,̧=**ѨئE4X0E_Ϫ'Կ4 F;Iߩ*N/SU L&6`ػͼh>~|9xQRʗ^PNNLѐ49#Șd>$vZ N:#a K&h@{4CsDqoʜP\#ZG#LqlLv=1dJ Z(jL5ty#xhO}S!s𺾏q&DN K; 9|S?^ݾ%nv#t5'1fJ&Ě^%67be{{ jCߊV1Fq(0daѴūm:@yG?ѳum!yֲ {Υt*O+ڊox|#JR"tWu1K>n[ٌ\xzCZNVvhęXLBRSLg 21mο?s?s?s?s?s'~Y.X