aYjBxTUP3LQb%PF=!ByXcv"_"#c1ۀձ./cI fQD"WM.ra 8Nu'1ߡCd ك&$%E1N~ /admX-ֽmG:40viWڥ2S/Sꀽ6~5_B; >}p+8j򁾈8$ɟ 裁o:4ñ(pC'E9"|?Bu"QA:1ԷڄTb $kjȦ1\(6gUlFP{HoAQyM9Lj1"3YLٮ9BG v231~$P ߉uxZdXWEݠ1*5uZN++{kg.Ӎw$蝲xWaw2iXWG ictD|r\i>:*?n0#e gԞϦQ@#5RqcHPYpfFwX ܘ$fB* .6%EXIS׎Ms}׸Z x]tmfE]?ܹåSsGl)c=lR: ``YjǗم yb0}E>& R0!Zn 4y&ݦwQ`xǏ <4gCzqPJme voCdx K{a:+iJ&6%˄^(%.DF8_!R(DmK][$ېS gRK# dfObaC{Kb[zib#m}3|#7:2bQ]kׂ"K5;wF\Mj]xa b<+8.0&_&aX) Νb}OJ FZjGq^2 l`-~z !QHϣG?ۡZ}gFuuY,WCO`V8&ҦT" eR"? >F E@c@?M'}t0ZڴwH32llm1 ǷcJqw-Lr}.9w\A??#/^6؇H&$l7`*Wc^ ޞvcکx;R ,mSBn8Q5Bƚa%3$8[>|ESr#,}(>UQ0ӽZi4]!4йopx,'h|&P *n= 2|Τ %I 2zC:x,gJ7fgu Aaq#5K;Ysndj= $7e;!D1<%B/>%2V2IRgE-beǓԱ3qm_g,ʸٗ SkD~ ҧm&T{nv Cp9;$MNn7;gzdNR ?HWyQ0u ֮Z A} nr)wѸ'9[oKmzqs3pᘣџ-ӁAUI3Va C *!SFᰚPh)rLX:h`O@ltH=F[{Z-*C7Aj϶_#3ģӹ+!vҬ^2'U~{͡I)L]8:Vʐ0v(Q32퇠L5E)Fi#}KDYGTf Ӊ GPy^6@Qo#}'`pCJy3Sh ӑlQ-f߃(CV:n}ؓבW~<mNprWv}JԖpOѼ6Uj0grP xDȍ Ǯ# 1/4SZ=ǻLDmĪ4U_T'jcU7\T2pDJ5Q0H9T7YC4Z]Fzއ v/6b#Փ MuG|'ϣMQL)K6#7!\1#Q(wʽS]GԥF )PR=67 p='$Q^ط/(}8K>-myd Ԉ|$H[6D7|.lWeT-3Xȼ7krO>́;+TC MG7hb1Vzy\+8`Dž4UA \I ZcgRk{6IHgլ#B=ORIO, Q i]Z?bG=p(]@ n~k 4Ln~AJ'D>A,vyY 'P otހ$kֺ,MX޲+쑁Vd6K޷b\6\a xc(αs+8` 7x kRj ' {?Y~/Me\#j1u$xvV>Y+ݞ+_׵ pVy MhEmlW.Uq ͤ Եҗ* Y~SWӓ;xrt)71Շ"kޣeҊCZʕ&Nc-rp yv%r` ? DɄϞ-d99F5?!E|D'҃]0h9Bdec#m}zY ;&*hɏrwrp|ӌ@hrKy>.:s#~VW@tPE:!ξTe퓈7=/5LwSiQC&D[3ʸWrC1*,(R VZҙ TM᛻2z dA"6/t82H6N}j (AXJ6 }g0W{T'62ztdoFv $-mDյgff[G#h0YR !OUX}r',~]5qܳF2 4 0[%GIlQ3!o%Jph)$'ĭI b, Z4r>BѡiHc%C*=X:w+J%O&p^ow `z"p蔡L S6~AMOj ˨ YKBxB")Nc)RKn !*Q^_Y ں[9ߑ*+ElXvc2B]W\5NGL٨4 T䑪G:tbʣPTZv H )K Q H'ξ#Wڑb#ϟ|X@k]d&YbPwг  cd[=A^/ZxK/Z 9VX/sV05 fysoePԉqjQ3s> TKK8;Wܕ5A5}9Ͼs*Njj39Ԏp} f[2_n KUl@uBNQYc3˘e{7OE8AGDfE{y7 Ig6 i_z*@RAw:+Կ2W` ڼ.gJz;JlOD *o@4cj oO}!X%s5Xa&2rkqC'6ْG"Uj L+]viG;2& ;_rFηw,j7| n@M,4f FeDi/G0e83{\Ao cvL?qU5;-!m6pL9ڜDŽc=Q ~{:D"ϺU|< E`<=)Ff^=ՃaM̀wc0s~t-b.|!Ň LЬ~ GKaT[Өfy>]g%p~Ocف35),ԇ)F5FKmvFuECg)}G݋~ e-T 5\ Ph9 eΪHB"(\rՀ Ŝ;VLp7lg$Z/h6TؠIanVҌPa4"s']qvҝgkeԂ챢pZF* WisY*T:HΌ_WϿjyXՔtN[ /_`M$,kda[g[ L$8¨ Dxⲡ~ 4[\Ls>}Д<d>&mdjw͂r`(bJ/fc/Q>)¥9ԳQ)&1YkCvH\)o3XAI1Nԛ$9&|1IS#mPCɪa"hULlB_pWn*7 5}J2 =-S?!#r)(Xc<~^A:a_mkP8#;&oNTXA<"+1{%+D }c_rC|~7jYe^s2 ,1 g%AȐAR۵VP.gCڄ5+;,qr~yTˈZ g?6ڶE evUO@z94vYuc&egѨ!IwDc^/ޑ`-ih0~YaVIᨔ\L"4lL"a2Y%'\ɉ(6HD' V֢ d`:m\pS4((6P0舞_"C+kBbK AnBԇ*} R D=cB@%Ne߻0>oh^p;Wo}b7lՖm9]oI@ 2P.*'g#EPrd2BiS=3.V~Dfv\lmpOCMܼh FHIf'md_‚C(XЯca'<@.y,uo 06vT ,mW2oiqհKE'jP42몖]u$ܐ}!4/?)}#$KEy扢l7T#mez+Ƽv`-^~ٓb3c? jD4n?ImZ~eh `:(c%DJV~G@݌Wg2*|$ɥE@[gpy*"dI;om"3IF 73܄vW{huZDVY~. {%+)PW'A]K @!՚=nHUMrdCoJ~q_?q1C4neasU5/zÞoڔ`{ 7J j\S4Èziܻ݊(5kL2HtЁ7O3 긞vbK$$VA뛵^h0N}NVEE> .o;O3]NZs5LƸE‡_9W+mDm }|m .iȵa*AU+9p^A,)-&vV$ "b7w-M-^hM=GN(aB8І-j˯t 2u0Hph) /.c^wܱW-zێݫb[(tzKDh͂GHH ؐ#G r3'VRx տUGa)'yuz3"F<Q#/EgC[/:0~v=K b-9+hV/)s,? v^,8FqoCwl o~,|K9OS>_{M肺!:(Mld-rw-r--r--mdk-stage1/Makefile7
-rw-r--r--mdk-stage1/config-stage1.h1
-rw-r--r--mdk-stage1/network.c25
-rw-r--r--mdk-stage1/network.h3
-rw-r--r--mdk-stage1/stage1-data/stage1-with-ka.tar.bz2bin0 -> 961924 bytes-rw-r--r--mdk-stage1/stage1.c11
-rw-r--r--mdk-stage1/stage1.h1
7 files changed, 45 insertions, 3 deletions
diff --git a/mdk-stage1/Makefile b/mdk-stage1/Makefile
index 39dd3a499..04fe357ff 100644
--- a/mdk-stage1/Makefile
+++ b/mdk-stage1/Makefile
@@ -114,9 +114,10 @@ STAGE1SRC = stage1.c log.c tools.c modules.c probing.c mount.c automatic.c front
CDROMSRC = cdrom.c
DISKSRC = disk.c directory.c partition.c
NETWORKSRC = network.c nfsmount.c dhcp.c url.c dns.c adsl.c directory.c wireless.c
+KASRC = ka.c
# use sort to remove duplicates
-STAGE1_ALLSRC = $(sort $(STAGE1SRC) $(CDROMSRC) $(DISKSRC) $(NETWORKSRC))
+STAGE1_ALLSRC = $(sort $(STAGE1SRC) $(CDROMSRC) $(DISKSRC) $(NETWORKSRC) $(KASRC))
ALLSRC = $(INITSRC) $(STAGE1_ALLSRC)
@@ -128,12 +129,12 @@ CDROM_DEFS = -DSPAWN_SHELL -DDISABLE_DISK -DDISABLE_NETWORK
STAGE1OBJS-NETWORK = $(subst .c,-NETWORK.o,$(STAGE1SRC) $(NETWORKSRC))
-NETWORK_DEFS = -DSPAWN_SHELL -DDISABLE_CDROM -DDISABLE_DISK
+NETWORK_DEFS = -DSPAWN_SHELL -DDISABLE_CDROM -DDISABLE_DISK -DDISABLE_KA
STAGE1OBJS-NETWORK-STANDALONE = $(subst .c,-NETWORK-STANDALONE.o,$(STAGE1SRC) $(NETWORKSRC))
-NETWORK_STANDALONE_DEFS = -DDISABLE_CDROM -DDISABLE_DISK -DENABLE_NETWORK_STANDALONE
+NETWORK_STANDALONE_DEFS = -DDISABLE_CDROM -DDISABLE_DISK -DENABLE_NETWORK_STANDALONE -DDISABLE_KA
STAGE1OBJS-FULL = $(subst .c,-FULL.o,$(STAGE1_ALLSRC))
diff --git a/mdk-stage1/config-stage1.h b/mdk-stage1/config-stage1.h
index 3fd918ec7..54e3656f3 100644
--- a/mdk-stage1/config-stage1.h
+++ b/mdk-stage1/config-stage1.h
@@ -31,6 +31,7 @@
/* If we have more than that amount of memory (in Mbytes), we preload the rescue as a ramdisk */
#define MEM_LIMIT_RESCUE_PRELOAD 100
+#define KA_MAX_RETRY 5
#define SLASH_LOCATION "/sysroot"
diff --git a/mdk-stage1/network.c b/mdk-stage1/network.c
index 355227863..cbc90126b 100644
--- a/mdk-stage1/network.c
+++ b/mdk-stage1/network.c
@@ -51,6 +51,10 @@
#include "directory.h"
#include "wireless.h"
+#ifndef DISABLE_KA
+#include "ka.h"
+#endif
+
static void error_message_net(void) /* reduce code size */
{
stg1_error_message("Could not configure network.");
@@ -1204,4 +1208,25 @@ enum return_type http_prepare(void)
return RETURN_OK;
}
+
+#ifndef DISABLE_KA
+enum return_type ka_prepare(void)
+{
+ enum return_type results;
+
+ if (!ramdisk_possible()) {
+ stg1_error_message("KA install needs more than %d Mbytes of memory (detected %d Mbytes).",
+ MEM_LIMIT_DRAKX, total_memory());
+ return RETURN_ERROR;
+ }
+
+ results = intf_select_and_up();
+
+ if (results != RETURN_OK)
+ return results;
+
+ return perform_ka();
+}
+#endif
+
#endif
diff --git a/mdk-stage1/network.h b/mdk-stage1/network.h
index a94f8150b..e4612e259 100644
--- a/mdk-stage1/network.h
+++ b/mdk-stage1/network.h
@@ -32,6 +32,9 @@ enum return_type nfs_prepare(void);
#ifndef MANDRAKE_MOVE
enum return_type ftp_prepare(void);
enum return_type http_prepare(void);
+#ifndef DISABLE_KA
+enum return_type ka_prepare(void);
+#endif
#endif
diff --git a/mdk-stage1/stage1-data/stage1-with-ka.tar.bz2 b/mdk-stage1/stage1-data/stage1-with-ka.tar.bz2
new file mode 100644
index 000000000..b11adf85d
--- /dev/null
+++ b/mdk-stage1/stage1-data/stage1-with-ka.tar.bz2
Binary files differ
diff --git a/mdk-stage1/stage1.c b/mdk-stage1/stage1.c
index e3a5b364c..6024f20ca 100644
--- a/mdk-stage1/stage1.c
+++ b/mdk-stage1/stage1.c
@@ -266,6 +266,9 @@ static void method_select_and_prepare(void)
char * network_nfs_install = "NFS server"; char * network_nfs_install_auto = "nfs";
char * network_ftp_install = "FTP server"; char * network_ftp_install_auto = "ftp";
char * network_http_install = "HTTP server"; char * network_http_install_auto = "http";
+#ifndef DISABLE_KA
+ char * network_ka_install = "KA server"; char * network_ka_install_auto = "ka";
+#endif
#endif
char * thirdparty_install = "Load third party modules"; char * thirdparty_install_auto = "thirdparty";
@@ -274,6 +277,9 @@ static void method_select_and_prepare(void)
means[i] = network_nfs_install; means_auto[i++] = network_nfs_install_auto;
means[i] = network_ftp_install; means_auto[i++] = network_ftp_install_auto;
means[i] = network_http_install; means_auto[i++] = network_http_install_auto;
+#ifndef DISABLE_KA
+ means[i] = network_ka_install; means_auto[i++] = network_ka_install_auto;
+#endif
#endif
#ifndef DISABLE_CDROM
means[i] = cdrom_install; means_auto[i++] = cdrom_install_auto;
@@ -314,6 +320,11 @@ static void method_select_and_prepare(void)
if (!strcmp(choice, network_http_install))
results = http_prepare();
+
+#ifndef DISABLE_KA
+ if (!strcmp(choice, network_ka_install))
+ results = ka_prepare();
+#endif
#endif
#endif
diff --git a/mdk-stage1/stage1.h b/mdk-stage1/stage1.h
index a14311918..b6ec98ef7 100644
--- a/mdk-stage1/stage1.h
+++ b/mdk-stage1/stage1.h
@@ -35,6 +35,7 @@ extern char * interactive_fifo;
#define MODE_AUTOMATIC (1 << 4)
#define MODE_KEEP_MOUNTED (1 << 5) /* for rescue */
#define MODE_DEBUGSTAGE1 (1 << 6)
+#define MODE_RAMDISK (1 << 9)
#define MODE_CHANGEDISK (1 << 10)
#define MODE_THIRDPARTY (1 << 11)
#define MODE_NOAUTO (1 << 12)
-)ҕݔt'Rϋjn)yW„Ρzxm N,nӀZpuaikO/t\n;y?B,ARp!:F{ ׏vr֔+ 9LũgU/Ҿss)bSN_dT9ݜG0EnæXsotlUA\`w sK$mѝ6*g56QPpbSԀ0pG'\]K4jXe3SIzk HL5*`E话1K%nְ{Jhz^ IWU"?} J%Г~C)g,:ѧL/( q)~ rjS~m]G]kbK>Kz3QyMƅ}Fةhso%{UL'Ug' '9 P-y4gHmByfM{bU$ 2;5 %>۞X!^I8SDh!jҠDK0SAJl,tsbCs.-o4V؞iQ`r]FO–*UwU՜w^iu2jo'Hgondvѝd&M7>^#^'2z1 ĵ.ݍOZ{ )! =|L1fͶfvx]1yW +Ki6)j 44 2❊ᣔ<%4ܼhW9ǙPc./.)z3e e/q)R0E7j4du)R$ے '5[`Dp89չ78eفQ%_wPZ9_nJ0E AawD-@}]b<`^"}]X˫=g5m))m51MW:p6*r2x)<"iqT׬\qZm3ӝvO%2o E׋n'0j%2DB ̺j*e۞2ʜ-NWNͷ#_:!P1)͝LЊx^y<2ǩBdAVfMz`4Tr;[ I\g#7gs0"HKlB6r`O> nrS!agq`qWyP-nhNAA* ̪6,2m:_ktnjJ ]R' Ӭۂd'm(c~P{uMes,ŌiH("8b늺4DXlNa0jp~*J 44x&=N\Kg -5i u;̿VK@ +XJic~ǰ OvdTPB,miȟ?[cȂ%{h3V^+:2^G)Dsj?Tż`ZO(UPwʍnZmDUˀ|<8L[oL ߇+Q݂hC+-S  Inlކ}f[<]O Sj>ŤߨPnL>tpGHvqQRL^jHTXd@tw;/[O\!S275] 0M)T^NSͮ/_46-[JA@Zw}*(|''XΗ^ߘbL:0(B3 !:9gKs=\O% QPCCOO#Ʋx]3 NFmə=Tnk!< 2R.8xWV c=ϲ m4w 07LŇ*:hʭ )rc)H`U_HDFchnCWhtpUi zis^L|C.()?,HKwXWhXe<ǾKUV~>ib{ʨSAը*ĤYZ)ҭ'"ۜ$Am=Ĉ.ٳց-$B\ߒgAC糱K L4q0qx@27kz!M|`s)}?8oC*JֽB/UgʵK~D g.oW2N~|v9j ({ӑ`X=t`cE`U-MD3Iw: cb=)5tli+U)U>C&#җW s,JEE"팞_f` )aYiZ^ɍh9[[˹/ o:3l&Ee!N2[C[da;NM/19##QIcH|_(7,機-8IcT~bٚHKA4Gr6?==spj\}AbDv (7y82y6$;0aE dyx'K65H&˭*\:ؚ\?-1_*JðPEBt-̋i31߷ȃO%Hab %'8}u?]DZn 1E]KˠhMi)ͨ5Jidk ԫ[Cբ=?Vz jb@~]8v:ܕcwy< PYpRϖǽQ{Ѣf\3aBs2Ha]f $:\ =ʾAzhT>YeQXҠ6RFBDR69O w2vMOf B.-xih!b$*^8Puԙ_7%=Ĩ2׫h񃤛#ҶQx$V^qf/~䌑cdb@JQ5@bk#"Hvpc,X"WL-vѾx v Qn~VQ\vxI?/|vx0.sG\wbelyz~Cpʐ~mC"ez=o㱟bM*'Ň*mJvdޟKɫOitƼֻ콊2𜭞# H EXo:OP^eؽb&mX, %ik46ܫ%ڧrr^ٻu6Oq2-(;ZVp[ ҍv5$DSlbe8nXYshH<_JAU.uD/'< _@yuйmTTC IFțzU͊TFuЇ[,jڌlTmyݰ8-PeXJrʏ$#&-6ںb  ߂Fctg70 TX0Ţ?/WdD;|^m94+gx`։_ֻ_.NY ױ(r/,NyPT6tBd63xB4)\Z7QuqL\o 9a36CBVΧ'D s G$F9DDŘ/h-$/fp`&v;.FJB U<9;]ŸMb ygOHM`<ک":IeGlhQ]UR+6Vb|"_kd5Ê~ҩPgqAqOH߾#!0)=CBTr_׃v1UW+l0BtmMI׳2]PR^׸N uW1_tŁuҞU6?VKٙ0'xJo) vKڵǃ,Z͏ϻ 0vRIܭ0C**5Rp ZoJX78)(\ayy#[ubpv{h8|PVA\Rk5",ӎ؞駦E*/oLs9)3hi(2WK ܌ ˎRsV< Yzr lyN@k@&O1,0>gSv_AUXE~RyssH! xvi<@D>=u؈+A0~T UBJ{IQ6J]ʊղ BUUƨv8L8yC#fg5ǁo3sJ<=\lMѵVT73)X];1VyAg;+ERfmB8,]&q#Su6ހʹ,CgntT+"c^\,V7 {kјowWC$ &|V9z]IK߽J@Du19(g}ugT9 um q!wna1>]Ǥ宋pC=z/H2T %yuF$k(NPy^IGkG58n>D>?*VWGG%Zw1te]F27z #f7Y,zUE[G3E-*T UAFBZmݶw D/FqKIq&Ffd619VڎTvUA LPx|e /^eF@y?yaPE|lsuKնj80}˕J`|j{nL8'Jo?s|.=+S[ Fr WDJ#T@)ڿDǁd5xNnBS#*;u荽t !kaBG_{L*$Q굹S:[.$p]uWK`E; 7l+2h U%$}18A<ĄBE!$a3/>I)Kw`vVl2N*1iq~VfC;[ER)fގ) R6*P>7P$~~¢va7!Pv@DUcޠz6mǠ1uoܘ~wje/@C~A윒^ĠetfeD _h];t.Q2`6%eST崟& g6L\2*X81S;mQ72#(1vZ7 n2%|HJN[f=gX}i:(m@j[S]xB Ng$5WP-x7е'gPXA=ն0WKo (GN`11B@N#nQgxTAlVR3XCnѲ} "%<#j9I[[_ʅ%&38^R]47/g*| *RH[cgL{r^^ntA;4"DFWVW͎CiA< &P,d]챡 ͣ~T3]/vug|P:d^Ř%|^i`2N߱P$~-S!!\w*kdY(*k4l1 7[Ak ?p<5"覬,1j҈vJ[ Ձy|HP "/%zͭPFS+_7UP9hPeR@6히;_Mk/ E On$r>!kPZ0Q#IÒҔVtEUET"rWRmpF'd`F7 7LtqIcO\.E[?=1Vy?UWI NtGyt*»\f1 7ҍ?9`^6=} &ᲅ:}֚$.>98LJ|cJky f x^D XcÈ܋juoXk|C!Wf@p٣ 3#"Œk谠>~tn`MpLFlFru_}ZZOɜ=ifCuWZ++x rwjl5G.8?7WN`]+ۣWл%k흭l%+MǮcg30nR?=xH$3>h@LhgM{1kpvH&`պA$֩@W0yryTK( uğכ[c]ʄ%t~0ᵥ!r_lz;OV%;!_ifv2o˓3"=y}/IsRZ[G(.XQ/Q=Ӳ'4MؖX]q>&FT~kQTd X68FGej $ZGïQ+h/!9 "w1x/kO$`iiMKZ]d3@&eB ]&Kfd2dn& \%ؽ Nd_hWE9Q;ϵHqX@MbxNajh K 7~/E3`8'xǤ\SD~qQx/Y Y)T*ǣqymm> g{,I._+δ/Mdp#[LiZvxwltԦ& 4Q\SeP^N%}ŃR@P!,ϲ~bH񺟮=zSxv&Mw'F!u \A#8ҽY|FvĞy9ˀ#=P#]*)NcR۠˓]DS~ctdi<T Wv)8LO."hp\a ^)^EtӟGy~I4VRG6 \+[^2Sm H}#׏=2-WPD}*̫~{WiF3Mʖ?K w^ѨF Wq +2!iPI 鑜]0}wl(@$1KbL-DѤ59 D>ǜ.LvKKws=Da.pFBs4$4Z @1> &(VK&&VQI;AdOBA:\IFwjiXi)3f+u-j݄4h1hXyx EE!J?G6TC}7}Zǚƾ ]GbD:0~D04FUr׮*Oۙ։kMqd@D+XPFeysֻ?8̫I!8HT[V.ֶxqJ*PWFp'@cN8 8p1Žz,+?ۂLd;f'!HfINad3{~~C& rvI}2U,Yl !J:W72r vARXɀ`&4VQ1N}>#N|uC\ՂpJkssȀӥz~,Z"hRQRdvm /F#-#ǹ@(iH'u6Q6 6(PfabgS3ē1)ǧ$!;Nyn479{%D t LR2`bUb:E:@Ӡl[+{MT+TXaD,T"g[P h3d)]I*tgAzu=e!45&szmCw<ا?ԧm|}WJi]]շԵFeM(;3BE+f!ÎG[a cQlLz_'`25ڐK2ClA"XĤp}:m=h7n! 4]FPt'¨'Tq႘Nj(E`l258N1ae'LF=WOR^.gZ <>VA`D}d?ED\o[<\g$j1Z'^DFwա7 2L %#}pChic2ie.DWٓQ ˆz*̢1+j5T'*vC&[Iq0v[\(XO/:A6^<7UڠLoN>%Kfl}Xe<b^ u Ek'\!ŸZcOӌF ۲*M'*qFQdz-6)"^R G+B}"㾤E&/ 90H=wl x.wazUHFXP9 =uǑ';}ieT UI$Y6~e,GM$$ H%#^w4^EF 1vO9m}w5^W R޴ۨȯYSazFߪY'LbM 8P-{'I4l&uE0Y_DôWov"hLz-qOh# {z@.AZ̰0HIX^ݞ"#*ZF$DͤYbAIP[6Jk74B! _,aWc^Dؠd{11T%7 ;8$2&@bar ,Zq4EۋT"4-gI=z.M`0ZiM5gdW8e .eMl`5L.h*F=>1 ( fiYI[V0PsBvD7Z.mc5ekIWl<3"`[@ rT"mP$,sIi|ۅ /lH\T3O{p dҵtMbuIGQRO,!gĭj(WBPcas ipi~gwW;f7_)|ފ'=PwoxNn u:޲ &R8 F~iE`KC\yu^"z ֽtsWW.Z=gwt=* ëG27[d@?/] ر]/C+;Q@=qKt;QYg")PU7M;oMgj፺GxL[X0˧"g-2R*Y3%@&LJ@m-JSinQEIjȚUMv˝i.ЏЇP&ԝ=%، [c.4M}~qBv8fk RpOOe>uQTb2@ aJv ~AvRc`1/>u:YڜN0VX⢨X\MϽg)oz-GV35d8&"yCG2p+'oRa(/^PAk e8l"RGNEQ ] s^0_yhp6?Y8c[u~M܏j}vo,PTxYGj?r]/YePZy }[Đ`^ϕhCVl9epLOAw"̨gϋ{U".rT@9ܽq,q].*KAI esYׂG|W5.:hΠT(ݨ`=G9$v='[yetcAb-P ,O0:"IMAz/Nl˵`- WRueߥR uJ>4](mˡǬz$|1Uk^k$+ɸ]abv [#"D\7֚r`+q2ks @E^pB*GS0r maZ;ZJ?SyȤHl(I. &~rXw(ݬC"#vļd@p0wQ]rts> O_qVsl|Vȭt&ÖwEq{E?^7JO\@U|$63~$fƇ"mYG`bGYSHͦ7[veSW U ~Y1#vs hͯlT8R0SHRޅ?CBqI7FܬZ]nvoх GlďqaU|c }B G) x_历tq\e"񥌫Nk0 +;D78\G88Fε)`w.=(eW=gq먘|-7{ U{+ؕRXfWJUuݽa@ N40fa>Vuڡu!N,T|鿜,8+ TM֠q:,Ug<ͷN'{O59\;Y 4Ax<7w YuT{qR|mE/ٛ/SWB͙]DYX;AVFqGdL ɼЧ~:6oWB[Ϫ޸7TK_vཆ_"8㨮6_x7hB|kW`gm]y&PPc#?6&EjE5AC4uOY|-NVS>U،U9g<؝1L6.㯐Y S?%s55$lvv cpQb{_$`+%qCZP"+ZoGEobJ`i8&Ij_y%Ri11AD\֩4D ȥcS [U_Gkq?;`T?i@tqXķ.C9B !:뀐4X%q`eS<:JGJubIabkIni}?#x!/(b_E"s>PZ [{)jq35sz=rȠ@Q~@E8gBuuV`_s>nDقCҘ> `Zv<ߍ܃C܆!mRwi&N O걗YvLJቸx4=L9ҏf)Bl1ٛX2vҴ w!e B-psֶ& * ݌ߎ9 LjJ5ZjFn[""QIlA7u"%!7Ӝ[B~Ux ;%p4D֊g>z$/J!c>i0@BS/qBbYVw.p9 >|~N ix}Ÿ3mk"BnmHR_U #gWsP%nF}Ψ/v(k Z>2#Gܾ*{b8?۟nca9 H,Og \7w{ 4Q= 530"Eӑ 流.!Q9σ2}?br &dQQq*pV;x*? aۡgPkҟ/̗$]jE#J53Txbk/f:l^z[pN4X\-&P>g@T.&`K=kgģ[UV|GCb43@GH"8Mw B&?5*{2C-MF#ɉa&z4utÉfa߈\Ն<+AR-SꥉIF:X^Hwݔ%g 1'&r8Pe/rL"$|,f :Qg8S+Pfѕ<MqDWb%K k?To|abZd΂k3ܧ1S'x7"\Q|72&Ux KLlqn6ҰJa<\ 4$եzf0㱲pەdPl]5Q+YƪP2=b˨+8>Ņ9gME&!OY J+&R|<6c˘Mqs҆@70bC %?j*\mɰ~Oqbj߸ Y;4+5cu}KF@! zS }t[C~ZSNp,\qӀ z\#9xjs ˷dTTDQms]j=b-h]0aaqr\냣1;MzCVqWF.LW*,S:š U Ġ7yO_trN+2`D);,gs߮b:^ @Zؐ\$ࠂeXB>M"^}'`/V}_FYd{Dފ ?sq _07 8kJw{ڴ Y"@+]~ayΊes1R'^w'~CJst) GÁtpA}c,:TD2) .grc\嘳E3k0v ˂zޘ U',$;xkś"֝42+,3z5b=An4hƢ l?u]/_3[X|mqe<6 pgS Jߚ*Øh=6%D2}VCR%D d3_%YdM[J-@2AE4laJԃHTɼ|4о9[c-[}e|;5v F~4ǮlIs ]&!GA;3[ʖ[Ecbm=h0 .~fOyBLHYi[AI^=dV6 J1**lH7AGD|[ߥbz s S !Zw͠5mbOOѝƨht&~:-髊rrRNxxĝIebriTIh14m?#ë" pطX R+Ī1l$M 6D>iXms Hd+cLżWƜJ~̰﬽NEVZg5 pO3Vi ~mek~os>ߚj i# C)6>/K#a eնfUuB-ݛZ6IP0eFE9{"ڄq2`UHɱC$E !"Ppjp9AO$w lFh_O2{X}vK*%Je5 yK1F&1+[M|-YCe ljvj Ne0 HsiPQm౑P~ *-H0@>aU[#K*|T L;R0rj~g}\h[' o _Kd0s|\)7`N) ?#MfLy1HRz';#J:^9Q ^6:?}޳ έ"jL5n'zչixBmer?RZQS7Pp=Ig/Q}>3@[_J?v/;sB, ~<2* OG&gU4هL˲Z2#J72x>dcz~v] w. 1&pلؿQO ͩkZ,P-.'p,Y· $$9*n6KqTJ6F@`ʿ1q[>WR Z34L؇Ar(voiyr'tj.T݌KF#v?/Æ/~dH.8^׋K>T2RzؚD:}*ȑa3 Wil8ZU+cкȦ,n$lcŪqCFq I!6)ov %]qcU53))=rlEYgA}2fWgBhj07S*T"?|j)Go߹:rw葲 2BD^a2Fb5*,$|DW&^7KнV23OI0d(KC? %]u`!d?f%@Dh!I4D vp1lE–.Aw1.4 E;^ݼL{h# w/$[<ľ!T'uVx׊2:㆛HU[<6ljHH Kn#RD$v_D)ZhZHX 7pRLX.Xd!3ʰ4%D 4Wh@1D"hjJڄ `32OAUEn[ I~HþX%渒.{a"8Jϴ37?k>&b;UB֥۰+=mw'w.[J2^:D roJ}XyDp_671Nnf#L5sD # -,1I/OV۲iԧNcYZxIEKZچ]U^J*S.(k#cbqu,L g^*Eײbxvu\[܀ڛ^ H3gU`ώ#ItL8O5r#^0Zz^y:TM8sflJI]Ţ߶QӿF _~@My"A3( G8e5=\"{Bώ*T᜶;v&ɿBq tc fVVZ(f?TQo"p =0o^&vV凉^&24q ǁΛQ'R Kw8Ϧ?sS'L +p1ul3`65x![Ȓ<,uf]ͨIbSL"1FlbE΂_h-8GpVB&?gEUTi[M ˌU,_s.+*Rb e[sL?+So[ \VybT{y^RyVv QB7tXy&;USss0 M_O̘K[ÊȟBF[%.V q6rϸ!3;EU )78z[Zl|t:wβ:[rUu67ZnÊJdpވpP?#PYnGo9_&I@4(Z #ʖk.HbY0!Cm)ٓ NP:Wx sZ^&$@scP*z.N1dud:{W0u:"2ygK8(C95vݏlYSwnpLw C}%==V@pۓ볈,SJHz#ME=X0eS(`wŰTN Z1шt s_' H+Ba?ln2@ה/t'TU'Cn U^e+gb8fox/d{"l>xfՁJM]K5+!֬Km}gZc%7qjӯf~NKAw%B(([qM5há:i~Nt8¯oOE7vD 3bj-s˰Ic@.*HI!p,84S Ώj<[@;e(zIC[ќnPO=}Iҡ@ʴUY}@ϓ^!bmGU mK1Oq4Ŕ49:'P-=y+>9Ghcȃ_^tRXnPÚTc ^RzA:$O.,ui RE{kCu]Kpy;W^WEoWIJO]iV |ôi[wx`d:?]0?4Fga/LzJkYCD'YFz º^!@I{ʼnoGlBl]F*m'h:A͊ȿlJBkZp l1q[r ˂=a`-ur_1c,ػGǗfm K$jI2014D:fLYNHW_GǍ-aV]8a"j~ TFS0 З6@.8QYh.v ,ΉE 3ظPr^&&J,{aHMW& $f'bEo#G5.G.)u FRd]:f$3S Fj:DVk/h `_Yt(=hZA(&E5'2%* 0cMɶIf3Ӈ0WIoYEjzS)*ST |f7\Yl_aƯBnmIM.oE^xHkd%5)~ZU4+4 ]= !uo?*.azB[oWBv(ww+ꐱa't@C[ǰgޤ[%81"_Re|ᏝܰGϼu y6JSt+DW\"\Жy]'a!G?'}즧DSǘ\ %Cn[PC-Ej8ָmngyNuE|{>k]!"|8n)+죽ԹQ ey I% %?9g[=]Ҙ$O>~u27QJB;QAQؾiȈzI_%{МgQvrX?oA?K򪡸:6W-,N)c)NN|q /?/M>t.@$Ơ}QmebK㮋@D슄mrp^kv(NGW{fz.xбs)<_Eǯͩ6sHuv=:$xt*%&c噭`7Bb:KvЭFc+Q|T<2WuO_Bh =ùHGSDq grRrx|hkbz[̐,(M8@j1TAn4!M_X*ʕGbs | ׳.xJ; ȁf$|3:F9z;^^+ )~kǙbo(]؃ODj/rF4g >P}Z1 /;!%R㓤e ?i[!gn^(rM؉:kLvvɰmdB̯ك@J]de/)\rp45\a_Zid h*ic6ѣr||V( xy#SKGKa6}!'WUo|}?aG,A4ܱ2Bܩd\Kx7-2xIcfʫ(|K4dK,Qg$$'mNXdV =E\cҩݎZ=؂+Aэ[. ` TQh"dZ,rzjDʼnwO$j}gM6mu߈DŽ20w0F+_5o!3zjBG$ӑNH=@rG%@y0 ]$ss{:LcMa!d dÍ“c)\'QC<3$ ~':LM [P⿁h J- * T`B1*&\,ފ"|G"V+9>`њLu*r ;q|ws-!ALh s#vZ .k#H?+6.Fa5wp}JrXly4y .A;o0qZ !>%M VJbPa!s;:C)(g\{PS"2.`{w:hV.T|d{jfp/ ԝrS}Gr/ph'. ɏ߀ -{6ss{؀U,ΗsYqvak/_ /TYGY Wbo=ɺ^BsIJlꈪ3hWsLL,GsUut܏ Ad!)b9[jY1dP_g=&ޘHL1N- Qs .r"mᕑ }=SOǐAΗ!2&"xʼE 5 ɉ,rQNChTS{71[D=jx ^-=%AnhoU!2cE;#X*&"R˟,i*z,Qx)OӬ~v>QNɥxVfQY}*\T[ӰJf}]Oh!ŐsqH= zS9BBAiV/ϑ6_0v0M^zÙ-;1G ۤWPX,Loѳt 1'MHQ}Hv}/:g;j%t$LT4{bak0@vc5-9!u:~9 R8 :vc)]ۣ%ʄ=uǜ#LAa6!Ip1 r#/HN*w YzB&ˢ=2_8tj%#؏3דd h\1/%] Fduʘ̉v:`(p/2vaLsJUИu2)Կ=C~^[*lʟQj6׏XgڷR?a-u)dp05 'tx mCTC~qぐ!U\<_K>J3]sj.Y"tAGW.N**O,weEV/ 8ͦW,Fx^7JμYF6,QCz9#nTkŐՆ$G-7NC2;(ZAiH}g,$s >ZiqWzrQ]O2c#"-m xc H4D^,qJ|r.:, E -s Ho+5c0[4H$`6}.]!!п&RIy{RcJ̨ΏTVppE)Jh '_JdP'M9~ZDw v Xkxqȣ@z 9P=SIm:x(,{зP^yMazu;ǭMY,T,3cwG~ܪ~4ʢg.uS,Q͑_g6¾c+1qp 'QBGwr ٶH«s Q@ \i~[3ۚ;*AcZ|ZEa{%vnm  FR?7X 9LuL2㎧]a[wmHl%2ڮ:86 N=|il')9m) Pad8 Hܨ%q1mGFeg&N%`ܱq}I/C)6>co^a-Qi\e`򤥼G+  -t?'8iAEr K'Ȼ (0[./=7"ehOLj)y0 XH8a͵"pyPo#zGH+xT4Yh [|HiJsLIsʣ0"Nܹ?dit{p ߪ*'c&@8bp w$eQ.}A/fmsXל^g찵$3桅\.Fzc&"@[HW"b`'V_4=%Z^Ʋutk䷃&wGb8av -Ec.\9>6@pI+Y a]Ҍ[vdY0i^R*>`+9vVR': pʢX U+')|n%Dϙ,~$8g2&[֚*V 0 6<{&~`K׵UqXb>&AATlk s*_54A_˛_ %i$QR !PQxho6^vjQK/[N-"R0*ߐKԹnyBw'3q~%%Z(.BdֺZjxMn8~R^ZPuZho| Qd 抑舘o 4"$eKVE3C%[q!"J_+_< )_WoUBYƶoƙt7Ckm @\`R3څLsU^Jk_{q Sc=UQoNy `BF bC5|M`Ddk+Y l^1]+uD10ȞϡFV>$)#k3Vש:3PS;~WC=Ahecepd*!t6!w-сemߌ,#):4ekPXypfsrT\!Z{OtZa 6O)Qb%d5 4;-93+@:F wjlॷ@jxP©>[lZuh3:wzsץI@blMrwE|"al$;ɪI#,r;o67rMGjv#LA~$ ve)+%Ίg:ByHA:Џc%Ok.ꅫHTTayyuvMe'kʫdx]M(DC!9G+Pt< -Q T#9 p2G,RЀxaL杉/>l[U&n=|ho:66 CaP+\D} kXn"h\w|nČ3yI /i{0Ef]qE\7faO]|83ҸC{Ӵo F)qVe$Q}jŵJݷo@0NB9YeOM@QRLA[M[)63@}]w'zMot1e~foBĖ=1ňX/sr-0x2rHϘ:}3A8)ᾌZF4ܬ%{$ɨ ȥDe#l-M}V*QӐ&_3_G _\fQ3{C ?>(AL% &>N߯0:MO9RD&6gz!:ySK3 ? M'迅%^[+w[sT?=#%RRgAy[^uBo/NnνQQi(b)G?l1Kĭ hߊ.h ǙJ}WBxUSu>~GJKQފyVFר&_bn'B5̭JOKmwOtcG4;-|vf/O^ӱA+/K%;†9яmgy`{eb_R^=(2&ܴqQ1֐or%td¹KVK>[Y$ Gk6nkfJEBo4Nߘ \W@G_y/C)Na9G?+Qv%kyv6[t0'ȉI D8 Nu6Yg3L>d(M5L.V/4'bCh1ݑi šYnP^ЗJRp 㱥P(QPTVU2+-d@=_S+ 'kDҠ oEQ@7]d/V4v]\:' tY+}^Ҥ*,X7 jrfyOj w15ݒZX'җ8p\DՑbV+0oN1p3E 6_Ý F WMAaFy|z11߅vgEj]eF/9{H㯂k)>9_U-& K_7mx%p a2B |:==`EYՇ$y~{rЂK mjC{u*'͢@pיx E36[~s\c:ގ*!hKX;5kW %,iNa?G;OJ"üM7OKl曽1?OLSqk%%&Hga{BVOr/ܸ'le>=g^ڷ(!g`LXIpΎ\QQ7LCFXo $Z[#KW-Wxj4Ɩ>Fj0}nc"eay.% Mkb]\g`Is-a_c/6A8Ė9KkH]dIY{'Nc9K i YWvJrdWfwF9J?^?ji]ɖFYI@jz$٭J5PќٟqrܫOh"C(Oj鼊e1GI6m6d$K^L_"wV1P:y9ʟDl]u8k$[4%7Sr A*$[s/Nz&YB#Y*yHaРL8eT53ѷT٤69}s mzPT/T5H7c[ Ogr+6 ڦ}?^Ǩ%`+fdJ~r = _(`iۧKiKGb~: ]#DmjaqDKo8GCƲh$ͮr AɋJO Ïe&.Ɍp@oPRP/>ĮT"hT߻pw8o- {N=jO<ƔdCl)"DFV8;?V &OُGx:@XjEsgDFm?~%_˲9'frq[{IM 10J~Ѕ\R?LS[)=