#!/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=e2df20445b03ed6a8af347d7cd8d2457 # 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 ^q}Fn@ \-Fy: 9<$n8 Z0/\}A&/,h0@+ug#vIVa{~hv{y`R/p%f$F J,1͒W-G=[ |7wN ˌbq}W#e%5v~K@F1аe3 Qgep&8bA%{2JC}Tk%-+ž1,f췚3x;c{YZ{LCwA&w!D95'vܡ5h XՏCãԡ׮L8+˜w=йsm(=</R,cULjWc\վ\:v꾍a7 𧪎 ܹN"ΫzT ?o&?[Çoj]jdvְŝ9=fB16Ca?C 2 iQuN,b9-^j|f01E3`'"VӜՕέf݄<&t}N(Ӣ*̍;) nX]1cɴd&zd̝#I"C$'V|޷_xRϔ̶ m%f0 p{i㨾o~`^u:'㺏RJAmm j?Kn4[ELFbcR"^jV>/h Mz!?%=Rc}h!PNF<6Srg.zdN+YbJWǥtN[֞@v@ hqjwL7u --ǹ7FjN_Nu ]4}{NB\.=lv0`5p;,^^b1s  tξgotsUku:n6S`ThjW1ܸI='aSs/vDEjuCJ9pURl'|ރebhJP I%B(++_pa kF? 7Yj9J1rcGXk%&1rf' C)J|-o$P0ӣp$#^Xk8Ay#u9EP͸;GnI#$nhzO VXwa.'\sN:>FWF~k:߄m^c鐃ǥ >|cFN/AG<r 9H[w PTD|X"8&ͼ5dȑ vk-˩ 6:"cw5 1(zS9Yq\0`:./ā@'"g fQHN-[TG{gޟ??s֘ĕvS%Ҥ 6G  !Gv~G?`N `x$Yd0|M4UWʤ\ןL'J=ΕaZ6k&9U[D^9tdݦRh8=#ДZ-R9*Bxth+d-jv:2Y-sL=ٝ"-.o9܋$0nRN"<FZ8\EH'ɣp5|蓾c}k8e٦E \Tj:Rq9 Mv!؃Vhp'XZYL.:(tf05bʟf&`ry< W "kоϛT(Cua4SC.ZޚűzfyKR>6Ji #Z ^Pnx.`.0ʢq}#-6ȉI3XVʐćv=k7J^dlgX<$ڍC&V$!: ~BCc/WiƹQ43sҹ!_ҍmVczt?ՍZ[Zx_bvZiZz,"W3؎ߎ xdK_;,cӆY^:4]Y.H:Ĉ3 R#Vak^y:ډ!1"ˌ_á 8v@p]띉{\L;tA;0T;Z}w^W% 5w}XHfI$0ֺѺg6āqTyI\L\-ܘ k6}xtGmCвmFbEGR#~9a=H C{Pl -CZ=MQb'^tY—bF[6PFNK[҃Ӭ&U UȳxTg ']qᜥ;?nN@m?Pt?tJ+CdӣNevD4ST 8X.%byp؆h{hVف0f< . +0#-P:o _ѵqЊ 3^X*zEU@ b OjfqYTF,"cEu LOU-!f?DxxSaԥaFإ}BA\תQ_3jHI匈uy͸r014n kZBHB8 q/j"H/[`Xށ_@TWIvJ vhI/7QpF_|U$end%n@z.̕嶸1lFx 0ܩ`pH% ȳalb0kb>; -B[sV/ /x`'9j6 vUbd@Yo76W|) B3$:iFA<\wQ1PcR;՝F% IJgDTH:×+H^RIRJjO*Z V5v6ʪȾm/{ArU\ ~UAP+IV jD7o .ޕ.){hwrp>gIT5j.#-2-;Eq2s =76< aaLIJ$`\&!vL>1Y c3__Q JwL*WV5XQ٨TN9i1S<,*u\y}Tu_7 +f\ a*i@&E8]Tf/@D#t 7V o 8~:?>\Tv*2SuiO+yDii.$[Ҫ`Bw9$jPŝcU3 f _p?y#`Qad҃hwe~ˁ1XރS}ߣV~e#~gKbeݷ,Bw~.X}&MʘF bMePφdm@ $z$w:ɹp⼁/DN}^>Fk *%Hitv1LĠxVvhPED%*ßy5qEP^["-\;s,/<8.ՅS/ZnTCƍjY%xJMN,:SMvur"ˇtԿq8]:U=Ws{ʿ?!p7nHD/)ئ 'MMHPBv6MEL*V]'qƔPUD)`32222e ףu7{Y? R]+83/RY4svU=;M8hK ؄Lƻxj ϒ ☤BVϱxldv4]A}RRidWI+^qF &U,ʊz?M`sd0%?yTԔ]s;cٰ#f_%啤hזNgQ-U EݾzKoo++k6YIQ#'Rkճ ^KRkpR \QPR}VK"TlaC^gwJq?IuuyёFz]k4,e:VaMPò\<*5^z"]厭>m5(dµ/JJ `*(| vm3®<?32\S0Qks%3uBNn^&EAǓ%zlpCk%rED&6IinU#u|vxXL' :I  hԮx+TҫN e HCQz|`?(v]ht=v͆z!D-&P1 > ]œ!utbt 5ЋTBE5/ϚnA,$I0`W,c2UDt@L ګ6[d{.ƖTZ xsYyfThw怉yqe `ap'805XYv6#:,TJp :Ұt DV$WᏬ 1J>$;E߭8eB1 /3H-G{ۛFaLCGSXڣ I2祂`'BMccL-SQ"؅"5:,ѵfEB$i GI<6N"Y,U-~s.Նw**Wb}- 5Yat;\MFՎ:em1 fԼĩY(G,v|`ݟkj? IG8L(!lh*0tӇ(V5q 7B.hEwCrFTt]t X~z '%L |̂Å@+43_Pr|VANdߍYq=n/x4H?4❥ϡ Ǻ1EkJ@q=,x0,,^8I5R& H,r*mK9q6M7q!My*ߊ޳`p``3~mqP*ϣp .I:r7'%3q4miBry-"*g`pBV%=F3(]6/QڶIr= Q ]#5CxϢއL-2)c:5r'w eDcxGG#!{ETC 3]BhFC _ Q2^DlѨ[zd[.g0Elxq6OPCwWhdL+4džy1^tg_4_,Wmt/=>99e!z1UGy`2g_M$yva$#JXDaHwqɅj,UȽ@pΙ0fc8k{p,4M"lAEq{2854Bb9ϩE# CʏrG>>lŅP_n >^UB,>PlFoР۸ ŒAa,'1Hz8# ,t@ CBX0 =hÁ ~ z4ƄHю\[' "@7Gm҈OP_b16kY2+ Њ,ӄyj#YI8R:N$PTiZ6or%4kcmR-G(>DFzTi8fQJ d4uH@ä&\cCϢ914Cv\a+ul<^Ⱦl{%7UGIX}J(L8]^%x- CGs`{XQ$!S[c_m=v34ӡ=Lmގ=!gEHaW 0hеYv6zl R}{%p顪JFAkJx#G]_5SʭTh3YIanf@~mSM?#9i"aO)!ڲQ=~US^xE/_+sʁ_u;6x֗pZ3SE}8i2{ҡS6hC*ž#(9*juyo=*57 .pЀCAIC!)pGڡK(^ܤ<>x=d5vw lL!Y@6"^tHO(H؋ȍut 'FM 'qLw} bE6Gx)2~7eRݤ]dbVmPfg=4x?54b4)xKrS{r~X#THS0'{)Eo Fj_$eJ[H *ų5d(xAĜP)w͝#`?/ذU9^mQ(ͨk.f-dC/ɍߴ9>*2?ɎL'' yt<)*||( # }=0X?!;">cd. $Zrt1V \d4I+f'ڜڀGt=SC<}$0Snd8b菽H^8$Z+t9l /cy!3{qlU{pZ*"N!;) f{ǎgl >=6nwnV< ֵ'6*By6#EB_$w6aE?pWq7ަl yRdȓߦ H%$ CE"o)Yy,5gmWm`%k`,q Oc×l@-N$CI5צQn(7X`)jB(u qݑ0*X ua%-bMSl!{莨h2ʚB3?>?mՀLh-,ئ=>ܦ4&n%cfeEGc'&grՔFKJj|m25.鹲ӑњ3k&(.͡cR#&1ox&B .eK4ptxԢ:Mb /u0dDŽ::_KuYMFiE)AOբ# \|;,DLCcUQfWZ[^Ę*/"ZsGC`);hTJE!'dQeBd@eVIAIlƁo `rTs&V*l|wṢVbJRCp{ Z\C}G4oEE;ƷZ"JqB&XR^-I\X܆-vj0MT]M<O.^6NsHIXv鎑{w/'jEi6S878Gn>ϠpM:=.~6@%pـaͿatL4_pDɓ{&r6C]"7ponmԷ8\G,4>/Ht| S^R~TAL{q4Y8ςqo=FpnLPD)$gyZ?żCک$xU?afˠ/ZFEnoOMٗW]OHIaAOO[ .z11bQ۾`/R#7Qgj6fUkw۰:Yq0-t'e9?]4X|k X7n͍{5>_U6 dDsc|_k5]l W=U$RoVjjc-Gbxss+7ޯ((e9g="T Ӟ$IW=/t*)a6f4A EΗcؒ@P=9S"rg~yp2˳~٫q!qVyt)/Ȃq qlшﻔS}6-ǢUq8qV 4Ifa5xSjml#i&x#e4mI6x.)NsLѽ`"e,j^/ፖ+FQl&"3}xY[j 9_bȥ))/1EߦW˕.b"8ÇAMΡZ =[\ jf~uXLRv_49ka< ~hKvK$JtdQ^;u :;- |A0,B5AU;:f10"pиK;!ڣnoˤPΫ^ d 7 '90Ps|H>#XLRj50tKɣX/RU?T%TjuA:k]Mlo~+sH N>,Hug9K82)ɲKE/I7 31Jj8 ^0dοLQ0 /qHy*Cھ6RܛxE;!јws P3G1ۚ!b}h]>tbݦx٫`A(!_K s%x+Em[?wR^8bd1AhEgA&DsuS ^ L4ƀ* M$(FSf X ZȒ c!e@źd =#n sBS_w픩_C=N f}{HvL4ـߡBƮʆTϦRb;f'u#sϝEpْgIƀ4b/ءPĆY tfUG/t)n)4lGV7҂s8Ә1a?-htMw3dVrD)줬>&k '@ )F:gjD,ۖŝ욌GBѠ0V*LeBL͂NqQ7Fq6YeXW@֨Oo)!:" ޥxs WSnld ]۸[ 0c5؊l޾1ܑ#0sq֩FC&~"!g}x5憸TpWހoQ iC{m\3ƫ5BdI;Ӝr.Pb\-:1̏;~}n+l{dDEna Ӆw8N=ꛚ YJѭޠ~~@6]\>_A1#BHԞx4 ÆP]v E¹ u$ o, > ڭ<:ӡ&)mc㌄wC8z~=(Uv.:R:Jà =Y 9ML:W=tM~Z+q!>Q0 rItdȚĸm!`L0oaDz|qwF6&Rݰr%0<,f$jn)N/a\ktce7pEih%tLYl$;0\s̐Ic|8N̶12GՉv!Eh_??<33Xq Wk՛t..4 (;^!hBuQj_" U#C#;);qNKx4\A y%!F73wtOS4d0W=",**IѾ:,8e2++if XrHWN:q֙y&N$9b}M,ܢQS 񼇻Bp;lȻ.[ño. V۫A vg>hGgd|.e&Ϻmf5k.4~VX(\_k(F atW"5l2uק11+9Ypf]~b%[LH|bq X4H8Tb]olnl=@3(QU;{ -j%\]1&Sm Žv9JE. +']1J"E df hdk5qG1So,\!ᑪ_sS}J͟QMѕ#YU8.ŏ*rZ|1lCF(ߛ"hBpJ(obQ@B?-F#}XPplvP_͓#h0=h8 co^bXV̆ :Qa,#8xby̬LFrr mJr 6V_ǀzP6>9H5[{@aRq=Bbg\wL2Of brw,dT F1B1䡦ƏyO{>ߔE8K0 u nC >UAiNC )dSӯ,~ua$̸<1akYq!B5J*b2lLttx7ML6-@Q0r;P0~\T:×lp'2 ǡgt!4r/>!w]JCwXdAfF# USV`DMguj׏U*zV2n6KYnUAȅ87h6DfFo6 `QsOC`3RPu2p[(6X9]F3'­,pOA@KЕ Ӫ:`)Mo@ &Iuωhw0!8TH=n1%[F*uC`ڹvs<8@EѠd] uDXO"]!dئf.̣Yw& :si&r&Ts6/ 6_)cأ8mԢ26dG{-j>L/8|eX}d'L"ޅ*8Jڇe&p݈EAj (T@S5!岡mciIg=`cעYqSbhL19.R˜GB@:L>l+$adB hM0?5 F|F'dtۄ[bS3[X:'&$`R?/X'P8Ϲ[o|/2u̓dk>:dPSxIQ'jEӒ>uNt&5-4^CFdeA{^+I?l3TVPY*}N&Z5;ZVjcql+q1"VMVZfrli|ո}:EtfS %g-9X!0Pm0Қi,OFM9Pp{zj2ThvT)>x.csO~qmfCJ9>dVc , yݒrztӑ_f:b[o+ Bx@ x: ?[e_=6̀A3bPFY8sLNDȻޟ TlOğ: =[:yN4=n[5n-DX11kx^.xVHw,Qq z3{/>uSWY a܍7 i{ s3IqdLLճeI-V&q(Ő.鋛RS1eWUzolOOt]u@P]&qY蓪0 ;W&Zyv?5AzISj([l4pZ=^+37ֶ tDh ܍YjЍ|["/%\+y"Z0Xӿ GI+78|h{ߋOhOnMmZ_x3 W2>mI0pL3C;;ę:su~м~9r/MZgesț4q/փ$sBȱbR12bFۼgA 哽aRP6Fɸ@ vI!#t=/P j1b3sO{_dNZɮ^~~5ȃkp)WkRuCYm'D{GnB`Bmh8."gZe d/]"'qק~Oe}U;#Hg:)&_B6lB˃ Dj͚jUMo"sz4aᗢRvIh4AY'nˁg`/gRMi:@盹ju5Mgoj|;@D)듳WoF~@B.7`kjh$No_{ Y/{rzuoɃ?vKJg4x>z>jOnUY祉Ol<)?oQ*`:SOKjckɆEH3ɱ,l D*>9 Q݆<\a)աK')҄YҘruPX1 >)R#vS,IvϪǀKQhs+͆غ~àVAsތ@oN{LufhCAZ$ 'NmKKpcy, rHPYACu)7XCX=Srf FS5wu1rYO͌4whG<5[7u'-05I_W/˚;9}ߨzROk&}xżݓFW9O_ޝ6֡ a4wIYW[UJ%Y!jn)œV!>1ivxExl5xQp4aZn2:fkj{5Lp#rQoblP'팘;rȹD@ͺ k},d!qp޾87[N4i.7mY{/j7wQͯQ~YV}-ۻM4P3mG8whѓ ߫Q Ke@i#WumқM%ݠ'\FVnYKT?p>l~ ROaK=l#, vĦ@ۚӬ:ugؠRs{wZS4?t=OĪqأ{/ CmoY]3hNѨ>xJ3O~L3yO63gDG?xAe=TU>"}Jo76^z6_GAKBܧ [Zc? )XQ>}O?/Zoo?ټ|ϗt~6E5L2 CV4_˭ıx^CUԎaYmfUPֶW0Paόv~=[l%lݽ^fMGg ֲͽW,Jl'ȋLΚ)uba/okM{} ?,9U^A{ j W4YQ {JmV@ϳ2l KeزjKeضLoeSD/coomo_: q"O E4u,ی=~>Wqg.!^8C1NF%C gz<2Aӝ()O05+79╈x[lVf}R `=_9b cH-mitEh b7x Lv]mHádž|V4S?VۂFR61HctKmĊL-eLMJ-\2,2N-3+ZLl2hnh$v[dq`t02&+GP"D'"a۳'V"NYԯiwTŻN$-^k~J =-=/7.LbjcB2XV:}6D0W`eÐA]S :}v* &`o11_E rMnukjg{M c՘t̵B6!s;xh٤7:ܭoQÛNHqG MӑL h?tt[]t]&Qv3s߅BS~(t+Dj*r] *Շ3Mv}hfƿmq'ۏ_yԞrXsF?MGC:l}gQ8H{@m=cضU8n't࿢B7*kǁ3; `QpbR+=[uE V+/_& <$HelU|h^請Fj&ۨ;Ώ&,.v3 )[ɑ`)b|pHw Co2ٺ. '8"r%!uaJ8 ;%p63Ib[3p#X83iM̌At-f'Τ7q cxt+40 4j,:n1 `n5֡=a0)+yLť(B˫BL+4}bF.i:Z%hEF-%-9*a5,;GV#`v?Fmbd44<ɠ?ɣ>DJiiE_|]FD\a苬/#LFxsd[0^ -*=!}v椦kiSڮr;C0G? Vd{PHck&x&ac,hX~MV|gvB_⡷9FT^YgaX"q:i7++OO޲zwe{+uky䑙i7x)p72R鶧u<N#{Dܶ`([LhlY9-][b 4+`3=(eiCF kp@b, :'&P|`koN.d7`T,4tx[XMVƴY[g:1ޢ%`[nJx);3].I(|< %ɵgܞ,8l ( ƙS6eWrܾ5+p5r<a.j4 gLYDݧ):@!&Z{zԛѺ C>Powѳgַ~YheܽynŠ.}7fd:Kot;_HƸ>@` D(_> /ogyNq~uB:w2j`eze%L1p a:DWR>chvFpPFqE(ԈdFi}F'Pn$̦2xކf:c0#wx؅vp{E(3"ӹ]Rpeh.^=p9 j9ѡORxN#7 u$֝MmՄY 8kJu C ! ەXW^! Ş+#cbU HDIzS9F[[C>W:mU[GXfT34kJ#T2и.xS}|(AQq-Th6VӃa0JeCY2]eLdujEU㈖]]$OH|$"]&%S16k26bjgz2ǵbf]u\g~Wnsהλ%S^x8OXoKeuC٥݄lTT Wǘ*Cb>D_ >SQR#;'<.ߌoφٚ|Rx[M x=ՓG(sЮ/U6726Q1Cgf$ωz8WV$6Qϊ:M+x0$3{@ӅQw~πް|B s*B!+kkD%kkja՝Uf|֨6t4U+cVrMAbA֐Q +,',Ȭ@a#W')LӞB4HRApF%jVf<7ގ_oUw|}Y}nrʈ`R@[8#j@yRL6H 5h8-3/[) gd=t9[;\W°6Ջ7h B0rO+ނm­ހոTIrHUA!#J^Hafu=:] ]2"#.D[/f0RQ߃.^&CR>&)Phk4Gg,jGM<)/=SEM9cﺷ)| SWWug8ӟeXg.1'J׃(Ѧ\kk|^&}U^ Jv*b 5>_YLrR !8:d08RLБ.JJdKKNK=:݂Dz .׊XdGG߈!n(9rb݄ f'e u.䡋 e-X&-Q+0:^KGW1N!eS~JY>zJ!YlG i5CBxݮf":tiaQ*ӭG!*A>j|=9Yç; +G=T/KI^XRO@BX?_p*dTr0,KYeʦ2HehFֱ3R.x)P_)S8KLYNG27]O6!Y9ʅֻ|naFnQ0BH-~=VFLsB }(ae݂әƢ Rl٠HHR#uM6X?cƽW|9_,] Po &Q;Ubˍ g·XzK몂 ް26qM.BGr;(k[fO֮2X'K.W?V =wr|PF|[ʶ{/Nbm؝o 샺GFmh/׽+WAǮ_Qϵ*#*= lv<_4L^#wqVP>L. Z&Ƞ* tTe:EEZ3blRݏ:O'q| GC]Ayt)XBr)n 풲+euНN\gq= c%/`|P0 .0cdϵ\ZX9&]y2C(ʆ^s_grEFJ "Ra2NQ}7v@nD~!1pPH@a|5Ѣ(fu }NX`QG !dbt'px]\uf#-AQBjgprI#l]#޾ BU]ܦMJH{~XxcLbseaQTEFu/pl"Tn,K!^ :c7Joxћ`v쥴ޔPPbZ{~iJL]cUdžڪvp?NkOtzjnjLQ6:.u,ͤ9'Z1pgE^I/+!IQFj Y2fuxtt|Rk4ڧFA㤲?] }HC_D- &GsN<05lJhMAKu`$mƭ2 .@=iİﺪqM1_P(M!ŕJ*M6K>X=:~t7++#礵s+l˞#MyԐN"K{4HmRY;T< I  7g{S#z @B*R(J.B)'8noo:h_Ugy '(' ӿ6"Mex!Ī[Yq=4P!5O \NL !তs?]pl〙ȜX\tV(m%w6X[gڠpaz@bJ-^&Bpf!RS.z@?pݴ7~ёLR39[9PxV膥=W~y.=l輑5~ &Bx$a m;hUsgѲ&>5'O y 7emMTxYm:M[(Q)USfG">=HI ;" '#[+Qˁ"Ws9U4o"]&kovywcD챶D{I." ܌rEWMM!'o^Nt~he3Jɰʷv4 VQޛ}:O9N)+rYqgT=6u^LC(]g߮?Au,L|紺gG] #1y^[b=Deײ|yxWEEi5._G|NygqU=<ߢ/Q{Њi׷;}bSJ̏^bQLx [qmxzǘmV"r‘ l_LhAGY@o D1[߰k )j%lDonĘߧϣ :ՐD{p8m NTru($c^фv#4Dl"T]7Dܒa?;Q:*T5viQZ'V̦NQ~V_Ԑz:ʪh uz8=irحzncj1ԩjoj-| ~j?n/s/kLTp]Oj{-c-<,im_jjНj})e6k~گQԺAY;kԎ [Fy٪> uxS߫5wIY+A j C0Xl˳f SV>y mB}_8aWaNPRJ?ϗCm?j zIwwjiS,ÿVjnAu߄]0ŸlX IH~m'p=_/ciTۗ%@YARx4ZA|m  E"F&b{`C;T lo4\ d.ooYDw8~ 98 ~ϣ+ 8%?F J,G傆05sVK%Y ,FaRT"NzB1+N(82ȇR ē+kJw]k+4c}AwQ-]qdmȏ?)1QXB.YwiP_6H)'3 FEFV3jL+-4ii%~H۴"Y,gzEh|{D. wNI%phX{U_Ex#)פ|cQ8 :֬}s xb<[E?NI@.}z`bSy|Nc*LCT{:v 齕5Ķl} ȋ:F "SFsY 3㐞CE)6L>]#iȆ"rmYUc vbTqhvyhW% rk0n ?(EE7++Y^=r+o 4aT*EdN _l- (窂!Qܹ(4;;?%sa|ErT.z7q|ps^`~|#XCRHkƷ| ﯃:7Q]X}JmA#c!*y^Rz,n'b7> nz7l:L;㟊tnL`;Ӗ@ !1-)i(~ڱIAeōR vD焄܇R-q,hy*:6T1ߕgAo`0_zE$Xߊvt$JY2rؖF޴lMd|4iM1uK*m3?Pǚ!{\bz!CM~%hljm|t|̰v2@IS"J-buhٞQQ9̩^/ӣ9UmwfL3KV7Fw=4)JE̩^w2{~qXyfȑIhpe`\/7Ji[X`;[Z\GCg>A)6'R"ENxi ޥԜOȂMձau(*,zA4K ۗY )Zdhj|Iӱ3`EN}; Mag6MoS"t_' )&()'Ư~!f,DUZO&# ՏHb#2{fߟ hfy/cTni77O- ֑-Fֹ,}V[?6nm7+y'(X3Pk􏁤!5pg!dD{%>NZLo|OLGzL fۆNBM%&4?RN!`IQݯkNBs$LǍW_g+ y7&Ѐ-|hҙIDw/9n4xsMAw&ޖc O)A7TlN"q{0%=: 9p  t׳+L++HtTn5LvqMM0q\$p\iH:C8h/R?J 3Kbt;\MFCi%`&Xsئ-j 'N%&mxZ66>(MOh31G#^U7GLUz_kj{EY55)/l44,ڱ︥bNV)gG~qN6JQ13esHLRa֫"%/CrQӈ(j==w}')CE1|%d&`*##vD4 G:#֖hhZoh :U!*.⊫U _ M}h~hk.i@wQ\=﵏' ydCл gI]]6]ZfrVnb.mܚ-ꂻ$x$h`c `aBph<ۙ}|׬lqM6sCrAb8Zot6n6n!sYb-lb]=^WRή_!v! .OF2na%NXbc"F# w pa6vqVX6Ta7Dccr(o#,SIf~l]>ZCk dGۛ߯0\8`ڌ̘)b M˜(_)ǷzgVŗOEԏA:_j2Ci//47DF?7(1ð5bW&J[ւ(2+df,XBnt Gy@*ZCr9<"8c@1Pt0l!PG16\5aEێqum"* w oŽF+`3 M0X(Evy^Sģaq>: 剞s}`z&;heF,]n;VL%cA"o&b:ju{&%wM_f#tĤBG`ֵ\M1K1Q^#LNMebbzA%rs+K/&'vʔN)z&]QT'y}$uDJe5(^C9`ry*#xŭvcXy9E+ymE'C֋xIn׍ᄧnf_ټ]_w3wUK-bN3D_|68{<xfO^? &nzSrk6r_zb4&f~!ԵӾ!:`zuiI`̟~S_9+*JPahaxCŝ!LM3ơ,tvMtj/)xfq-P ULvJ4<e@qÍ,79ޢRZz 8*H Aw1g~JLm` [9d'ͽ48h̽v_!(2Ne0p)B8_9 3q0qBqì {Л~I8a1 ? aVLWh/y KY|{zs3!^FBēRkR[+u/t77h37 F0P} b[OIitxAx wrw_V"jۦǤ@!L/!޵4FHo{ b%`; 4gvEށ\4"ܱؕk@uXSU&"٦*j_CTJ'\'Նt9 yx8>EE-*<(bwxn4HIDŘ<`88Y7LCB "WUY ް&_E;Wk)mWLP{5X`8Bp,\ȥ]>=0xH8bM|I1IoK8"GF싊@XiQ5U .nI/ F4QZGlYF ./"yM,fp9P-'EmjS$WA3^'2|0B s!Hh_cm0> d-! . F9uX 4oBO2B5j%ԭ720P9NDBobߝk'{]F:F*t5 (" np)k8!cKr-6Es6' B,ɗVm|e״l; jy<8=>.x{i)g (ɋA8 mƝAB`EⱇЪ-L^AdcM2JҕҺkW!LSm""Zذ5_z^s.an츽YgK D}jき:T[?%uRXdEIG$쒅v^d`5]qc}@vv ACI-R䨱IFo+eѸ7ش]6YZmZyΚ e%;wć؆踻oD(VQF V_QѠ1͎&ل,CqB]_zІ3<0_[{IoDδYR;hӭ%M".xb%Rd̓J^2N%Tl"n^/9&Vw!M}>17l_o~!͸?h~p*M Y?i~+J\2~{pN( ϩ>'<'btbۤ(T12?3LgzC -lDΥcuJ~NbZFBݸSJIKN$/JvBn SНwB1'o;#wB9);]bwFƉީITh&S-'S1'NT<(rp^\-B7%v#_ K6'-i썆\nQk7[pjޅ L1d~E?|͓^M2]ڧu7r^\SU#e2;E~Z^"4¹PrwW/2 __^翅1C>yTCAz4йT`lUa)_LTrwyIpfPJzj=vaHg3Jw}s *D62MRY? PM@SiDl $A`xWWWNq?#`NV.>"5,U'^tƪ<ɘx\6A76ɌնDNU. s/x8,|l| R(3h#vF{{7rs&\Kg3;,DfտzfbN;- ÉI0SvHN4DJ!_ )>׹o9pcY M.9QK,/>0%OJ8-lps{MS<(id6T(NBDҁp{9Dz}S@Տ?NrGht4?h!-@2Uy5, ܦ6-Ù&I9ʠ hĥOhĞ=ڂa] |;JΟ~Vq7_6`AJnw<<۫)S:C 8AGsa))f8WDԥO;RNnܲg\\"v: J8c`Ses(Ys.H礐K\Ρ O@/P)JuYQ= 15ֹFޅqwdYAe>n݅X+똏?l?zk|dh=U~ϵ ̰ :ǹ6@U.%4uQ.-s?s?s?O״0