#!/usr/bin/env bash # # Copyright (C) 2011-2021 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 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 '/^isgx$/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=93 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=1bd169762a22be026f19d6b3c6907bb4 # 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 source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 F855jQZT$Q|%'ov(S׋ q5IS&j^׈ltqurҞ K=ꮩyPD#jZZ6ʣIJ\e:«/K;+,ӚZBt%uS,]gmp>P@3;_,{F 6-ll+F!)u-}Œg LbZ5"E2f LH q=L(0jPJfS…h`)Tsx&X@#esC< `Q/e(s=GrW꒳P)`q$_\rJ#](#lF `k+vUa8 FDd@G*KJNoܕ(H|%*lC28'WҨs 3'Y#&H;^{DpHJזPWru_!"L:g= ;cvQ{  8j>V?cJm_/ғt# q(3Eձ*$HrGRNIo0 I6Ɗ̤'Ui4Uy/A:@gw}dٌ4}D( |ek(\GG$rJEO ZV2MV@f])@c8 (CE'Js Aa\gCXlc3\k{ >s>8Ԛ`t> < 1ßKQOJW.M:WsŀWBpG^$'( ӷpIBy~:|B0;>:ᕎZG~$Q< >jU=u_MP @b ʆ\srt/u"N= ""WpVȃb@H`b @ 8Ǝq+ (O),MiAR;ISxp3s26u)SF",y@

