aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/auth/auth_db.php
blob: fe3ea30b2a55df254fe2eb77d164d9b5dc9bfe02 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
<?php
/**
* Database auth plug-in for phpBB3
*
* Authentication plug-ins is largely down to Sergey Kanareykin, our thanks to him.
*
* This is for authentication via the integrated user table
*
* @package login
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* Login function
*
* @param string $username
* @param string $password
* @param string $ip			IP address the login is taking place from. Used to
*							limit the number of login attempts per IP address.
* @param string $browser	The user agent used to login
* @param string $forwarded_for X_FORWARDED_FOR header sent with login request
* @return array				A associative array of the format
*							array(
*								'status' => status constant
*								'error_msg' => string
*								'user_row' => array
*							)
*/
function login_db($username, $password, $ip = '', $browser = '', $forwarded_for = '')
{
	global $db, $config;

	// do not allow empty password
	if (!$password)
	{
		return array(
			'status'	=> LOGIN_ERROR_PASSWORD,
			'error_msg'	=> 'NO_PASSWORD_SUPPLIED',
			'user_row'	=> array('user_id' => ANONYMOUS),
		);
	}

	if (!$username)
	{
		return array(
			'status'	=> LOGIN_ERROR_USERNAME,
			'error_msg'	=> 'LOGIN_ERROR_USERNAME',
			'user_row'	=> array('user_id' => ANONYMOUS),
		);
	}

	$username_clean = utf8_clean_string($username);

	$sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attempts
		FROM ' . USERS_TABLE . "
		WHERE username_clean = '" . $db->sql_escape($username_clean) . "'";
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);

	if (($ip && !$config['ip_login_limit_use_forwarded']) ||
		($forwarded_for && $config['ip_login_limit_use_forwarded']))
	{
		$sql = 'SELECT COUNT(attempt_id) AS attempts
			FROM ' . LOGIN_ATTEMPT_TABLE . '
			WHERE attempt_time > ' . (time() - (int) $config['ip_login_limit_time']);
		if ($config['ip_login_limit_use_forwarded'])
		{
			$sql .= " AND attempt_forwarded_for = '" . $db->sql_escape($forwarded_for) . "'";
		}
		else
		{
			$sql .= " AND attempt_ip = '" . $db->sql_escape($ip) . "' ";
		}

		$result = $db->sql_query($sql);
		$attempts = (int) $db->sql_fetchfield('attempts');
		$db->sql_freeresult($result);

		$attempt_data = array(
			'attempt_ip'			=> $ip,
			'attempt_browser'		=> $browser,
			'attempt_forwarded_for'	=> $forwarded_for,
			'attempt_time'			=> time(),
			'user_id'				=> ($row) ? (int) $row['user_id'] : 0,
			'username'				=> $username,
			'username_clean'		=> $username_clean,
		);
		$sql = 'INSERT INTO ' . LOGIN_ATTEMPT_TABLE . $db->sql_build_array('INSERT', $attempt_data);
		$result = $db->sql_query($sql);
	}
	else
	{
		$attempts = 0;
	}

	if (!$row)
	{
		return array(
			'status'	=> LOGIN_ERROR_USERNAME,
			'error_msg'	=> 'LOGIN_ERROR_USERNAME',
			'user_row'	=> array('user_id' => ANONYMOUS),
		);
	}

	$show_captcha = ($config['max_login_attempts'] && $row['user_login_attempts'] >= $config['max_login_attempts']) ||
		($config['ip_login_limit_max'] && $attempts >= $config['ip_login_limit_max']);

	// If there are too much login attempts, we need to check for an confirm image
	// Every auth module is able to define what to do by itself...
	if ($show_captcha)
	{
		// Visual Confirmation handling
		if (!class_exists('phpbb_captcha_factory'))
		{
			global $phpbb_root_path, $phpEx;
			include ($phpbb_root_path . 'includes/captcha/captcha_factory.' . $phpEx);
		}

		$captcha =& phpbb_captcha_factory::get_instance($config['captcha_plugin']);
		$captcha->init(CONFIRM_LOGIN);
		$vc_response = $captcha->validate($row);
		if ($vc_response)
		{
			return array(
				'status'		=> LOGIN_ERROR_ATTEMPTS,
				'error_msg'		=> 'LOGIN_ERROR_ATTEMPTS',
				'user_row'		=> $row,
			);
		}
		else
		{
			$captcha->reset();
		}

	}

	// If the password convert flag is set we need to convert it
	if ($row['user_pass_convert'])
	{
		// in phpBB2 passwords were used exactly as they were sent, with addslashes applied
		$password_old_format = isset($_REQUEST['password']) ? (string) $_REQUEST['password'] : '';
		$password_old_format = (!STRIP) ? addslashes($password_old_format) : $password_old_format;
		$password_new_format = '';

		set_var($password_new_format, stripslashes($password_old_format), 'string');

		if ($password == $password_new_format)
		{
			if (!function_exists('utf8_to_cp1252'))
			{
				global $phpbb_root_path, $phpEx;
				include($phpbb_root_path . 'includes/utf/data/recode_basic.' . $phpEx);
			}

			// cp1252 is phpBB2's default encoding, characters outside ASCII range might work when converted into that encoding
			// plain md5 support left in for conversions from other systems.
			if ((strlen($row['user_password']) == 34 && (phpbb_check_hash(md5($password_old_format), $row['user_password']) || phpbb_check_hash(md5(utf8_to_cp1252($password_old_format)), $row['user_password'])))
				|| (strlen($row['user_password']) == 32  && (md5($password_old_format) == $row['user_password'] || md5(utf8_to_cp1252($password_old_format)) == $row['user_password'])))
			{
				$hash = phpbb_hash($password_new_format);

				// Update the password in the users table to the new format and remove user_pass_convert flag
				$sql = 'UPDATE ' . USERS_TABLE . '
					SET user_password = \'' . $db->sql_escape($hash) . '\',
						user_pass_convert = 0
					WHERE user_id = ' . $row['user_id'];
				$db->sql_query($sql);

				$row['user_pass_convert'] = 0;
				$row['user_password'] = $hash;
			}
			else
			{
				// Although we weren't able to convert this password we have to
				// increase login attempt count to make sure this cannot be exploited
				$sql = 'UPDATE ' . USERS_TABLE . '
					SET user_login_attempts = user_login_attempts + 1
					WHERE user_id = ' . (int) $row['user_id'] . '
						AND user_login_attempts < ' . LOGIN_ATTEMPTS_MAX;
				$db->sql_query($sql);

				return array(
					'status'		=> LOGIN_ERROR_PASSWORD_CONVERT,
					'error_msg'		=> 'LOGIN_ERROR_PASSWORD_CONVERT',
					'user_row'		=> $row,
				);
			}
		}
	}

	// Check password ...
	if (!$row['user_pass_convert'] && phpbb_check_hash($password, $row['user_password']))
	{
		// Check for old password hash...
		if (strlen($row['user_password']) == 32)
		{
			$hash = phpbb_hash($password);

			// Update the password in the users table to the new format
			$sql = 'UPDATE ' . USERS_TABLE . "
				SET user_password = '" . $db->sql_escape($hash) . "',
					user_pass_convert = 0
				WHERE user_id = {$row['user_id']}";
			$db->sql_query($sql);

			$row['user_password'] = $hash;
		}

		$sql = 'DELETE FROM ' . LOGIN_ATTEMPT_TABLE . '
			WHERE user_id = ' . $row['user_id'];
		$db->sql_query($sql);

		if ($row['user_login_attempts'] != 0)
		{
			// Successful, reset login attempts (the user passed all stages)
			$sql = 'UPDATE ' . USERS_TABLE . '
				SET user_login_attempts = 0
				WHERE user_id = ' . $row['user_id'];
			$db->sql_query($sql);
		}

		// User inactive...
		if ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE)
		{
			return array(
				'status'		=> LOGIN_ERROR_ACTIVE,
				'error_msg'		=> 'ACTIVE_ERROR',
				'user_row'		=> $row,
			);
		}

		// Successful login... set user_login_attempts to zero...
		return array(
			'status'		=> LOGIN_SUCCESS,
			'error_msg'		=> false,
			'user_row'		=> $row,
		);
	}

	// Password incorrect - increase login attempts
	$sql = 'UPDATE ' . USERS_TABLE . '
		SET user_login_attempts = user_login_attempts + 1
		WHERE user_id = ' . (int) $row['user_id'] . '
			AND user_login_attempts < ' . LOGIN_ATTEMPTS_MAX;
	$db->sql_query($sql);

	// Give status about wrong password...
	return array(
		'status'		=> ($show_captcha) ? LOGIN_ERROR_ATTEMPTS : LOGIN_ERROR_PASSWORD,
		'error_msg'		=> ($show_captcha) ? 'LOGIN_ERROR_ATTEMPTS' : 'LOGIN_ERROR_PASSWORD',
		'user_row'		=> $row,
	);
}

