#!/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=b2537cda3951f29021e9adb5c5997d46 # 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 Stc۷wſ{wo߼ywp;G"~ic'=}{ W7_$LAgf 7Zxa˺hh"莻M1'w@f.Kcμa9Zn,q{ɂ ,CכyfvيGK/IVQx,{/3' \'-yrDh1SA-fL.$6`$McAxo/f>C02RޒG QFcpE%NAbCۃ'bK;gqNy:0Q[rf#^rl`:/%P؆F1n82l(d&3Ggݱr<2z^Czqq>}}l8NFcluME]5ӿ\ud13..pbf`7m p4˜ɨM Od3v{{j 5xfLh p;;fnoA׸+}8a`P+}c@qT<ޛPy x谣-Mat~{Ԟ Oo:/q 9=5'd:h'1L"~wҥ 4zpˉ1?u.LGC0>_#`C}C)K")L\oR+!qW^P?c|6Lf8`)m 0Ã:+3qgۿ2y94$z%IM/p4eD*l`͛Ms4tvn9oq91UlC8``]v'?I b,)ȕ)ޟlfk5.٩v)wl'qYN PuH0YNĪ< t M1vok߽߻?)?B'w?doTpX< w#1r9'sh;o:=g5G CAA]Ȱl~LOv[.`wqRh }r~}aNjľ 8/ PG]g,{k5k|=w4pK][. m[blZ ɏfS7[wg;PykvVfnzٸ =Dq8u:=FC>b (`Yч Q;'|娕:5L hk$ z]sR35ngS4IƯ8zC :_B0kQ5Jr+Ig/"/v-eTp[!lܼD [+ozvng!'^;1[-_r/x,d9)w@3 P%A3nϧd;7``4iKJY7kط!I s]r.m-_8 @b{>#5\u+<PYI, N@D;yS4w 9׌iEGHzׁ@$]i[ FLos- F1m0Ʈ.BA a%$ C"+L)vJr XPAm+ٵek弖cw2fC0.*AЪqKخsAcIl*ppf RȦ)|oR7hص6v"GI"!;1Bڭ"Z7\{c;љ/άY 69&UߝQu(UKrK=|{vqgq.: US@MM5.׼b߿=5&Oy, ٳG +˴rr Fb̧8\xGӯԆQMy4GU#M!fEl&ZI[2]h Ul l3dvvlC;duga~@jQ{K!ũGn$ 1R͏)eJyi.-Xr FT3PV1w-gR1;l0Sq+ZP&Jg`!AxԸpS^ M,"{^s$JPcz=iQ{ 6>,9XE'|i3=κDY ėόl'\xS0uo@J-DVn9ܨ+HJ]ɚ.%@*'aAZʈ#]ԅ[YkF.=y(L.e}kV|2`uN\;ҠHKZn4dxvh bD6pSE`b[}m6g ؘoEп轖L|ԞIi,j~o?l5!]ֻ2_MB%y*玀~Q #8$bAza  GXGP k=eHCQor}SXb>-x~ȏ zN{i{@G=e‚ &VVI[Gy< BՈ:Ic֦EKX蹨o$ PmG((HGaU 4 prfŕꄙʤl{w3 !_^s o01RC=߯>qE. (΂-9\Tՙ0\4K [^gC,yOR]v}a@," \GQ~䝭 }2sZVf f#3&d,ۡ6 Db^W-\H-=ے;wK;V7r+GH 9XK`(r γ[@?y;>=EѥjG#D@}\htS" ۻ$[yiv,Nvߖ$*$ lۓ..!.I0b1HvҥʛH}/E0 1R@(!>ZV@.Z)A!9Ml{hueETt~U|9豬i g3+jYPfb0%r"rڂQHBY-=jK f ۟un[Phox !XwXWFcyB;@<|䘓k+8>ɔJ6J.ܚ[ق~Mxzל+BGU4$vt+P5^Gj6|SsKKJ8]P3y[ј&1/s.Ƥ%%Z8)O 6r*jx}!yKK@JT͓ 5$sf^ {$WlU%\] F<z:!xgϠ$6%CM6OW , eK$Tn"84j{"s7~ ìA@ڔ7ba9;FjԯW2ۖ%pG=3;x |t@xi'? z%13}4pbOʶV+`}Ŝ2;Mr.D\<ƻ <[ l_>Qɿ}A8 FyN|$<]oGܑL>?=~ab߅|9+PYL^~ o>7(9Hhc&v?Egۆjd{Ǧ X̣Hz:F7s"O]y&.ǦɮI%6M}̋!98 {5=6xx2>O蠥sD9tAhk#K¡ UD`c,Uj.6M.VW`boDG1e݅takVE? I K:t{F)D~n[UaI:4, zxM@F?6[:J.[5鄒]Bv3M@eN։z-T7 K4ϬtoSͤ{!ӷ}Wc{UK Dg+0iD81Y >\rd<$UYmC:ف6xyX=;u:'?6YÍ#b=uڵRV0;w{ QH@a>15N"P1ٸ~bY΅`=I@7 ~j 5#1}.PfpHhƽqlW&}b'&c oWl#JD7ẃmpBL#x|V豈Yi,|6+s\AXZ]XZw]E$}wjñ;bwGQ~ϖqS*s_ @A0P|[tqdty2,G7.4bj|K2č7Ǎ@$C1W3xkIZi$֓ZpծM Ȕ&P[#nDۜgD@1uS__ Jkngy S5-'4K׿L o_8Cg?g1D#,>`+AR"X^P3V(#sg'i\:8éwIG -]xH%C? `x%N;p;~]:{ 4&˺>a @`3iF3ck v wWzjӑA/JGLxjC~W;}ID~ac]!eZoF6$50\t1978b?lKö/osu]6^c6kRX?|vY  y\*Fl= !lSG@x*Cv%f`H)NFvӆc;s+ʒ6HK6b…7{-fM@ |yAT zy%,+X:v[#ĺsMm[a=CUCr칗ʐ66Kig?*o% ˹؞ ͑*jW@ΈPe$a5ed_'\qc>=OUt 4rn`42)K_bؿN|C*.&5-BhD@>0 pTu٦Ts7$XP)@*`M'Ѱg!t$ ?D;׾n&[20c\ ! e%۴x P飌nhO] u/^ǹOJK}:s3+0gZ1W4\Wq&96Vʚ#]7fWþ^{SjR*hg2*L&5$/Y,eUt_K|1 =) M4RfxCf/=H2i\AjBM1(ܡK0y1v^±MFRNalR|U@c_=~xh]u2mƏS Ezt,HE6.;A@1ZF-m[nőeDZ}ȬRnx sWuiEr /Z_vǁkbP"G膃_h)}y~dlwD>A:>ZءZ3"@ *g~NLT;5i\̧tt'YKb.09>ZnYbMmS,cȂz:K q Px0.9R K9A fYC-n<[G^S!h-P.O[!KNx *%Æqf79"ò 7u[[ِHKlm[a5GO Y m$eW:%ۏr%=~TPd*ʅ?aI$h~_7yGQTuF\gK!u$>Dþ^AQg.b޹1ގN<:Bg`6![2io4>Uzj:Y#hB t6V4Mn?:.K63z= bl«/R V8i'dclfh3]lTӈ .Kehd 1 6 pp{:þv`[$u x㪇B&/f9xyw=3v2V^j<^p0챌9B2Ab[N'&1a1gEhQM"YahCK :f+[R,ia 0pĴMjg7rc@zMn0N,Ձ᪐E-U t6oF!k97b85rN'ILf),| ŗH E? N_q-u4?(xR;8XKx֤-|(+Lq"3? *OgtӞ"oXc/fl^h{! 3Ř"q#d0H`l %U{Dp}w2ʅͥ/PJO0(=*9 ska5P[Dv&n@w }s:=).T&l&*&AvI nqbR㏻67zQGr)׍&e¨(vKjN&='>?av*q(^_+:JnJ2u1k][2sWCGA  i_9=@;NN*ȣ Ň1O {~7gD͐HKM"1Eib^ nSh\\ysɝ֎y6a &aTԆ1XhWJ٣}'c> ̀) Fހ>뫰SUr«Wu嵥/+ a2䞅Ur/}"g"F8Rդ\&"}ʥԹn¸ʔC#.Rưdhn1zWuڇ'.bnoRd0l>-3r̥2~P[y1`h~f:5PyZ1'1BP8tMDxc´JD=|4or JԱwccy3>ڏ(WeՏ亿V)mWֲϚ?n|_Cȡ|Fۼ?{ѧ|> v\^-7.3ʷ0;HSg_ ؿ~/Okkja3 `T)BlEwzޠ#gwd^O[it߻F07bl>SGz94!2J  ǧ)BعWY,/K*kItk9đ{cSKFTJD]b4";;_La#wU>[JCy򡳊t[NxAսEQAsϥ؂bпVcu8잴[@ |Iei-$05ؗbB\%{K9Wn@,P9 Pu# U,Hn "d\h#1C l2k.3\y]MA 2u4$v0,l3/wDP%9Mof 3Y1<wTîp+9`aqn;%j )GͱueJ)p.XF L5e"3sS#'*>ds]K7Đ8SκvoCS'nMp *5b\fuĻ?徃!"d+Jݎu|#ߜ4Zw $lJ6ɠB? fEK?# h p_Нt1͆Ea4>@>h1i!?Zr./Ќx2Kk,ۙQ;]K̶hhJ bLϸ0q!ƣ6KMEpI!ਰ),4Ekj8*T2`?ಿK;uO3,{u`RTٛXf,/7\mo~hdgڝF^+>4BaǧDOmEA_+iWVLYl-N!l8(^̆pTwlEY1- &bMjW<$p|EP2͢  7v= /7kZAvS'hJP;-(f,x̢Df.Sdh~ZLqG5 ɔʸIĐ+im(֋k l9`wj}#{Ө-CL^*yDhIّ蝧?y7L-KzJ^#l2/p%P, :D 漑]1cZE)1HV ! ,p'y+RSkW *)^5LFi}/@ǭ~c VW8ճۓF Q`՝|x;YDZ* $0}JbP")1 ~urڍֻf # 6iyxӀ6molljNw$->T'5[gҖ l%Gi59~ZRE FU9l 75Z)T$Pմoh[8˞,jO9"pB}&[MIepJmn!?MD^HX?tFk oר[@KhvkNTR [G{$)r!]m>S9[𫔶6hxوEV"zFg:g}J1o~ 畝gݮmT6olnG8LBB XyD'!8!` >c@㺷{z?b1 `Z!VZD!aZE3a$3zt\ŀ y!CE`xk޵׃1]Q%*֊DK wP huf@x=\5\~C_w[xv^&fg۞ȝN!X%"b#xcἼYyfy=?^VAwʊ[fN>xxw/w@/|YeeЅ.V'xlH`\ҰzI:''&lu1hn,Q0Td?)OL9A-5q:@WA* uJܳSآU}B; iߧ5;;|mnTo _<={*AVFGaA jahw-Sh5B0.Jp#;9h]NӃFd Ao\6vwcpQ;FldCk; Tx'SiNk(=NСJ2=CSKcc , tz :6M}t;[[/7Uznd{.hN;A.369< 7s?yl:&h_P/ף= _I#GPAZpI\2n~"G8do"c2MSQeZ  ;sFbps'}ft4k(GdpBmcI,s"Un ߢ[?*ەJckO~ bڪu Z#guwAӦ 7H Ԍe-OӔDBo?^jiŽN{y_}-ő.wԀfJ0Rс#XO8fŊwqrn]0^P7f3Mg˫qW)LaGU`Χ5ݨc;ye܍:#4F&l'tNvzd*w'))~M bv/(NnN!#Mny/鰪VcycO^1A/ ~xVFBJ 7'`Y 1]YF:0^6BMbrIg*tdoP^eX4P/t(RIu%}E >F3Б ?1 8"`WqJ ""p'pbԸ?!d[pceCr[E4l3'i6L ZЮ.5xU^-/C^WHdGT!v0BϿiBp61OA3> @?z ǚ7~ϝY,FT bbģFըv}& xPWnOP>yݒ}?|;~ƿ^/:\?k Ͽk<]݉AH'mpp#&J.b6E4KhMWWhv4=7$Q05F^AXH0z{sJ ;=Pd6UTtA3ô_ҀCa,NCMɪzb&6]c@s(/|-=HqQ8^ `F(a Fa-K ?t> u jL%&QE]a3b9;B\NJ>RtlFƁ5Eе:^Dp'\Az**D,)V%o_isM!4!]l&9[jWb) }|05rc`JCB/!]oRXǭAx9>O6`mbH͋R* l^Cv< ra[){T̤x62 vtOj#?w\b-]L >ȃgaM pյ^oMxϴDŽgSg3L`;Ӷփ6@BcERb7YrPnv5>V';o%E[],Vhq2l,Mq ACķ6%u<>@vE,kl1R3b n8?I3>hdr{!p戼y|Lnּ 8+[ э&TulH`ߔAӯa0_j%ѽ%9Rbb#ڋ1)ǿ*24jM1aPfn6 ~v?^nboc#Hj}vjPdG'CxJA 4E.uǤ UVzI eqEzjvڌ= tfx*-Eg}"VTf]b@[{1F9!lrHU$wMErnDʲ[ w%2F/ Ϣdv+)ک/-ѕQiyWp%VERQ܈_&7@=On?S>Wd!Wm:\/67*;͊צlksQD n]E;hZS4rPk*`}-^QXgH-v|G*:p?lO|olٷhLowl<ڎmm?)?;ȷc!Ift <^uͼ=Ғ*&TgNX|._LYL. E5f]t u>]H"JlpZY'/Ƌܬ|앚w6S:'R)?pfC^*JLvnHbz+Ҵ%MzE9?ŘK7uOs/`-+'y"p7MhA*et+>I #S!mtPNh) F[= S]sV^Ȏ:oX{?1Keڧև* BO %4=ՈF L~Vu> p~c8x7VcV bϝPQ3=`0PIHP8&h tdVE~"hanPµG.%4K! 1.Y>G 7'F2MiE.ˣ9A+Xz}j hCdvك`/V@6E;V!PSٴfDD@4ij(H5!^Ў׶r~uVE0[|IKE b;~X=4 8v Sq` 812>GUѪ`asOނnX 4@5IHn)բA(QFxDG6vw ET.΅ Qs_ks/k%3&mM{R :vc<ӟp {.r>1=4{q"JDX G8ď!k(&Ը-܈P"ENLu'$zt{b>Lbex= OIcxa1&Nd}cY$5;/MW*Ϸ7W^"I\ :?ґ18ݯ]T|Fԏ" m*$4 j> ˲餽?ATm*'cQ-)iLcHű~}Np< 7eZzC׏x6nؐ,|Uo4GKVu>s G a'xtxW:H,8"]кi82`"2A5S/a4 @{L8bA"$j6A.yK` l~{l+"sNp#2h;6 &a^"Bpxe&Axk4Vz3|8eJ6eSSD'ׂ҄FmeO&qKI"0&Л KP E+MfsP3d1Y:(p<#-9 <DVQavj9~t-#ʤW1D ÿSx+W8yΓ13&Y>pDy1s>cZu{LNI0j>O !G1d:w Ag P %4;L<> k'z8~{VxQS뭮uABW}^J]d8/0:: ԅ@1̸q|I.,28fw`a&v74NJIi_|6$P'=]v*f]MXʝxJ;i(~\.&(O9^̽H7pRqH qQJ#l/Jt4Lr@uє幈6v]YqdʨJ$7b'摱܏^"xI+t|X؛~fq?r#OmHeM. cʾzѳFIMIxs.1~Gtckj\&: ^W8a:Л-03W69<X9+2E˃[w=K3}W &&0~܄H($ ? ЪoL2܉6#zo@,(XlR ʍS#.@.46  s+PƣujZP Ԡ'>R{HKOhvg&X+W# i.Z: &lOS,Xeer :0\ R}@v=HQRJ91߷Ab Y3!1 G)Vo u5^$<1q -S^x "7޿.5,?{r+3i*Aȅc2>)hY C}pa瞘D *Q;!mB>'q+8[-_Q1lتO'Gv7&C3tA%Euu2"247'$!>dVpV= 4%^i ٤VȔ(h"],I'Ik1*xzP#K fy ("£.:ʒi$b-ov nm {Zky$Gv`CJVQc,'$;+/܌!d!aXq~c07<y2, PyqkJٱ^V2 0=DzwLMp[FM$m(|xT}_3S_x7rrIRk#(5[h8m?N! 9ݗ՚"3me+Kܚjn=D@C,3X4zר] mew8ϙ5CnoX%9mfZ,MH$WPNmbIn'08"i G$( l*6Xs3v(F*,~RYD~.7-IӐ hb%!udjEo'hM"@"{AI/0x/^? d l{pIqR3wZBb?nn0 Y:gBv,u:x7?Q,5H0f)9Rt+Ѭ'4qwsy r Y2ךlS-,V,V=9Ij6y}UrB}J\6@z0 #`rZF0G4~`3GG߮KN#oLA9 gn Sˢ5`©/z4( ?FtrP9:.B,^q41>Uwu[ae17R?9T!֎^ѳBǾwiwMn2p8YЏIфyJ !SLԓy u A?c4;4ٿ<$[Vnԣ[!1ʵaq1R4uK<m9].x&nNP!Z&ŵcȭ恼gR =J&sQiVR8ԌQbR&z+_:ʠ(`PUmn~hNmO,\ʍZ:ЭM;Q+Z0EzI=·GwKiZn'p#w&Ʀ:Kc1ftG_Lx*p~i s4ZdʧJeS2%F._)_z{E]zn=rzHxE@f8aq2K hN32'W3^s]c@: tZ4|%~ ny#8X"#vMBoek*Y3Ef N%0{HB8d-`hػFI8f=up/Ƴ-${JaG[K^~tOTQX}^ףGlz5 ^4hWr2([:cQF1+孭5uݩO?iEW=¢ek4DĒ`\dHZ|o/h@P4•Ln`Ž/2A8)*kd-鳗9vE\a[sN;\q|r8dGxFZ:BՖRn&FdopCHV*)qyb>%%7(RX-|uk"tP3V)b;n6DqYn 3^\>54ӳo>e2OO8i =%T7HS0&bQӴ};ͻ^pF5pIݬC,n' -w!jԈ\o7,WRqR--]$ԽѴ,lEH({Ś,lϦ$?I Iࣧ:&TI`|Y\,Kk`8A^[Pt1cF[5~zu{A2Y Ƚί։ J\hnFiW{?^+\i'IVʵ(?//һ_<-ut09[3COy1Nt~YQFSmuiVkO[JNg1= /Sp\q[`Rx}(LH#z)߰.MVD>6i*_&ΖĞ"wC ]Qg2XKsq0Oח<-TC]!B&p$׿tmpf3}Cz%IoDFVCK|A7!g5UO>J> >jL 4gNuLiK 21SF.){I)Fw= 4rB'%Ե4USsT'y@uDJ"^|AZoMdJOtZLRt̯F>FJ+i8!TiG*ŭ< β^)b¢pb奕nm|$WQִ-^Y"nMe>WQ9cqήDnRɭJTy586 ?@{Wr(Ξ oL-WyN:"c.UzjU@N}.ai5(2?qAHlcjcjcOׇٖ?. 3Aޫ;,ٍF&ioU\Ɛ%>縁 ie0)waTE7Ӊm7[A Et $M!pR }vjgsv}6ݽL6*A7z__}֟蓣) le * ކmpN[%u,R)QԒrm'0FGt=+H^yHИ11"|]k5pQ | T@p6۪}ry_m5|BF]:ovr|ޞApR"K dYa^LgA$at B1B'${?u.3x m]50hF6ԡᷭt\mUˇ*cl@|B@SɺoˆaCG@~gϟKEiꟗEʯJUTt]T`-%]V o&߷)Kq~SScPgu@FbGs`iL8%*9&(`UM;[tmpޜx:3 gU9$ܝHpRn{[Fbfc'MP]]FhR4s :T05ߴyÆV;۴4fV4H `o!/j\M0j8yV?ۦCRrÀF\>l-j>F'mMׅS3?HYKfɄ4\T3ൻC?Y)#~C7 mؔN~U2*o7#oۑѓ")`uS#.eM;#R_ia ԷH^)5qkP9t(ZvN@I#l݈1o%qJ p[ˎ3 _sD]Z't )~Mx -:B(,h Rmn>)qcyBzKv0 .ZʁBsg]X5+,F`$x)5 SHp5͐BhAˆR;2RK .hM mGo^EVr'bѴ (2uTIeZ{@u(MؤLCu.vg[b5=hبNSx-z "c*VTORH80.@//>Ŋ$uLe2#T`gkUXO:WH?n>|Qjsaɢlv8ӄHs`|3 ݓW l0]5y+/HZ"Vu,ݘs9 ;uEfF6[ɰٴ0ѭR $Bnolnns: :f[C A_w.>Wa3ÃHRhLvtC^ƶRy%SVsӏ؞usxKx1O-hS&U9Pޡ%z9 &nTWWn@(\?hM' N A^7reon-#K`m~hmx kf~iΫn $;'ܰfg4 %hȑH8)r6E1O4)\Se1ͭm Y8{MʓLҏ2uAM>im;Sm(-$H11M+;&GbnF5KDaRm! u%:c`$y v$bk(3l nMS#_y>y#i1lyw Z06!)>͆O~5 ϶Q(O$)Z7BGVX].<옊6Xa(<Q! x Jǭ0I;,.W?OW `Hg1m: ywZ0r6q "oQx~mD儢S,#DӤU!ӒLBEc*PјA26pPe.I"ɓ;Kȥ%ǩURà64)XӾzh5#,!\o抮\rpV4G~_/S]Ɏ;TE׭H1$g,{I $+O.Ztfad\zVsYޥav>-ِv1Bm3*T7h'HItt34ECs̛Uk1k!R#=oVZ2+ `B~FSOTSz<4-˚l Jk1I1v%1XS&swYϵWӛ7A cEpȸuu{5YӰ}~=(}*3k,}-QK:Er$`rK+TDqMysgK_K:$]_WU#Ȉ!*9ClOuN(vI b ~8ASrBe1`LD] @LGZ(2!zN|68ZO @&tx)<]hJH>3ŧ\Isڸ/)fߨSUQ}LW>e+-7*E ZEϐiUcS^g3sa|Svhz-;l$2ARuy*헷__(om|<4lLHd;Rڮ@ڈBjcCDQj[/] ͉MgID1 ,e_%=[]f!V o qGCm)n6|ִ 5 Uw`]CilI\;>76 1"1 PMcۦM(m# $_>a +Gy4~}'?Yߡ] {4YA^ %'FD1,"ٝ Yt&BhUpfI.&{6%7{3!*T~FhH]JzDq1)7{ 4ۛʌDCbϣr;H+tM߅'h A`kТr_cΆj)0DpJe6xy!%])cvd'$BP= OA:jFj,xdhJ E#aA["ǖ W@@:LfP.q~hOfS/pivw8[c O6Ha$ڂE]y0BÇ"ˁߓplAyIKbl2r]EAM`.w8 I#+V|$Ġx0z8L ʚr$t]b!+yEHdQ_) C^0!0󛨽xAZ(Al<$Ol:#[t: ,Y1Tǣ6A84<wLGaSu ]O?uEQ)Yl-{3oD"*f^|QL ğo9m58tׇ5b%) >[#]Pdn`  'rJ ˋ@zh͓DAd@,-6iG"L2T5}Ev4@ܭKZL;cNNS.KpxE3`jeВZ8ҡ_npj94.=?&ZdcA$Z,ȣ@qcD>8/b%L?ȦK6ST߿3+?hG ]hPctHPߏ{k,2i{f*iØHxL#inKet;x aIJVa(~?|Ch|,%aJbk@ N NRVŽ)mЌL8>70}2#3vB6&Qʐ*_t,!Jf |}mY4FQL%s^HSPpSts)ϭ ;!3VS [kTs@ Xi#beŕA({2St0u@ښH%06McѺ <XTD( 5Ai)7}֤_H;kJuB3mu7gɃ'T'{,;;t>nBvo`rW_ pFtuئGgU#KF4`ކgYx.HЊ@>q=t0ET !BSfrx;DcpDwS ҳl~ƍ : 7%:|QӘt,[ .4p!/Y 9͈zBpr!ppXGW# UFIFzs»0"LKï'ΡH2#Ɇ+3Ec5]0эw񥴖 'ŜQKhi\-d.L[צ^q,`SX(QPU3?m9:U#udV Z",+yդowNv_dKuZǠl(bUtUY?PѨ{f*R4^hWX>UřQN&$3r2aA\8ݎ|,҈qcTLy42 U4ϤZ0,FD A~8/ё|*❾ُJva)zV{RD1~fqY&771ޢ6E #_8+kf2 ^;f$́$Ջ?#&5Rf{BRߴLM5EZ>7^o/_~pR? j??J/I5UJ~~SJ>4KrM*9F6,N5mmԴbIšO~^}|yVӳhM[h5j5mGiZnنv0^Sur+c Jhgkȵ\j |x`g|F޻"+N-͆&i|M};v'i@_wcG_zqج5ۍZ`0k{b6Dpr%ގ:9@Fީ}_[~ 8ݎHi䠃&QO韂~:MqV7pf L awDCZ5KH eLT|)kXa'=NPox bf3niag2g+`=ZrU n66pQJf0Ա4XѽZ;mx+fΰ+ >~bZبl|)e/4aYqsXj!VX:Hi:[_6+;IßkԿ9cv8xWsj5v#_gߊct?4 -M{FĞ4%EZzˣaWJy.dzDk{3tz9ب{Ӫ:6n k78Hjb-Sv,3h1v*A-)J'E4E uϝΔZ 6Z aٵo#b|8 lMf3`F.K-k<8+8 ɢN^ls9H7_Xw`YTB8S2~zcHώ?ɶXè~)@k"T-=AM59 a@h}:%hޱ A*3KA K [ )k~\ߦ[?)3{<`A-d 44[6yC ';auXR$-~.X/@Pݖ4qu~7Y/I}*+n)[%Kx x'{>4)+@+-%TW@O o2a8. tn]oSY:v'(m4Ka=^6ةRx4@c]z3h| `1R#3oY{;|b -?=;-@z+ϟ'!O|7Û\"}r5RTeu4b7D)Q-` (1a7 5hc<6U7]̡ 'lJ^7q#q RjaK%|DDdLEn=rfl, ń2mQP)+Ғ 'FmJr2@4C2B.'4:Cw#K3:/Nwqв4LA󁀒\(bS]ػcl2 *# K)bڌQCm\R=ݑ|$I} -TP N5덺z^6TCmG=9 Zf䘝qOZm(eچkzA5~:m5mT6NPߪwvA51Huyu|ҁ2G$dFur[Y}P1vp҂r4kgp(TgӓvCaͶJtJkkѳzx+s]UNJʨfQ`o5@ha6jM cҀU[ Rjg ^z:ud`zjg6tt~srRGsfS'mvRvT9c P ~nEeu<0atU\a>94NZ` z[84bU6\c'a Wa_qa |oyf4j :-É:qU5T@ ] <-, *z*e&ft\_~c-a/Z`lj9v9vCb[g})$;s\=j|d/eZfHʾ DۏlM IPk=|T&jX}TCab[Z|=+$vmIl#jj&`+cZȓ|`硞0 oI}$Rz&pTkACDdQbRNN (lڶ۳SdG?Ϛ\gͦTv| KTgbSzXqSd2EFH f(+/>i{;!aj(%,&=)\=1yb=Q^Er&e@#AdcDmbs$͖P-Px8@er!UY$#ŝHw,O:Æ" -b0x ^woQM9ܢ2$84iZy6 ; L='?Ou!֖֜K:`B :؝,=A5.W)[Vy1 U'{uӝκg݇YtE;*N oHy<|>y<|>y<|>y<|>y<|>8mX