nax]_X.B]T?,_XSD0l4nOS.>hV|5@~~%4  toqpf,޹tzp6SYyUć*GyW^ǽmEWdjN7Y$)BpۄX)L.FDJr_V5e(`W j^}Of U }T^K MlJirQGU\VUB {tjPtjPH[5h ΋/0"iT]eGGgN5OC &8Gݞ<-Z0C= :Z[\ɝ`R\ak="/(JFÒ7w|83.of Aź=kf})}-/(2FԦ N]GX~ ^}J0% :X(xgB5+$~M_czL$] hu 8)X6TwI}Ki2TLgƀ4X"ݯ7 dPAS)c 2 ~0/$M(u*!XD,DWAm=[vƍ&l@V{*8O<7iP-4M?LcM ~e,&QWVUP Д3t6(I:&A@FmRE5xm3_ ݉jZCD5D]Qӌ[k幀`ƝPЂ".fkj݀n.^ 3Wnl<'G3薲>u1䕙66F/>5q‡Kp`p'M%~x}[![tv<Ԁn! M9/'-LíGbާb4,R#vj T|n>Gkݸ:\&X\F V3 꼻Qg5 3HaH5ߴ1= P ,)_=4q `6npjJY5W!UtA9O/›D=2!e//da̓xn_ -ߕS%vCh\C?](VNdNf0[NV)"Z˞:[Em~]{K-Z[bm.DLaEÁ},e(P29o{jn^IM 8G>>1(*cODfTȓg`E`2<@uYXHn=+Ef." 4K53g/4u",nR>jC.aʀhar6^bJ7a>e|]<ؔqN/|@F8B4^b NAK}Wߌ&!")%ҌI@)nqm˟2sqv*C Nap@\f' ҶW7R|Z@cRϠ&l :t S$7 q#GL6&n_P]?RjGV+uުa1sXR* N嵕+B]Ƈr] G I=S}ICZjnd$nW5F&d@q%Q}tJUG9^*]ZUf;)W 0hK>mjL R f LSM?y9.hf)h$zb}Z&ݳLp>B |fU(HE q~BL=3gK +LͼN=!+Ea(js=IcSa\c :y*L`'_$ZťY ih-a0YID\fUpf)ӎو„xgE`Fۘtjz\罟jCWӹG5/zADPN_T,(`Qdi),ܫ"Ti%ìO'_}"{e/uZV>87^A̴&?5+{RPk$I!\tm9+O(du6ƤT"{o0W.EXߗ+dowvgLC)qa '>YH=G[?L {L1}5~+MB-l a`ҲF{5xE^/Q 5M# j931{hojf)FvDFn?| 覹 oi6k7y~7xgQQ)"_D\dMO3fPO:gid3%dō IU _5-u6mE8]qP$gَa'/Ue܃d:(9u/eM fJ6Z6ioRa ~goil%riS_&[Np:o\qRZln];kn_|ܺp̥C qPB"T[ ٰ$Tf8_+ngv?ϿϏmپWhH% lI^Fj@h1x&֮n ;{ŽCwuus52[pQ})kZBKTLС 'Cϯw¨QB&bؐ-s[mE'}p1ZEUxZ. ,xj%IU (f6d! ypj`_mX^ߕYm`(3V >f!08bw:R4i7ƃ\x5!݆`@0)%鿿$%|mOl˹9Nf/[(K%9̏BUv@2ݕ:2:Ѽ{22q !7Cl& 'J%Ѽ?@ |P`mQTQՐe XT<9Y5+N _PḁSOR} ;3R5R/3-nl)ib'6@I-==PD<}T6"![n#G`4 1v9ƳeiȖ]0m1ju.`)ÿnnF&;z,=]. I* Z9pJq& #cyHcA56iL:|* %2G&TV2G+B(HD1A *oE馁ʎV ,ʍm8*2O\6fx%T3(E88銞s>FxqCps3>#wV @+M޻V/c!csxtP?]逎HMz ;=oJ 5_{͠f̡]U7h&q O-&$AO1,|=+ ~j4Tˈߩ|;xR  0&qnEU>2K˒Z~eEW/#J4?=`0 *)4g^h^.|oDX[f+ՠ@''65kbuSFM`r˳bx8|jؔ"tMlΰZ]71d̼7:I?fx݊ju|}nG 7 E ΁im_ z3E.vm9skV)!*1ZS7jc8!#HU, gqsw1xE ;cxetw(a$=jImzaֽ_zXM͋[_L:`FUwONy UH$ ւ4TQar,0`o(|ھw}fMmrDf\_̘KKWU"ƛA/?^OètUӨ-Xx.5c"۷V&,/ 䈬Z SupY!$֞3s܅YB9JK 2QN9: 7@ z FnzX`[ejs&Nrј5"jwlr@')UA?ܬnYGKtU.Ȝs!-EwO/O7~9=!oqҮiMFJ_=Ẇu(q$ϢlpF$5鬳 kp|mRkQ?*_};髯!w.tYcg Zt,˚e,C.+ms涰yF|jy@cfrҴLSi+w9T݈h9)̔̒Dz|N)uֳ)i#@f,t܅r sv{ qt*!dnhXeT!.1#\EL{&EӭzlvCڔV;՞oc:gVpZLiY$̾cr̗Ȭ âFp&=Lj nCo?*9eN]O*TdxPۏ" ћmV_$ N(u%B H)\Th]]UVYuNm >'yOZ@ (Tɭ?HE# dC0̼҃ԿײuDyרE OQo ۆ]~{t*3&ggQQ/=äQ3,P%XL;!ت]BC:dX(a9#/&p/KuF)Sp)$j{#ܖ\.;+x{5 BדBi]n*0>Qхُ@hu͓#ͱ滙=,Tr/VUPJpU}%/2ƣf z&l[KXsnheM Q}ӹHpW@1smg$0I\2nA+sc"r28H%yTGNTm(eK-A+pG,19Ք (_l*nt.5V̇6z<%%2K:{hπu_(ٝϧzn*)ݝOyMR36;˴iZ7CH7՘qDBͲ8[19wz\^9[I?jbD~F*\zyAпpobt V(l~\?mrzS{[%.ӥ)0Ȑz&2@6n[7'92R"@A?0a?gjSLT¨I;ɫl۶2U,-j}˶Ы-mRQnKo@q/Kc&FLd7ogRz3B)Oj!,/*=ieqE9!>a-v2YƷ "-5ŸۈE2-690_F¤/r@!׾5Zܟ{]-SW1;`u|no4aGB3E~^8}{q|~Ii{zx9EeqZExo: c~ٵOӑO):r9#9tzdhSvҌ-*2}\ܵm[52\}(&S5 <~`rtEƁ1:~#/=hgsPex_ XSّ,Dss<xppmÝ")[>HBzG@Ӑ@WgPc/zU_gFxf/~`M &PG̅\B 39hh("PjT åǶDtNb;pDXŎ2xʥ) b~c)ho%E_X"Q{W!;'5kz-/gjM.0S1!*al:"!wc Bg'W (N@e63S2`JXeh/o6m5(y' g&|LRJld& Pä(Fд͎XڣA7wd>GC?55F0"nІ` [#) qDlɊح5j#Zd݁meKBsyM.۱ag=*d ڷ>N= )'d!dˁY ԝAi".m:ʝyX`61f gyeP$ȷH'!X316FH4 !}(<=;ys;PA99;zU? s8h?j!*!ހR{^'D &b $o`Nl0Gә l4`s:JoijKk'r'^WhɿbͽGo{h/!j%z89z}xfQ߸onCU7Uܶl{g=lnLp$YJȪrXqewBȓSǹӴ:oZ&cO[87)f qXPI5u3#L1(?mwT#FZ7< 6O,/m < މ,nOղ-48eoHBVסtE\ 65Ce_̮v+]B?Qh%km3-gkb~OLZ`tv5jlFZ-}+J #S,91ůHa $(L'g,,,,,,,,,0eve+vZ]Dk'%tI8?!{ڠ?j7m7+ti |߇RO0,ͬo|DFe ޷#䬕}H҈Cm|NQqS`Peq|S}8#&^^,.MzmA:f#f$Fo{\@_plG 5E2upЂf&6? ɁPRi1ɺ|`İV;B[TAـU.3{0QF"~2V/;:Jh9\ R'sc\nttB(`A5ϸnK*td2W9ߞUU n~+q%^ZU]ۙn$W)AW8VcDd* nƻ4 ) - 9 )J"' ?Ձq0a~y`cądEݔHE@vdH=(3\2bqI#y2 V0NA t  -r~#'ŗA.4u!EӇRL-)#aO4GƊtw ;TiCM=mXb *Pa;bHy>[cE n0wn#qQQa֬I{*R?+]ʰA^O@t+[n(A0fp6z=vX1pjI}@?:5 *E~9GV0m.B:斊iA2\^ 㦹JVr7Euęgɼ2UNG;*ق邇 RƼ}Z%#U +79~"<[>!B޷ܼT\*eJho4?ȐEkiisˬR]15Fxc/g}ee}5~f?Y,g3f?_4. ^Ef*ymH8"n.ts52[p&(v;$9r"t(+ z(Mk~;>n}V4eYȈ M2`T'Rd ҊPSFǹ,6@jZ&[{)o)/DHϧ4|zV꫸ph_$Zӝ# D!(I 4JmA Sk}~B]0 .kb0%rvXcηCpx%d,,@(Il}C~t|W;&-18JΙiּF(摁eHnė٥ ȵ$D I{/UBUi'W;Cd̡o0t헤64pjJHc1D2*m*Ed4nצL ѱIʊ_[N[Skj8`OAL0d!F-54Z鮣h-Y`-7 ԼzWH2 Z'ۢy9I=C (vN=-U46v߄<%!񱝖L"Z@fnJU#"(SI2%B@7INR7Ȏ$^E' *(}#=|zԌ/L?'oaUg+6\/=J<7lj /^8BʐlLgmvIXN/aRX?(;PSjU"{>n?Uk/Ke4SoӜ.4\٩F,>v&<%;;4XԢκG8yҥ|n0LB\%Cxv*L7ң촛M;aTϞyt]!)(Zeq’?bV-4P*P!ۻ٫Gsr v|tә!oW-Y[AÄ9 LN$?=gGjH o:>kLUHC ſ3vtcFu]3鶃y|aEXijlf+_ZJyxkhIGRnBœC(-|wa=^xj3eFV2a3yz!p~eQ7Dݰ~٪އ6DW/-H`l=]u9ۭq HG-h^PW*Oqa,%SWZA5Rʔlbu) EpXl"#YM0;8µhFnbGg{/~wv93e9&*GorТvep|0b%VPWd+[xCu.$HzYEӖ8^U@[4/' aGU&S[XTKekXG?Ky~lDIW3?VWf_g?g3?R?,r#r$~b\50/ nqx|oCd\l잼w;'{t9(0.ST\jmeŻ:<8=xl_y>2A<RawuȫGv_qVqW7UԞTn}LAޚ1twAc=prI{U~=֪&Û@je>}9Ԩ٩Y-ђ3@$}s Ϸ_F;X~qx}fK߻Q >&'rMy`lR8H@ɾkݼWEK;FxBAd,C ‡ʭf->>{}V,SO!WQڀB)s\GUbo׺Feq둳E= j0?m'>q<4A a[@7S<G,H4|2Fj2"<y*g{/Pq߹Z>:VQ? Ͳ,+AC4{]'+Jgn"r֎A+uZCs`@d"HĖ- []wtvo @`d-tM|{&pKni+| uSa},{[T@@w>>ۉNM6\ >B[f g$dga8?~i\~'>I!ۦUfh';  }&hgZ6&_iF?*s^1^k.dxh(=t_QK?v%#vДzvat5ۯ~ۧ?,½<^y[xȍE#= P˼+PJ3t2܁ eܯAcpZo0E֪ߘؐxf;d)+;p#LGq=*D 2)H?ɨi# 8'$ lgDs;.G%'ݖwhȢKMw"}>Fh-H?p=|B:W<T74*hɸPo@6:y3Yʓ"uw4ݿ1C9y]'2`T;H% {4)iZ*xʉ j,ͤ]4SKR8O :pUK4ܑCln5p4{)ϔ([3zngdd]بL"/=cVSe]M">(MLCtW%wqs)t)F5ǯaоp+qXᩮ`^eB'HV;Gtۧ/"TIxÖTDDjBE;xRcN2̣P'yCC6g!)-8o|m@[5^,~feL1+ ?EU&T>mg~ptH2L)9(1 OUĚ.7P@ަ76{g3{=8sO.{wo-)%dˡ_q Kd''-DnjRIQ=U2Ǜ ^K@"~r PJ4(C$E0T9Ǹ!Qou2aaYRW\ xWh +-%)t^:7pk{g1uiS:i~c(p1jS1˸q^RןyUxMG(wR߯ojy )nEj+ߓI=IZC.#5Vx.?Bup>M%֠? fŗZZuxJλ^iJȶ ϓ440wbEDFgbWP܄]FIahx||C!I2 mŜ/U5ů;ݦOv7y5i>? A|@XhUyxS)n 4ac+X(:>~3LPЙZ#$s^z9jUstNֶO%~ FX~sd)aƱv}`5!8~UIؠi 6x뼕 >{IiU`ez!73my!:Nw˽]\![D%%;>izI;G s +9@[%Q=GYdEz$z+N\JOR &.oՓ^w7. JTWp 9:)6g'⓳{p37<g'"Hjt7ׯwhC c˞ߛO3噲['VuT8*?[Ub̠4wn~9-OC _6FKܙ[7#ygKn@]`}L勇Eˬt7˽ Z2K{^j-ɳv)]9Dy5CDjJvV>2S=f2 ;>k&We~__cqif#MࡤT``W{U<حugτq䭯V}_K, \y"Uֆr9ŻB Vay|ɃIf-D{>/ Swfsqr=D~/0z1mnuDT$qYX}JKycfuDjW2E-+[] ]1%؊ێ,kX~CA%槰xȹ`:p.ݟgj/resgj yR3koYOoy HvTT *Tg ˨ʈAѷV1C-'hx 'D O lÊ.mZ$ >:R1^ u`gJUmu<`1d0ij0J;`4FXcn&F MeKf"1yҚa/7vq;gx1 B jKo{+8fdbqcTQol1Djp2+qƀYU'sG* -(:'~̷- 5::9ֈ!f'] ]CT͜~2oDєD NchO⣓'G rEgO+}A>i~͘hg֥HNe_$ ɳWΚDٚԻÓ'qAӌ䩴(Y]W3"/GYq<3Y({8'ʭAr%sT66N دZG $Ij)yw$d0QUlRpS)AfPc7Gk]׭!$J q GbQ-cFN2 :C>: tZt[#/ɳnӝG̹'fȠ0*&{ 8=\"1 ZP닻JĻ4+B£k馃,VMήNi# fB *tCBBBA t (r }(NÑvÓq=Dq7w>_2)AZw .iu{y^^0*l>?E.eR@>rskˈ x˘{PזzZrTO3 X_'2Nna{PKtM &SKIC:li+ u-P] ҆86]Ä=A5Xy_0OΏjWwFqU?{1Y,=E}ϢgQ߳YlR1ůP7"˄(ca(Udaxl?tgGKmE++M^ͭR%oϩt5XB̯^r\ V8{N?87݇G;;kwv~ۇ󌾝8t3kPZ}<;~|c(8:W&8;;p'?%'6ᩁbl-v_=`z ~!j07<=k?U4>tDocLM3q'h9,r*jTydݑǥX =6:Ac2Caȸ2j]}K31h%k1d$wW*qǨE-b>oȁA Gl-Z}ݗyvp_(F[D9l\HdTN [=az8cw+=sV*J?fZuJSQ2,oRi\9ZOLLZmQAw|q#_X:嘢5ȿQګ)o&,\%#" Vgcw?GOd_?Z?BF0,3K0u/]v: % ]S/?)Pe?ăƭB=alk+sawz"avD8糩Q?o7,,/_[[CޮVF_(QAL@o?N%~}j>`Mѐ 'H*8 \S IDB.VAc­D y, ftyчe_ٻfzRޒ~|"FpZS\gj ?rIV3LreuW21˳*42qSh3LT1KуQ4ߛtDo)hMuzϪ<Ӌj 8qf8pTZF;ŭb`bCa{cwQ$F!H#x~4F`52XlQ68 Z*Fe=lB]A`b,F3Mμ Սk$}2|3U3AqZz?YO9s@N2[gF%Y|@ * bOjڑVb?Vp-&VVb!l~h V*w!8)d J 0.j6-y}yҲL̯z1l=6={D&N/0Kt=#f_^}>oJy{ӇSsic&*^9p72yezAXM1h{>#g2K. 6Ġ0c r ]PBEw&j% _gLr/!Y>JP;=};.L6s3zp\lY1 Ā;,c a- 4=~\_oߞա>x%M@)uB.Ro 64QtTFm8ZaL8uqIu({a"eϙEnd! 0tdqi&9_V Vyt1HDΡhBn7#(7 ݻ&JwאЭ$GqvptsupqtP@ |rj3,^Uve>]PAPג~"@xgB9dq boA!jzxVL:VHSamg&2 .7cŐI)KstC}x磉p\I 6PأS }p Ї쌛!*޳| FխكkV1?v939a0Fnx|QЅ\i\X|W_F(B0k>pt%x,RBT4bt@ck~7Bg f(N>P-i#Az[l6jqtЦ+_C X9F͠n~X$c=֪wA+cQT:nA"T2̩d^*hZJTmp輮!;:L}T8{^FS!_ Wc`s6&..l^1 ˔\/Y%ԅ[q6z ыpZttt`Rn2RKC֬"~ZBN̷B6tQTGT_j 0u9 iUA t-;#<}A>|5,ʼnrsg`C@>Fx/zf42\ D<"h!rU+Z=hdf~89 ѝ(<_090u8 0:ijRٸ!u=uҤ;juR]avJȪ vw.HQ)&_Q^/' nxt1G*aMwt3o (<7/= GG3=s~5\g^3{=y}{}'ri:x\dyA[pI=ydx5"t!L"t>elAK@GiCԳvt:j"3ԐetPM(K ƉE2ZZۆh`fOX?K?^E>оߕTTdNx*Wq&?q0Cr!r-JCsCyi4yZ[@x T ^^YK8_(ᫌVY[K"1'iFuƊ_Ѝ 7e̪I|:nFBsp:$"ä]C`4NڱUw)¶AX ,n 'Gka0?~?{ Yd//'{fAL0+gk||a?ĶiDAɮ-Wɀ g!IULI.F 8Lͫ%Q+f=Ib=N5`˭(UKuZ ^b+/c{Fc0 i=G烨%IJT!f_'( kr- L]GmUi_¶O..sJ*!c +\kXnÚ*х٧FCXjAMC$st=Mr'(0?oO';=vuO[n/6E[04fB|V.Bxgu/FC榸c7d#'6z({dǮ;ڴsц9sUDƓ'xU KΒ;n*U]G6oO~;5Z}CWՖlKmj((9\Ӷg}'\Fvs8L^Pv4ٶ̍(GɊh}i/Ziɯ[*O2G^s^P:t-V)ȖM`W\-KvS^{[G|Gc*`zHҨEE H7c zc\ _fftlc_G$RԱ~6?VVWkO?O뢛U@tHE-҇hc "$nHʩk=dx7:bBg?j=[%]$;,[˝f5.S^ɒ4.[fnuZ.7S"7Wuw\gH.3:i7"|wxz1|.e2KUQT_.5><ếB2QC3#h4)xUSz\vaN~p-l/II ?t|]kDQ0-jMHogϰ1hG/'@s?x}N_ _k?-Vw9ΓU~p*;ⶺs165A5\߅}ݺgV>/Ƶ|Wz?+\7p܅;uGn9|?wv߉;q7.np2Ҩ\>9;>#1J5#>\,$2^.ݓ=x,>>q SRW7bǯ^ƘN?TmE"h9.Qdl_͈.D$1KR71k3ðA#Ң)ɮl LkM.nFMkE?>-{g8{g ^D0rrìm}yt}K̞\Dzsѯ;~$iνM)nOGH˪nM$nVwdz3jsVfUUX$2$Gn1^#tiq;Lt$[ʝw>t̮ =ˍ>+,@| 3`؇ H^~yz;;_//qVZF(֩Q3-sܣi$MLˍ+c~>ZƏH ٚ[̕϶O#=EM z 4`j,3^3Ng3~?S0