#!/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=882c75ae672e3add0f0c65ef88807870 # 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 \{s8Ͽҧ@Dr'K֩%&fE<^E3>xvr_LvFUiht7ݿn@9.كϋC}/=r=R4N[Q=_'5l.O m #+qàǨk";&ҘsǍ]ؑYҘ37`qF6X5[wؕY0M:ʵi"6<$DCWnp0p\n+œ:,I,Z_IƂ0qmށnGo"[ \ˋsӂKI(q]ٖyZ7%QC xfKr΄`QRYk8\%WhX6 u"4@Z QD71}0k gOHRc\w`'Hl0Ad1׏ӹTvݡWG0xDjNP`m:QD9j46@U fETlPSA76,n`SYHp\. mو;Ltd^vC0ti6T`Ͽ'Sw.w_]Ã??3 ߃7'Shi&sļNL/l,}lơ+W&_(.ztcG;1'pz6Y4ޏ5m&;<5$!IX!+V"rg:cV|*o쀺@6lW>bȤRoC3L%LUa k]42}B k rK ܤu(y{wХ1㋊A=7oA>s_?{Q?ofʫ-/u%c[[tzϽ~wHjlط6Xr}7C4 ˫}Yr8P  8T]&qU6E[O:ɽY `XdM;acsh.Vݒ\tߨ휨 m6S!q WXH-.(򱘧XbЩ&-Efo u+ "t92{Ѯ]L5Aݸp4zO}M`bMLު }d>t,-Z6 HC3#y\ MLᵛlmA>ke< 3a9 pv( `_8Bz X# Xu;sU$lɿS!k1a̠Dׁǯ@҆3ƕ!2D<kxR% j2kưHLxpl@<GW6jQ)-h62daQ~ ;ŕOGI/R{!QiGِV$T =ri:\$٣Pn9QE&nq0-L ^< $my^, "%8>cم+4ɇU QV`wEeTyj*&qjۼR˼=#!|d!L<UCC1M@*J5J! s!0 k9O殫({Ͳ >W5U uaC۔(d+TeOK@V\MnnW20TJTO8  ;taҶFf<͈Q<JxT O-CNA;p0hx8d V03<m~p۴e\$L7yGʗ<0\! ǮH97LF<<5čcѣ-K\.p\L^ y|zCDF# DXL`"YG-/oY/"fsٶ;F 9]uv'r,4NSu;i}lrO{xƿ7WvV- k^XJGd@p$&vtY5VZtV.ډ>F\yy.[tiG2釉m<|FL9%O]C/25(;[ĊVzպXeL* Kv>),0]Z3x =S1Eֈ䱡8Hqz ^>>+'#OkTx698͈vطS䃯0^6nKrAE$KI2fCk4t͌-3 QXg}!ud!94KU}Cvq~( zO! J|}W^H5὞v\\ʨubKʤ_^nm52lN*Xkl~V$;mU=-5T*Q`gb)cͽ s2 *ݦIʦO_ɚ 6d|z./ (w,gΕ]$BӇAO!zJb:Hj{]Ҡ7 w[q/)mN5{x'(=Fy쳡YsޘbŐ7$.l H.xW0xp4"~^ 2yXU퀣fy\UuVsUr32áj>ؙP*_Nʯ3ЉMI(̂jNF bE)\JŌN~-Q_$$>ߝ3uDn'v6 fg 7nf#P( T)pQf0ux{OЯޝ!|Ǐ^?B}Cޤۙ=$%C#bC҆2j]X00r8Z[;.d^\2'SG؆Qd[;t-<؅9c,8)) [4o_@-na: yNe[pedؼ-{KLx+7xG+Ey؋&߭nF/esobjޛqm/<Ŵ`$˶yKF89AIbnU,q'> $Ig"C瘣2:I? -Ƴ-ya. ތˇ+"&i60|IMz쎍Wh3Ad~vRƚIN>iE`jkerh %yB8뾵#Iį|'2 EvC0]Fj=oD4@)*knp,iˈ]Z F2e`iYஶp2X'|:brxJJ9gRVu/Ig !K4}v 7:+j}2SLzmhh#tz[{ r1[6'O;bMlc77&{(' isi1}G19ZF*}v혶h1q3k(HLbv9C,x e&KqFzHoNO$̌nYnBfFòͧ@PmDA=WV@@$?w>&EOu0Fdv,G͗1ڂ)0*YhƮQ$@|m'W-LP~Vznڂ \BsNIVuP(?/қ_<-$z z{Gܐ_0vLѓ`|Vl޷L,P,2u 4w?*[N9xy^9c&Iy+EIƞX/EAHiZS&Oa]C3eBXɠRsߩߎy7C71mC_V/̯q1ȈTy|HXSu>u?qaWQ=(L:|mn KA`M}3ue{+^Z25_PyBsNVd`jG/K6>Gx1"3~H}LNӎ@>Ub%Ǎ\Pcaxӌ":[ 4 d@RiNIR/NR@=X"kIyID(Y!~㯴>_ЋVuͨG,u&(.pWl'Y*ZEI< 3@>ľREE"3*?\zWQUg0&{#<.ǜ"lCe<WQ9}~ή؉Zϓ[r9_V؏?xb(^oLѩeA'uv5%cyc] :=B(@1*%st-@  #qPiTiXXZ{)|BŶc%oj{ݘ!)/^^h>U?ۦaN7A#=vaGEIN'9 pxYh\0GL/d횫$陆ثB2+-Pn`¬8 9TbMu*Se֜⽔¥K r,'t)aG<{s{4ssNlɟءȽlS^\1ڛzgݩd3GtK;und]GtGE@'&0|n)b#!M՗ҾrOr[  nDZ*;Yў:ZɅ  147+v?IFR&vZkP{WQ./ɯWnMgΑu:mma6y)gy[=G~ٵ-[K)1n_uH^j |)d2~N[`'//TO}M`QOcy._R\3Z:Sʫ9/AHeP۷d1ǫw܄ڥԦԎ8g'l.^ ɤ;Qz 1g>> ˶]f>D͇ E1\=.U*Ss>*{NąP0۪=Q]s4`L08  tmF#t$@9 Fbnz#KL S^ 6l7zzu mx{ rOħmHOA.ȿ+i "S%쮛bb>xگlm˫$ $Rd|>rq!@{kS_Xj1Ocȟږ/oZPI@ S&_' "izz9T|]SOKUSdM iOSaBad@iƫ€N, kTT 8= y\h澓ͬb.(l.H(_>1ѵM3sx¹8:ID0Z~WZ+ 'U4 F%n o -X&Ra}F*m< (Rmֻ ;ty0r]ƫr{N 4 Z6vt-DN5$@d5]E!ɝdHJhj=a=4%Б}H5--Q,x !0T v!!e %68M $FS2P#J|ڣ[U-={d>QJiyJFLᆁI(Gވa2UAƭRXSG@禁4@s"dbyG,̧j D|[c 8k-sid}$8$H3Ni%UN#:n8 oJ?Zæ 5$T{Sנd:v,@#uf ) c#ͺ>HEŴ%C(ҙ1 Vq3ؤ",ciϘX}Aݐ?d}So!:  "g퇉):@֋fxd>Fiu][j7>6IE_T[ Fݡ&U[u!Eͧ.(5Ԕ5LQ1N$R1Z;[Rn!ρC)@+pex<#2ϧ3Fz9B|"@xvM[zKal8'J #a &XtE9x()pNA )'8%s*)@@i5YDqbJOIkrpf~3߿Wdz"оJ1)]Q(~6擵i :UT][451Еo)-?|̗QXžcD#Q:T侊@MYc2cc-08&U@^ 4YV-!|aǕ¤44n7x BR9.`b:DvT0pS ~U; ]b>a{?P$d]-L @x6-NX.G ScpUR5J)uD]"VkdE6Rg Dknm %`NЬ[6MjN7+1d8V|AY;y^8È~#6Όb6d^a*oF ۪Ri0܌A#3ΚR]l4(OE?s>q‡KimW]yP}x8TϺrX{ḛcp>+F@tF\:^H˜Q2FMtA͞mxY̊b*݈{ xFOk/||JqO&) } xHO?eR`Gu irh cԑ1/abZFaP=HGC8\L$.?F A$Ɋ ]W&A~SX+A ,[( *jglF2dVV-J7Qq?> EMNo|DYu 6/VŮ*2GGjxma(pˀQw!.oȄTFL)a@[XIAd4BUu,]@dwתiI`Pof0+H>NmEjs"K+8?m6\p~( _VK|ъw⬬A )'01$A7~a +3AFg>7r|{j=+?AR?UsM}QcިoST(5[ rOUzpr9&%;c8\zZT}`N_~MOnSzzF'Ӻ{or5mO񞲿F[[7mM1ʧZck_,v'٘.]]\}Q}|gW|0WA#;A{m;)AVLtA~0IM)J>lѨ iNriӰs:)W+FV2ҏg2Ov`C)0>ߙLxg d2kK0XGTNwd~Yz3w!x^VyhV,ﱔE6bb ?_ʀ߶_tUkM1v4a1IF:aS#9~\&Ďo6ե-h.0k~q#*mf5n+9_[}\s_[K>}NLWtuUuQV}gN'VNUf}^k''+0K^R_Ğg yDE  .Y8H.{SܸD#,6+P˗Rt5By>(I#m߁yW{ՂƝeW6㕆.&p;4a&s"#ӳugf2%-We-v^6^iiq憶Vvpn8:1fqr12VwXcǑ`񅘐5UM?ckK>KYk};N}o? a0 'e<$-me~C_;z/ t>5_Q;v{9#YC%3\M.SNG]joDJѴcJKQai*/AI{~4P.} B>q_}R1_N苠kʓx+>0P( ]tE}db6d3pF=SZU=Rռ–mmN=}V}VѡW@O|,nxG~~*, T65AG|+Ɣ>Ӳ ^ަީyW~4U 2 -XѓdG&W?:~sZ*fʬ^2zs [aFBFlfM65!eqW%h*BC}(MgIp\;jxfR&wچBnhʀF\'XE~ЍӾ 'V]\zd6b "[` ̀{l+8F;?ohsNh]9SmXa&klz[mƚ6!jah(`6)掚ow4͵6.8oS4,Z$u,$|'YafR‡(mf$ fr* כ73Ж6X4)E6iOT|OIʒ/§T`fB}3F!'gޒy)u/(|nfO/|3csМ\Z>[7Pw7?eR淶_4@ @gWvxivmts \79FE*v2LmvRm3C29t;FLA܉kǾ;oecHESX~^]]KnzŃ$按%Ӯi=ܽJ{z蜂.1ҝG1Z%;K{IiBc 3Xbz<#;ē=Xc9wiG']t_< 'r1D߸\%B*:8nv^E˛Zwսm96 .(q%.x-IGaIZLJ,Y>jW(y/W/:lUjS.ro㐼%zA &wjvJ9;r!n9cE|^, RKi[s}挻Ntӡ vfw\,e8p,}pEyS&WK,i_`BQ :Eir-ZzYz5=Szgu|J5x@18?Yݞٗd>)>`xS+w,ͱ}a&EYу75Iϻ}N ' Vge,rٳ GXěR*1K)>\lF 0^UDTU]rh"g{g&S)fspLr[XiIg+m6Ac'`y^S^k@Cs$ J664];ulebptŗdd3 %o剱NvlW$5'ݷEұ^`_aGsLALvwڣfFn}n9X;fBu^(Vro}ʀ5df0vri ٭S:uؙ]zcN!] t C^8["{ty8T34>J)uj;6 >@V`NZ{Zs;tק ƀq>̱&Wf7eb lak6)D+檲nY;$Ugl!r65d>DXoó(U&OEV,|U73Nc=7&QNzN: xz7TRrFZs5}1Uj'V"LZMH`R=bVQ -xdf|n^nR0j4}5 ɿ!'>bN8 yr׽`PLr"JQ+XGWLNk#`R~IRrx?;"B21e[ؗ֬-F6_"F.~d%&-:T`21$S#]S2dc+Fj3mÜn/`Ӟ+ "qWB3t/9E4fxPoedH^20@^v#{7 W @<=8Qi~.;0|~]7|j8?~|ckk9$fŲaД\au,9@O+:mp0-\QYjbq%`8λILր !>◨"Y-6u+6n#]J}遼;dRNy\8#[4;v%8iAr 71 uu22e3qےe,"ma(vr۩drΙ |CdL 䪄zX1kGʸ/9AfEfmX5%]ĉNf m0>Q PM Z<ÃGLI1蒞= WZi$)$k}S[`F7CI?xAs8+0k!u)g|I_Yo ؜릌_Aqv2*%?MQn/vΩ{0dSʐ he{$eb35npIgV٦9;ށ T~l a{ލعKh)K19X 2r}+JI󮗊R9'2:Qp>9ڙSB ǤwNLZ + z6бP7kԤ0Vl޷ʜ\Ѥ&'N) L]LqO0d/v]P8U7 bw巻,$-=o|_~ #^FMg(LV^~=ǿniV~uPKZ)bӊ_!18>V'h,izoh<5D눘)[-^bIWjKԏG.wМ!F^UV=$x\'YXH>1뉘^>0;y'S@&xml[LŞt Gઃa«)t3pv:*L2Py܏s,N1:qƀ^R‰ ,>0] ںga[bC) M#>ESb)ͭ?+t|>$JZzM\-^$WA[b/Sfd4$'Eb3OMuX|e@UM>cc#0  ꣱j40ti2:%2Ƒ%* ºЄ}VWZkG$~u>W uQV;iR"܇6spԿqܺ+OQF4dMҶQg-*3TD8lQoH.]Ty޽8j$JbaSyjoQnhӼp@Da]tP&C-is+,GɤUњH踳l n^}:ľ ɭm+bc2(bd2'=pRlj~ DѧYy= .B$ raagd13B_86UUZ!ǫ1?!p e(Frk͂Ppw;h.PڞS;(D|'<jʦګ׏؝ ^=z_qMψm,$(h:jWS:])E00,pD-P|l&8(4QcwPvDౡi0^&Ʊi!6soa3RaL;([nyikR Po@$oNO^W\W(d : ֟w m4g#s`r]kmqDe25KNKbJܗC *b30Sy0l0T/, [F)5?F\ȫ‘dub Uj@9D~~6aUʠel 妶NDRU%f t.9+!Ćc0a}fr Bͭ38T3iVF@`07lϧajlL|~P}` $Smt 19 Z>xI[TeU[:@,^Վv^wڇ?XIȁҰE/O)&*|ӮL쥬0085`~\ :D G.kq"}uqdzT1zW\blc{f9"ĤJba b߁sorna x>`{D>fl}t#X&1vAfƀâ8fד1e6kVgz {8^We90a2MЀCO(uF ]dgwur EؔVKi P|[O}o;i$eRK[)M9qj6ـ3k7Gq#;IL4\ZbGy4v N{o|qܢIF~ei)-ݑt6Y2!;k1&c{= Ga~M|` ?8u "|cz H v鏎e }\yI%j._ Q!s2k6b+sdxR)WV}^/'>Kб?%5*2r/8D]7FD=g`,y8LGAgaw}M=ΐ[1r]ub 8 )T;n>lVnD?*FJQnZO 5Zzm7_-hё`L׌^X@_7 @(GxWܕiIr`ە4|d(fq7!G#qc\P TYRt  [.k0mJaRiH)b7D:!(h~E EDg.uXpgh(*Ѽe0˞ng/JQpR^šPŔ7!F1-5t:9Xxs&lN2&|d XÃvQ`=ޗt69 `iRv1UL Wӳ颗ֳbh?>XtCaQ֮/Q:5_6wlPg)]7z0 diZ2A (laNhs;seV9, |_ ;;΅SY44Bȶjnآ^sCA7JaQi(/`.>+NȌ`l=Yvm e++Ί<|Zii4 NgAmo6q2h /W˕z,Тw1{ñًێLP9:nr\ }}}e*ya`PArb1Torz{ĭ"!ӴA1 ($2+Akk*Kgg r9ز<˫TkU˄[m &?lQb,zk.jO,]wȚaw|P1Fj`3!2}_1$7"ANpQP~*(E7caw걎}U9jp+:\;P>A{N_ @}ٲ7z]{WaXcVu__/Khi#uomk땻/ɧ1Le[aE(0=G0D7R';dS^n?8o*O]/ק/ ''e rMS٘qPK.G!b$ 7 Ua됓X!A a`{!#nul3@uft3W3Z:Yp$gޓ@,ZQy6RZ(-u3bਃ$Bj+: )x{0ښ?S#I,csJim5g HA*UD+W90nꃥ7߆?HIeculIw}c-XTVݧk'^zr0 1Y`iO\I"|7F%N6<[qM@'FЫ>^>~\yV9=)Ɠh2ȖsTI\D^%4@┈s}uSI\0Z8CȔ\jڭ"0{Dl7- >LA>\06uoly\]`]h[U|> '?^v*Ϻյgk+މ.GwrDFyc*f(9'˛7c?yTcȀEiue+KrQOZqf/vcu[d v',':td.4Cha28>჆WB`tY :3%QaXQdq^1®7oC5O4v8)_ssocI5vKJ.K䅛*)Y_:Ɨpq$t%܀NC7M+N{N3A3Q;k:^%%PsOy2ːH¯*Fi~Lkr]FpxlbSq34oj×/[6oe^)0Yxo/WZ>ֻܹqO|,y;0>_:^_ͼhsQjqq([<[JJ-Mfx>r{8zhÊZT8~x⽒0Ks"*Vx ܅$~()GM09ϭ;luf$ɣ*ܫN;d)Lܫ,LXS(鏎64zl&h}¤)@ڡ!HKf Y:qI8uTDA6lPP Ioe}B KEm,ubNO&*S܍b Jյv/s rB'wjyK]` $m2B%N^=TxӅ:_ vN2aKwPV &ڊV:z8'k6WqK @ 8 jtiR/ɽ~CIIS'N4dk; t؂dyAIUD\%v$Q#0p,Rt^OnJ5&ᶊ Ýl2r'\V8/:V[gz^;m-gɽʫn :#@aQ~7sҩ"ҚnBystT(%^D⬗D}w"߫yzb)8'uF9H}׹$z;l1?UJnf뚞MJjZ^Q/c=Q?59j7s=q!yt q!=^yYIlk6ݴ4zðPAyRf0FRlg$^%3 Dro;hQE6:o,~jsx\9Ibl骎^r8|O偷ml|rźx^.99jZ` # r+謹+"5E2m~ e8޿v ~7p|fɡlܛ f\.N!Px9QKN"1ܒEKE*%U? 8m"OH*^jA Zx)P*0 Ѻک>.TGi}G[";^/9  /IG+q;gcE|ߦ+F}amr:| }4{ZZ̫ d%,VsO )k'`:"uݼ2aojG(? $bHbָPn* _D #i;josf=9rBSU"3dL PfEb:Z1CpA/5F0%rђcXX26C*D. ң*3+j~MnXeAM`%.1ME"3(9bZnrdu䆘wRD@ZCtzMҭi'Twlsث^1% :$QZq4y :35Y9r]/& '/ؚ$]9xL𞙰}vrH1L9S5,_Xm)[sH:^bm!hf1Dؒ8ӓ1mwF0gdpKU"0;A854)XB;8167/Zu t6pg7K4eC#5pxWڵv=wٍ3U]6CV_w1pgliPq3ea>໊5ϰԍ%jרh5լ}Δ0 U4a|*ɻ8~}Ũ8qw8]'ƑvrؒM?L~\R/р_ͫ,J$}.㩥[9gHy]ӂv`8<C:;NnvfL9rIW1&R^ƙ*s贾]t}5ge R 0BR*h(uJɮP?L\Ղ׈P>=Eq(]QJÎ{I{-aU"̍8d0ۣ2i\AzFM3ܡKl2e}b p}2wBm%ip5s?9 m5_ tNʤ<ˎ$9:%SLScit;iP}:_g JLZeoݲ>eF%OOui̋~x 8O$fԻsߩI(6QX[]||k+ @pP j+b$t. ;8;sb-!½Ǩ[t;i d @ M*<3 j ԈE-ea t6ozc&IbL6$$#7 _%tS͟{wIUz&R7`rafI[JwQW^ӯ"3>qRw N#đ ݌WRDD(Q%v"ZA\ ET'#°CK$ XN@)o;e1VtÈ[M[hl Y@V.l.ς" IxQaI&!Z'Zaf&78wN 8:wbH~nmB3ɔK3΃¸q/=HFN8:ыt{}ėBOXnK{ĂGi^4oKmr;϶Shv^kEGY$*G}-AGA) J*Ty('DAtqR@]hФܳ`ׁDаcxof[zFE )){ i)ߟ >)CļbM` e2>(uϠ̺c_vw)Qc{U6|-HƎ4S/! 賾,z* zȼ|.f!v41NBWu=vzcQh;q7RCs*/}gŶ (x{l\a0+VUY=(j[¡|A  t F~636c &g<`%BߡrtAXAICQk4N$X CgXKQ05֗ƟRKqR_}Kr§JqW،4'|N) JGEl)xޝRٖD54M(.|*]Rǘn6CsGfd MAP2b?{x9r%{3k(80r2nQh@]jspndجd"v;0L60G$QТ\`$DJ\w{idVi:a݀* ㅪU&W;{Ibd'Ӄ͵JMijQ<63}pqGy6 κ\(P#}%Ц9[#L(?  i)%yt̅y?ĻU(#sO~ u>'R㢔86pA#j_D\v(Zr_XMADQ7:xU7JZ\)6c'(]9QXastZaKB0st [f(mlGY 7P)NHJBۈhh/͍'"crLj2[܌KyxxےhAVT*i ƙHxsJeSNf2)ot/)Uc_)Dѥ|Ze{ˊkp*ÒкRjB=h'3 `2ܧZ #k/brRPk'z-6vwTg{׋UUWzٲϦHw$]杝q&mcǒIE@'8Mn|÷g \G0_0c`:臙LzϦ |YƤ8N3cj%`/&ra$@#<3i7ͽOk[b=֚/DH ֍cv*:0 Ӊa?/a0=~÷'W)p-ս%1Rbb^g j+L4%n* Mb00`Y[HX~ɧD)̜g*zdJP?ar#RP&_  =>1㸟.(.gz MEhIw];kzQϓq 6׸f,&xĒ8|Jy8m1ngH+G*IGak:SiͺrxU"eٵ ,2^=o͍o4)^;i7Zw)8"#̔p$E_秓[ E/Rp??j2?"I0 VCaġkSY1%P9@_(Ʈ_GE'K{H3+=DoE<y^f[|焪ڶL^7vu(dV/+U&WxL@L0b6N gu_mq.nCya P*ʭNqxS p2#g`Ikh!yU?sdh }d"u^J% Lx@Ӆ~{-};D뻛̑= g2VR*:֘k&С{%7.+!~}s`3cଷ M@Ȇ"`:?} `?ؙQ["LՏ_\zm;?իCom@ f0Gp` -R@6ad54 \nM]hUˠl8gL7?&zU}/!iG|fkOEXjjQlw[t= *Aԋ!F("0=Iޏ-fy/73Q$ $|ӈ;ٚ\ *y*eS׷^(h@VF]6GAG|:S^oF&7LW)r挍Ӧٗ|pOYvn5m k[tTwrkhW1t^5y;3 g9l$;9>6 EXfkv0 .#7,Y/,+|ɯLaQ4kB x4O6u/v@WgcMQM l 6pTKo*XsN?ZfBb(@}AN,:Y'fo[66ౙ;592>,ȥmrvD]v#W';O?c-n4p!?o~U^}UﭻwR`+୞x앀%=?I9T?9(Kgq->+cOӼ±sG }R 'C­F̾~Y$*T[)R:[n\G?YDy3 A:Fl91S+ܩi^&_]Z&k>D9NsWfJ#PV}Q^  #oC*Μ '' "]ʙ~Ix-~rtePjP%^ ݳ`b]$*[l)#Ĉqt!۶ŜИ̤$lj%k@:=;Elfŷd|(Crt GSn"d({t  a [Vl3,̺PEl|TSCUJ0lGb,Y?´9;ķzHzˡw *:d%:F-f50ՠ#0 U 7s8%dݩ˴H{qf.*`fcKl45vgT?lE.L."$f$,T&1d^UpQe. 4^œ ʥǩJâ4m(XþzTo7Za%\W Sk#<1ojeܒ䟀fK_Y+D?pw7 ee`ERR?損,9`L)(ez>>4YڥRp_| lZ_M0SQb64;3no3_Q)w'Ԉ.@rgi(Mar%fSOlu)()E!6@v(oq|'\#SF$ەT[CA1Ľ ?!91g!x6NXLCbhP 3?Knyf#p*էq1JF^'~(Wrkʭɽ_r\RMEҎ"E Ʀr&EGrmoE0OPܽ(V0c>V/>ݠ} .2ήUJ)$:N L`]ȴ>OB~L#X9)ߨ[r]8S-@Whm2 3/wB17C6FciR܌&S7s$^I΅Kj;;t-~uݳM˙~Ggiv9Xnxm=ɓ;߿cwUn xi&Y,3%|2| (A Z+Lmu-uYBdx͝ :SU])UYOnmD̊cF0*`> # YI3ad4E Qs1l)%Ia|2!Loƻ\MƊV$ iUΜEЃ@&e qhuқ͖$he!yhƒ03`*wZIh>H5Q;n̋I&ё&a#斤-,bUBMip2p 8fhoJt^7Zu֬+N&`]jãƫmpol.<=h7/ۇ`ւ+Y|Q;x@m~chAAQoTv PmoXNK_ ?k/{{Fz Qn՚ytتgqZ^_-5OE đyYf_av}jSׇoaY`5K{x@S:lFq h ٷ J+U%hb7,`ۙ:kq4FWf ,jT7 o5Rhv^r()]Ɂw2;Rpݖ%AxEcѰfY"P ӌpXSCupB%':Ykh) 4K8mKkv$tsYF|l&F ul|2R p(t>,dmwwN-!Ah0(9Cdz+u6~aםt<ڭHv񒒪! #{Bҡ 8 TKB0mIkt ԏt\Slp:KJmך/70>ra`JgHw;?#_گ@xy5JG?/|b >e}ɓ>ٸ%QX> SϳeS Pvo@#fF}f1RߢFV|&} Vc[JBWsc54+kxi*kQWei%@+Q_6\Wl4YNŴ6l÷IIQۨۨmb+(nԭ7NBuBuC0Tި)oT7*Q_fр(`wvvt\_~u%_j6qf ǹ/q_tqsUWL1ڗod$3RU#e*;M~)?hϪV*B *r|_f:|ߟ R\Y-bX}Z:LARDkɓzF{Џ ԃ2ž/x UG>0?o:mВbCgd>e^ܨnε۔rrSTA7LOk+#Ǎȳfw*;GT* at9Md>o2?#;'OW~DmXZrE7,'qS,S;e d_NμdRV_sLuvdg*/c6fi..}V%// <0`#f9b*& PejYIktq{J=^niBK$  @kqc75)3P)ќ|*]6 I/'\l ɇkcs1V67@l8;}LQYX4mn|d;L2e@Dε!ΓNq>( s:_u6Cm{)c\&3-I azx',Ƿ Jl?쒰̌.!wezLeFi7{;i7{S!74f:)YeJY,| ]ܐV,)!WP٬^Lz82%EJJV=_Hlk{dL·VDIKRdx*s}>ws}>ws}>ws}>ws}>w~U8X