?>
|ɕUn3a#Ý.IZ.o !(b `TʎfpU͵~̏W67ZTs5ڲNMH|} Oё8aF[ո\[#cY_.\@;S:eXw1qT+"x]lctǩ꒙J#\퍳!GaU>BR,u,e|4EɑeRhzk^^ aqe){ 1/q3X|+|Dn# pbcG61YR H0/["^_LrdÜ裐q``QܦNG|ArF`YqI4MJ ^hx"(+PxtRJ>,($tӊOo^ Gwȼ8w*Ѣtn*s(+{9슼 fOǐDu~Wt]*I-9!E(cp6ҥ5?>|}Vx)TtBЙn.L)U6TN!Bʸʯj? l^1-Att~T2_>2rø_3i14 TX^k~B/I|T%8N,KW9d L1ټ ٜt(rhS=%pꩻO,dބoq+2R23D9,-boQX;ӽN-ТfopDo`=^FbF0]l(7)l>(mɳO'VnPJ#m2_Fx!i&9cO[Km*D+DԹځ £xpѯ4TLs&7ҡ5_7{@?W.&FrUAGvL?9^n\E>V)h^8$-. q}L AI>}T`eTe4Ctw8ZRЅ y2/JUZ\fp5 ^YU&vcY@"b\KEeB(a*݁* ߸~jy\%,ȸJ~EajG/}mK(8۫'_oY36[qwj_Ʌ@6h;Y81AB#Tr"S0h#u1ʝE(218}5?d̔ ]up9yjj:I_.uM81.De_@ Fk~BNH2&eqRķ//>apaYZU#5 Kr;Hpd<q $\JڻPQU"ԯ]Fˆڬ./ >+L4y+ړ>j*ex| ]2䨘 `MH?H^Y7mYIYovyM(*3lH>!p|'PPlU`P"fX{/G+W$3o?l+zfYq0B %ExUl, 76yOv2)P2\q :W?N)-8MAzoo5dk {/}6Nz 5ջucn0л`#!nb1u^F] 3A@ab".#nCzzԳi|H%/v˵A":݌;¯w;M)zRdtVX~ _u͘^4Z.Lh&c<@I \/GKէ)&c 0U"m>O\E\B?Lat(>Px7jUq@e^Wq)˕u#M->zRNVh)r13mG<"!ʰzxz믻sl'}u5 H:`ʅL z]A/bvH% [$<ھ d (e<Ġ4ݛfCaN' .Sa'| 7oaj"%OR~Mn/Y>g7W) tϨ5pAMY*G":]Z`s0d9!=A 6Lvbѳs\\|OТ#WqWR5;srv3oY@FW˒Sb  M4K1k(fNmsZ + p>Ͷuj<еϟs=P 3A~MĮ\3T_Lvj =}Eh1YHMlޜ$K)ٹi ^9vW~Wuys,1!YBMip@阢 u6SLeq9T/OtT¿P2'ӭ{W׶)M0`.֬q ¦Ԗ( K^D>i)ƔDGcY] EBt4Ҹ-˰L_?êK`N9Ė%x cEb"W]sڮeM"QxVBngx@7GR_4o"72)!6ETkve/iQ#h|WF75s&ɰI!ݸ/ff\\Nm'ѐ9k-PM#xu9-Dq3H wH޻Hh JvY#[|~jN- joSvLBD&¤5}Sbk#<F)2l(eU`y@4W6r~&H)QAnM-UZr DRhH R($DK/$yvzHZ)!y⧏SՙCoQ1^6bB3Ώ4^5 l̰ww@pLT!9^*[T){/8=RܘA =Q3f-GJBaTɵ²T1-+ij;>Fߏ~[Ц=[W:CՅ/RZ^ߧbLJ~, ǎQP6sk؉gVaIzz$m}Ddђ>, _xlތ6A5+ƌ,@kpp[ʾ#؍H g +ygh" 9qT(:y¾]yClрIBD*B2aB}WQ a:*Fv~n@V _]%Ҭ 9,{_Wl@ @%UllM;dd:?iǒ/fi 9%k|ag-PMF)o2_U"?避蒲Y׏=O#}/+pZ^žT2&yp8sT#US EX{\e\)uM q|.EZ6?xg_irB-.OПӡ eϞyg|'/ YmpO 9եb?Y:\7'6Pr`3 D!6Őqk@Uexy >00]mPu$4SBy|fu(ȿa{x+H)62ݾUլRC@GITU y2iY=fgv,`>=NȧH7%[Bw)O!Vo }~<`!0=_bKuTV >9+uA"Jh j4D20~kzm;}s)]  E̷\@.̫!펪Vg<=,3~X~˗OP`̦^d]\p+ dnsp~tj5 <.k/L/bS#/WCNeG\?h>",,ϸH304.j.,T۷-Cp|=+D)BDJ0K\G*I\p`׈0=7/v}HOjPH镖KwגjqqVyT[5m>fI*b0 t~7KdI؁听zOwsx{OB8׋v9eiimA_gjG><">b[8H)b7&F-PH` 6m]2`i k_b)J1n>3g^MqAo+[Hh@Dم'}ԉ?'ccC2j%1/T*X󇝂۹ ]_Se}T[:_#WhTMhasht`qtYyIBNȐ`5XoOǿe84J.[m&BUC-vn(-'uq4 BP#8J1e:tPiaN~{.Z"pq${?ziZ7RO0TG: |I$4rPW3N#ԟ7Qh@v%luT!@ak|11EJ6ͫ%!jUV[ZfѻMȑb"~VBZOu @A`m N". DI3+#lԃhB2&#'k|kiK]яz!"=']Pzg*D B= ]H ,gQ:1$X~ZVԝlGn˪?u[s(詈n m ?fr)!dL(5Io+ѱqXlOt#!UY]nTwȿPؽE1iHvb'FOjtֹz.&U+w/-O#<-8oc<6zgUu 9icp$Mk .a)#떰J+3"AR9 lXJ/8qZn;yqqFOI` !g"Hs EIg}ӺSf:Û 4oq$?FPϏۜdFf sBZD{4J~-T7+ߺB?Xy;4*_a iq`̪r\꟎RlI xҵGGxd̬Ji+hjf#4:ŦJn]7M7TQE]IjͮVJWԁ&c3ZjAy9H޲'i3U86)=$t4]RBqd:۸=_PƕP~*EV|ZSf Q}|ygGk6۟ 7DgH7X9d '~v7OV @0At˽ pJJͳKzkm%"i}jOv8B[$(tR+}Kf8pܾܽnaPxgcP;oz#1'cxrc(t]h ۆ~iM -{-6Lİ݃3,ҙ|t{[Է"'m4qqĥmfW$aIub9UP(|BDs C 3WZbȨXmm4SvQbI u榃pLm[1 ȡ*H/a4*"db4&CR17դ֫tGT m҆QZȋˆTh{m#wZ XR(R`5TtZxdžA`僀㥎."t)وfs׉1'-s]jqn%&uBVsFj+bˌcСV%XEVҮWnGqwmWUeCOr*@p dz f:^+ytEqxy#jz`>LjYdH#?uo \)G 6 ؛#7â?Q99y| Z̒Ɣ^'^${xIժ8I8kQaBƓn25\ydJPdhFa0Rsź+mv\zŤ-?UFGYt*@u|zܑP\MW+%_'?U{TsJE*RLwFZ/,]#9ʜX**=h6-?PEVqĈ}۔*BF' p}ZE1'T[ 3.q ,9.#b3q([XLV]C?72a! {qTkT`K|v.Q,t~-Zgd%a{jF\ Y~2o8ycz-Ju) S#F03O^H]a`J˸=D+k{.gBeY-zU$YCO JKdys! W]C>M5+Y쀋Fyfy2{`s+(;.kAv̏^/?.ZEPP"kjY4#m>ɑf7{ۿߦa^uqBxB]w!Nrs;Mlbл^DfJ=sTE@@^xLVαW|(],ӎ;7/K&E_ 7Q$}ᬰhUn2? H{TeeDѨ:Xº:L _Má"yD}X_% U^-{o%*VWny(x1 A|ҥ{Ӕ# W|{E ٖR14](r\CCжa~b(fмn-i52OgLB60AmQDtWTesT wfW}0Hsx)ygw)[A7n.|W]_HKd6y }D#P@ާ YUU0pI=xڛ^ؘZݸ^!2EЯefRK$)`eaL0%iaKi%5`Y3 u^+u<༅13SoozEx~䭩!sՔqz# 0^{xJ--A#P -66_5JǴ^ 8]Hw)@XTA}v7́9g}lo64O_sTN*!`8zso3FVBE qe-Y\wJ@z^`5>j2l{*wSx&Uʬk|_5Ks^(.j%\?uROC 9[s tصpLC娩D4R:r{<-y_7{Dh[ 9P*XT-*čskIQ-mz`/ѵf_Ȗ2,$qq*Oj/^UԲP>bM3gmN[+f6T6Zh k%G6~Zĭؤ|調k_}*3IjDl_I(ۢr:L 㛈ҽKeH$=v@rL@ќ&"_'Hi1]Goɯ߅mׇn4Ep=?Wz=gحIj3t>Uy__(CD^_\*#>5hfy&dťB/;|DsQðfi C̔7f,줠4s.)ej+\PlRvLveyכyUqFHjЎ%HH O*; J s ?<$zS8Ȇ3|l]&X"ѷϜbx,$&w)8J ܺCO٣Aff(vb~33BqID`Al8{}qҥv2ϕiRp2F$zuq0p0HBZ;e>]oQU$RK_1ۊJgsUIB)駙}v ]eD'&ϓŊ{ e#av`c5!cI BWB6e!b @L`dBxic}v1z Q\vouo9U^ΟOVD b2X{" y'2 =ETOJ(Xg B[ΦT4tZWI9Yp<=AT\.$kncWOE`/ˡXsffjjLUg?6g`G1a|~[f&Q6[&׼#i+.y%oP=7F6D7$4X88|8no< #4xS66{Zj }2w ZQ)ﺂژ{RmĠ{-ݩCx8`nIVZO^Jz!&᥋V/(#-h=t'zs=:7*CgHwyV4`f<} 0SHXW-ZunHu $%:b bو>Ycб0!GxZ!5'V^[t 'o|Bȣwb}sU H2'c`>]z/0QtG҄>/|(gL7U:cWj; |E׀@U˹&#ݙ[0#eutsr*)q|~?e&N씁>+#rц—6Mf{>㾜BȨF_9@_-VPvDÇ }Up!s<1 :]^x.X,=^d)>ȺK馈WK>{avDr|v=S`kq])nǕ> f =# Q+rS>y7| #ӿ)'6LM5SaҁrʳF~uRc9 ;rv!{+ dV%"F)峈S{UIn҆5bԍs-zRRS 1go{d 9#d/=ke~`[Vjoww@Q)f223='x=-ݟ4Nܖ[5X} g3G2uH+FZ񐙐ՆaJbJ5EO(n8_ґΦtn>UobeLkb4;F#k٣xaԫ/ -1GnxnQj vGa` D$Y!k#3Zƒ "n[- J%x0\ o On=GᕙjunL2֩"L&SrL%UHifRAε7?+bِ_Jv+3C4l5|d Dψ"WUc$"|{;aLV>:qJ3ҫ#Hn_^*jJ*>Ӵz "9 $*`VhXoM+Má#?=+DwNdFE[툶Etyify "a[6֙En !S{UAɏ X#ed(_M+-Ǿk-ttTBAHӅb\& %,Vϣu{gn)vaBV w~8A7T#ɛTt &7I%~Feͬr.[Zq@ lOUUV?OxпRHPz8>\KӈnT@@iuC!Xmk-Yt4n#lN_A3H if8)oz9oo7̈KLYX4j>,ilE1:g-Ԫ~<]Cw䗺yMIݖYAa;i:(x0%crK{S/CHʇP|A9bCJJHlS;أQ"貢eg9~(^~PnTvia$;qE@VY z]{E[b`@d_pXDAkjX&kgY.n1<D KI| 3 qlԩWrdRvPP;3cf"ϖZ]xEZR3NIρngӭQ@>v J}$(N>j)|fֳ:8 M+*cu⽰рDMǠ)f fO%9}qgFy9!m$ϰ"8KZC_xJV6U 2N*K.uepzYuҜǁűD1ϑ:4c 2%o27hw\n5 F/4m%ָM}ԍY#6Jdu!M|P;PW65(ȱeX?Qo h @v@bͬJVtA~^%Le8'Cm5$5|yߏ{"o sN,ᚦ#Te–3R 4' p /4̻Cq̮Z.-Z,Lqꏚ`i ''zLOaTXk *^0Q6˃ a;&CtǿΓܠUjg8 m'ڮǛUTwݩhkj0_C_l⺟KҷD˽{r^#ѶMTԓ1͗:OK/%V4E`b%\B+ K3l1C`@?O.tG_=?!C Qk08eb"_mc`6KNDEYU b^sAy}>En[HD-UUfےY;Oc "(c9Wvj -gH _XDIBs ! __taaMDkK8k }S쟮pz"ou.܋nzC\kxSASA'(R kyhDTa ,1$[e>t֜SIV"S=sA< dK:iIbVU9U9~95Wg1R_7?)voI/MW%׷s<6R^^A \=&$1Q.iX#|H{F.(5@mr7:}*e0߻ǠB TLx~>(V#jۜ#G*UְzSjfꥌRZ-07_Xu6Ʃ.ҩ>(/~ߧz%gyhRp=z V۞Yn|)@jM^iC|2ƛ8dNbG;7>Mvz+c߃ ބTFTk``I:3"5!mk?aN@F G̬+ԞlaI1=!x!&Y%,Y<۷mK1.8kSXnY{ƍs"IG̅cʽmiH ]Vlq&ttD57Si"9Cp+1 .=>"A\cuFfecd?a@:/p.x鯑N.gmE8Z (9Da B:FkR,pBz9B0^ļqeIdc5J .Vw'yuS{O˄5Y |ae c٣)/g_GD]Kin$yy^`r m(2y_%mQz0CV8q rĒ$?InP+ui`t//&؅2bkЕM[s1^n@Ut=vtCKZ2[vhXi~3fwc'!E$KlsF.A"CSOHZîFuĠH:Z0`:* NW6bޙ FO3iTy{ne,Fۍk]ʍD,uMiGIsiRBgV:3 ($6XմMc w٨%]ygNsHV0,V&ajjA;;͏P8Tu̙T\=!AmkNIkj753d>$ \O.,њCsB (Xi,E#\W@i1 R:ƒf<9r|X g\zeȉ]zHmcIhf36 #oCS4\m+Et|ߵPDR$͂RVǩ)jGƏRK{T!oqȏ~~6=pRcIy)so -"f(%uٞk1 :5&mUT:kĥ984:;!C䳠$\#JXT/~@{aa<V,o鶂4·֊in]?*-CWDRmdf8CMG֍ p8o`>>z&[<ߐ>s|S4j2Z-"DM>{>?}a=]]0g-c eQT> &=3|8Y='I"_ S܂b9y!vC8ɳ1_R`QMZj-`8_<(zn8E6`wuW 3~Pqz4v' ;1*͛|3=6r P:3wmֆc +I3w2nkHF˂EIj7 4!wG;4YG8JT!/ ?1RF~響`.E oycwayպ}g"@PqsR̂c\Ω0LlfQOl(֋Ӣ5>Q&1_*(6"87$F"fD ɘI2TfB;oOU` SL\g*nn[™H!⿽HVfz,zCEt̕j\s}Yd =;\泾NM $HktdHXYgݤ@|79c5~Eq]r=K5Q#dqi|5njkRVHvkzʼn ''U90sP[è_Ao0= OoHvɱJU]\2έ'9z/PPnޝU$,Lɱ ;y'MGRɘ="K:2 ѳ7y "^&f Xp"Ԅ>wOalTJ^/SUNHJj <]c+ Ԍ' 9H{ -7x;pHA AY~e֭j (%{nC0@ 4o~+i eg~π9b#/M<|+*1&g'  +Ҹӝ4bhFRtynd΢gs '(N,s^ϥ. _ߣ?=zd<5]'m<_oP bqQFL%^kJP괤HȈe)"({y\eR;e .4sNvv*}X?+:H5!g ~NYU lנgCR~Dt^@2O֯\"5bޢ/uZ6u}D{DW2^g!0Z%˾E-M:Z*ʫ˾\nmt }7-d%@%L!mѷaw1_@7>0%D*鏵4=_j-̺,Ci6;B% DޖCBC0!v#\ZKW"^վ3C\Sg?K>nv29x<{Z^~o{̖8wH?32(XLQUzF.ݜ I7!_iI ʯ d tY.F/r$NrMTx Yx?uҳ:ww?mzѯG%Rq%'lhw!Q@[ o%qZlE=w_x'~ȋZHR?!A!]!Zv;OS.Y-^ ߏd(ܡ)ѭ2J Sr[\TǕ?h%C44vhҷ8tspEI3ij1h0Y0?mwD"nV\:)tP|;ogv!!QHm.|dm}$UUq;{k_ҪwKmCUB}s8>RpLCv;M^?n=ԟ'2fʇ:={z;16XFSh4׮soh,vM[LVUSCJ߇w:P~~hRWs&h4V~/>\u`^ZIw# -7ֆ j9mϖ#u; vt"|a?OYQ6bV똈=hń߬tW 53GfVt_%==z&-]Z: P=CքEp|z!jUyG+xAȺf+ۆ`L,3VO!0>"96)IH.|P{gon^џ ց/\/vV-Z mxOB [~OQ]OPR&=oAϴl ͖G+QW‘]6?P.`NJV$B+HH4 k:C¨P}1)YvEӟac)(:w-1Ux9 *!r1N+C.{aEE73~Oe גʁ&~ )h+2[MS7ED'Lw7cXUC@Հ96 YpLN]7Ga@|q,Q?ml0VHJGtt ӻ"Z8戦6GZVL Я.萣4҄% RG&݌!ܸEsA G~TBWfvN(?&7$>؏=6(-Ո[8s-VnBK"mVKFŒ*H *ƿLTdGloG ǔSQs-GI;/f >h˃| /X{/gxE'Bۣ^(V' @6cm ;o 2[nYt^ƶl[:8Z8&]'|0TM0QU$<,58#V)IЎd;P1*Q*ZDu17NW GbO71{ft*}^J%K2E VjJԆ[.{ ß Bşsaa(]@Xt,x5"9Opp)J=A#ͱK$ʆ [`ΦϰTUխ\{ˊ&YEkfuíV='8L-Xix(SNebq9! Qbl_樧}nik_Ih uɽ=6ԕ `c–ŕyHtהWس. Wa@W'~0U'bt.t xP n ìkHotтKrv42.EѷOek' Z5GyCa|d654yj-tҤYn@ 1er6xЍ-v=۵@Yol\!ϸyei;nxhjIwnT/LY;+_ Tٰ{xNj:ېr<~s˫c |*҅!0~rޗ9]/ߢ hyJsHb}V^ 2ۢJʪ2<@R?K8v Iiɓie  SG\%)aRhU6r_ %z{Yu-A-yYUz\4ﱃpXpHO [嶇kޟMjdE乆GIݽS΂kYg@L>Z-y-R x2חHQHp ]4M5lzv>6V$ALZӥW! 5\4DEKh5>4 ^J7ޡ>%\ospBC@؎˦"3$04:CO3v }tvU:P׺wec Ԏ=h TaG4fQh{w݌\Fy;C8ĵZ 2{Gǖ' dQZ@x1nI*g易uYՋnk!!v9w^׉Ɖ;:a,j>td":V&=yl)/MUqY_Q IehHİ ^8eRLyi8-h u;'C;{6RNɽ\n^g?U`X @C4BjY Ɠ^ڗ)Ǜ||G]RZƗ칁;3j܌glmENi(ުEdEf Ɠh_]ܝ:!{m3յZփgnFNG+ ś>UNtP =gu,sg6}+hlR,-  Riq ,C+IjQBRUY0t;|3T\uFX(o;L ( f4r"6T4\ѕH+La29S; jlr52'%GU<.-s'of=7)ݏ @:S>U tTvGR9 ~}%ix9N4k:&YFE7¬|-Uh_IĞo%Rt53ᣰƦzX_a]NKWEImKs$k/Z5?bSy䯋m1=ϰZLWhf"5Z#r%Э2Doi*_#)ڍ{r[|B%&~JrAms![)$`Ȁ%1N卽BjzC2tV&.@\xA*%3&OTȜQAkF"%.̝CI%'=ȝuw+:0 UϾGN0(jhzj8I̴t}1ƩĞFBprY;zҖG~"sѱH o=!s;uzh.Oqdٺ*3]$7Ͳ4xX%OӠ%NMkZK#ٸGq;"'!/4e2AcF dH6k\MA 43"=nj vqPQz~R"uje-;t=; 64 f `G|,pK5bף60uY6n~@AP9%+-#o`O83<5sa& ,`BsMd7Ѳ\x wOIcz YžsZcy}a){E0T}]$1EmLiG[-UXm HGO"Xs`ꓮQFm1,Bd+vv5)HIEBTTi*+rU7ޗ `^-/UM?8p"[ /xTI+(;PL@s5Y30ęK&e]1}&`0$Bf4m0V{8V.8t9#*O[ϢHrv/ l Ҝ}[eI bKIOJ u<;o#?ϸ1ċ+\h{/ZEX+ݥ܍}6(ֲ? [q5ʴI4ο%*]Ոf8 &βѣ*_hF_739hy)@nd#bҧY+!\Su\f0~ox$`< q)|J[!ta@V u[ iyeucZdR9X] fA'J 32hP@@MQIB`Ks j,3AEWxӆu'َcvyS=_F6bҰSg5z]ڤ|S,zJTQ"ZYJN._VS2#܏apI~TG'm%3$` P$Qryka0-nɈ:h5vRw ސǕȦ{Ocbkc08qᣏ25DXCm =Q1\6RνzyXN%ԅFNx54~4![Ry xڹ;СyPS`O^^,{^b" S)M7F.e÷UPI&ᱎk cq޿M4%H&>Soqai$=S>n@!njD\!zTDZƺ~4@S1LDfx🠳n XҴ;ڈihix ?DPȨ/Qв7~peܗ ?y3"!zq@9F,@ ~bn[N Z8еFGUع[ .q \EAK]/ZpKE( A\}MM1>`mASIkx \}% Z%=zDDzmB1ؠ!qz+H_'.އ͙jG ~e>z}Ef2+,^8{.TeE;p-"V`zFz`Gsh7GfRL},?ʡ+_{kמXT02g$B;klHwx`E,BԆs?7`ɋ4,ҚV {Jf;*ū>lMeu[7X1BIsO-d^N'E>-z55 o][t,h\y$CMANߟ84hKz .%&sVgj[Z9ᆱ5"Bj ]Uzgnvz n b~%y?ch**% )E%^6XfK[CF:!d·ݱ NQCև5VgT+OșIe(Uб/}g>G.;RDwI;%JDo@l>Mna|jzL*H(٧OwU [u!f)Cթ?umSS?a1Se 'ڰʜǗ'57_,(i.Nȇe*SBNȐ̫&eZ7ZxW^k Ts:Pr6| ;A1iLr,/;SPzx D+JBuN8#] 63r5ߏ8,\MMxT'o5̳gf =\&?z;RGܜbHCc>Mɐ^ m1{-Z: #(zxb HO^ e}w-1)P U G)~ o1<)@^7*>l7?LɄjR[vP m>AAHv&'k]fZ ʇMшIeQ%e9RjΜS[G3{(+`B ߢ{'y(6SL+r-Uf C B#sNr4Fu~LgXr{K.e*aqgڞdݍ,g=6.V%HçX,k9 5vwKh1rP!= QS(:c>@/,e1H*K}jM}Z,ߢ7;:]yӢP/!E$s?oXKyixlrq Ve$BפCPl(b&YL/qM 3o/KY/-s`v/Gmгwއ=_ 2)NYʨqEp~HFn 7JDaT'0`g_4|(Ld/ JzW]nh]hq2p6-Հ+=lOK:!}ߧBM_ 6$ 7 1 u5y3El].̨B'ӿ"sAxBA&+DyK$KD݆G/n?* k6 Ayf{ug%+ ve,lscy.\>`]S5')@>ƯXuJĊ[79BSwƶ`3oٷ>a>n`L kqr=S:փ4mrS2ҔU )w8 /^1{5O̴69'(X"gz9jW ̘J3Ǻ'@v]gԜ٨xW v1i\2; ;[7̏JYErNS*Ϸ9[T(6"b!H%ruC6pQ VkYŤR?@%XU(uK,Sb) Ā]ƬjZ`t+O+pd}Qt՟_8$L)BTq޹TlVA tCjg?53EGJBN,FLYC84Qfff߇H]2b'>r^kW%CumY` b̲au?fcY*$߳WCn@RH|=AQM%l9@2qsurw˙ƭ7Zej:O1)IQ}?a Pk `vo8ƾ:pR$JEEB|.M a6)<>97]ζUWfP/#1aAFwdfF ~ \+Nq σ5!ʖc/,%Bz +|#CTABk)d[8e}cf(fRD! eBۓT)DKuǼ{ώ\??In[mS{@ڦ:REzaؤ۵q@ ITTY,ac{HS)쾽G☬mHcu^1bvXW1cB vry^l!f3nK&S˜{E3a,F7 ^,YL3L1;g%+!4mر+zU76e=LĒP&~%2(K ^߱./A_ѓWּvʁN 1W,<.l,.AN;YBV50WB?wi!ߤuցJ_Kֆq "-(~i .0Wqƪ5xwj. ȉv06ߖkXQhvR. k5w".PMY(Ecl;xg0E lkGe7,yā<|DNR ݕ- Qh+fm}+a%XEofgG(UwOu>pq\wx G"܈R"}? E"b-_l&-Sa? ]hB>5,gikˢ /1HhQ↲1;aQzH'9ޭ3#ajB\P\C*h5zw-{;f7EH؎pvtZЎd_pqDvsu SD̠,ůx~p_R8hWFvnem)y肻Q5Q0$0TlLMf~/ВF~d\EO[ lBK3kIQ݂KpX1@v{>Yл4L^l؆ Tܾlbv Pח&;{:i>`lÒmi8%|O(B~%U !V,CAcƧer2^m!ye)*"ROԒT2l80 }pt ȏGòzyt9s%3ё2?_GҖyShaPmq[1T Gx\,37) !JҋdSCט62zh݉BRƴܞyNP0j}jZ-{}2.oL.c7B+>4%?k9Zg 0AZf|w@ 5w\&0YeSɁNhc]w/^5 lc?ޘ"OS0FiBhJZ#4,.0L,4J7& k,c? o4!bH[(KS_dKj]?C^V$>TqbX&>b|^BIZ)60[<2p\ܕ#%#%c/Nf1Aތ:2K^L]c# kMT *2~F$~ w1* ǒ qtO%8/s{6Ea oobdT!yA:4'{bOl쟅"vi;+͸kso_]Xmb%m6MO'8T9#kyR0m= 0KyY,ΒWkߋhfUnb=k1l>?~A](^ҙΛHen)XEa`n)onGKf)Z$S_wjQM9=?Q#rgAD44:Ȇ.(oE_ :(j4Ճ ~p602JOsOTn7/dph񒄜㻓KL!ebo2Z{FU[bPNő.U^#!p@zj(![К,(F: ]PE㶹Bp:m笮K`3k'y=r͒6J!D#7ڵ.RK}/FJxmה8[Mx?;ѕj̳J" DzcpeǦ؈:ӿ(n؞W@c@JΗXGbm3dORvcp";}*/A?#|@ebW%BLnr+Ti!=qv+#aW=h0{;I.⹡봘*O4jbERt9hr +8eOJI_櫳2~1__9~S[$/HȍPBFlN1cQoL2nMQvtfVҶ L ͢zT+4=u,ǰ-"rݠEկO=6I,̧VvkY=T a Ԉ?Rtdz~L(T- R)*;H^Уs=־Ű+ML}]w[?#ɿpbe/2۝^Pцx$8%<4u0XZէ">63TImV4P 6rKt=|K'ͧIȞl }NcG"gYXah Ԟ=87SK[mjKJ8,6V| xnܕ.qE,K0QJ5"VLǰdfn]cĹf9lAiD`,-'/{,D-C0w4EH;q(a$M2~H[0vWowΕb *Yyۄ޲sUo9+ਖ਼WZ 7Q.H,J*{t,̍ %=||<~AwEq*C 2%'\j7+߉T\(=Bv(q=1+SF8SPhU34f̕aجTZ]8SZhmF#kkyGpB)]Yp^w("%wD;^Z}ڋ+5sB30~W>\'*l<#Vvf=nAvDvz{KRTۨjc&C|OrۼCeW Tq Vdw",2E\>\Wuמ._آ@r%DL=~_ܟ0ww|Ǯ1?$v&Հ}@>/=H RE#8÷)ZK-0%UE$Pͪ18pia/B[߿pwuP~I$ڈ CJ}O ]5i󴶎A?Roɣ Z-2`.-dys}XUکB:I7C>XW#!DAdCC)ueʵ8;罁Ϛд2vt#%8tϖQmO|>3AMJ 0fFDֆF KCHڲuNJxyR^Kqꈩo~QCR4mPWN(L]ŗ`S1Gس._/`-n8$wQN"X&o ה K;Kqc%ꋢrF?!W6-<B9{s&VEE+41UXHJɥHi$fD ^_7W_(.O\?I_#R9D w?>NC%^4"ޛH!D^XXI.M: ߖX-xwMh.4":!WNWA 5;keE?^%m*@/.Kի ąwn!=9~rGbŅ[-O+npJ10YUL˅̳h07 O`_Y处ll$/L(7]i8<Am2a4AL:Ē?HԒoz`x%lYO5RQpO;9 2qcJuKsevrƢu2KIs؋E@.BM%g'`V(?oZ1J}tX"2,{F-BΒSH-ǼM&[DK5w媞'ovN(f8}ZϏ/Gގ0lbZv{mҽ@, nV|ǹϖh Dga~☌R SYX7Ĕ߲rO'u=۷pj~&qaiۀ!@bСs|!XsP?2 - dncS? B 8@܍*ѭ`Ʈ'$ PJm]=)o> 8"5#;' e׳-}ԎZ#CۍΤ]s$m9!(C$BγIJ>ZKΆ[(tn lѝ H03TC`9JXͯ4h$aNi,.un.%UU)dž*!!&I6 Vō#c9 6% 坸t=ӞbO` VsH?ycp|>2m1Uj[j,pQ7Cņƀ{WڈAW.M<4φ)Z0fhK8J攧~.A .o+Թe\|$w͹=.1^b Y29O&6#h {âgSG\  .7lm 7)\2oz^Bc$(^ӧ3^8$բ$syk*Zl8+S|i sNP[o|+-PIQ8+S"HZsU3'a_t@yL7605fX[K!Mݵeuʰz.65s\'k2I8A3`}ZQ1A0 *TMK|!G/ljKW[BIϓ׃6Du #AEȽ>ϯ癱Ÿ*JWv@6GI5<;zM&{X܈\őTQ7o)|_+[]Pw@!q@zh^M 1sFMA[i*Iuy c;p|h-ۢ+_[~(Oz51S)C0.2<ʓ"::X%R{U[̀ YhcB"O' h X^.!s`pKcb7!vDŻF6PfeutRn~ܖ/5R1ٮ n1nZR$ ޸@xݢ ۉgOÝ1'D4.o 8kzmP6DiX*a"[,P(;hV~e˷W:&ضGyŕHzN{ߵT K$ NUCV 6D}pt\NPeq81vWˁ +-W^Bl7Qp:Su\mycf {|LVHr~,$tRS昐Ȣwr/=W8PlZ<pVoFm터HDpՊ7_B<7\#@{b8{*WhTMPO@HMSzh^Y'HU8a}KM*IVqEH%kga*цv7S(|+pG&`-Q,^/APN)>Rٱ.{}Яˡ帅'ٹqtSVb' >e7<8b!APzfMFU$ӳ _d R˓%6AR?#X }gJM-OW ~ąk;7KNeRg#-EËW ;78RM/{xZbe=%L`6sFo!pe) #S\@J@# W̷}ӘDÙo%[Ra@] 7@G+0"!Nٸy ē~?Kկδ)9@SkjTRo'6ɻGZfN|7f4o/"ªMWw.xN(Rk0%'MSAHڻ?m¬HZG0aqʐUzAn^TU*UsJw t♺CU𬂅۩pS83oUˌh<l!OƱ5-Twm)|ڋЌNz`}eQJQ4ھ]c#„zҟԢIcW/D1E**XII<ޛZŰtx$=.g5hgZ%y_T7;BC4m˒*`MLxTIMd qQm` )m«<Ȇ%7-7ԅXK^J'zqCK z Ab 2yBӺFYWI5 A?8qf.4ql=x A&kA\t=ت%3|lɤlk-4Wfw @@ۇW ʔ_,- JҨ_8ƞD3NY7_]_73ep'@OTIJ-!k{J}BqՠI|CCYJAD-ԞE.݅_䵐Yof$OEʉ֕tK?f}Ĭ*k~އ^?5Bf3m*ZJ4JH{Ia[@}OLPj^AY_DB'|mI_ua/;lmrdVZ9E K 79WmTvrIvVR:5>ֹ΅q#q(*tZ~gUDqIczTbvjj[!z4iiו3.ka!7VRJ 9TqOC䌡kD0\ChdhSAV ;[쥐qp\͝BbNb2B$Ml2!x@K+)ZHL\M(@L64'؆7+JY{yK͝M"[!!Ġ?Fr32K /t&`DؙpAձTf]κ 'T'֞ڌ@cVq/Up7r3SkTg[)t'`8ݿ%W@A~{ /4jyl+Njv#}yA,?=s8#*oCx Ӵ[| |Ǯn$f4>Bz׼1˿xVݟ` m&YY(_UU"ߊi;F7٨D=2CTfb;M@wk7~K4BkيؾT,[mbgnNME-V#B͉ cU4C[;E= / P$H5VyĮt˓{Y!d>LW-rsVsNWCH;UKSC>!iZbc/}&4AzҼE H9W+r6Xci!@ܲNc|?~GtTm$|=拝y8c/}Zy UE fڐ~|L1pQSe'a]ܹ9hrxf W{UiNQ4cLg_ ;&sxDV@j[#s=׊YOM}͆&v\W w4u*ul%8|Y z}}% +|^vpr2PٺNu̗p5ZfjEtx6Sӥdjr1]GATRWL$h_Gʢ$[Ϩܞ\mMFSq ,mQ/yr]-OaP+HŽxcR뾢Uxa?3qzt#tiKU&y9nCai{iFtG͠GAH)]?OK==_4I F ʨPZO .`Jscfʪ IXrN?uUh!zz>+F |qwn>n?'r[ xp_0 XujL@UE4 ~W}ELiBw*1%Uv tmdjSi%-Xyȝm8RK¯ m\sDШ?iq j~'^k4U FaFp2ܦN;χfıΉ1Pon/OYM~ϺX&W2wEs9_ܗ&3l?6Y"w e8PF~*\E00 渨s5DĿ~Wbx^FW[QDOY/@X0v4hٳaH"Jv^6P#kiLpm>Sb{sGώAȩ")9e~|>u,1{:&Weor+ =9˷>yxܗ 2.G&"s2Ƌr[]o+"BVdDqM`j>+ P!F83,_sDTB/~\$ʁR<;Pw1[xg ϑ"8D`Q*WߟX2f]&5Jk\:䖷:Y CpT9tIuTȱ* eKAL:@+7h&0aNcɳFW.} ӕTrJDt- BdkVKYr Hyn1Aq%lb1#8s@Ou}AM轐a$7-L4 L ѩ3]Xva qdcGOthO镻'+5}-PF,$9N$ ~a'W+Wm曁g.!Vud&cUX%&ĘotVV$) z׹]u(G47:<%Mz/d4rEuJqE<_XBU"͔ ـY`”QgEw§LEr61G7eʂm+Q%{ߨTēZ+x-a(OPEav3K~rUܻJr16ߑ)Yѱu IfĂ[y1ԶcaT~5x DNmՄd'~@=ƕÙ+IWo]rL7ykshUf k (.`K [&"< pXL0eY(dCJ.o,*=z YԳFK>*-җM&7?lB <@c5y@W;и |4AW%" 4v5)v{^U2E>2H=<}Q`e_MivW{g[VvNd>Wx :5 &=7{ݪ69x\=X^X@.ȹĮ#=<^: $}7paɦm28G#=fB#?lhcC.ٯRPYb@Bg=smQߪ: ȏUB;1OT}kPRC/q##"Yr\K4VuWβ!`|j,ȼ;e n>8?# D>8XR ^kହS?(^ K};'f{*ެ-z^d@MfoHVҼBMbKf ?o3HLVPfF*kPA}s "~NtFu5W8UF8[.Dic6is=i-Z낖vPE%bCɢbbU@nԆ'Qdq~^KLynRlKlUJpa37kdl ~HyP"U90rZjhOpZ3JMJPJ"ۢSbS`NyqB],tbWb}713 YNI0w@>i)-&낂7_]nb$#eSy:OH@KçhLk OlydH`ȈPo g T1)r m>~6(faф]L ?J|!S|[KTNk -j77'I(H3=@MLg[--&vĐ:0v )`$!Eк;sU=, Q:SE ?r1™,IF$QO4DjW}frȼ  X[/D=q:q(@`/1Ҥ?bկ =KK eOmX#; s^Lw5Ƥw-/j:dNVl!X}Zg酟y4wXOn덠eTT8=RUŔL3 ?#ˁw)41ҵN T:IEG[~5`l@vc'P6ùC x6w1_H3n~?q ;Zlnvh s!J]ELu+=na{@MWZUH6WJYr?ƘSR#L&Wq#>8 Y"8;d*d.q((Vrbo7a^ekWz4 ܪG /b.'3Wuv%M҂iIپyXr԰je=hv,÷7\ɜh9irсmAEFvٳ^-3DoP}խ^pYu[6َWZ46z('hLO6i,Lt必 =$9{&4GF +O7L:55lJt4ʞR`^Ul߫'qir^ C9/LK A-ORNtnVgeFLbL$ϠЫ95j.ݧӡPo6yl3AZ ^sAk~%-H 뷲g]&pr~֛M"Ά6R.e8\X=ļB͢E9E(s$nB@2otE!Ps6V'$뽔@i\~}dip'ZZiM=̻o_-,睫>taY^|0?4 E~7N >̀`a\"b<t+Acr9 :zJi1FUL FTPYg[~oͽ&N(,w64`!%ڪP< :A1 ^Ǧ[|rOzLC%4J%雫iԂc,[)><[FfPR?:MC:5w~/~ޢ fKɚߊ ĥLEN?0a[ C~ʺ3|.(]SuHd[H]֊A磟O#_f]٢릾<Z@Α_
W]f0 1l\`sBmsor@+SUM,jЌ GKG" 2_ |DV1=x[RGX9 `\r&JO9-O{/12JU*:/6!kb9N.szy>ex唙Izc1(" SPDWA+5.H8JI]k 36~,v(h*6`|vE8 }{HyeQ@ף~c%r×?$¼_U4cT8guCG-Ў+u-\PmQam7؟E.o]ژ$ ,%?+Y.pô[ Ypo1ek>x|9Fvk#QL2 0 9+* 勁a| I ?Oab3w#Bwr&>UdˉZ?)3Tjvn$?y:kŨ[ kt6ӿ1lې 1=k%9%aO$l6SJ۠>up2pmEPsơ*\m_TǤ8,RP<(֠2IT@‘$gB @| b aLqq{Zُ$`3NĚ@L(pn+BI6ׄUCK1_md- P q`͞HD2r((5[ !d=(~P:`e xB׏^j6 dm뽖c@9qx2kWy-@ m^$/U.KtK Y!Klrrvx = 3q!$Y|-B^0 ggibnMo}޼/̛N&jt~ƻn5xqvnwQ>I9u@G`T9G;sTS_#c'l~\-o23,Raױs(x7`4yDC Wa?OwpGaYz.J[¶P<4NG2DQ~G׶zJE gsЄtZx0kx|止6C5dб"ԛMn`!L3wS[+V{(J+рj \8Z QN' 7ǡRg݆o;pv2?=[͍OԞ"- lO:˿+V_[U,Oɒ)}Q>- QKK31h0Jg3jzS17ױT] ո o}SlZܱTPK ~Y(F<@G}b ҽG7+6}zzL׌?vnDofeCp J0/c{E(4FٓBV.z3q g$:Qe5Zѝdh|u XÛ3*8s+ 8%v͓@RG蜉 9'Hh#Nl& yjжwn0:%>SLRV2,8`{Btwf K(?WD 0 2(AB$mн?Yv;H}O)`B D @v8,aOG0YA^VDalsۿPiz LE DUiXR1ҎT(_L1E67hW1rj~$=كG(͡Xp}IBm%RӅe=w{9b/BVU,\puׁߑ(-ϽaEœ'PYFz%.\#jh *(H'z ޮzee=RK2Ѹ|^$9DxkZ'M2 (0!DȰ ޞzPfVFwkM,ԌwrO֔0eS;냓@[Vy! ǞOߚQ k? GhH@鑌ޗ'Ks(@&GkD`מ2zOwݧW9AGaۡ铛0#w%Rv"qtnpA(4l8tϙmu: ȫ㭞 S`ob_s3oڗ;;^JˣmEV$%vRܗF3\F:p bŎ_@&4(`YSH~EO1Z@IR޴N5Kr,[uַi7ytUd7i2GxوWj1{Ex^NF`L@ImUeٽ5(K8o#:MCgzN A]4%eEtu s9ҵ<[i DCڈQ`|n*G)|5ɬ8Jat樈1-H"`HNWfSy &n$7A`|Svq=C4i֜N<*MEYHCtWh2.j.'d"-kw]{,F3T$kimo(&I.Za5Ұ@Ḭ4۱I%q])9?8=y5l hN53UFi4URG 2¹`tuңKږԯcgte,.IAj!fu^P\ $+D|T^/-*ÿBENo}s^7 1az%\.{ʥ4kFk:k Q5y>,ĸbe[,T?3TKeNV! YnDF{%(gDͲݵ ګz8Pla"!TS=`W׾h؞z_;wR9 *qxwGXK%ڳEHbTʈn2kDۨSj3[xG2(XfP/1~ (#=IJ_pN!W7ڀUq33Duvi`RŻ^N ȋ"<ϐ  칹cX[[%O,ҡ?$V1mLRG0@͐nN(d?kHbNܡ߲+ҰLe .b_"1;+xJ.H:.nAѸH*4i ʲωnqШIbgUa߲Ѝa#Vg @c ԸDKA~j?[ty]<^I+_ғꀘ?YRoj5s2T`O}Zl Ǟ^^I pz*7[q5c3$~`۪uFK'NKzD_Knc]|*hP0hF}:SP9\^h$.Ϣ/JTmVjbI '4_;< =Tr:VG6 &..7qy ;Tpd;g#lr:KSIevoy7T>طa/p$##B  ll2pxGB2ͣyS QΜf>[\lXd6I!Q/#Ƌ?}gzchYCc'Dl-g&+<Xõ~ D)RB,j2:!ސd&NIy:-R>DEgQ]m#?Lu3QuYihbB1kC-/8 9f `J`Xӑ,#nDnx]aJ56T,V{E-- N)XU H`:`&h,TEkJ4H f)_ːe]-GV']IFw&po^ 2 JM!ýUG2Ƴj?3ZS~ jrC6Lpr Կ̑>{di+]^,$&Ԃ"m9GOO‘\oVTBd7CAn 8dΊ aMFV:f[q[zHUbӛ]x2b2@Vn 5 Uw0xX Бf uukHN|D[0,n`!(۩b'?&kL/g);]jo#tы`# %?S(Q6֕fh7©IÇIyךv:߇D2zc%ea?rD|n-`Y?I[=BtɈ~^ܧ 06O u;ԂܾZ: 3,P9.,J,%2Reφ K6ZEʢyp:b2t%H>d<K$L#`so 2yoM}U)+ vo Tg'Gֹa 8,3<#K+>еOf 2d"V,tx3qZ%tjxA)rWH-Xvf'gyTH~(xr1RvĜ\;h\8x 4#[^*=7ND)G$lJ45ꯉʖ+jĖTli_P۵ l dQaC$Mwt21"VQb$PU۵22ZO`dkC|LЫl`Ac( 7z&mW 㛶&޺N /RN4); :%-]Ɨџ4-q{mn"Zr`8/)L OO.vD%Չd䇑&/o8g#͡#lqQK<$"}gLg6>c⮟82~9h樻+,HE3[aCA*6 TC@*hyx~5 +f;V<R4i(:h4mdtʅ$7^_ڽp3ql%evdL=_M~rѝ>4阠NBng~r8"`+4jPwDL}7pfP~9NI<~&s (D.#9P%Aؼu>wZ;bдCm,Ou?K$lBܬs&$+!VIPRVUi?5L]Gʎ"Ap[ؔ9Pq$y%g8NCO3N:!F~JvP8=9&Tt f)%<JZa7"+9Uy} Se4p Ѳ2_ηюMz9Ukc1fS1%mJ2X͗vjH'+Fς~)-.E Gn$9Č0QT1ZձXS!U B /uH=*]{`TrȊV9yWTcٻ;Gya,}oL IO=SP81H7Ssj"'y4L*}:$+;1"vki;kvZ] :7pFGšTٻ(kSS _#,1~QJpkfHZ=|/m"ބshķɅ,w&9[F#77X{dځ>0*XU<֟sƚ  ZΆ60B v?Y7pp$%uᇍL\"U G^U Z^ywg.Q9.)9Bk$M+j3@4=_yp' ml!^哝jUVa,I{)^ *JR=S^K r>Anb/;_pp~6"A_J!ǐl΁ (ۋJG"޲J = w%Y&sAӭCOS+˴ kg`S*@<$8 %c^IL4uLȢ 3տO:7h=W#< D`t@+kzכ(X[j𕨛w?5(Z~.(puYRPoGы7R,+~zK:m?ҩ$ݞGok}ęX(Z;NBW ,VZp.*r۞DS=tоb"G1u- }UdlO=|k ZG;YHNXd =1F6 HeSpyg,@DR?p 9*ީ&4&SJ8"PEw4ChmiݿB!޺5k̚_.ua=t\AH4ӚTf,OBV7c ,fֿ^a5Ewpys"ʈuڍ݈B g 8|g&$6Ԡj䊂-.ʌzݹuyNqѯ|mWS(v\ai&/]-},50~&UP$Cp ܾȅڢ@؝dg0u[=\>HE-Q~S~+Mܣ͛kE'0%EU ɷTP_AXe WK|uz=x&ZE5Z2g5o?Ķ?|@ BW*[rU9J,j r8y N-sT%nW6.2puMtg|/`l,uTP[|UO&zeyhJ׬À6o;f7i'pFR< BOlH3#ܖ_P@v} }Z 984)Z2!~[Qx@ZJUI9C΃` tyhmLOLP/^SxBl= .t 6Diȯ@#pI6-l( fIIC:ch`1LSL )jBE@!ODa,K\yn`:Ք2qFf.Q .&]) S6."Uo\7=K6pZq #!VQaƟҶSȶM<.%;y} G} (̓M#ΤfX'n]po#l8SLJCBOpN.JI^C|h2a:( v\FнU |Rg^t]h>T~P2:eV "цuaSQiV1{#c@tQA#PѓN,heaekEOU6C4|^=wxϋE`c<Hiag5PVLRzo&˙@3~E]"|$`] Fl޵Uj|//Aѷ@<ܱcLBd4㹋nOX. C#i<ۢ$%{a<o\KT'ȨL.Vw׷Ʌz2¬>|;(];.M ew.`bv/b0VhQ>eţb aǦ%/{ FJV{xh)R_QrogDž· ] c3d0"RX`qD2)&cL bC:*?sZT@p7;^gTb͎ Iae 4kT`zȐѢslk$ h Zc1vg0z˳QwE8Pߚe@58u)^Ln W?B#ŻzҖ IBcͺ^#9Ms L._B=% PW#R"IiITMv5+-v5J+`| @~, PExn:6eDoE< $  5?_oZ>, b+&bKvڞEM(W6oy>*b9xcCEa!Tt4&A2c iI)i CcVЇ%vi q>cy8*In-=v LC*2 giIKZj8 սS7dgDjCZue%δ*u7w"T^[!BB,_r\q"/3\Xdz`sra#]]R c&fD-tG;om jIɶ u_"5okҘ:wԴ+KX&in8# (TA2^VtG_ ͅ[^L;@zi4 [\;V^{[D G[M ctƙxp>sn<7G$h>Hv Юe}]J&ɬ;F$[4G#N鼠he y *OBhDֆ2XW$&Ʃ $`k^hzY񜄞7!&3Q iτ*BSrCX "P,pqEt(cӇHak͵$e ] DYgmPrp=Ō^wٙXO͹<ducX;Q!h#J|+YsaE̶/P.WPgپ:<^[c ~JmH긵"obî[6Zvic;T5U|;>4!Jmv 38q0ly |-NAJS*^8|-4ի۔uǵBv/Q&.zMl$QJPe[B 2 Rdy9>TDpER6d閏@S ՚/unL3TbN|[c(lIXm@NZ/y,F #đW)H-篍k`f׋Go'EF-MV%f[u:M_iQ9pw 321*IO5m?QC%~m8`nkBU g} JRuVYWVM#WF|;pXS 9qu`dg꿷@u[d:Z(BK^yuDtmrސA9xBIG.:N,4iŚ2d#SXAb.1.]7ݼ>ȕwAyk$b $ e#]Cv#nitXj-!х$7bL+q_y:H5s@S{VN ZpŦMxaɒZ9T{eEM*i.V@\,"cۊGfʈ0 iWص/Fu+X\D#F{~Z A:N\XPZ񉈋NB8RCrPo)a̅d%Ջh{CϗȎr RQ1g)Ϭ|Ch,T^?Qs~ u?ezy (e#mA?48ӀQɣXݝѥoh\[iD-0H=+k+ ; H+Y_KTwFd7PV ϰfkbZ$80O %\j#*R!i2?~/1au _"~kQLM~  I뫡UtͽҴ}C5V [|={t~VU^a|1 !P5zE GbҊ2i'd1YKϮNvwѲnZ1WԮ$IJ}-}Cp#6ICxsqD8i 1lo^݈.sg_eFi= u} ~ل<,7RB ̛և.mc$kÛwTws٧،s]\:I??6_K3.*7-S}ՅYSP'??b(qP^U8V尙y@ ,~'J=MXn?RaCYSR0+")r$7LqN7}HRK5ymb%"8YZoT9P-k0fWS,*R F?x 8^\_=np2l<%Z_:3?$su`b0hR _qb91O~msRrl$>?:>)!{^$Zމ!3ஶAd`13,dfmdx&ۦ0rMU]zB \Gc6R`4!tX8 =gf| wdzi2(׵߷HjU&Ey<1 ":r=[n7 W-속oL7G[c@IS`JXWj$B2 DHۥzIOB)?r47 Q3YO< rh&xƕ:׭䞲Iw7_>PŲd^ERq^9+S{ *c8ٞR %ㄚȪ-6t'vo刁+?d 4yr(i<@xܱ`Um֮?r( (pms&q3؄BFVsӸVT-ҘRfBڳ5?_C Zs&TP=6|&3 CW_#|*TP1<&?w[_i=i#RG$/ ܁)Ui9~d#d &G9| ۂ?R/I+!dWi")0k'朙4!ݴ{`q=^}-݋JH-g J#RϏ X3>5RTΝlZ"$* 7ܴހ$N:l($͙UaFb;2/Q;vU M%NBB x'xI*Ż2G1<0{9QI81/c*~RgtbBe< +c3N5܇bK>Z!c;̷2kduqo6 È(/bkw<1*[ {&Q˜V12ږN]\J5 MqZխ(GѳM稸1{_8 }ULOT~$_riw6e7g=w>8Ci@짰bF{`]7~鼉TC2L٫JHOc{K vtib:Jw0vuZ}zkknxBet- WNWv )B9#ncwcEFh6Xyw |dy MSvpWk\Hs/d4eիLRK+(8o6y|=ISB#ax+wgb9@'DGd9fn.ėeO # , IC'g%4/S}Wd OEa[ ኀ`j9XF[jSv#V 5 q-̪׿8 є ;Fl}4] F#@?]P/`k_kW, 焑ҩ#OLfnY@,[ |`חڄQ-OINDe-`2?g$I8ML\Bh[^"LsS;څ꺙%bp7s {Q6<WU"H,y2;xʹNO "K3XZ*\ Sq?׍f3:\8A#3l2ocgJJl:{H6,'3vHyԩ-q^7JH{$"K,Nzij!_45b#~\89\Ƕ[mTj-k tú~oD(yC#hh^L}W[Or8?OcGL  ͙ͧFwxŰj{AIDÈ.OBtg 43If|UCKd"A<6'"_>Q5e2rzkT ,ݵ%#m ]na32zC2q֟ kwDD2H Cn<`x#_0ٓO#3I{NK81GA$0fI(\ BDVCɪ_7mvQO꯻qź ?,͠jmV>?wXyDx2\GCҊoiݭWk_6L=r D즫oTﵚM"fiOy,O޳$;#G X.t,cd TKH;f{^3|k6 ϥ <X8 60(fQˑoD*xj|Sij% 4K7hWΙoPt,(83!6YJ|4(N<E[ْBO@4s|;{g rrxb߈<-j죜G#Ag+HRFF9k,qD9̘QkDeKs.5" UAM魞<[Z}ЈWҋY #^:ffVa\J}OmHǀsmI-^LaZK4~3)!:Ǻɍ]Y)*nSXaI^r`HflOD.ԗO 3L #L1s&ү*z]9j=ס{ nbVX:/.Vf*w2IȧG&pg))/{|Qg{jol:I8(]F,hUBUYT#Ll$/F&CÀ2e[捵˥ &T% vCTt6_3X9 !/B׼4DmfT c$Ta.< aaVMꭱTtNWQN8f-2@fERjv8jj41I~W'~w;=FҏtniSԍ% љu`Ks0ݔ@sy)@~Gl~S\8zN9pk0%9:zlO9+PWQ. l/bCxR9(@ U c IBט_}Ϸ^Yҳ1ӱޒhKSW)6-kK !PY6WMRԷtuXUլ(\SdL syT(/~Xr7|=rl26G*Iernq*fC1OWjI`xͥ] ۲ ~8ErE奈Phg1NA,+5@œĔ]aM A1KԤr,']1Y^ q^MhI]k73'̎}/"YB%^N:fci2`),'cHx׎;I%'2y5yho:Ոce~vfݫ8;C&*BNy,;;l-<ܩ/Bx \ؓXսK.C[ˆ^b8*wEoq(Wna ~3_sqѢxҶj$ ~+s[|";Ug梓D^&B fo=c.i,>;\Lj1Ԥm Wxa5?>Xd H+:SߤīXvLEP7Ț%*hRq2mEIҸeiW\ɩk~KQ.Uc /H OUh~Oo(#mʍ䍔AiVֆ6 0x͙Yי.GUľ6WR!VQ1 w:28 [͂3 _1Y@]4UfJP9jzJ) C;嶶0тGYlDVQ|T8G;)@۷l^$iQ[6oRIRs ,o; {J? ZUzbP_a/,{^Zu {c)q3aePXYfӻ_3פ% E =j*Y)P+[#λp8ASJcҁQv=TZm{#i7xDES%9?ѨbF,yË"}~"<UmM;I'to+W[@`6Q`pvͳQE1"hQQ~=%=݋\ P+_|[z6VӁE|܉.g%x:}+DK!*0.HjI!s isXbVIkJ{}owVae2Icp|7kg>0z%)YN]  G ~pKF/Y}twG7gx9V_SzBÓeVhTxw1D&ݍI 1rxM]+gO#a6cA .rTҧ2N9i#0ﱜw-Lp] Rá4{60wrFsUχHޕK@Qhݑoo2R6;gbJ.(Cl ǹ q:ү -R%UztϘ'.52 Y+?\zE:a(ALT;=ehPnE=_!C'Je=ū^җ;m@2ZS,f@ LW)UR:y(oa6Ǩc.Ӡn,uA=1!]:aT0Mp rݚþt8N;RqK XD <@)&,TݩEߞBD^U":Hʪ=پ8E8 \Bdnw +D bֈ088,6W=l+!jSfo=o0s=jF*n<]y_ '_a"yC(v2iLfۃAh AS;YNLJ)oMA} -":cǶw\P冫@7v_V4\ݧz-#rJÿ9<܋7dVYǪLٶ_tY[O4*5o.LkúD{05Riypyd"aX8Nt5+65e3|ŶNǻ'fF/$)? _h*r$Ac>< *)d jdoţu*f'TuS6 "e0Ad8$'fm/g9Y_ %X/LpPN>Il*!MZC$ Dx fey?\v~ iE?O$D ֙`to3d.UkL:`zi;:X!Xݩm=n<-rcK _6 ҧiXިf;7d2-5_j&`9)H/0:ՎѾQ HKakY?[\RSL1 $85"G(SŦr`J4o>uY6Կ3zeW\Ȃ r ]f[?>6ӭL ܅B!mbHߞa'G-H3 #@ۓys{vv(r cw58@H66$V-MѢ +ݥ X\fʒo= ?ƍ 1M2h>Νzv'R藂ccSvH?!+P 2HwUIlxlyr_`*Mσ?6N0d5 oF[Oj1sG)H<'"cv&$>yڃVG6 w""USl]2 ضTDj9! tm 'FWjd!䃏͘z$rʺiJ:-]Fיϴ OjD5 "HB(eIX/WĽq¨B9"J9?,IEQ͵|턂-dY©Zsħjs ю’^~=&QN-e )#W)V\҂1Ik=(aRr('S#n17iIpBۺ!‹~[t 0EFw01N4&-f9qWY#VR{>r r"Z-G)и/sC ; 7溼-?)ۅv $] ҭd\SIt8Z'UGdM*"Lo5;ɫ}֊O.MZ/pXu~ZKOFݙt@@iFI3(Ju{~q.hh:]нo AJ]itqάpt[a |@9!Jnz,v1쎓QTÜ^ 9"$/H qx@,eCqc8͎΀ZAYM:I`W ISC~GV k 'gQI.%a!땺s臍R_:' q\n9w@-%MNn(ZrlCN؞_(A)Z6F#%V; ԣg t?:C>B x+QﵜVEp^Zx[Q:IzKC4/X -).5h7^*;7~ !bZ@%G{5h(2Z_>sӆo3I:qtnS58Kom4M=5M֭B={:g. u {FE]Wp>8RW5HFg%Fґ{>KE)mosj="Nrf|o.H^l9tz5E,Q?6[ƙA5BݝCۚmR@JBdIhPa|B<'z,a0NkI"3PsZSӃcg cE>w+"n ou5!\K M&[W1~D2!hm9J=7%-ǧaBic(Z`l$=2N/ s>Ìbj4yN}!-O/f\Yzh; J}M;>XGcc3nzpe]ƢX24wWX8 cTث0'Lxg9);/s[u_|cn1MPOjR?}sv=2{89߿ n5~!fkr&KD|cjَ2LSݢzw->L8‹mM=JyҕRVc%wurE)/ u~od["mOQbFao à"eC"(>%]2nr 0fd#BgjYm-XyR}3Z˵xB.I%bXHV"um\U{1 s6tWVۄ_Y5Yog7~gDVgs37I%]]O dEڢIcF&q LC&=K+U;^Nk; V#2xceӸyVeH.Ȱ*@_H,3=<5S::VC_$P"_(eL ImHsi(Z?AHK z:!;^:lUL2fJoZaܞdp#~|V~E=ρRxK< E&@ȈC+@slӨ|HrYMm3+ ާ̺ g< 3#Ÿݷb4ɵrq1 -:@A"Jm@kQ+\mo%1>}L˵IN(۶q33+JSنkEQB|s53^g>i.}wp1i~ESbuf7fW8;`+3TL}BZ^]ڟlK#'Tj&&f9Mޯ'6޵op0<ѱcGbO ;ާ9 pfڨpNi2fH|iF(^j遲D%tGlˠXn&Vř[sJW(o4 *V?L{m/@?҃Ӗr+yep_EWa3By&7 eZWy*voG͖%Z._7-S߰&lZlcPPk~QuL'O|O/oĽΕ#hoy[˸?oyf6X':9 (*oDԺՌes62o7'sA1#}э*j{;=Pt,@I'ݏ^iԞ f6,dׅf(/\"vvI?/hu;Zl;+.Zb$%`- 8{D@Ixbl?u}dх?0>oq%r48J:)5?YR[]q!&)@ˏHz_ w[v0(B4Pd1a,;/`U^#|g~Y4TY$, a!ۚ.V(%6u_ʭMn—QS&w;^Hnp#:p3>Xt͚mtpWa4NS@Z4,_Sd*Ѐ"5GxalW闑u$xY|'Miʏ,D\hQ k\. MaL_L ƂJDiQE[j}[֓OF"Ivq68#ZuL[3zuHS`{mtJkgE;M-?b\xXtf&nNW9OVI,Z,= [|{9Zc~r 3 F9~ y{(/'%{A7UTNQ0=P`XA ]bώT͠=?'o[7 \%nXd>yu ?