pgsql: Preventive maintenance in advance of pgindent run.

Started by Tom Laneover 8 years ago59 messages
#1Tom Lane
tgl@sss.pgh.pa.us

Preventive maintenance in advance of pgindent run.

Reformat various places in which pgindent will make a mess, and
fix a few small violations of coding style that I happened to notice
while perusing the diffs from a pgindent dry run.

There is one actual bug fix here: the need-to-enlarge-the-buffer code
path in icu_convert_case was obviously broken. Perhaps it's unreachable
in our usage? Or maybe this is just sadly undertested.

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/c079673dcb7f210617c9fc1470e6bf166d8a2971

Modified Files
--------------
contrib/btree_gist/btree_utils_num.c | 11 +++++---
src/backend/catalog/pg_publication.c | 11 ++++----
src/backend/commands/publicationcmds.c | 4 ++-
src/backend/commands/subscriptioncmds.c | 1 +
src/backend/executor/nodeNamedtuplestorescan.c | 1 +
src/backend/replication/logical/snapbuild.c | 2 +-
src/backend/replication/pgoutput/pgoutput.c | 5 ++--
src/backend/tsearch/wparser.c | 13 ++++++----
src/backend/utils/adt/formatting.c | 35 ++++++++++++++++++--------
src/backend/utils/adt/pg_locale.c | 2 ++
src/bin/pg_basebackup/pg_basebackup.c | 24 +++++++++---------
src/bin/pg_dump/dumputils.c | 3 +--
src/bin/pg_dump/pg_backup_archiver.h | 4 +--
src/bin/pg_waldump/pg_waldump.c | 18 ++++++-------
src/bin/psql/tab-complete.c | 7 +++---
src/common/scram-common.c | 3 ++-
src/include/catalog/pg_authid.h | 16 ++++++------
src/include/catalog/pg_subscription_rel.h | 14 +++++------
src/include/replication/logicalproto.h | 6 +++--
src/interfaces/libpq/libpq-int.h | 4 +--
20 files changed, 105 insertions(+), 79 deletions(-)

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

#2Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tom Lane (#1)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Tom Lane wrote:

src/bin/pg_basebackup/pg_basebackup.c | 24 +++++++++---------
src/bin/pg_waldump/pg_waldump.c | 18 ++++++-------

There are some changes here that should be reverted; for instance:

-   printf(_("  -c, --checkpoint=fast|spread\n"
-            "                         set fast or spread checkpointing\n"));
+   printf(_("  -c, --checkpoint=fast|spread\n"));
+   printf(_("                         set fast or spread checkpointing\n"));

From the translator's point of view the patched version doesn't make
sense because they are two separate strings. In the original, it's a
single translatable string. Particularly in pg_waldump's -p, where a
phrase is now cut in the middle.

--
�lvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alvaro Herrera (#2)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Alvaro Herrera <alvherre@2ndquadrant.com> writes:

There are some changes here that should be reverted; for instance:

-   printf(_("  -c, --checkpoint=fast|spread\n"
-            "                         set fast or spread checkpointing\n"));
+   printf(_("  -c, --checkpoint=fast|spread\n"));
+   printf(_("                         set fast or spread checkpointing\n"));

From the translator's point of view the patched version doesn't make
sense because they are two separate strings. In the original, it's a
single translatable string. Particularly in pg_waldump's -p, where a
phrase is now cut in the middle.

What I was concerned about was that pgindent will reindent the second
line so that it's impossible to tell whether the spacing is correct.
That might not matter to translators but it will be a problem for
source-level maintenance.

Maybe we should rethink the whole idea of breaking these entries across
lines, and just accept that the commentary doesn't line up with other
lines:

printf(_(" -c, --checkpoint=fast|spread set fast or spread checkpointing\n"));

Thoughts?

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#3)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Alvaro Herrera <alvherre@2ndquadrant.com> writes:

... Particularly in pg_waldump's -p, where a
phrase is now cut in the middle.

BTW, I would say that the problem with -p is that somebody failed to
understand the difference between --help and a man page. That entry
should be

-p, --path=PATH directory in which to find log segment files

full stop. I'm not sure that the other multi-line entries in
pg_waldump's --help have an excuse to live, either.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#4)
1 attachment(s)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

I wrote:

BTW, I would say that the problem with -p is that somebody failed to
understand the difference between --help and a man page.

Concretely, how about the attached? I don't think this looks any
worse than the current layout.

regards, tom lane

Attachments:

tighten-usage-printouts.patchtext/x-diff; charset=us-ascii; name=tighten-usage-printouts.patchDownload
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index 866f88a..f2492e4 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -331,22 +331,17 @@ usage(void)
 	printf(_("\nOptions controlling the output:\n"));
 	printf(_("  -D, --pgdata=DIRECTORY receive base backup into directory\n"));
 	printf(_("  -F, --format=p|t       output format (plain (default), tar)\n"));
-	printf(_("  -r, --max-rate=RATE    maximum transfer rate to transfer data directory\n"));
-	printf(_("                         (in kB/s, or use suffix \"k\" or \"M\")\n"));
-	printf(_("  -R, --write-recovery-conf\n"));
-	printf(_("                         write recovery.conf for replication\n"));
+	printf(_("  -r, --max-rate=RATE    maximum transfer rate (in kB/s)\n"));
+	printf(_("  -R, --write-recovery-conf  write recovery.conf for replication\n"));
 	printf(_("  -S, --slot=SLOTNAME    replication slot to use\n"));
 	printf(_("      --no-slot          prevent creation of temporary replication slot\n"));
-	printf(_("  -T, --tablespace-mapping=OLDDIR=NEWDIR\n"));
-	printf(_("                         relocate tablespace in OLDDIR to NEWDIR\n"));
-	printf(_("  -X, --wal-method=none|fetch|stream\n"));
-	printf(_("                         include required WAL files with specified method\n"));
+	printf(_("  -T, --tablespace-mapping=OLDDIR=NEWDIR  relocate tablespace\n"));
+	printf(_("  -X, --wal-method=none|fetch|stream  set method for including WAL files\n"));
 	printf(_("      --waldir=WALDIR    location for the write-ahead log directory\n"));
 	printf(_("  -z, --gzip             compress tar output\n"));
 	printf(_("  -Z, --compress=0-9     compress tar output with given compression level\n"));
 	printf(_("\nGeneral options:\n"));
-	printf(_("  -c, --checkpoint=fast|spread\n"));
-	printf(_("                         set fast or spread checkpointing\n"));
+	printf(_("  -c, --checkpoint=fast|spread  set fast or spread checkpointing\n"));
 	printf(_("  -l, --label=LABEL      set backup label\n"));
 	printf(_("  -n, --no-clean         do not clean up after errors\n"));
 	printf(_("  -N, --no-sync          do not wait for changes to be written safely to disk\n"));
@@ -358,8 +353,7 @@ usage(void)
 	printf(_("  -d, --dbname=CONNSTR   connection string\n"));
 	printf(_("  -h, --host=HOSTNAME    database server host or socket directory\n"));
 	printf(_("  -p, --port=PORT        database server port number\n"));
-	printf(_("  -s, --status-interval=INTERVAL\n"));
-	printf(_("                         time between status packets sent to server (in seconds)\n"));
+	printf(_("  -s, --status-interval=SECONDS  set time between status packets\n"));
 	printf(_("  -U, --username=NAME    connect as specified database user\n"));
 	printf(_("  -w, --no-password      never prompt for password\n"));
 	printf(_("  -W, --password         force password prompt (should happen automatically)\n"));
diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c
index 56843a5..e56d7e2 100644
--- a/src/bin/pg_waldump/pg_waldump.c
+++ b/src/bin/pg_waldump/pg_waldump.c
@@ -689,18 +689,14 @@ usage(void)
 	printf(_("  -e, --end=RECPTR       stop reading at WAL location RECPTR\n"));
 	printf(_("  -f, --follow           keep retrying after reaching end of WAL\n"));
 	printf(_("  -n, --limit=N          number of records to display\n"));
-	printf(_("  -p, --path=PATH        directory in which to find log segment files or a\n"));
-	printf(_("                         directory with a ./pg_wal that contains such files\n"));
-	printf(_("                         (default: current directory, ./pg_wal, PGDATA/pg_wal)\n"));
+	printf(_("  -p, --path=PATH        directory in which to find log segment files\n"));
 	printf(_("  -r, --rmgr=RMGR        only show records generated by resource manager RMGR\n"));
 	printf(_("                         use --rmgr=list to list valid resource manager names\n"));
 	printf(_("  -s, --start=RECPTR     start reading at WAL location RECPTR\n"));
 	printf(_("  -t, --timeline=TLI     timeline from which to read log records\n"));
-	printf(_("                         (default: 1 or the value used in STARTSEG)\n"));
 	printf(_("  -V, --version          output version information, then exit\n"));
 	printf(_("  -x, --xid=XID          only show records with TransactionId XID\n"));
-	printf(_("  -z, --stats[=record]   show statistics instead of records\n"));
-	printf(_("                         (optionally, show per-record statistics)\n"));
+	printf(_("  -z, --stats[=record]   show statistics or per-record statistics, not records\n"));
 	printf(_("  -?, --help             show this help, then exit\n"));
 }
 
#6Peter Eisentraut
peter.eisentraut@2ndquadrant.com
In reply to: Tom Lane (#5)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

On 5/17/17 11:37, Tom Lane wrote:

I wrote:

BTW, I would say that the problem with -p is that somebody failed to
understand the difference between --help and a man page.

Concretely, how about the attached? I don't think this looks any
worse than the current layout.

The previous setup has been in place for years and has never been a
problem. The alternatives are all quite a bit worse.

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#7Peter Eisentraut
peter.eisentraut@2ndquadrant.com
In reply to: Tom Lane (#3)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

On 5/17/17 10:14, Tom Lane wrote:

What I was concerned about was that pgindent will reindent the second
line so that it's impossible to tell whether the spacing is correct.

pgindent moving string continuations to the left is a completely
terrible behavior anyway and we should look into changing that. Just
look at the mess it makes out of SELECT queries in pg_dump.c.

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#8Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#6)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes:

On 5/17/17 11:37, Tom Lane wrote:

Concretely, how about the attached? I don't think this looks any
worse than the current layout.

The previous setup has been in place for years and has never been a
problem. The alternatives are all quite a bit worse.

No, the previous setup hasn't been "in place for years". These programs
were only NLS-ified last fall. Before that the code looked like, eg,

printf(" -z, --stats[=record] show statistics instead of records\n");
printf(" (optionally, show per-record statistics)\n");

so that there weren't string continuations for pgindent to fool with.

I'm not really convinced that having usage() print two- or three-line
switch descriptions is "quite a bit better" than what I suggested.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#9Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#7)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes:

On 5/17/17 10:14, Tom Lane wrote:

What I was concerned about was that pgindent will reindent the second
line so that it's impossible to tell whether the spacing is correct.

pgindent moving string continuations to the left is a completely
terrible behavior anyway and we should look into changing that. Just
look at the mess it makes out of SELECT queries in pg_dump.c.

I'd be on board with that, perhaps, but does anyone here have enough
insight into bsd_indent to fix that without breaking other stuff?

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#10Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tom Lane (#8)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Tom Lane wrote:

Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes:

On 5/17/17 11:37, Tom Lane wrote:

Concretely, how about the attached? I don't think this looks any
worse than the current layout.

The previous setup has been in place for years and has never been a
problem. The alternatives are all quite a bit worse.

No, the previous setup hasn't been "in place for years". These programs
were only NLS-ified last fall.

We use the same technique in other places such as pg_dump's help() too.

--
�lvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alvaro Herrera (#10)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Alvaro Herrera <alvherre@2ndquadrant.com> writes:

Tom Lane wrote:

No, the previous setup hasn't been "in place for years". These programs
were only NLS-ified last fall.

We use the same technique in other places such as pg_dump's help() too.

Meh. Well, I reverted the changes in question while we discuss it.

Changing the pgindent rule for such cases sounds kind of promising,
but will anyone pursue it?

(In any case, we should probably go ahead with the scheduled pgindent
run, and then we can consider a new run with new rules later; that
will ease seeing exactly what changes a new rule would make.)

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#12Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tom Lane (#11)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Tom Lane wrote:

Changing the pgindent rule for such cases sounds kind of promising,
but will anyone pursue it?

We have someone who has studied the BSD indent code and even sent us
patches to fix quite a few bugs, but we've largely ignored his efforts
so far. I propose we take that indent as part of our repo, and patch it
to our preferences.

--
�lvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#13Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alvaro Herrera (#12)
pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Alvaro Herrera <alvherre@2ndquadrant.com> writes:

We have someone who has studied the BSD indent code and even sent us
patches to fix quite a few bugs, but we've largely ignored his efforts
so far. I propose we take that indent as part of our repo, and patch it
to our preferences.

Messing with pgindent didn't seem all that high-priority while we were
in development mode, and it would also have been pretty painful to have
a pgindent that wanted to revisit settled decisions when you just wanted
it to fix new code. Maybe now (ie, over the next few weeks) is a good
time to pursue it, before we start a new round of code development.

Not sure about actually incorporating it into our repo. Doing so would
make it easier for people to use, for sure, and the license seems to be
regular 3-clause BSD, so that angle is OK. But do we want to be carrying
around another 150K of source code?

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#14Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#11)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

On Wed, May 17, 2017 at 01:06:26PM -0400, Tom Lane wrote:

Alvaro Herrera <alvherre@2ndquadrant.com> writes:

Tom Lane wrote:

No, the previous setup hasn't been "in place for years". These programs
were only NLS-ified last fall.

We use the same technique in other places such as pg_dump's help() too.

Meh. Well, I reverted the changes in question while we discuss it.

Are we ready for a pgindent run now?

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#15Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Alvaro Herrera (#12)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

On 2017-05-17 19:16, Alvaro Herrera wrote:

Tom Lane wrote:

Changing the pgindent rule for such cases sounds kind of promising,
but will anyone pursue it?

We have someone who has studied the BSD indent code and even sent us
patches to fix quite a few bugs, but we've largely ignored his efforts
so far. I propose we take that indent as part of our repo, and patch it
to our preferences.

That, I assume, would be me. Coincidentally, I'm about to push my fixes
upstream (FreeBSD). Before that happens, my changes can be obtained from
https://github.com/pstef/freebsd_indent and tested, if anyone wishes.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#16Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#14)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Bruce Momjian <bruce@momjian.us> writes:

Are we ready for a pgindent run now?

Yes, might as well do it. Some of these discussions might lead to
a re-run with a newer version of pgindent, but it would be good to
have a clean tree to start from.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#17Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tom Lane (#13)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Tom Lane wrote:

Alvaro Herrera <alvherre@2ndquadrant.com> writes:

We have someone who has studied the BSD indent code and even sent us
patches to fix quite a few bugs, but we've largely ignored his efforts
so far. I propose we take that indent as part of our repo, and patch it
to our preferences.

Messing with pgindent didn't seem all that high-priority while we were
in development mode, and it would also have been pretty painful to have
a pgindent that wanted to revisit settled decisions when you just wanted
it to fix new code. Maybe now (ie, over the next few weeks) is a good
time to pursue it, before we start a new round of code development.

Sounds reasonable.

Not sure about actually incorporating it into our repo. Doing so would
make it easier for people to use, for sure, and the license seems to be
regular 3-clause BSD, so that angle is OK. But do we want to be carrying
around another 150K of source code?

The alternatives are

1. rely on the dead code we've been using so far (the old BSD indent
patched with our Pg-specific tweaks), or

2. rely on someone else's upstream code -- in this case, FreeBSD's as
patched by Piotr.

Now that Piotr's is about to find a home, perhaps it's okay for us to
rely on that one. I just didn't like the idea of running something from
Piotr's personal repo.

--
�lvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#18Stephen Frost
sfrost@snowman.net
In reply to: Tom Lane (#16)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Tom, all,

* Tom Lane (tgl@sss.pgh.pa.us) wrote:

Bruce Momjian <bruce@momjian.us> writes:

Are we ready for a pgindent run now?

Yes, might as well do it. Some of these discussions might lead to
a re-run with a newer version of pgindent, but it would be good to
have a clean tree to start from.

+1.

Thanks!

Stephen

#19Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#15)
pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

On 2017-05-17 19:16, Alvaro Herrera wrote:

We have someone who has studied the BSD indent code and even sent us
patches to fix quite a few bugs, but we've largely ignored his efforts
so far. I propose we take that indent as part of our repo, and patch it
to our preferences.

That, I assume, would be me. Coincidentally, I'm about to push my fixes
upstream (FreeBSD). Before that happens, my changes can be obtained from
https://github.com/pstef/freebsd_indent and tested, if anyone wishes.

Yes, I was just reviewing those threads. IIUC, the current proposal is
to adopt FreeBSD's version of indent as being less buggy and better
maintained than NetBSD's, and then patch it as necessary.

We'd put off the decision what to do exactly until a more suitable time,
but I think that time is now. What I think we ought to do is go ahead
and indent the tree with current pgindent, and then we have a basis for
experimenting with replacement versions and seeing what they'll do
differently. If we can make a decision and adopt any changes within
the next few weeks, I think that that timing will be about the least pain
we can hope for.

If we do anything with as much impact as changing the indentation rule
for string continuations, I will certainly vote for running the new
pgindent over the back branches too. I still bear the scars of dealing
with the comment-reflowing changes that Bruce put in circa 8.1 --- that
broke just about every back-patching effort for the next five years.
I don't want to go through that again.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#20Andres Freund
andres@anarazel.de
In reply to: Tom Lane (#13)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On 2017-05-17 13:35:22 -0400, Tom Lane wrote:

Not sure about actually incorporating it into our repo. Doing so would
make it easier for people to use, for sure, and the license seems to be
regular 3-clause BSD, so that angle is OK. But do we want to be carrying
around another 150K of source code?

150k? Isn't it like 3-4k?

- Andres

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#21Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alvaro Herrera (#17)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Alvaro Herrera <alvherre@2ndquadrant.com> writes:

Tom Lane wrote:

Not sure about actually incorporating it into our repo. Doing so would
make it easier for people to use, for sure, and the license seems to be
regular 3-clause BSD, so that angle is OK. But do we want to be carrying
around another 150K of source code?

The alternatives are

1. rely on the dead code we've been using so far (the old BSD indent
patched with our Pg-specific tweaks), or

2. rely on someone else's upstream code -- in this case, FreeBSD's as
patched by Piotr.

Now that Piotr's is about to find a home, perhaps it's okay for us to
rely on that one. I just didn't like the idea of running something from
Piotr's personal repo.

Well, "pg_bsd_indent is whatever you can find in the FreeBSD repo" is
not a rule that is going to work either. We need to have a standardized
version that all developers can run and get the same results. So I
think we'll either have a blessed tarball that we pass around (same
as we do now), or we'll put it into our own tree. I don't really see
much downside to the latter except bloat.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#22Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andres Freund (#20)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Andres Freund <andres@anarazel.de> writes:

On 2017-05-17 13:35:22 -0400, Tom Lane wrote:

Not sure about actually incorporating it into our repo. Doing so would
make it easier for people to use, for sure, and the license seems to be
regular 3-clause BSD, so that angle is OK. But do we want to be carrying
around another 150K of source code?

150k? Isn't it like 3-4k?

The version we're using now is

$ tar xfz ~/archive/pg_bsd_indent-1.3.tar.gz
$ wc pg_bsd_indent/*
38 122 928 pg_bsd_indent/Makefile
107 831 4835 pg_bsd_indent/README
508 1743 11988 pg_bsd_indent/args.c
569 2727 14732 pg_bsd_indent/indent.1
1288 5677 37815 pg_bsd_indent/indent.c
101 671 4251 pg_bsd_indent/indent_codes.h
367 2376 15206 pg_bsd_indent/indent_globs.h
685 2781 18045 pg_bsd_indent/io.c
634 2709 17017 pg_bsd_indent/lexi.c
306 1133 8019 pg_bsd_indent/netbsd.patch
366 1659 10953 pg_bsd_indent/parse.c
478 2427 15199 pg_bsd_indent/pr_comment.c
5447 24856 158988 total

(Note I was counting bytes not LOC.)

I've not looked at FreeBSD's version, but I'll bet a nickel it's bigger.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#23Andres Freund
andres@anarazel.de
In reply to: Tom Lane (#22)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On 2017-05-17 14:44:31 -0400, Tom Lane wrote:

$ tar xfz ~/archive/pg_bsd_indent-1.3.tar.gz
$ wc pg_bsd_indent/*
38 122 928 pg_bsd_indent/Makefile
107 831 4835 pg_bsd_indent/README
508 1743 11988 pg_bsd_indent/args.c
569 2727 14732 pg_bsd_indent/indent.1
1288 5677 37815 pg_bsd_indent/indent.c
101 671 4251 pg_bsd_indent/indent_codes.h
367 2376 15206 pg_bsd_indent/indent_globs.h
685 2781 18045 pg_bsd_indent/io.c
634 2709 17017 pg_bsd_indent/lexi.c
306 1133 8019 pg_bsd_indent/netbsd.patch
366 1659 10953 pg_bsd_indent/parse.c
478 2427 15199 pg_bsd_indent/pr_comment.c
5447 24856 158988 total

(Note I was counting bytes not LOC.)

Ah, that explains that ;)

I've not looked at FreeBSD's version, but I'll bet a nickel it's bigger.

Not really, even counting the added tests.

1275 5805 38674 freebsd_indent/indent.c
595 2867 15020 freebsd_indent/indent.1
9 25 240 freebsd_indent/Makefile
342 1451 9587 freebsd_indent/parse.c
343 2234 14637 freebsd_indent/indent_globs.h
356 1771 11311 freebsd_indent/pr_comment.c
522 2190 14063 freebsd_indent/io.c
18 48 361 freebsd_indent/Makefile.depend
7 18 89 freebsd_indent/tests/cppelsecom.0.stdout
0 1 5 freebsd_indent/tests/nsac.pro
52 173 1093 freebsd_indent/tests/comments.0
6 11 54 freebsd_indent/tests/nsac.0.stdout
0 1 4 freebsd_indent/tests/label.pro
8 20 96 freebsd_indent/tests/float.0.stdout
0 1 4 freebsd_indent/tests/sac.pro
9 20 127 freebsd_indent/tests/surplusbad.0.stdout
60 177 1127 freebsd_indent/tests/comments.0.stdout
0 1 22 freebsd_indent/tests/types_from_file.pro
7 18 86 freebsd_indent/tests/cppelsecom.0
30 46 284 freebsd_indent/tests/f_decls.0.stdout
23 50 571 freebsd_indent/tests/parens.0
14 35 246 freebsd_indent/tests/list_head.0.stdout
73 147 900 freebsd_indent/tests/declarations.0.stdout
16 35 242 freebsd_indent/tests/list_head.0
21 51 214 freebsd_indent/tests/struct.0
6 20 95 freebsd_indent/tests/float.0
42 118 555 freebsd_indent/tests/elsecomment.0
13 31 134 freebsd_indent/tests/label.0
23 50 558 freebsd_indent/tests/parens.0.stdout
27 51 286 freebsd_indent/tests/f_decls.0
9 20 125 freebsd_indent/tests/surplusbad.0
9 31 208 freebsd_indent/tests/binary.0
4 12 54 freebsd_indent/tests/nsac.0
0 1 4 freebsd_indent/tests/surplusbad.pro
4 12 54 freebsd_indent/tests/sac.0
1 3 15 freebsd_indent/tests/parens.pro
5 19 95 freebsd_indent/tests/offsetof.0
6 17 102 freebsd_indent/tests/wchar.0.stdout
47 118 578 freebsd_indent/tests/elsecomment.0.stdout
79 143 850 freebsd_indent/tests/declarations.0
3 14 60 freebsd_indent/tests/types_from_file.0
0 1 3 freebsd_indent/tests/elsecomment.pro
6 12 55 freebsd_indent/tests/sac.0.stdout
1 2 3 freebsd_indent/tests/types_from_file.list
6 17 94 freebsd_indent/tests/wchar.0
3 15 62 freebsd_indent/tests/types_from_file.0.stdout
11 31 209 freebsd_indent/tests/binary.0.stdout
7 19 96 freebsd_indent/tests/offsetof.0.stdout
14 31 207 freebsd_indent/tests/label.0.stdout
0 1 4 freebsd_indent/tests/comments.pro
23 47 215 freebsd_indent/tests/struct.0.stdout
100 818 4720 freebsd_indent/README
51 300 2082 freebsd_indent/indent.h
351 1415 10848 freebsd_indent/args.c
75 425 2740 freebsd_indent/indent_codes.h
654 2577 17238 freebsd_indent/lexi.c
5366 23567 151406 total

- Andres

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#24Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Tom Lane (#19)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On 2017-05-17 20:31, Tom Lane wrote:

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

On 2017-05-17 19:16, Alvaro Herrera wrote:

We have someone who has studied the BSD indent code and even sent us
patches to fix quite a few bugs, but we've largely ignored his efforts
so far. I propose we take that indent as part of our repo, and patch it
to our preferences.

That, I assume, would be me. Coincidentally, I'm about to push my fixes
upstream (FreeBSD). Before that happens, my changes can be obtained from
https://github.com/pstef/freebsd_indent and tested, if anyone wishes.

Yes, I was just reviewing those threads. IIUC, the current proposal is
to adopt FreeBSD's version of indent as being less buggy and better
maintained than NetBSD's, and then patch it as necessary.

One of my goals here is to fix bugs in FreeBSD indent so it's easier to
develop and maintain. I've also tried hard to not introduce serious
regressions for FreeBSD which also uses indent (for some sub-projects
even automatically). This is an ongoing effort.

What I describe below I believe to have been largely achieved.

Another goal is to incorporate all custom changes that make current
pg_bsd_indent yet another, unique indent fork, into FreeBSD indent - so
that maintaining patches for some other indent by the Postgres project
wouldn't be necessary. I understand the need to have control over a copy
of it within the Postgres project but it would be nice to not
effectively fork it by carrying custom patches around.

The third significant issue I kept in my mind was to shift some
work-arounds from pgindent to indent. When I use my indent as the base
for pgindent and set its options like this:
-bad -bap -bc -bl -d0 -cdb -nce -nfc1 -di12 -i4 -l79 -lp -nip -npro -bbb
-cli1 -sac -ts4 -cp10
I can remove most of the work-arounds written in the perl script and
still get pretty decent results. But I expect some debate over a few things.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#25Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#15)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

That, I assume, would be me. Coincidentally, I'm about to push my fixes
upstream (FreeBSD). Before that happens, my changes can be obtained from
https://github.com/pstef/freebsd_indent and tested, if anyone wishes.

Do you have recommendations for the switches to use with this to
match PG style? It doesn't look like it takes quite the same
switches as the old netbsd code.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#26Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#24)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

The third significant issue I kept in my mind was to shift some
work-arounds from pgindent to indent.

Yeah, I was wondering about that too.

When I use my indent as the base
for pgindent and set its options like this:
-bad -bap -bc -bl -d0 -cdb -nce -nfc1 -di12 -i4 -l79 -lp -nip -npro -bbb
-cli1 -sac -ts4 -cp10

Ah, thanks, ignore the message I just sent asking for that ...

I can remove most of the work-arounds written in the perl script and
still get pretty decent results. But I expect some debate over a few things.

... but what parts of the perl script do you remove? I'm trying
to duplicate whatever results you're currently getting.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#27Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Tom Lane (#26)
1 attachment(s)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On 2017-05-17 22:11, Tom Lane wrote:

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

The third significant issue I kept in my mind was to shift some
work-arounds from pgindent to indent.

Yeah, I was wondering about that too.

When I use my indent as the base
for pgindent and set its options like this:
-bad -bap -bc -bl -d0 -cdb -nce -nfc1 -di12 -i4 -l79 -lp -nip -npro -bbb
-cli1 -sac -ts4 -cp10

Ah, thanks, ignore the message I just sent asking for that ...

I can remove most of the work-arounds written in the perl script and
still get pretty decent results. But I expect some debate over a few things.

... but what parts of the perl script do you remove? I'm trying
to duplicate whatever results you're currently getting.

Full copy of my pgindent attached. Changes commented below.

@@ -17,7 +17,7 @@ my $devnull = File::Spec->devnull;

 # Common indent settings
 my $indent_opts =
-  "-bad -bap -bc -bl -d0 -cdb -nce -nfc1 -di12 -i4 -l79 -lp -nip -npro
-bbb";
+  "-bad -bap -bc -bl -d0 -cdb -nce -nfc1 -di12 -i4 -l79 -lp -nip -npro
-bbb -cli1 -sac -ts4 -cp10";

# indent-dependent settings
my $extra_opts = "";

The additional options are necessary. Mostly they replace the work-arounds.

@@ -198,60 +198,16 @@ sub pre_indent
{
my $source = shift;

- # remove trailing whitespace
- $source =~ s/[ \t]+$//gm;
-

I'm not sure there won't be any trailing white-space, but I've committed
changes that should limit it.

## Comments

# Convert // comments to /* */
$source =~ s!^([ \t]*)//(.*)$!$1/* $2 */!gm;

- # 'else' followed by a single-line comment, followed by
- # a brace on the next line confuses BSD indent, so we push
- # the comment down to the next line, then later pull it
- # back up again. Add space before _PGMV or indent will add
- # it for us.
- # AMD: A symptom of not getting this right is that you see
errors like:
- # FILE: ../../../src/backend/rewrite/rewriteHandler.c
- # Error@2259:
- # Stuff missing from end of file
- $source =~
- s!(\}|[ \t])else[ \t]*(/\*)(.*\*/)[ \t]*$!$1else\n $2
_PGMV$3!gm;
-
- # Indent multi-line after-'else' comment so BSD indent will move it
- # properly. We already moved down single-line comments above.
- # Check for '*' to make sure we are not in a single-line comment
that
- # has other text on the line.
- $source =~ s!(\}|[ \t])else[ \t]*(/\*[^*]*)[ \t]*$!$1else\n
$2!gm;

These are definitely fixed.

## Other

- # Work around bug where function that defines no local variables
- # misindents switch() case lines and line after #else. Do not do
- # for struct/enum.
- my @srclines = split(/\n/, $source);
- foreach my $lno (1 .. $#srclines)
- {
- my $l2 = $srclines[$lno];
-
- # Line is only a single open brace in column 0
- next unless $l2 =~ /^\{[ \t]*$/;
-
- # previous line has a closing paren
- next unless $srclines[ $lno - 1 ] =~ /\)/;
-
- # previous line was struct, etc.
- next
- if $srclines[ $lno - 1 ] =~
- m!=|^(struct|enum|[ \t]*typedef|extern[ \t]+"C")!;
-
- $srclines[$lno] = "$l2\nint pgindent_func_no_var_fix;";
- }
- $source = join("\n", @srclines) . "\n"; # make sure there's a
final \n
-

I don't have time now to double-check, but the above shouldn't be needed
anymore.

- # Pull up single-line comment after 'else' that was pulled down
above
- $source =~ s!else\n[ \t]+/\* _PGMV!else\t/*!g;
-
- # Indent single-line after-'else' comment by only one tab.
- $source =~ s!(\}|[ \t])else[ \t]+(/\*.*\*/)[ \t]*$!$1else\t$2!gm;
-
- # Add tab before comments with no whitespace before them (on a
tab stop)
- $source =~ s!(\S)(/\*.*\*/)$!$1\t$2!gm;
-
- # Remove blank line between opening brace and block comment.
- $source =~ s!(\t*\{\n)\n([ \t]+/\*)$!$1$2!gm;
-

These are almost definitely fixed in indent.

- # cpp conditionals
-
- # Reduce whitespace between #endif and comments to one tab
- $source =~ s!^\#endif[ \t]+/\*!#endif /*!gm;
-
## Functions

- # Work around misindenting of function with no variables defined.
- $source =~ s!^[ \t]*int[ \t]+pgindent_func_no_var_fix;[
\t]*\n{1,2}!!gm;
-

These have likely been fixed.

- ## Other
-
- # Remove too much indenting after closing brace.
- $source =~ s!^\}\t[ \t]+!}\t!gm;
-
- # Workaround indent bug that places excessive space before 'static'.
- $source =~ s!^static[ \t]+!static !gm;
-
- # Remove leading whitespace from typedefs
- $source =~ s!^[ \t]+typedef enum!typedef enum!gm
- if $source_filename =~ 'libpq-(fe|events).h$';

I believe these have been fixed as well.

- # Remove trailing blank lines
- $source =~ s!\n+\z!\n!

I'm not sure, but shouldn't be necessary.

@@ -541,7 +462,6 @@ foreach my $source_filename (@files)

# Protect backslashes in DATA() and wrapping in CATALOG()

- $source = detab($source);
$source =~ s!^((DATA|CATALOG)\(.*)$!/*$1*/!gm;

$source = run_indent($source, \$error_message);
@@ -553,7 +473,6 @@ foreach my $source_filename (@files)

# Restore DATA/CATALOG lines; must be done here so tab alignment is
preserved
$source =~ s!^/\*((DATA|CATALOG)\(.*)\*/$!$1!gm;
- $source = entab($source);

Definitely unnecessary if you use indent -ts4. There are slight differences.

Sorry for the delay, I was unprepared for answering this tonight.

Attachments:

pgindenttext/plain; name=pgindentDownload
#28Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Peter Eisentraut (#7)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

On 2017-05-17 17:55, Peter Eisentraut wrote:

On 5/17/17 10:14, Tom Lane wrote:

What I was concerned about was that pgindent will reindent the second
line so that it's impossible to tell whether the spacing is correct.

pgindent moving string continuations to the left is a completely
terrible behavior anyway and we should look into changing that. Just
look at the mess it makes out of SELECT queries in pg_dump.c.

If I remember correctly, it tries to right-align string literals to
whatever -l ("Maximum length of an output line") was set to.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#29Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Piotr Stefaniak (#28)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Piotr Stefaniak wrote:

On 2017-05-17 17:55, Peter Eisentraut wrote:

On 5/17/17 10:14, Tom Lane wrote:

What I was concerned about was that pgindent will reindent the second
line so that it's impossible to tell whether the spacing is correct.

pgindent moving string continuations to the left is a completely
terrible behavior anyway and we should look into changing that. Just
look at the mess it makes out of SELECT queries in pg_dump.c.

If I remember correctly, it tries to right-align string literals to
whatever -l ("Maximum length of an output line") was set to.

Yeah, it does that (for error messages too).

I'm not sure what's the behavior we do want. One choice is that the
continuation string opening quote should line up with the opening quote
in the previous line. So for instance:

elog(ERROR, "this message is very long"
"and the second line may get over the 80 chars limit if we let it");

but I suppose some we would like the opening quote to line up with the
parens:

elog(ERROR, "this message is very long "
"and the second line may get over the 80 chars limit if we let it");

I vote that the first form is best, even if it would cause me some pain
because my vim config doesn't line up continuations like that. (Not sure
I can tweak it to work that way.)

--
�lvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#30Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#27)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

Full copy of my pgindent attached. Changes commented below.

Thanks! I ran this, along with the indent copy I pulled from your
github repo a couple hours ago, over the current PG tree (post
Bruce's run). I got a diff extending to about 100K lines :-(
which I will not post here. It seemed like a very large fraction
of that was that old pgindent chooses to use a space rather than
a tab if the tab would only move over one column. This version
uses a tab anyway.

I hacked around that by putting back a detab/entab step at the end
using the existing subroutines in pgindent. That about halved the
size of the diff, but it's still too big to post. Much of what
I'm seeing with this version is randomly different decisions about
how far to indent comments, eg

@@ -101,8 +101,8 @@ typedef struct BloomOptions
 {
    int32       vl_len_;        /* varlena header (do not touch directly!) */
    int         bloomLength;    /* length of signature in words (not bits!) */
-   int         bitSize[INDEX_MAX_KEYS];        /* # of bits generated for
-                                                * each index key */
+   int         bitSize[INDEX_MAX_KEYS];    /* # of bits generated for each
+                                            * index key */
 } BloomOptions;

/*

(I untabified the above fragment in the hope of making it more readable
in email.)

It does seem to be handling formatting around sizeof() calls a lot better
than the old code, as well as function pointer typedefs. So those are
huge wins. But can we avoid the changes mentioned above? I'd like the
new version to only differ in ways that are clear improvements.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#31Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alvaro Herrera (#29)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Alvaro Herrera <alvherre@2ndquadrant.com> writes:

Piotr Stefaniak wrote:

If I remember correctly, it tries to right-align string literals to
whatever -l ("Maximum length of an output line") was set to.

Yeah, it does that (for error messages too).

Piotr's version seems to at least do this more consistently than the
old version; for instance I notice this diff from Bruce's run:

@@ -1864,8 +1864,8 @@ describeOneTableDetails(const char *schemaname,
        if (verbose)
            printfPQExpBuffer(&buf,
                              "SELECT inhparent::pg_catalog.regclass,"
-                           "       pg_get_expr(c.relpartbound, inhrelid),"
-                         "     pg_get_partition_constraintdef(inhrelid)"
+                             "     pg_get_expr(c.relpartbound, inhrelid),"
+                             "     pg_get_partition_constraintdef(inhrelid)"
                              " FROM pg_catalog.pg_class c"
                              " JOIN pg_catalog.pg_inherits"
                              " ON c.oid = inhrelid"

(Again, untabified for clarity.) However, it didn't do anything to any of
the horribly-formatted queries in pg_dump.c, so it's mostly following the
same rule as before.

I'm not sure what's the behavior we do want. One choice is that the
continuation string opening quote should line up with the opening quote
in the previous line. So for instance:

Yeah, I'd vote for that one too. If you want to line things up with
a function call paren, you can always start the whole literal on a fresh
line, as in the above example.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#32Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#15)
1 attachment(s)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

That, I assume, would be me. Coincidentally, I'm about to push my fixes
upstream (FreeBSD). Before that happens, my changes can be obtained from
https://github.com/pstef/freebsd_indent and tested, if anyone wishes.

I spent a little bit of time on portability testing, because we are
certainly going to insist that this tool be portable to more than
just FreeBSD. Things are not very good as it stands:

* Makefile is 100% BSD-specific. Possibly we could just agree to
disagree on that point, and include a PG-style makefile that is not
like upstream's. I attach the one I used for test purposes.

* __FBSDID() macros fail to compile anywhere else than FreeBSD.
Couldn't you hide those inside #if 0, as you're already doing for
the ancient sccsid strings?

* Please put the copyright[] string in indent.c inside #if 0 too,
as that draws unreferenced-variable warnings on some compilers.

* There's one use of bcopy(), please replace with memmove().

* References to <sys/cdefs.h> and <err.h> are problematic, as both
are BSD-isms not found in POSIX. They seem to be available anyway
on Linux, but I bet not on Windows or SysV-tradition boxes.
I removed the <sys/cdefs.h> includes and didn't see any problems,
but removing <err.h> exposes calls to err() and errx(), which
we'd have to find replacements for. Maybe just change them to
standard-conforming printf() + exit()?

regards, tom lane

Attachments:

Makefiletext/x-makefile; charset=us-ascii; name=MakefileDownload
#33Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Tom Lane (#30)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On 2017-05-17 23:46, Tom Lane wrote:

I hacked around that by putting back a detab/entab step at the end
using the existing subroutines in pgindent. That about halved the
size of the diff, but it's still too big to post. Much of what
I'm seeing with this version is randomly different decisions about
how far to indent comments

pgindent doesn't set the -c indent option ("The column in which comments
on code start."), so indent uses the default value of 33 (meaning column
32). If the code pushes the comment further than column 32, indent only
places a single tab between the two just to separate them.

This, given 4-column tabs, should result in placing the comment on
bitSize[INDEX_MAX_KEYS]; from your example onto column 44 - which the
newer version of indent does (if you tell it -ts4), unlike the older
one. I think that this is an improvement.

It does seem to be handling formatting around sizeof() calls a lot better
than the old code, as well as function pointer typedefs. So those are
huge wins. But can we avoid the changes mentioned above? I'd like the
new version to only differ in ways that are clear improvements.

I don't know how to avoid the improvement. Try removing -ts4 as well as
putting back detab+entab.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#34Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Tom Lane (#32)
Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.

On 2017-05-18 18:13, Tom Lane wrote:

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

That, I assume, would be me. Coincidentally, I'm about to push my fixes
upstream (FreeBSD). Before that happens, my changes can be obtained from
https://github.com/pstef/freebsd_indent and tested, if anyone wishes.

I spent a little bit of time on portability testing, because we are
certainly going to insist that this tool be portable to more than
just FreeBSD. Things are not very good as it stands:

* Makefile is 100% BSD-specific. Possibly we could just agree to
disagree on that point, and include a PG-style makefile that is not
like upstream's. I attach the one I used for test purposes.

This would have to live outside of FreeBSD for obvious (or not) reasons.
Most likely as a part of pg_bsd_indent. I use the original ("BSD")
Makefile on Linux, feeding it to bmake(1). But I don't expect bmake to
become a requirement for pg_bsd_indent.

* __FBSDID() macros fail to compile anywhere else than FreeBSD.
Couldn't you hide those inside #if 0, as you're already doing for
the ancient sccsid strings?

The use of __FBSDID macro won't be going anywhere from FreeBSD indent,
I'm afraid. But I think it could be if-def'd out under systems other
than FreeBSD.

* Please put the copyright[] string in indent.c inside #if 0 too,
as that draws unreferenced-variable warnings on some compilers.

* There's one use of bcopy(), please replace with memmove().

These could probably be done upstream. I'd like to convert the strings
to comments.

* References to <sys/cdefs.h> and <err.h> are problematic, as both
are BSD-isms not found in POSIX. They seem to be available anyway
on Linux, but I bet not on Windows or SysV-tradition boxes.
I removed the <sys/cdefs.h> includes and didn't see any problems,
but removing <err.h> exposes calls to err() and errx(), which
we'd have to find replacements for. Maybe just change them to
standard-conforming printf() + exit()?

I'll look into why indent includes sys/cdefs.h. I don't expect to be
allowed to replace err() and errx() with equivalent solutions based on
ISO C and POSIX. I fear the idea of detecting err*() support prior to
compilation... Probably a much simpler solution would be to replace
err*() with equivalent solutions in the PG's fork of indent. printf()
and exit() would probably be insufficient, you'd also need strerror(), I
think.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#35Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#33)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

On 2017-05-17 23:46, Tom Lane wrote:

... Much of what
I'm seeing with this version is randomly different decisions about
how far to indent comments

pgindent doesn't set the -c indent option ("The column in which comments
on code start."), so indent uses the default value of 33 (meaning column
32). If the code pushes the comment further than column 32, indent only
places a single tab between the two just to separate them.

Well, actually what it does is to push the comment to what it thinks is
the next tab stop. So the core issue here is that the comments get
formatted differently for -ts4 than -ts8. I think that's arguably a bug;
the width of tabs should only affect how whitespace is stored, not
formatting decisions. Don't suppose you'd like to introduce a separate
parameter that defines the extra-indentation step for comments?

This, given 4-column tabs, should result in placing the comment on
bitSize[INDEX_MAX_KEYS]; from your example onto column 44 - which the
newer version of indent does (if you tell it -ts4), unlike the older
one. I think that this is an improvement.

It may or may not be an improvement, but right now what I want is to see
what this version of indent does differently, with as few extraneous
changes as possible. We can argue later about whether we're willing to
accept gratuitous comment reformatting, but when one can't even find the
positive changes in amongst the noise, the chances of getting this accepted
are not good.

I don't know how to avoid the improvement. Try removing -ts4 as well as
putting back detab+entab.

I tried that but it did not produce as good a match to the old results as
what I'd previously arrived at by trial and error, which was to hack
pr_comment() like this:

@@ -148,7 +151,9 @@ pr_comment(void)
 	    else
 		ps.com_col = ps.decl_on_line || ps.ind_level == 0
 		    ? ps.decl_com_ind : ps.com_ind;
-	    if (ps.com_col <= target_col)
+	    if (ps.com_col < target_col)
+		ps.com_col = 8 * (1 + (target_col - 1) / 8) + 1;
+	    else if (ps.com_col == target_col)
 		ps.com_col = tabsize * (1 + (target_col - 1) / tabsize) + 1;
 	    if (ps.com_col + 24 > adj_max_col)
 		adj_max_col = ps.com_col + 24;

I'm not really sure why the old behavior seems to be to move only 4 spaces
when right at the boundary, but there you have it.

I also found that there was extra spacing getting inserted for some cases
like

case afairlylonglabel: /* comment */

which I eventually tracked down to the fact that this bit:

/*
* turn everything so far into a label
*/
{
int len = e_code - s_code;

CHECK_SIZE_LAB(len + 3);
memcpy(e_lab, s_code, len);
e_lab += len;
*e_lab++ = ':';
*e_lab++ = ' ';
*e_lab = '\0';
e_code = s_code;
}

is inserting an extra space into the "lab" string, causing pr_comment()
to think that the label extends one character to the right of where
it really does, so that it moves the comment over when it need not.
I am not sure why it's like that, but compensating for it in pr_comment()
like this improved matters:

@@ -137,8 +136,12 @@ pr_comment(void)
 		target_col = count_spaces(compute_code_target(), s_code);
 	    else {
 		target_col = 1;
-		if (s_lab != e_lab)
+		if (s_lab != e_lab) {
 		    target_col = count_spaces(compute_label_target(), s_lab);
+		    /* ignore any trailing space in lab for this purpose */
+		    if (e_lab[-1] == ' ')
+			target_col--;
+		}
 	    }
 	    if (s_lab != e_lab && s_lab[1] == 'e' &&
 		(strncmp(s_lab, "#endif", 6) == 0 ||

(I see that the extra space after colon is inserted by the old version
of indent too, which makes it even less clear why the boundary-case
behavior is like this. I have a feeling that this is hacking things
at the wrong place.)

That got me to a point where there was little enough noise that I could
start to see the real changes, and I soon noticed that there was a fair
amount of apparently buggy behavior, like this change:

diff --git a/contrib/pg_prewarm/pg_prewarm.c b/contrib/pg_prewarm/pg_prewarm.c
index 78d71ab..630bacc 100644
--- a/contrib/pg_prewarm/pg_prewarm.c
+++ b/contrib/pg_prewarm/pg_prewarm.c
@@ -33,8 +33,8 @@ PG_FUNCTION_INFO_V1(pg_prewarm);
 typedef enum
 {
 	PREWARM_PREFETCH,
-	PREWARM_READ,
-	PREWARM_BUFFER
+		PREWARM_READ,
+		PREWARM_BUFFER
 } PrewarmType;

static char blockbuffer[BLCKSZ];

Curiously, there are other enum declarations that don't get the phony
extra indentation. I traced through it a bit and eventually found that
the difference between OK and not OK is that the declarations that don't
get messed up look like "typedef enum enumlabel ...", ie the problem
with this one is there's no extra identifier after "enum". The proximate
cause of that is this line in indent.c:

ps.in_decl = ps.decl_on_line = ps.last_token != type_def;

which I see used to be just

ps.in_decl = ps.decl_on_line = true;

in old indent. This results in leaving ps.in_decl in the wrong state
when there's no enum label. I suspect that this change is also accounting
for a lot of noise changes I see in struct decls that lack a label after
"typedef struct". I don't know what it is you had in mind to fix with
this change, but surely there are a lot of other cases where the distance
back to the "typedef" keyword is variable? (I tried reverting this
change, and it fixed the enum problem but introduced other issues.)

I'm also noticing some random-looking changes like this one:

diff --git a/contrib/isn/isn.c b/contrib/isn/isn.c
index c3c10e1..c60369e 100644
--- a/contrib/isn/isn.c
+++ b/contrib/isn/isn.c
@@ -531,7 +531,7 @@ static bool
 ean2string(ean13 ean, bool errorOK, char *result, bool shortType)
 {
 	const char *(*TABLE)[2];
-	const unsigned (*TABLE_index)[2];
+	const unsigned(*TABLE_index)[2];
 	enum isn_type type = INVALID;

char *aux;

which is surely not an improvement; but I ran out of energy before
investigating that.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#36Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#35)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

I wrote:

Curiously, there are other enum declarations that don't get the phony
extra indentation. I traced through it a bit and eventually found that
the difference between OK and not OK is that the declarations that don't
get messed up look like "typedef enum enumlabel ...", ie the problem
with this one is there's no extra identifier after "enum". The proximate
cause of that is this line in indent.c:

ps.in_decl = ps.decl_on_line = ps.last_token != type_def;

I found that things seem to work better with this change:

@@ -939,7 +938,7 @@ check_type:
        }
        ps.in_or_st = true; /* this might be a structure or initialization
                 * declaration */
-       ps.in_decl = ps.decl_on_line = ps.last_token != type_def;
+       ps.in_decl = ps.decl_on_line = (ps.last_token != type_def || type_code == structure);
        if ( /* !ps.in_or_st && */ ps.dec_nest <= 0)
        ps.just_saw_decl = 2;
        prefix_blankline_requested = 0;

I have no idea if that's a correct or sufficient fix, but it makes the
oddnesses around unnamed enum and struct declarations in the PG sources
go away.

There remain a small number of cases that look like bugs. One is the
case I showed before:

@@ -531,7 +531,7 @@ static bool
ean2string(ean13 ean, bool errorOK, char *result, bool shortType)
{
const char *(*TABLE)[2];
- const unsigned (*TABLE_index)[2];
+ const unsigned(*TABLE_index)[2];
enum isn_type type = INVALID;

char *aux;

I have an impression that this might be related to the ps.in_decl business,
but the patch shown above did not change it. Possibly related is this:

diff --git a/src/include/access/gin_private.h b/src/include/access/gin_private.h
index 986fe6e..a2d11e5 100644
--- a/src/include/access/gin_private.h
+++ b/src/include/access/gin_private.h
@@ -149,8 +149,8 @@ typedef struct GinBtreeData
    bool        (*findItem) (GinBtree, GinBtreeStack *);
    /* insert methods */
-   OffsetNumber (*findChildPtr) (GinBtree, Page, BlockNumber, OffsetNumber);
-   GinPlaceToPageRC (*beginPlaceToPage) (GinBtree, Buffer, GinBtreeStack *, void *, BlockNumber, void **, Page *, Page *);
+   OffsetNumber(*findChildPtr) (GinBtree, Page, BlockNumber, OffsetNumber);
+   GinPlaceToPageRC(*beginPlaceToPage) (GinBtree, Buffer, GinBtreeStack *, void *, BlockNumber, void **, Page *, Page *);
    void        (*execPlaceToPage) (GinBtree, Buffer, GinBtreeStack *, void *, BlockNumber, void *);
    void       *(*prepareDownlink) (GinBtree, Buffer);
    void        (*fillRoot) (GinBtree, Page, BlockNumber, Page, BlockNumber, Page);

Whatever's going on there, it seems to affect only a very small number
of places. No idea why.

Also, multiple comments on the same line are now run together, which
is surely not better:

@@ -2144,11 +2144,11 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, bool opportunistic)
*/
NewPage->xlp_magic = XLOG_PAGE_MAGIC;

-       /* NewPage->xlp_info = 0; */    /* done by memset */
+       /* NewPage->xlp_info = 0; *//* done by memset */
        NewPage->xlp_tli = ThisTimeLineID;
        NewPage->xlp_pageaddr = NewPageBeginPtr;
-       /* NewPage->xlp_rem_len = 0; */ /* done by memset */
+       /* NewPage->xlp_rem_len = 0; *//* done by memset */

/*
* If online backup is not in progress, mark the header to indicate

Also, I found two places where an overlength comment line is simply busted
altogether --- notice that a character is missing at the split point:

@@ -257,7 +257,8 @@ get_pgpid(bool is_status_request)
        /*
         * The Linux Standard Base Core Specification 3.1 says this should
         * return '4, program or service status is unknown'
-        * https://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-g
+        * https://refspecs.linu
+        * base.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-g
         * eneric/iniscrptact.html
         */
        exit(is_status_request ? 4 : 1);
@@ -629,7 +629,8 @@ handleCopyIn(PGconn *conn, FILE *copystream, bool isbinary, PGresult **res)
                    /*
                     * This code erroneously assumes '\.' on a line alone
                     * inside a quoted CSV string terminates the \copy.
-                    * http://www.postgresql.org/message-id/E1TdNVQ-0001ju-GO@w
+                    * http://w
+                    * w.postgresql.org/message-id/E1TdNVQ-0001ju-GO@w
                     * rigleys.postgresql.org
                     */
                    if (strcmp(buf, "\\.\n") == 0 ||

Another problem is that the handling of unrecognized typedef names as
field types in a struct has gotten significantly worse:

diff --git a/src/include/lib/simplehash.h b/src/include/lib/simplehash.h
index a35addf..919d262 100644
--- a/src/include/lib/simplehash.h
+++ b/src/include/lib/simplehash.h
@@ -114,14 +114,14 @@ typedef struct SH_TYPE
    uint32      grow_threshold;
    /* hash buckets */
-   SH_ELEMENT_TYPE *data;
+               SH_ELEMENT_TYPE * data;

/* memory context to use for allocations */
MemoryContext ctx;

I don't mind the space after the star so much, but the indentation
is awful. In this particular example we *cannot* fix it by making
SH_ELEMENT_TYPE a real typedef, because it's actually meant to be
a macro and vary from one inclusion of simplehash.h to another.

I guess a possible answer is to create a list of "manual" typedef
names to add to the ones extracted from the buildfarm. But if
it's possible for indent to be a bit more fail-soft in this type
of case, we'd not have to. It seems like other users of indent
might have more need for plausible treatment of unknown typedef
names than we do, too.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#37Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#36)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

I wrote:

Also, I found two places where an overlength comment line is simply busted
altogether --- notice that a character is missing at the split point:

I found the cause of that: you need to apply this patch:

--- freebsd_indent/pr_comment.c~	2017-05-17 14:59:31.548442801 -0400
+++ freebsd_indent/pr_comment.c	2017-05-20 20:51:16.447332977 -0400
@@ -344,8 +353,8 @@ pr_comment(void)
 		{
 		    int len = strlen(t_ptr);
-		    CHECK_SIZE_COM(len);
-		    memmove(e_com, t_ptr, len);
+		    CHECK_SIZE_COM(len + 1);
+		    memmove(e_com, t_ptr, len + 1);
 		    last_bl = strpbrk(e_com, " \t");
 		    e_com += len;
 		}

As the code stands, the strpbrk call is being applied to a
not-null-terminated string and therefore is sometimes producing an
insane value of last_bl, messing up decisions later in the comment.
Having the memmove include the trailing \0 resolves that.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#38Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Tom Lane (#37)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On 2017-05-21 03:00, Tom Lane wrote:

I wrote:

Also, I found two places where an overlength comment line is simply busted
altogether --- notice that a character is missing at the split point:

I found the cause of that: you need to apply this patch:

--- freebsd_indent/pr_comment.c~	2017-05-17 14:59:31.548442801 -0400
+++ freebsd_indent/pr_comment.c	2017-05-20 20:51:16.447332977 -0400
@@ -344,8 +353,8 @@ pr_comment(void)
{
int len = strlen(t_ptr);
-		    CHECK_SIZE_COM(len);
-		    memmove(e_com, t_ptr, len);
+		    CHECK_SIZE_COM(len + 1);
+		    memmove(e_com, t_ptr, len + 1);
last_bl = strpbrk(e_com, " \t");
e_com += len;
}

As the code stands, the strpbrk call is being applied to a
not-null-terminated string and therefore is sometimes producing an
insane value of last_bl, messing up decisions later in the comment.
Having the memmove include the trailing \0 resolves that.

I have been analyzing this and came to different conclusions. Foremost,
a strpbrk() call like that finds the first occurrence of either space or
a tab, but last_bl means "last blank" - it's used for marking where to
wrap a comment line if it turns out to be too long. The previous coding
moved the character sequence byte after byte, updating last_bl every
time it was copying one of the two characters. I've rewritten that part as:
                    CHECK_SIZE_COM(len);
                    memmove(e_com, t_ptr, len);
-                   last_bl = strpbrk(e_com, " \t");
                    e_com += len;
+                   last_bl = NULL;
+                   for (t_ptr = e_com - 1; t_ptr > e_com - len; t_ptr--)
+                       if (*t_ptr == ' ' || *t_ptr == '\t') {
+                           last_bl = t_ptr;
+                           break;
+                       }
                }

But then I also started to wonder if there is any case when there's more
than one character to copy and I haven't found one yet. It looks like
} while (!memchr("*\n\r\b\t", *buf_ptr, 6) &&
(now_col <= adj_max_col || !last_bl));
guarantees that if we're past adj_max_col, it'll only be one non-space
character. But I'm not sure yet.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#39Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#38)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

On 2017-05-21 03:00, Tom Lane wrote:

I wrote:

Also, I found two places where an overlength comment line is simply busted
altogether --- notice that a character is missing at the split point:

I found the cause of that: you need to apply this patch:

I have been analyzing this and came to different conclusions.

Well, the code as it stands breaks those two comments (and a third one
I'd failed to notice before). With the patch I propose, the only changes
are that those comments are left unmolested. So even aside from the
fact that this code is visibly unsafe, it does correspond to the symptom.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#40Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#39)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On Sun, May 21, 2017 at 10:12:20AM -0400, Tom Lane wrote:

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

On 2017-05-21 03:00, Tom Lane wrote:

I wrote:

Also, I found two places where an overlength comment line is simply busted
altogether --- notice that a character is missing at the split point:

I found the cause of that: you need to apply this patch:

I have been analyzing this and came to different conclusions.

Well, the code as it stands breaks those two comments (and a third one
I'd failed to notice before). With the patch I propose, the only changes
are that those comments are left unmolested. So even aside from the
fact that this code is visibly unsafe, it does correspond to the symptom.

Frankly, I found it ironic that the BSD indent code, which was designed
to improve code clarity, was so confusingly written. I went with the
sed script (and later Perl script) wrapper solution because the BSD
indent code was so confusing to me.

It seems like a "The Cobbler's children have no shoes" syndrome:

https://english.stackexchange.com/questions/159004/the-cobblers-children-have-no-shoes

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#41Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Tom Lane (#35)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

* const unsigned(*TABLE_index)[2];
* OffsetNumber(*findChildPtr) (GinBtree, Page, BlockNumber, OffsetNumber);
* an overlength comment line is simply busted altogether

Fixed and pushed to my github repository. Note that indent won't wrap
long lines like links or paths anymore. But obviously it can't join
parts of long links that have been wrapped by previous pgindent runs.

* the comments get formatted differently for -ts4 than -ts8
* extra spacing getting inserted for fairly long labels
* some enum declarations get the phony extra indentation
* comments on the same line are now run together
* surplus indentation for SH_ELEMENT_TYPE * data;

Please tell me if the list of your complaints above is incomplete. I
will analyze those next.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#42Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#41)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

* const unsigned(*TABLE_index)[2];
* OffsetNumber(*findChildPtr) (GinBtree, Page, BlockNumber, OffsetNumber);
* an overlength comment line is simply busted altogether

Fixed and pushed to my github repository.

I'm pretty confused by your github repo. It doesn't have a master
branch, and what seems to be the HEAD branch is called "pass3", but
when I tried to "git pull" just now I got

From https://github.com/pstef/freebsd_indent
+ b7b74cb...e4ccc02 pass3 -> origin/pass3 (forced update)
First, rewinding head to replay your work on top of it...
Applying: [bugfix] Don't add unneeded space in function pointer declaration.
Using index info to reconstruct a base tree...
M indent.c
M tests/declarations.0.stdout
Falling back to patching base and 3-way merge...
Auto-merging indent.c
CONFLICT (content): Merge conflict in indent.c
Failed to merge in the changes.
Patch failed at 0001 [bugfix] Don't add unneeded space in function pointer declaration.
The copy of the patch that failed is found in:
/home/postgres/freebsd_indent/.git/rebase-apply/patch

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

... which is pretty odd because there were no local changes. It should
have just done a fast-forward, I'd think.

Being lazy, I just wiped my copy and re-cloned, but it still seems the
same as before ... last commit on the pass3 branch is from Mar 4.
What branch should I be paying attention to?

Note that indent won't wrap
long lines like links or paths anymore. But obviously it can't join
parts of long links that have been wrapped by previous pgindent runs.

Check, I wouldn't expect it to. I'll probably make a manual pass to sew
split-up URLs in comments back together.

* the comments get formatted differently for -ts4 than -ts8
* extra spacing getting inserted for fairly long labels
* some enum declarations get the phony extra indentation
* comments on the same line are now run together
* surplus indentation for SH_ELEMENT_TYPE * data;

Please tell me if the list of your complaints above is incomplete. I
will analyze those next.

There's also the portability issues: __FBSDID() and bcopy() and
<sys/cdefs.h>.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#43Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Tom Lane (#42)
1 attachment(s)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On 2017-05-22 01:50, Tom Lane wrote:

Being lazy, I just wiped my copy and re-cloned, but it still seems the
same as before ... last commit on the pass3 branch is from Mar 4.
What branch should I be paying attention to?

Sorry for the trouble, this is because I interactively git-rebased it in
order to rewrite history. I do this to limit the number of commits to
the FreeBSD repository. Next time I'll leave fix-ups in chronological
order and meld them with what they fix just before committing to the
FreeBSD repository.

pass3 is the right branch. A fresh clone should have worked as in the
attached log.

Attachments:

indent-log.txttext/plain; name=indent-log.txtDownload
#44Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#43)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

On 2017-05-22 01:50, Tom Lane wrote:

Being lazy, I just wiped my copy and re-cloned, but it still seems the
same as before ... last commit on the pass3 branch is from Mar 4.
What branch should I be paying attention to?

pass3 is the right branch. A fresh clone should have worked as in the
attached log.

Ah, I now see that the code did change, I'd just been confused by
the "git log" history.

Small thought: shouldn't your updated code in pr_comment be changed to

-                   for (t_ptr = e_com + len - 1; t_ptr > e_com; t_ptr--)
+                   for (t_ptr = e_com + len - 1; t_ptr >= e_com; t_ptr--)

Perhaps it's impossible for the character right at e_com to be a space,
but there seems no need for this loop to assume that.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#45Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Tom Lane (#42)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

* the comments get formatted differently for -ts4 than -ts8

Still haven't put any thought into it, so I still don't know what to do
here.

* extra spacing getting inserted for fairly long labels

I think the fix is as easy as not producing the space. I committed that.

* some enum declarations get the phony extra indentation
* surplus indentation for SH_ELEMENT_TYPE * data;

I think this is now fixed.

* comments on the same line are now run together

Indent has worked like for a long time; current pg_bsd_indent does that
as well. It was now uncovered by my removing this line from pgindent:

# Add tab before comments with no whitespace before them (on a tab stop)
$source =~ s!(\S)(/\*.*\*/)$!$1\t$2!gm;

There's also the portability issues: __FBSDID() and bcopy() and
<sys/cdefs.h> [and err.h].

I think that's fixed as well.

I've never been too excited to improve indent and it's increasingly
challenging for me to force myself to work on it now, after I've
invested so much of my spare time into it. So please bear with me if
there are any errors.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#46Bruce Momjian
bruce@momjian.us
In reply to: Piotr Stefaniak (#45)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On Sun, Jun 11, 2017 at 09:14:36PM +0000, Piotr Stefaniak wrote:

I've never been too excited to improve indent and it's increasingly
challenging for me to force myself to work on it now, after I've
invested so much of my spare time into it. So please bear with me if
there are any errors.

Understood. You would think that with the number of open-source
programs written in C that there would be more interest in C formatting
tools. Is the Postgres community the only ones with specific
requirements, or is it just that we settled on an older tool and can't
easily change? I have reviewed the C formatting options a few times
over the years and every time the other options were worse than what we
had.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#47Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#45)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

There's also the portability issues: __FBSDID() and bcopy() and
<sys/cdefs.h> [and err.h].

I think that's fixed as well.

I just finished some preliminary portability testing and things look
much improved. The Makefile is still BSD-ish of course, but I think
we'll just agree to disagree there. The only thing I could find to
quibble about is that on old macOS versions I get

In file included from indent.c:49:
indent_globs.h:222:1: warning: "STACKSIZE" redefined
In file included from /usr/include/machine/param.h:30,
from /usr/include/sys/param.h:104,
from indent.c:42:
/usr/include/ppc/param.h:53:1: warning: this is the location of the previous definition

Maybe you could rename that symbol to IND_STACKSIZE or some such?

Also, I am wondering about the test cases under tests/. I do not
see anything in the Makefile or elsewhere suggesting how those are
to be used. It would sure be nice to have some quick smoke-test
to check that a build on a new platform is working.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#48Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#47)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

I've now done a round of comparisons of results of our old indent
with your current version. There's still one serious bug in the latter:
it continues to misformat enum typedefs, for instance

*************** PG_FUNCTION_INFO_V1(pg_prewarm);
*** 33,40 ****
typedef enum
{
PREWARM_PREFETCH,
! PREWARM_READ,
! PREWARM_BUFFER
} PrewarmType;

  static char blockbuffer[BLCKSZ];
--- 33,40 ----
  typedef enum
  {
  	PREWARM_PREFETCH,
! 		PREWARM_READ,
! 		PREWARM_BUFFER
  } PrewarmType;

static char blockbuffer[BLCKSZ];

I spent some time trying to diagnose that, and what I found is that
while it's scanning the enum list, ps.in_decl is false, which causes
dump_line() to set ps.ind_stmt to true after the first line, which
causes later calls of compute_code_target() to add continuation_indent.
I was able to make the problem go away by making this change, which
reverts a change you'd apparently made since the old version of indent:

diff -ru /home/postgres/freebsd_indent/indent.c freebsd_indent/indent.c
--- /home/postgres/freebsd_indent/indent.c	2017-06-13 11:53:59.474524563 -0400
+++ freebsd_indent/indent.c	2017-06-13 15:51:23.590319885 -0400
@@ -944,7 +944,7 @@
 	    }
 	    ps.in_or_st = true;	/* this might be a structure or initialization
 				 * declaration */
-	    ps.in_decl = ps.decl_on_line = ps.last_token != type_def;
+	    ps.in_decl = ps.decl_on_line = true;
 	    if ( /* !ps.in_or_st && */ ps.dec_nest <= 0)
 		ps.just_saw_decl = 2;
 	    prefix_blankline_requested = 0;

This also undoes a tendency of the new version to want to insert blank
lines that weren't there before inside struct declarations, eg

*** a/contrib/btree_gist/btree_macaddr8.c
--- b/contrib/btree_gist/btree_macaddr8.c
*************** typedef struct
*** 12,17 ****
--- 12,18 ----
  {
  	macaddr8	lower;
  	macaddr8	upper;
+ 
  	/* make struct size = sizeof(gbtreekey16) */
  } mac8KEY;

While I would not necessarily have quibbled with the addition of those
blank lines, I'm just as happy not to have them forced on us. I could
not find any places where reverting this change made the results worse,
so I'm unclear on why you made it.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#49Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Tom Lane (#47)
1 attachment(s)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On 2017-06-13 18:22, Tom Lane wrote:

The Makefile is still BSD-ish of course, but I think
we'll just agree to disagree there.

For compiling indent under Linux I use bmake(1). I have no problem with
including a Makefile for GNU Make in my repository.

As I understand it, there will be a copy of indent maintained by the
Postgres group - even less of a problem to include whatever you want, it
seems to me.

I think that Postgres will have to fork FreeBSD indent anyway, because
of nitems(), capsicum, __FBSDID(), etc. Now I only aim for the shortest
diff output.

The only thing I could find to
quibble about is that on old macOS versions I get

In file included from indent.c:49:
indent_globs.h:222:1: warning: "STACKSIZE" redefined
In file included from /usr/include/machine/param.h:30,
from /usr/include/sys/param.h:104,
from indent.c:42:
/usr/include/ppc/param.h:53:1: warning: this is the location of the previous definition

Maybe you could rename that symbol to IND_STACKSIZE or some such?

I just replaced it with integer constants and nitems().

Also, I am wondering about the test cases under tests/. I do not
see anything in the Makefile or elsewhere suggesting how those are
to be used. It would sure be nice to have some quick smoke-test
to check that a build on a new platform is working.

They'd started out like David Holland's tests for his tradcpp(1), with a
similar makefile (again, BSD make). But I was tenaciously asked to use
Kyua (a testing framework that is the standard regression test mechanism
for FreeBSD) instead, so now the makefile's existence and use is a great
secret and the file is not under any source control. Adaption of the
indent test suite to Kyua made the makefile more inelegant, but I'm
attaching it to this email in hope that you can do something useful with
it. I can only guess that you have the option to use Kyua instead, but I
don't know the tool at all.

Attachments:

Makefiletext/plain; name=MakefileDownload
#50Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#48)
1 attachment(s)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Attached is a diff from git HEAD to what I get with a slightly-patched
copy of Piotr Stefaniak's latest version of FreeBSD indent. It looks
pretty darn good to me: the changes around function typedefs and
expressions containing things like sizeof() calls are alone worth the
price of admission. There are some places where it inserts extra
space because it doesn't know that a given symbol is a typedef name,
but as I remarked upthread, that's the fault of our typedef-list
collection technology not indent itself. There are not enough of those
places to make me feel like we have to have a solution right now.

There are also places where it changes its mind on how much to indent
a comment-to-the-right-of-code. I have a hack in my indent copy that
reduces the number of such diffs, but doesn't eliminate them entirely.
Removing the hack will cause indent to align such comments to the next
4-space tab stop rather than the next 8-space stop as has been its
behavior in the past. I think we should accept that change, because it
will allow squeezing a bit more text into such comments than before, but
in the interests of keeping the attached diff readable I've tried to
suppress most of those changes for the moment.

Anyway, it is now time to fish or cut bait. I don't think we can wait
much longer to decide whether we're going to adopt this new indent
version for PG 10. I think we should. The floor is open for votes.

regards, tom lane

Attachments:

changes-with-new-indent-20170613.patch.gzapplication/x-gzip; name=changes-with-new-indent-20170613.patch.gzDownload
��Q@Ychanges-with-new-indent-20170613.patch�<�s���?S���� ER�={*K���,����q�0�@"�p��{w� ��d��<�!��������-d���:���0~`~�����~���������=���#���x4�t�N_�|<az�7�:�N��{���[F��?Xg2jO�>���quf���h��k7�X�azF$� L���]���O]x��R����X��	�@<&7Id��v���6����1f�N�h���S��_��/�n���\��w�G{�:��E�&p��H�e������&7�������c��O�������?cT�1,k|�c��=�R�Hc����%��<*��0���p�m���F}<�(���J��
���Oj��j37�3��0�����c�	;{{k�||���?�u�9�D0�<����7>�$`qD��>Kx�����%��?�;�I���{��*���Y��6����I�Z	�~O�&�6��_��w�*Hx�o4��AD(tP����_fZJj�>���Z�������$^�QB�c>�z���i����\�-������'�(Ky��i�o�Ab�{�z�!��G��]`���\�/�2��H]+�AdC�`��]�a+k���l[�^��;r,h��� �X���� ?t&��}�X$�<W"Nh���}��lZ���J+EB���	������
�����
�6��=�����O������9�����<~�����-/�����'l��P�d�.l����/����C�s��KSD�����.~%��Wt�������W��m�]��;�
��1LvD"N�$��b�����L#�`}9��_����WWZ���1'���	��<�����l�S����91�C��,��x��T4���(���K^pq]������0@����.$�Z0�c�,t�KZF������m�����E���%4�s)b��5�����V[�8�A�����0�c�D;9@h�qq: ����5���Lq5��jK���5�0��T�"i�S��ZQ��g����+9�A��#0�$�|��53n>���nn�����9�8e����_+6m�2��A�Z=�vy���bX+��RV�f�h�cs<�v'�qj�jU��/*`r�����7��C�s*�'0��[	Z�.Nn�]^`�7��X�U������w�:P���y����A�k��l��mo����V,xd-�6Z����fv|}�����tf��~8�p.#����0�d��?�����'����F�?z.�s�t|~~$MI���-���j�{
x�M#"����3��G=����h�O���]�f?-��	-�t����E�h��4�4H`�b��;_��2n���I�u�^K�Xo`r������f��}���M�5�YT����D5�9������/��
4"��{0Li4���!�e��}Vb���eQD;���V�H���U���G`.V�\r�f�����������,��44��(��~R���P	�b�4��l�1<�oN�-�#����Y�&�*���Q0G����?�!���	v@�!<x1��k�oS1V���xA������,���#��x��AYP����Z�"I�W��~��c�N�*K
������R�\����Y�v�}N]��M�)�]�	1����-
��|��@| �,0���B0` 7�4�v5R+�
j�qiB�Zc��0���5H�G��~B�'&���$��1���+0
5E�����V�o�Ojh�QK�J}��I���z�vn�6T@n��+<�1��mua���������}�f~R�Lm7�,���Q3����&rK����R�*-r�Y��Jc����!���1]�������Y��E���9�����t����>]����I�H�$�1����]��zwq
��??�.NfM���m����7�?�@�&;�8���^��~�f'�73������~�]��JI5��\�v�����^��O�1;����k�1>.N�1�oq��RNy��L��Y�����3pwx���'�z���-vES!$z&�
�L�7�I��;������s�,�N����`$#��1�i!bf�O�������'?�3�_�M�-��p2D_���j�mX�{�����
	x���
�Km�"����.p�S:���d�[n\��
�@xp����*s�H�R���0`��VG�h�<����a�O�]��>�!<���1�j�^���p���}���Ew�����]7&��1��)�k@���ja@�b���u"�:
�G��^����9K	�����!]���5�  tv���`�%�����r
��y�x�;����� ��"���F�k�I����rC�oOqG�h��gQ�������M�V��W��������~���:��0r�����	L���o����G|)uI��kH������8N��g"����-of9���Z
X�R��%����K)���S�'�~;g=�}���B^�����������m���N�fF�t�m�6ts�y����z`"���/��S~q8�9����C���Z��e�
��b���+N�^�
<����#�A��A�kg�{Z�`J'����F��7w@�W���	������:���]:o�OAwxF�'^{Z~Jyo��<���l_�H��<�Ba��y��G<��Z� ��I�n��=�Ip�.y�(�����;�yO�nwQ��'u�-!�Z���h����
������H����U#����g'?i���5��p~����Y���+��A��#"L������9��(H���/����������!�o�l�Z�����p3;��L��a��*�Y<S���l���1u]�an��|0�c'����W�Vh����=�����b+��v>�[$��������I������b��N����t�x�����fOl��v��6�����U8�����6���!�%Z�\������������KPq��(���=�M"�9�����EV(��N��85�`j�e;���� ^�������b���e�E�r��Hc��1�a�7��d"��������q��w�{b�_aL���B��;{w{���������w��O�����.R�Ue��L=��{�X�g�P��B�K+q���_B
�;�j���P,�,:��`��cg�g��U����	���t�l���������F�#��F�7	Z9�-,]���u� ��a(��6m��"��l�+���V������}����K��>��r�����k���W�o��{���Y��tb9��w�_g�+r�:-��
�o�������.�kd�n<+����xj��G������{�%l����:0r$�'�W^�<l����R�^y+l��2\��-X��}g=B(�<v��`Zp���������M�G+O�;�!�%�R�pe���t�?�n��a�vL��K���L`f�z���4^��z ��0Z�l&tA,��tB�[�Ic�c�/��� ?��Z!�nu5ka|������myP+�
��#K
D�\���z���~5!��:�*t���Un��T`1>,���J<��C2L��N�Od8���"��q���
Ny^�����,pL���;�;R�����S���g#�f��8<��[�C�W*dz.��g
���=��hW\Q�F��@U�K��W5�� $TVr�#��gI"U�H
��/2����m����N�N0�"D����x������q
O�~q$���-;�P��L�+D/���aV��+�/�i+z-����1�����&b�"��g����>��uE�7�~;��p�{;3�b������:�|"f��e�Z�c�����^G#��=���
e���W�V�,@��x�	��g����n�A,kd;:x��hj�&�3<H6������`@�AyY��0��!C�51_�64
����
`�P1�3.[�wbU �D&��S�A!Q�"+W��t����_���]��F�nG����WgW�*���+yl��������D�BM��Xp��d'yG���UV(��������e<o�L
��X"*�(q(�����|�5�9e��(���{"#n%H;x���KZ�E�h��i��i��#�&� G�c���,(��JU]NX~�`@�	�������<rX�a,35ce�}`,iM���{�� ����
s�������H���"\������N���!��L�<��	M�������-��{�\�5�[C�_1�M��]^s�_�4WTx;���a�c����m�K���N�l��!����"L�Kue�C��*�^R�U;���f�"o)z���m��<��L^VD�#�.t^��HP p5��jQS?)��a��3 ��X�Wi�C�{���i���"�)��l��0';^�-]?o����{_l����S~8B�������S3����'3��m]��4]�I���zK�4�u��Zh�����;e�`W:�v�����������\MK��Ul����Q���
,����f�h5!�����P�Kr&�R�WaeDE�3K��u��.����|���8V����ck�w�zo*��.���_c(k���1�pX��72`L�Qy��B���e��c����+NQ&Ud>�X��e�~���L�������]�3�T=���;��.��r��;�cA>���'�E�4eMY^��+��|JD��<#�\�OS����JIw���U���EC���x����B�d�Cb2XXmo��hb��G�[�����#(Y������Z��q"�l�B
@x����&��^��o������W�!�2����C^hS����������5����u������K�o?�<#+�(�4����@��<�'�Q��U����(��1c��
��r{1� k���
X�cy���(�I�J�5hP�(Q�Le����F���m��A���>0�R\7���A�9�A7�������>�\���AV��g���y�V?b5���a/�C-V5R9-E�[ ��$N�{�Q�X��u@Yn���3u�������j�){�Z@�q�2K5������B�P��~��������ZJ�|��H��[�6�����������j�
Y��!W��fV��Zo�O~��C��@��QN��F#+��������M�K�Jm�>S���Y��X���!����l���|�������:�`�H����*0���e
���(�4 ��c+��)Emk�$t��(��2<Z^���G7������D�WmFUd����3�I��%�����P���z��h`f�z�Q�C���9S�����Up0������(����q�M
1������:V�x��Bj��6����j4����XU�F���k��qk�U5����^`�u�/krg�b����0�q|�,��L��\�=�����^�~�axX����Xgfzw~���%�M��P�^����9��	oM)U,���`w�O1J=�q��<�L�nwl�1��x�2n��{I^d��J�������.���|�o��
��~�8L}�����n~x]�c�f�M���D��O~��0�K��SF�>���\�y5Des���1����*�z�Lhp8�������������m$���g�W`|?�I-4��{�,��NdI#�Y&���$��de&�okk� $+3�9��k�����������3*�U6B�W����4�O�#���*���E\�N3�)kBc� UH�]��wym�Bh�G@�;�0���{�2b�������]��������($�F5�[k`�wRHs��8?9���a��\��b��0T�l.�����P-�{�t�
4t��O�VK~%�o���/���}8�s��@y��^�S4�-��si*�&T5��Vk�hLg��;������t�|�+������I-S��Tz���z��wHD�����/�z�SGnG�r7?�����+���"�k�d�.@�tM��I��������|����Fd��0T�����qm/�m�r�"[�}���9H5����
]{�.7&���]����F���&w��:8�n�n���m���6Q��hD}��w���r�tA`��L��?B{�98��#�9��?����!�;���%�W��J�<6������n�\.���2szC{@1(��A�|z�h���G����O�`�'�H4E�I���BT��]���
�|g����@!�����I�jF���pSL�u�4�l����{FB��s�7�l[����u�Y�jJ�#V��o����p0t��p���3�dRZ#`��e��:n��r�pfZ������x�%;j����8x�HP+:��w�#v��{��E���UCP��0Z�R<XP�4V���,.�,&��V���[�s����lv��7�$�R -�
+�7�*����V���O���*vB�)`�����a�J~�f:���n�m{p��u� ������|g���Ey�+�0cW�8�kWG�s0���f+����/��"��������DSj�d&�.k��:6Jd���`;�W�(P�8u�3��S����4���b	����l���[/e
5���!����������9n��0�*#|�i����)~<�3��~�����"ES����^2�+�|{��DP'FPi�{z��7����)Dn"�����:��^��w��+�����/�=}��x�C�UJ=�����������I�Wa#���;�����u��"+���i&�A{��$����u�!�?@;���(9*�so�E�<� ���Q���pe?m�����O��_X��'uCG!�jy��X�c��UI�h*7�����mh���(<`��$2�I��]����7Z����� �d�d9���j��,�;u�^�6|�'���y���U�)V��m;��@���Y����HL�s����[�[2�f���@�%~A1�P��6EUl�h^7�_�xM�8&�@�+D
�9.�
���eT+4�~d�������b?q��*��>�c�]���coz���~1��O��yaI�@��|�����f��:u8�Y�=�9�[����Y�*����b"���t�H�~�}=�i3��?y!��t8��8Bbe�������N(��6Zua)`X�_������3��K����l���$��$r.�8�vR���>�c�#�W��.�|�L}o��O�[PgR��1�!����
@�bls�Z=������Gt�=�s��e��6�����1;,��{�S�������,���	��02wn��Q3���dS���ld$���#��vdq������+�������JW��c���h@��?t@\��
(��`@|��)n����1;����g���h,j���YV����AZ��1�b���������?`��$=��M}�@����O>TlKo���Wc���=W@��>���7�d;`��"���a^+O'���q����d��=	�=�� �����;'�37��}����[��)h?^�7�b�A��s���kw�Y�j5s`�W���RI>
AOp��H=��[f�	��O�Kw�.�� �����z����if�����"y��	
��PG��;����u\��T%��m����*zD�h��0lt7��C��A0|�����.�7������V���R���E�$���i}�?���p���WQ�D3�j����U9���iFb��/���e8�	t
�iH��C,��J]��)�
@i��N{45�pd�F��t�WQH:��%{�\���t
E"���\g-2��7�,n2�����'FQ�gu�n�H��V�����������Tg�x���K�p2_^M�����`��,Im�ep^���������o��g�9(�YA��G�c�<��g�~���@�~=V�5�����5k��O��g��+H	 H���B��������lN��O��K�r�`���Q�y�pE�/��,�P,��O-K	�>��2�q�Dp���L�G��D�f'}Bq��C��%�X�]ljvyH�{7"B���k<(r�A���������`��~���y�*5O��p5��?��>mE�Z�������Ng�`>#Y4�2���������o�����R?����V��v�a�?tgnu��j����
X��z����h���@4uY���9���7�l/���W^�<O���kE��\���)�+��p���V��xV�{��m4&���9*�u�^9��j%+i+9���E��^���B���S�+M��b�|w�l[��v�����.6a9�h���lL������"��QT��P�PN5�T��^�o��������	��P(�����N���5�ad~��.��/|�����c��9�a��N8 �8n���I�F��M(6Zu�g�yM������������Pe ��k����U��-ER/�|�z�{;y��`J�=AUaRuY\7�=��F�
�|@����"7�u����.k� ��Xc#�'e��<����
�;�4����QDhd����|�U�8���a��L�(�!l�5�.{�6�.�>�y�d
�o'K8�G������=��Y�s��+bY���
��r���W�oiW��d�(y�	\�G�^R�G@�[5��^P��n�YH]OHD^���*�6(�B�C�k�/�������XofG"F���[�+@���?�W�'��������:9��#&R��X���k�������B�.��\�����n�i4���3h6���TE��<*�%[
.����
�su����I�&5��s`��X8-�5��$V�^��k����lt�k1�����elf=���3��ID��#�F���s�u�t����zq?{a&]T��!P��@�L%�
�Y?]�A��"�:�k����:����V��������[f=�#���/�wC�*1�Y{A����~��7&�r��}Y5R�f�%�����)	�r�HC����w��3�H���K��
Y}��`#N0��c�c����
d��6�F���%b�����: �Sv��)�`���j��a2���L�kq��������<|��%c��K��A�:������+�db��_������d�]���{��zc���/���R�
D]����,�|��%�@UN��;��\�/��H'9q!�9��|7���iSL�}��C���nQB�9^i/9��pA������P��]���r�WU����*�%�z�I����SE��}�xKW��m+�AK���^����HT�A�{_8L��������vq.4����^�U&��v�P]m[��Cm;8,����E����)j�g�Y���9�^����������$������LA����������QV��|����V!�v/QU�GH8���j��E
���3�
�@jh`b��o��@8�s������9��3�w�*���0P5��RjJf
m4��u1m��K�V~z�	��?����JY�S��ngk������E��*3�����
�H}������#A#�\(4����L��K��3*"��������M�����������XG�gn_���2�������1dP��{�"��pK���Q/���_��@
�M��P�)}4*�����
3W������=Rq�<H������N���i�[�oHs�*�
��tg�'��&���?M��'�����d�*��"U�a�\V��^��5�����M�e�}���S�R`e�@]��\~���Eo(CV|��W�'NU]����3X��"��cP/=w���[7�?c<��E��������l�����5w���\� 	/������`Q��.�_�
���2}�8������a����x�,���r�����<�����cB!"���|Q%��p���0���\�
���C�f�b��w�]���7����=`
���~J�'rF}c����V��|���z*���s�h�-����\�����5�I�Bn�C�@r���;�����J�$8-��TqKX;�G���S�e<��&o�N�����I7r1�,�]�E;p�/g�)&��S{7�h�m|�	�1v���h�y�O�r��
K���h�-{B.^�����6�����S����Qg�l%���
	.6��-'��fT��2�H�14���pgd9N@\N�SW��?�]a�� ��Ru�y���|�QQq,w0�������w:�/�lE���Y���b�-��N������&z�
;��|�~��c�D���od�'/��V��B�D�����-`87��
��n���~A�����G���=���'g�������D| wJ�k��.�~J[*�m�����ms�������6��������2d���$��qt��n�Uw)%p�r����0y�p���Z��������4X����!�������5���S�(B��$����1�i���
o�H>��;d��#,�����q?S����Y �;��=� �����\{���O�1��/$��-�{�{��6{$v��c�����������vx��B��_,<��������D��a�*Q_�$��'�.k�����W0�9l"�}'^v�7�%���R�_���e�����sw��/#�tJ0}���579�0
��'>Iy��y����U� )���T]ef{i�c�N�7Y��������b��^���V���O��<tn����x���E6�y7�JT����h������[8��{����7��+���=�s����{fD��IP�����n�����e�3lp@k��e�r�d��=���W��=���p�2G���7���E��BA�w!�)��L��!pN��q�a�h����^�zCw�_�K�+��7�t��V�H.:6>�'��9��@�'*�^]e����Tx��p�
c���m�?�)VD��36:I�L�E#h�VK�[l7��*P7�5
�	�fT7T���uIA������������9��
�ndp>�j3v�v_=`�@?�8'ghg������n�Oy��x��������NMd�B/�qP�D�`�k��j�7���x�
������m�@.���������<O�
���������b�0H� �$�@��+N@?+A Q�^%yu����5 ���x�w1���Vu���b7�����6t,~A-iD��q�x�uHW
�z	�(�����$������������g����7d(��:�6�X����m�����,"����kd�h��i��[Y@/�
m���v#,v����.1��U^�-�T7��@(��f:���`��z��^��I���������{}�K��w�=n\b�Z	6>�������Jh��z����Q�G[���x�� �eC��|���}�j��}h
�n�X�����h�D=#�V!OxE_M�4Fi3L�9���L#pp���(t��^��w'gx�;������ua�8�<���^���}���?��Q�<���G 3���H��J�F�� ITkKe��.!�F�����]}����l�T8��2�����������ak���uO�E[`s���yz�P�o1��x��/�%]H���)����7.����#��wxwC76�s�������c�������(��<���{�'� ZZQ��Y�!��o�J������ ��%�-�_x'wwcE�C���Y��\8�r@'0P��/����v���2��=S,$�J��V�>�Q��[|m�W�����K��qg�t0]{[�C�[�B���
J��j����b|�^���/����j��j��:����hL����N��S�+�c�c �����JU+��,�5�u�N��qf�������d���Jzt����?x���6E����82b����	h�%�J�<�j��J��^��5N�D�v���d��
���5�Zv�������o��M����*L�-�\�����[���i4F�����
�WR2{:�!�b�cjf��X�|L��n$�LS*����:��~p/�(�O�h�U���'�$������wx��0�K#�b�� [Kq/�+�k=Gw�����3`d��c�V�:�����O������g��LO��*��r�����&f��>=u�}�.,������q7#d�3�O8
�D�bb��=I�������@S������1_��o�aH��q��TcS�j�^8a1�����g3�r�>}6�����g�)YH�������>����3����j�k_Q�k����x<2��]�:�t�d��sn����#*~�85t��Et�)g�����r����b������=S�~��}�V���lP�M����5�v9�=�6KV��d�6�����8;�����_$�W�����'�%��_DI2#C��kp0kR�
�tP��0NA��	�8Imp�}ZY��
������t��<�<��g8�UaD�*T-1m����_� ���������=�����K�L4q9���
����W���^N@�2���Y0E�����HG���ht0%=����F04�������9���������|�*;Q[.�;��d���"�R�A�.��
��Z\���>RHi�qxeN�[$��^��.@����0�����)c�����+q�:��SX��<�o��V�|i3�l�x��R.�W������`�M8�C2�[���0\/�4ExCX���(�!���

���b���>����g��<�k,p�Gg����s, �������js��rn�m�RCk����������o��L8����t|t�cj�^,���s�".�7j)fl)��0S.u���w������jl|2�!o��eq�@�	�mg���p~g��� �e'D:���b$]��]![�R�`��K{aRlK�������R�m���������C3!l��ex��h�t� �_�TJ5��X
c�*��
V �G��e�����A�.M���a;������1�Y����*I@��Z�(��t<�9�j	�y5gK���[=�p��6KB%���*}�+jt[�{�m���j���,UP��tR��vzC&���a���	Q���%���	fQ�����
�O�s�^���:�AY\���p��^]��h��v�~]�h2�vKP
���}e�u�������_����{����T�Wh7��pq8�������y:^�A�.G��a6�Zh�#���%��.N�������v�W�yn�5��^�5��C�QW0�(��������.��9W���K������k�n��A�:�������W�-����y6Y1Q���R/w��&W�E���l��#�:<9��LL���_`�\�=�����/�'����L��������������zdr����V!/`�F<u���L���7�zJv��71��{���!b�6(K��u�j-X�?�_3���������"��y<:�pq>9�Sh����J1�D���Z]�G����K	���LC�N&G�]����p��#�DQl��
O��1��K���5���%I��:l�����J�7�
�Y���>�J8�����x�W�@�^�+Y.�W'1U����J���}��,5��`��e�����9S_���O1F"����>P�UR�7������J}f���<;������Vj��y��Q������8=9:4N��gW'W?@��#S�����[(z������m�Q�)���������{i�g����]�9��aF�����|���.K,����7�<���*�����GNS����;l��o&s�GsYYMy�w#k���V�u��+m���)+��X��i��w�t����Etm�����9vgh�Ehq����Hk(m����z��6��`�4�G9��=������b�}��E|*���)��6�
bAQ�)�Wz�5�m��ej-�4SMj������:��e8j=����+i?�ah��O|��{2l�:����1�tY�}��g�W~��RE����+����������?j�6�Q]��K������Kqi������{GE_�"�S��	�k�����F-����M
����������D��=-���C+�3�zv�8����fY�$��+��}��Ho5���iA�sB���3�'W��'��MyB7��E��(9)5����`��9N��0%����5�3T1e����l��V�nQ�����B����tz���"X��aAgQ�Q0�\i;����E��30�P���h8�H;_>\D��b�C�0t���a\]��?�4�����3�^��U��f���dB�:��iv{H2�=bT��������f�~X�|;4>K����I�'S�(.��������u�xLy��3��r%��l���T���+��Q*�D{����3p�AkV��'����'����2��'��0���X��\��K�������S���'U���%+�ye1Y��C�}�P����#p�������S�]E`rn�=��G1�*�����q��&�1V?6��g����7GO���{y�������uh��%�5��=!0�^���%K���8]��� ,
k������B#+t��F�P�������~�)��8r���ow������\�I�h`��6
�
��>6>!���U6x
��_��*����[so���wt�����7q�o��w �����>^�oO�&u$����F����Iv��g	F��#�;k6�^�����P��N��c�(HMT��^�G�0XM�t����C��� �sY��A>d��a?0Q�rpe�P#_M�d��o����u	
B*�eT�k��&����G�M�f��F��h������.���u�E�����n$�Vm4��9���v�)#����:c�����R>c�x��#��Tt��E�W�~@?��pc��2�X��5�e0k6g��+^�l��@r��q���(�4��Y-�5��
�]������$� "�%m��)vr�s�,"9
�Ka��
�}���"�r�R����I9�*N��N��KQn^����������Z&K��d�t0������8�������B:"%+��Vp�j$���'�y��0\���%W>�WKt����n4)6�E�T�g��KN]I�E��8��z��r���i�s��F��<�n����OK���}2ot�;���/����$���}a�;M<K������"PN���X�E�vfeN49U��D���1+�\_���@����*\Y��r�5Br��-���)��C:�,�19m)�%�S�H�?����<�����6,�0$�������
\jdw�V�#<R`�Sw�Js�R���o���/5*�hsL������*oL��5~50����{��4��(_\?�
��K��~D)x�^����������7�~j�K�P9�
�d��aV@�*�U�x�9
	R��V��M|i�r1F�4��= B�q��(�����#*��zq���v��,\RM�<N,��k��e������0��$���[��0�����4����#)���B�j?p\2*K��@p<�Mk�r��5�br v�I��kqV�VoZUe��(
$��.V�>@'���	���K��l�����8x����E�`[�v���\��?��7�O�g"oi��y�'/�"��p#���i5�MD'_�l���vd��	�[S�W�����.�C�.�SUqO��$���)�R���5m:}���������;i�l��4HJ��_}����1��r�����[5�B�t������3�~>���[�	���(����g@������
��duBw.����11X�
*���RD��8)�Yh����{'�W������1�1���9��+R�r�/��*I���{ �v��A�?�H%Z=[�D�$*�h�~B#
��~m`�z^Y��(����Y����i ����}���j
���K�U5I�Q�UKA��^M1),1�������S2�(X�;�g�cB�[b)�����a�%k�IZ�UK�����2����KZ�����\���&�����c�t��AsV�V����J�!���e�(Gvr4�������e�q�n#������]�Y�+ks��} ��8Xkmp�`�e��� g�#�������Y���HJ3��9�GK��la6���P��;cSGD����4�����?�I|��U(��Q����=�Z����%o���5��B�0�s�T�v�bD�vsbY��!��(�BQ���B�'��-`����Mf��
����)R����>q��e��������ua�m����mW\'���,�,��6�
����*��w�^��"�`t o�YT�Pq�������&��ZX�*l�B����W�T �����-���4�#�l�a0+U�n+���k�5�V��N�W>�����:�)L�l���z'^U�e�m������L�9g�JtH
�{��D\O�`����������q|J*z������8��0�vr;��;u�;K� U���0A�-E��%5	�J4�n���Qa���z9#8��EU��_8,��1,ZE$�L�����.��������I<	o��u�-�Q��D��P�����H1l"�p1f����YqQ����m��i`*�w{8�G�F���8�AU��W�e����������-+�C%X**%��<�EdDej�K��r��S���������#)��$>�(�.QS^�����,������*�#;��e�������`T���$A������N��}n^��g�
g��;4�S�*���
6'z�}��c�'8���4��+���l/���!0^�B��b� <����A�m(q98������o}�Y-��vnL���n�I0a�����Ugp	W��(����.�;X7V4�Z�[]���9����
�� ?��W�����X.%��#o7m��-�j5���*'U6��W6�����H����A�i��}�L<[+)���zn���
8x����@�� ��3�XxL�o��	���|����j�|�~��Tju�������g��?�,�lh
:p�s����Y>?Aq���g���Y}��}05U"��W�`7��K����g�c�L9��^x��%��������3�L��#�3j�',`D��g�+"������������c��o�p����t�H���~��a?n,��$�2)$�Y��!1g�O��@	��,��0j�������?����W)�?����W��������#wE1�?�a�]� �%��By������C��Z��S�=�����GS�^pKO?�����k`��k����������f�j4����S�8'U8w
$�%����K���� ��r��v3�.�z`�8�����������!�����hl<[�a��~�?�k7����S`H� d[i("2�� EE�/��p-ip_r!�p��X���9�If-L���f����}��b.�Ex��J�D�7)e���bN�C�`VP�@�w�	����2W�T�_�
��^Y/�;ads�bI�B�%��5m.��ut_�Zm��!�4e�D���Lv#:�yT�����#��Tcr���n���xz~�~g��k�s� �B`F���F-�����8=>������[k����4���+���%rt�KZ��k��uP��C<|>O���J5,Q�]�Z^��zs���p��-�^��U�^Y��#�{�8b�h��J?ls��v*k����|?�i��V���o�g!6�6'���D+9}�<����\^}����prF�����I���]��2�������6�g��(�	�em�jY��������E����@.�O��^-k�|,�"����D�B���8�|�Vjg�����4�e=�h�?�_��8>f�SuqN��=����c��X�w`���o9�-�B�������-`�]����o=����!X��6����.oOE{�$������l7�j�?�HA�{�*����-2�%���E�p{������r�u���"���x;��������Q�������q�4�I�B���A�N���C����d�����7��`���}C5Q�9�T8������!e0��Xs������L�(6b��������p�����g��R�5[���������f�g/�$T|�BA0���x�&��� 	�t�[���,�2$���w���&���7����?#I���71^5n�[���x5�:�gI��	S�E����0����@���m�=�7;#�S�t��M�NUQ$���8�s�9�����v#sX�hiz�����s�SQ��_����tt��S��>L�m��}I��C18gj�_��`2�Q��\�3��uv����Q��
J�g��&�d������M]���jR�4����������)�&x~�N�x?��o���q������S0o�����������d;$���.;�MdC���q����a�u���Iq���wrv����* ���	[�4��������p�t�n���v��b.[�|�+_t��HW�-E�0�iM���L�u^{��[��)������JB���D�8}u��n���9'���=��6��r��"M�:�fa.w�4�MNj���n�e����J��(��wu�����yr�}?)����E5���,*��D��5:`�y~�Tp��$.���4(�z��smyo,��	��������
�x|U���bAn.v��^a�{��/���^�	h^iV�j�.)�S��'�s���DH���/�`lL���<<���� "���d�IP9�[d~<��������B�%�h|r��j6h��qi��,ZX�����Rk�{��j�!���~��Q�+l>����\�j�|3�0S5���7��D}mR^'SUX�F��O�~��xB�b�8M�8K`�,���W����K
�h�����x�8��J��$��e�IO�0�T�d���j�U��������U�Wd��g`{J�����[�������nHi���bQK��n����������(���G`������
<�����	��Lw�0l����o����P*;[�K��'�vL��69������%�H-��AFMhaeO���z&Lkjm({h����i��)���Eu��Q0DhF����4����)Z���T�li��-f���Y���yB���>�����34����mBr\�HN��J����/����|������3Ti��4�5e���h�R�I`%�������tO�����U�U+,Gn���~a�����f��
�2:K��Z^%p|nU����,��(�hO��>	^
J	��x[�$)���H���>���������j��$YI[��M��r���Z���J�"�=�c��mm'=�U�3���a��K��K�d���D"�����_��y�D�T4�����W{��xc2�55��������0H�Wc�����9�.%��?vZ��%��d�E���b����V�o�[r+�el�����h6�������%ae�r�_��Y��:��{Q�N�"�C}H�[+�,���+�^��U������1j���O;�����r�Md�'3<G�����>#*R~��!��v�B��g���E��D��@���A2�����H�F����#O_�����Cjc�6�]5�:o���"�H/���.�
�b��������#u���H�g�Y��_�K��������#`�g������=����YIZ��X����������C�����%�r�F����������|�M�tdG������t�=������S�3�fdJ����c���r&�.���HU|Qd���I;4!��HN	�����W��od�(���%�v�k�K����3C�m�Lm��z�7^�SP�N���������k3g�����?=y�8�|�c#B�����V���x9������KKl�����q(��d���/���O5[3�zV�`��z�g�g��)��J�������
aRU��.��9%C`�|�z�jU��������>t,��I'��43��6�"B�C�[��_1�`�P}�����p�h����
�)��E
��O�dg�x1��"Gr��/k�k�v8XB`"�J�~��lJUf��H9�N�J�"b�T��)�@�/�B���Zj����:+��@sjI�-��f�Mv����J��F���������=0'�G���b���.��{�l�7	:����\.�����ob����tY� ^a���
��w���o6zo��K��4��}��q�������GI���	��e�,��F[15���-��"�����m��,��x�`S����v;+��RP����ub��BCn��/�|n��m|N�m�:��������*�4�5l2�M6le����99oa�H��_��GC��d�Y�OnP;�������2������CL�J��0s->�����>y�g�_�����i�JS�pt���f���	�A��1���u�����p���W���m���n�i:q$����C��v�o����l�,Ox�+����g.���������/����W�W��
+�[x�Z��9��1��SME!����������yt56'��1��x��q�F��E�-�K"�WZ('�J�����r>+<���Ne���tc���g�L�h|�*��j�E�E��L��B�1 ��}ck$	�/VVt������j�/���`�~���$2j�����CqM�|����m�����aO������h��HP_	����o�kK�8*�x<������k���Ou�U�)�W�P0r���v�l�����)�o�Q7{��������zk������QL�8��t�q��#q�F�k�x�Nq�����;M���'���D�S,�S���;W����0��
:0D7�E|�A�������G�O����#�hM"<���a����q�
��rw���)�!W���3�L���^�N�U,l����_��f\���8=���$>��R,r����q����&\��
��GU��h��mY���v��=��A����u�j���J2�
��a��8T�K��S���?�%��+�@��]'��2��b�
m��������>�90��kc�n��@��+nWe����$�|\
���
PS����K]m#g2|iN�M�:e"\X#DT"
8/�?X.�I�VEU��\k�l4�����wNm��O�w��������\���a�S��h��#
��Dv����t>��A�8�Y	b�ak�Y7|+{d��88W����@���5��������m#~Zx��;b@@C��	���E��K>Q ������[~B�oV�����6]���`���$�#o�������XN��Z��=�D1���9�B^���H+Kd5���!?9z�'�*���������@�g�~Y��'	��;�����&F:R$R�
v���"�]�t,�f�J��j���<RpG�#q���,CbP9����W���jsp���^�m���������F�=�
�v	��c�<�����9%�	��
�w������j^�H+���g;�����@='!������o�X%/z$	���
zg�	��Z�2�H��M��xCs!����v
QX:Ebf<|{t~<6���>����
P��W��z|���tb�'M����3$��\��u�l�"�����jB�5�a�c��f���"�H[�F��������G�'���M+ �O�>���`?�2���q����!T�d+�}����J%* 8Z5R�K�v��8��Z�7���M���
)���+0,c���K�#Q��;�?�|����)�Aje��������_�K��b3�X>�:����i������J�KT�CO���(�~��pro��O�$<�������.~�<�u	?�F�������qs�6^%�p�.�-�������7.8�����I�������:�^C/9rB�4�����1%5/���}�����\�JQ*C�����&u�������g�5�^�������
���������N��N�"�V��c4�^�7Y�JD�QJ!1�SC����"��L���Ek����Zg
S�9Jl�����K�=�7a���'�'����Z8��f����������L��J�Rk�B$��k5���H�v��iwsP����qqY2�.�����{d'������1���[��:k�� j
�P��/Z���q[&�r-[f�Ul�M�����aq#�j��gJ�C3�gs��������3	j����j���f48s�.=�-'��O��K��^�p���k��d������?L�����v\���������0����+����!�>JX�8����P���q�8T�����Z�wAgu��i�8�Z���u*1VUE)_U@���NJ�Z��M�hF7�������'�%�c2�0�)ne��0�%�J����<�E��
��II��B	��!��x�MfN�3S����}�����*,�OUG�#�o6�U�!_e>��$����n�Pm��6�����X+��{\�v�����P1�vr�T����t������w�e�_O�C����~*?�
����w~�����iA:�GBy���8�^����ER���Zs��
��l8�3��,L�:[/&�i�\��TL]
��r�0�ZA�D5�i:���eqEY106p�8�.��PY�0��*s)�&���Sb�?���������d����#�vr�{�t����
>@a��k[�$���������(��k����c���8u��V���Rksi���f8w�U��[K��D��&3q2����*�����_s��:y��u���
8���	:!Y�5�N�T���z����@��k��9S��r���J���#��[����Q��	�|L>�H�g�'����WxEv��8c�v?�6�����|D��d�Qu�s	Ue���7��+�I���W�0	����`~("�b��$f6�k�YL`���F
k��M�i��j)e;e�)c�2��� ����afK5g�F�3����d)����N$~���?X��/�k�Q��n������\Ze�U����u������z�v%��u��5�"��.�����	~4���W��)|X�<���a����e}���fKj��^�5��#*+�+?
XZ5���r���S�aa��!�{���V"�o=.
���;?��C�#d�b$�G)U�S����S*Qvq��I�5�]�R9�V_�IC�&~+�SP�����b��<�Jjk������s	��U�o��wl�����������c�[L�qx���!�����up
��-]<���/u�K�2��*z?���6�=�H2d�x�up[��K� ���~�'�g~S{&*�p,�8���ZG��:[���>�n�Q����Jxz,�*b�/T��@e���YJhP-�4\��hn�P�Cuz���h0�������|.��73�'��6qn�d#mU[x�I-���������d��������nj�N@�x�b�T�'�j:�~
�9���;�n�6Z���*N�����
61����u]U�w���2������h�r
��tz�^5�G��\��!Y�������\���|�Z�X������#�O��2;^BNN�wrz��0J_�-�C�z����d-7p ��<�@ms���2��c�^.����!��8�b2@�����+Cm����
-Lf/5b*2�t�<�����r|f��������NO��^����~H�AJ8��!���BMX!^�-c?�rO_�
�68�Z�f�tZ/�:�b�;���^1�Dw����[8��n��S��gg������m�1R3Gj������L�:��<x�}_j�&�k*��3����R�7F{�������F����a�������kr��n1��_�)��|�Z�Fm$a>��^��x\�n��Cs`�LN����G�����	drz2����-���������^(�
�D�$ �9��c��-����X��x�F=%������c�p��B�������g*�iq*�]�_;u6�N������A6�d2i"�%�V�fS��}!�^Q>���	
����<�_��j�%ft]��Q���M��Nz*��M<{;O4TQ�l��<~:DIUi>�|B��3�������������B����u���9�z������=�F��O����S�\(�1W�
��013N(�����#�F���C���q�oN��p&W'g�t�?�:_^���?P��;����@��7�KY����
e�F�����T��E{d�u���Z�����Vj!S�)��cK�$p|���@<v��q��
i$p�����mR��
��P�]��D���;S�.1$��b�.r�Hg�G�^�c�Q�*/��^ca����F[Pba����W{������R�KUy�?�7����"XB�A_
_m;�9���[����W8B~@#��sl�Cg����3�� ��t�\W�`�E_�!��x
�����xi;x���(���l�����0���p�0�h"���`Z�h��[H.��WG����5���8��V,��W	Y"��Bk���?0��B�$�?h�}R��C"jU��Aq^>��2/7��<�2��fw�,_�VA���hf���s�Syt26X���������UnR�--����w ���YX�x��T�,����^��eWw�80l�>�*�J/s��mKt�}\wv�����U8�--��V�����K�F����,}8��!����>�m1%��-$e��J��_2r4��%��������;ds������"�����+&�<�\b���x����Yr#W>����Vm����$\����_�@^>����U2��x�V~F�� dE=�7�������u#w��.�p�b�,+K��\�8��tx�����*�/n��h��g�U��J��s�|Q���O:���B�`p3�a� 2�����[L�K�l�38�����CX�b�+��W���;��8$�f~hX�4����A��ZK5T�@p�Z8B�$���� �W�m��2�16XM%tYR�*I��I�;T
������n���q��.���N�63TCMP�[��%/V�S�?w*%@@yt)`9���~��PB-q����S�K��qb&�a�D =sT�����]�
%�'�b������v��\EZ��',�fK�2l����@�B>�$�k��[McO�),���d(�K��!�T�����g���ku��CV���k��k���3���]c���4����-�	�����R6��:X�l�2�%���U�,u�����o�hB��1�|��!l�����Naw�
�o�c&�N�{�lh��V-Dn�F��(�$cs��F��
�'�2c�1[eJ8�K����S�w"�x8����~���s�I��O�[PO0����U�d�>Z#�G���\0;EsQD�;3��%1��
�<�Q���T��N�2�_�K
^%�t�[�&����#���S���EQ�����<T�t��$��X!�H����8��&�<l������Bqk�����E����^^������.e�9:������c�T�����8��@yh�&Cp U���q��B��(�Z��
$��,��]�B��r$sm��`-L_��R���CB
=��q[wA�e
E��>�R�Q�!x��,���&��
�v�S;�����O��K���
q�S�b�xYa\��>O�-"���cF�'��h��k4is� GDw��4��k{3��Pd�<�J��K�@��+�j�|���<����
e��6\���b������>��Z'�-o����a �fg�������N^�Ue7��h���_�.���eI$R`������-���9�����Z�Q�G|����G�'�p:�J�i-�X}j�V����}	���6���v������T#R�j��������G�N���G@��g�h����^�}�q���k�(�j��IR���^�D�w'�c�K��+���dWzUF��Rs:���F�YV�n�����2��s����W�q���P�������\X������L]�B�60N�m�[w��R�,������#i������G�Fsa���}����A����.���Bo%ml����@�?,��~�2Y�7F�����6�*���E%���ZW7	vz�`)�(4������.������D���!��I�1�m�U�`T[9eJ{��+U�/+*����_
x�@��X�?�������x���,��Y�^��Y�����n�[����#�)[T/�D���I/!��@
�:��o��IJ�g��+��]a���h�������d���s�w��1�&N\�����e|�>�0QN�k�Fc��5��U��s�\�A���:�sB|c������`l=���m-�������i��T��*tF���0�
����
k�T!-����dI����l+�����9�;�A�X�H��/�
�5J{0bOI����!`�
(o�q�7G���6��3��`����|������(	�p���D��b�^����x~5�K&J2i�Q
;G�/0`�Fr
Cw��aM� �/C?`9���� 
��z��,����S��\��r+'!�d�7uA|[��fr�c1�W��^��V�p(D����E���[P�v�)�?�.{X�4��s��t�?�����p*�@|���\�a�M�vQ�]�%��F7G���\f���@<|�q}v�BL"p�*���HK��v�B��� f�����$�y{�v	�n�T���K����8�'�z��
�����
��|�h���:p���sW�|}��EK;��f'��0����o#�������j�^����gRO�1�������=�����_�0�^��)e��{1:������4S�(-a��^O����j����g�d�|6���U{���8sj�e5�noOn�X^�����l�jLc�xz~tx:�G��s9���N&�Kh�8����%/+G��i�T-����Tc�����b�F{��x7jmX���0NU�X�/�8D��`�s�u\K8�����2	�^2�8����Q�
������|RS����x<9:��;M'�Q8?�1a��u8�kY��9HTV�PD]���I�]3��A_�hA,i�w�AfUS����8����]�)�Z���)����������(�uy;o>��\��Y��fhS�>J�m�N��apC��Y1����	v�cT��
��j,�p�j�,D���/���������:�����[b����.�h�����(j�u�$8.�Y�#7	��p����p��G�0��/��k&D!�D��������_[�i�-�����B�w7���*�6��`�v?�����"�&j�!���1��j��XB�K�������a�AN��8����g�Xi+1 ��DL`�������OBX�dD]�JSX2>���(��Z�bT���)8pQDd��$FXab��I	3KD{D�C�bqK�I�"=����m6�m��f������������f��/��`���f��!y����b;P-���w������^���������Y	��E����zO����M�CinZ�Z�%���P!)�$�O��r�z)RL��+0��e�A����05Z�I��������Am�^[s��!��R�K�U���r� rp��>k_qi�5�Q�f]�b���
�;�J�q�!'I���?p]���%����q�:�{�.FE�as��6�s�p��W!	Q���0��K3�`p�R��D�p�X�<V���9R�$^<���u� �Q����
�08��b�	��C[\��R�^$����[]@ ?�<+��:u9�^��f����b��z4F���!�����1�����t��t�!H��wt&��A���S�WH��������U�F.Q�4"���������/�2����{���(Cd���k��9�'�]K	
}���+��D�����^,M���n�V��
��;ed0�X��uy�EkN�[��+��w�ao�z��|�8����6�ax���;�B���m�|)�B�����|��mFd����7b��gH�Si�,��*.gV�E��gf�����h�[���V����R��A8����rNyeu������Zg�s���{�M,v��G�\���`��������=k`��j!���
��E����J\��_��
��S��bS$>���E���
#�/@��X�:�
,'� Ze��\�d?��T�p6�#�8�aKE2,�_� P�Q�!�H����@�7��s�E:���D���A�
4�������5Lf����t���>1[����;�����rG�C��a4B39~0*�K�Y)������?��<���	_��P�T�j/��CUW`x�5I
a��eb��L�0�	�ySxh�z������;j����e��yrn��0�
��@���w�:~����l���)�����[�q4\�
�T�[K��m��6�zNT_�^�*pIQ��f�� ���c��{�����R�VU��X.������	�Mb�����/A��C���DB*�5��d	Y�����������?x8@��"g�EN�{9_�5%iG�����57����f��������Yz�u����8G�������t����BR����4����`��!�Z��-��`nG��Ns;���)��N�v��>�-~��]2<2���+�7�=��R+o�]��v.<���f�J�
��HsKd�����n�����v<�]Ql���.���C�(e�}����B+
I/�
�l�dp�Z�<x����|
$���qDv8�>]BF�-��E6�p��}�_cNf/1)��lb�����g'������F))�����-u� 0�y��#��Wt=uE���#�`k_��t�������8��P��� -�.�~�e�u�%�������*J!J�A�G�<?����h�%6sn-�8��5������ ���F1���������$�0�����w1k��4�O��Z�)]V�<O�wK>���,�P�&���Vr���%�*�
�?�rs���'6k���O����v�dI��qQ�\@��g�����7��?p	��9
�2�,y@��l�e��!}��S3�qc���~\W)���M|�����],�*gV;��S?�R��{�rW`��X��1V&euI�.7�svk��/R�n����r�N���N��R�Z��f��l�U	�u���1��;w���h�OY��\p��O��^�N�T/���e�������t�����}>���Y�3$N�#����gi<�+P8��T�rK<@`�N��&!����.n�9����;�<�5*�?�b��A%.?�i�H�L��4����K��7pd�������6��`5������*K������}�-��a���*��~R����>][�
��$�P����C��c��{P�@�A�8r�Dt�Xr`�BU����������>Lb;BS���xh����Q�����z���v�q=d~�(���Ny9IT��Y�pY�p(���)Yd�ow�A
jrk+b���\WR�8S�M��9�|i)o�&�����xPt��*���+��M�
Q����/E�F������(��b�l5G�������MP�`�c�<�����dn��&L�[C���^�K�6�d+��a�`���dW��\M��{��5���)����)u�$�5_'�S ��R�\�p���X�bW�']��_h#_E?�Bxe��9�F��a(u�wi��J�37*"� �yI��%
��x��G�l�z������Q|���eR�?{y�N*uG_0�.�`U�._�4C����t�Q��6���4����^� �����C��NM`X�n]�d'��a���o|��_a|���U���"}��6T�������0>KFGW(?(�"��B��N^���b�<�����Wy7���OvS�H0�Yy��r��1)�
@�B�(�_�mE�����;��\q�1�'wZ����Q-/s�A�VQ:���jC�����8��+����������x����08�JQ$��R�[�� V�\����T������� ��5)S����
q���1J�)Vg�:m���'cu�R�����/K�pGS���x��B���'��}.B�7��������6�����\w�:�)Oaj��A����%+��`������z�rc���2(s��A�����u�����p�&;�SB�,fZ�-a�\��o���e8	��I��u�d%v;�#��0�������Q����+UI��S1@b�D�y��������>�s�o�����4�A��7l����lBM]�1�'�iK�x�������	��1
�5%"�q~����{3��a���8�I����~�����o���
���GN(����y�,o��/o������x���{A�@P��oK�D����M,1F����f� KQ���������y):�\�'U]r�}6
�$�+�����}bV�#_|~`�g=/$/��/Ae5��K��.��K�,d��)�$������2u��C���y���.X�S�WH<����!�	)	Q�N>�]E�����g����'#�A�%#~���:��	o��r2���)g��P������G�.�N���wv:;/^P$2����"L�(�wH���YA�=
��}!�����qZ����Pe�3�kv�oE��V���?�����K���U���Q�/��l�Cf���HE]$��3=x-D�:d��Bs��T�b)����=�m���f�:��M]���
�8�$���z�'&I�xW��RKm��:+������
Fz.{�5�y
 +�fv! �t6"�-�K�D�\�z��'iy/�e��2�a��o���[D*�0��l��)��(�;�Fh��!Mg���������5Sqmc}�XOo1I�m�y��z����J%@l-�lXKi#,7�JUU`0U�����x��FS�Z���3���SP
v��Q����&��
p�2(�q2<��8N�3�������x���t��f���c�q<��~//�S�|�;]JN*O1({D����H����S����o�*�P�!�7���Y2X�n9ej�$���=�lcpv�S����y��K��d_a�<�/0�������p�u��;_��K�����n���l�g����f~��a��3�����N&Ql7��U��J�?�:���A�?��VN���11�O�pw���I��A�����q��J3��y��;�_�}�l��Q@G>�[����t�R%�S�������H1�A�Sg����o����by!���/�of$���SUVH�G���6��"��Z	k�\+2��Bo�����9�q8(CU�f���������t^%U�\�������K�61�
lkI`ED��A�ehz��x-QD����R��G����>:j���?�����T0d?xy

�L�5Y�����4�� ��+?RY�@�������#�M�E��lj��5�lGx~	��%��p�y�1��s���sJ���N�\��>9����b�$�����N9�}��R���5�R�<A��e7�)�M@/�*{�n����%G���(�������/h�!����������q��;(n2WB�X��s7�������hQh�_��@.�����������t��?P��B����	R�<�m��5=��_��U����D�4�h�_}����UR������Q_(��ye�N����/�q��f����&IE��|��2�SV�[|��dG2��M������P���������>���������N������^2�����h-��bS��
	��(�[��������P��7 �P~�X
���d���>�%5
=��+�c�5-^��.�w'p�'0�sg�Nsw��(�:����?��
b��B��`U�\vR<_a�:���������h�gZ��0�t
�t_7��9�t(��[�B�c.�dC_%�M��7���3��U�p��86���-
�%�8[7����pp�U���8��.9)�y9�@����\$'�c�������]G�����(��_����<��z�&I��L�j#���r��)�C����z��0�{�M���*��1^mc�h��K.���I�s��kj~���&��&U?���}8���Z����X�$���L"����s�&�������L����8����<0���#f��-1�����P�_����SLn�
�%9��$�xCtR���L����BMQ�����0?}{��2O�t�)��h��$Q��=g�-2b���8t���2��6kd�*���|��e���������NF��G�gF
C�ZE��^�r�ZCf�*TF��X���K.����h��g���[Rs��oa�9���t��m�f��6p�1��Z�|�����d"JT�O�������|�9H����P���v>����X��v-:\#�z��[�6��E��U2a��$�J4���H�i4)"�y�i4�M����t�|K�}#��M`�<�n5d��)rB#r�x0r��ZB()�����IEzLr�����8��<=��v�� ����:�U<%4��p)�1��Pd�Nm�jE����r>�X�Y��GNF��<���]&zcd���9U�AA��x����f�m31��4����J(,�}bK����n��^N�
z����(�pR�+@cdz�m[�����-�K�C�i�P�8�I9���:E�K����x������'���H���k�!��/�q
�����o��������'g���)%p^
�
��9�����t�������#(R'��_����s�����}���t��h��a���M��E(�Bonk��-�l~v�����i�����p�#����������b/���N�8&��B��U2�v��[�	����i�0�'���c���	H��o���q�������%�%/����q-��������Cq�.������X���k;�&��x!Gmv���,O������������������O��W�m��Z�O��m��^��lm���'�{�wqv8}A����T�c�)?����~Fe}�����{����rk��(���5�k�~NI�v0��JR�����-z�%CA��N��^�,�4�U�����5������&e*����b���t/b?�b��:	�����*� ����mF-?�Z���q�i�H�����=��1R��z�n��q��x.��W��(����ns�x��p�)n����� `��,��Yx��(3(d$�S��$,;�D���A��2�'� �;Z�w6��?N�x�j�e	�p��oy�[0�|��{�!�
�C�}A3��,6�dP��`�kf^�l���.)�+	0A
H��;w��i�V5�!��������{B�A�_S_�i#�����d\��{���!
���2���'��Xq<�q�"�������x��'��P(����O����U�
��o
8���'�m������M{�2�Q�1�l��:6x2�K�$�!Q���!:�n�=�HcYYn%���u�k:��^����%[;e(�����]�Y��sn�NgT8K�<����!n=���F[Ir����!G
V?(
hI�	$��S1
�U���~�p����b�_%�����,d���$Q�Q_J���s�������r�7�A����������{*v7]��.�0Bwn��b��E��@��E�*lw������'��&� ���������U��8�u�`�D��U�
[(h-��TsT�CPW����J��h�
���v������r�(��
�
��L�	2�����k�L�(�ba\�������n6�m�/��*�b�q'r��7���h�F������N
�F,��c�����V�������]��`<��g���
�%�/1M�TDi��ZK�&���7Ge�K�>�m�=I�����T�D��$A�G�=`���$|+��-Y'���up�Q����A���SN�u6��b�h�a���]N��O�V�m!�����x�����9�m����d\h�����r����<~���o
�-v���2�2��!��p��3������o3t�����2^�-Y����x'+�\���I8<����z��n6QLh*���Y#��P0;�A�IS� �|�#�k���e��n���V�����
&s�r1&�6�"Lz�(;�`����zc���=�l3$�������@��#j-f�\��!��J�X��=�P����E���wl��a�P���
���3M����X<F�D�C��J�Wb����e�xe-�$��=�\��2x�uh������M%�H��(eE�C����_T^!m]i<���Z���P"�z��;bkN�d$�E��v�5����]e��F46��#R<$,�=�
��4��6����?P9g��#���3���y:��Y
�a$_	g%Z�$E�t=3H!O��U���A{�(�x��&�F�K���O�E����5���v�Y����=r:�F���F�
����k@B�����1�%�N�8��2��{I����8h��0$�f�g<Z�6���w�i!��NmA������i�<�JB$*9-��*D��|B�d��*+b������f����x�5����w��C��]VNi����:��B��*+M!f����-B����|���������j3���R+�V�k ����8���ty"�)D�6�7����+�gk`]�-��	���d�u���|��SeCs���,��OK���D�B-�������x��X���a���A��?���pS���P\�=�8�[J�w>Px�^apy.-�}Z]Nr$Ue�`H�
��p��`�1#���p�H�~���r�Xua9n��S&��`-�����*��~��y�1#D����+aK%I0t�y"+*���N*�)J���q\����D2��5��n}_1�i��`$��9��W�A���l�(���}J����l�S���Z"��/��>U<})c�����R���]�Z������}�,m����;�i�$���������{
|�u4[�^���e%�X�Mm�D-���o���Ly=����;�����MI����M��a[���w^�r�"4����
�� i�2+.*R����`)��x����`1%�{
) ������[3����YdQQ;�R�f�t�$Kad/S�
��'4d;�W�)�%�|N��������EE�D%��]����rG���U	��_�D�Q�m�����������EX�z!����wQ	@�^�~��U�TQ\�����CL
��y���5k\mh��n0��~�FR�z���riN:�6�-p�A����\���ZV�t
����A�)�PI�xA��Jj�kh��X����O�x�/J:Eq=�S�Z�A#�����!}�N�����M6wtfLmdh%;�
g\�Z%g\�,g�Y{��G�F��t���]��+��q��N��VMg �<V��1�+����hD�}�~&�W_����?�b��j����O#�CK��k"�
�S^����G���7����?�v	~����gOg�h�ht-��������a�!����:*���xy)fF.J�[q(,�i�9�n���a��������Z�Q&`���zZ c�_�������=(����_�+Rf��?�uq2A��V���8�+�	��{n�����I��\�����
ri���k�9E?/��������(���[�'8�t(�3��@�^��(������)4�@��>2/��G+�c����3�DK+g2����@}S���\(��xO����C�����E�_
]y��QUx+@�]���������d�y"C��2�w@X����"����9G7;���!c�%��-gP�;��MYe�]�K,�x�W�K�}o��k�$���������������Y+����2�n"Y��Y�����mlP��N}�F3�Wv�����l��x�wp����/��
����3l�������?�=O�~�=������Ob�F�.	�)�Rw�����*��8�1b��o�gEr7�Fm����"���E?��L^(�4B��n���fa���Nh���*�p�E���u�9q��N$%���,lNl���=@���/������u|p_��2�M}��5�f��!�5!Y��,����|���)�x@��`{Te��d���x:]rd(�A{J�6�-5�jQ�������D����B�;|D���tT����}0v�����l��-��6r)����F������!���A	�G-J,����Q�L�2���$pg�%���-���
e��i~a<�c�p[�\V���"�lll�?��0�Q��%,#i�:�(*�c�&�k�I��J�E��0�k	n��aVk`�c����RY��4[x,S����X����:.��^��a�|���;�w��ix��X���x���V��2-=Rg��[�Q���t[�Y��Ij(�$	g?FE�H��>��v#r�c?IV�if`��;��swi�V~�i���f��#�/�(�'�����Z�<af��M?
*��^)p�&����GJ[,oy �Q�����4���V�:W<���L�=tg�Y�1��V�mU�������a�@��i*�2�����3�8�=�=@�A�NI���NA�Y|�B��E�6WZ�s7����n8c�J��{��y�R��
EU�Qc�2]��3�R���~��c��01�1���$��n��rfB�e0Y��L��-H�WYTn!�X��B��������D�����Fc���*5�+�(��@Iu���{*�?��b�DF�>��Bu�^P��������Z�/@��1��9��]�9�����K�dc* �.����=���0��j.����������O�������
�WYgI�v�\^���������3]��7��^ts���k���E��d��*c��0�������A��U�4�2[{���4`p��vi:��q�������r0�ua�I����l[sfBmC�WxmB����?F��j���Z�l
��-���
���9�yi����X4������x��1�����?p��bu0�[@�3�E������Xa�������T����S��C1��������L��
vvn~��������qz��1����a+y��/�d���>��}X��*��O�������O�M�H��j���v����o����dc����s��]��A��_PB��c����h8��;t�IEu�E��_���b��!1�C������4\�c��%���j�e:E>
�{P��4q�*;��*�4a���O'K/���~��N�y�m���G��O^�@>y��������,���/��'n+5Oy�������.��Q;�������%�������LO�Uw��wm�����Rp����v��j7��t��U���5���4,��8�e��ZMJ�F����}��Q�C|P���(�~�h��0�:R)��O��J���w�ux�[��p
�L��@�+�Z\���+6�x�l��
�pobT,��}U�G��@Xu�Q �>�
J�|4�[]�!L�-�r�Oy\��	�!Ydg����q;����m����{������~��p������O���UR�3�+	�H�t���|��~7K�oC���s�����VV"�����q�H|j_X��1�?p2e���&��J��K.6���0��6�pF�i7S���j��[`�D���p���+q��&���r�*���(��m!Mj�����M����,�XQ!n�]�"���u��#���d{�J��*����s����y9�08<�2?��I$���_� &����mb��"����+����`��x�h����:��f'K��;�����W���?;<5/�O��7
X=�t�2��u������6m����R������\����MN�l��}s���������_�QCm�@S���
��S����q��tl�L�������o�&K����I�p���Z�/O����W�����9z�r,#�a�^��S4�3�V��w'���y~�$szrth��_�GQ8�����Z����#S��1�E`*���i��n�1�g���)����6���O��I��i��qE&R"1��������
�q�+<���{��)�����:������Cr�$F�.�/������t�^p�j���n�2
��V��7��d���������,o�G ����������8I�%�0�:(��!0���Sn����
�����q�5��*����C��d�$M?���Dn��&C;��6���<��{u�F���/�z��Z�
�EA�n���O/�����cU=�bucEs����T��R��]x�5��<����O�o��y���uV|&PF!w�R�����I�UCE�'�]�������0�������8o�-�^�C��Q�~<=r�j���U���j�S��p{;a�����$8���!������K�u}:������4r�%~����h��3B(�]���"��k������(N`x�@;N���U�X'���-�?}O�]��63������Ze4���8�3\����y$�����Y�{{��!�3{�6������������?��&*'�`?�����E�t����p��R.�����	~�L��o�^U�l��u��w��MR6��3���6�g��:�6���J��
h����_�J<
�l��,�&�"33t����_�������E��
�N��d�B���I����v�p�JO��\�������lo�n�z��������.n��������dZ���m�aZ���3�+Mk���)MAr
�%����_*83Y��?;���nPgI-�[G6�'�K3X��r�����������������L������Nv�$L�0kCg1�	u�v�zL@���Y���Hm(�W���<���"�i1�HE����=>����3 Ox�,���d�j��F�I�G�����pBI%�1k������!��w��\N�A��UE�n����m�p�h��
���5{�]���?�ZZS
�E2<���Q�]����z���nmY�G�_>�cq�,�\(��m5G�t�Y��~�[�����[���k(!�$��k�cO��v���X�	|�E}75m�]�0=����
��p��G���#������t��f��l������S�S�K��W�H/���-�q��:�{�Cbb�X�H
Q7e���~CIx�<��Q�ry����U������6Bq?He^e��0�0�[�5���}����8�`35��
}Y��4�K�$,��2r��{�)KWd���`VR�(��N�"IsZ��,
]�[�J�.�����
��������E�i�r�`�T�4��n�^�)����&B((5�����M��wv����w��O�����������o����,�XT���
Q�^>�8�-����s�y-�%V(�V�'\NT�]�����m4�����Z�'(��xb���7�{xCA�DK��%��s%��
+����y������p����o�a��-����G�d���TO�'�*�5TiB������tN������m�Y�g�v�i�+)���u������@ �c�&�=#�Q�_��_�I�3��S�6��s��E��$���0S:��6���I�vLPro^�K�v��j�Z��u2ZO]Sp�����~�����>^o�f���[�q��������?��(HLk��:���8���Q�^������o�����Fr6,��"��VD3�T��}N��W4��������)�w���~�����.<X��6��h�������?�$�������n��
�����[���K~�����&6au�&_�r�
��*l*V����
����+�4��������������o���/��l/�d6���m���rG������/��IH]�
W���]����O���=k���\�_�V�"�������N�v
��i�������}`8�H�0�'$�L������i���
h���,���-�����{\�q���7_r�3�_����ZbI@:�	�m�@a�I5�ZP
���Z�^���.�����I��gq�,��r?�X��|�P��0����F����;���Pv	TO�&�^�1cg���x�z��]+tk��0�5���,x*��zJ��J��Y�3�~|�n|yxz����X����Q"8��z`T��N���`m� �X�%?SKE��O��w,�����p���S���m��M�H�A��t��4����A�2vU����Ibg�Y�����`7jH>u�+F��������[�&`/��Kf�tQ�,���I�M�$� _��naKE�&�JU����rb"��I��:����+��?F�q������o��NA�\����c �u���(e��������2_\/�w�B)���:S�z����}��n����Z�)&
')�X�?�Uw0,����=_BD���I�|#<�o����U��kX�%������`{W�>���E��r�qI��~>�~a�C��u��d�3����Rj�7@l�AI��F��^,��*������O����?��~|�ZMoh�8�wfh�M�M,����;�Ah�-3g���V�,3`������h�0��Z;��������U���R�{������C��hl��G��@�Re?���VP�;U=Su��r�S���C���������d|l�;�4'���Z����2�Z��U�q?K�^�k,f��@�s1:�(s�i����-������w��@?�G����|L������q��ck#;���f���"�hQ����-i=�fe-�1k�DEW:8��w^E�Q���#RU�-��S�{�������?4���'$���3*��*�_�^�������������bY��?�0n� Waw��5������p��N��������s%D+L�[b��gY�;?��
2h�����5G]����I>/�;tV�B/&�j�d�\���b/"�ka����:m{PQ��+�"T�����J��)�������9G|G"WhW R�]W�8s�e�|���)�i?z�C����#��������@�X��
��IM����/�ZXGwg)�$��C�7���e=z�����@byK���gR�Et���)�������d�J���:���V��S��o���4�Ew�C��;$��9�^���sJ�X:�������H�b�,@t/^S%l�����-��~h��U��9�J0j��o�-C�O�����8���dO~�T��V����\�O\Z������A��p��I���F_�����`��,{�vM�K�Y��b��e��pDg=NZ$Ox�^9h8�G��\���hB8=��c�S�HYrj�	!��.Ls~(\�f
&A>���!������L����N�M��������w�������&27GT����;'����w�^���m�nk����^	
�}8�[!�	_���R
���	����������5?w��_[M�F(�{����3%����*~������N3yD��g�4F��_�Wnv8����g��w���f���uw	k��I2o8m2]�}�0X��)��?q�?���[�?s�JD�������C���S�����tj7��~�����U��(��x�%0l�8��:��Y8lR\�|�.�9����r�)��\#1Z���[1w��������nA"3��������q%q��?y�w����7�?^��&'�g�����j,��~Z�d���ffT7��}7���[S��
���������d�����m�V������x������������'0?�k
%�/Av����kM��ON�oB���e��gv��)#��x�����V�->�������!���'B���p��L��=xCTr;)H��l���o��������y|xuhb�������	��D�� t�Y��������O����
�b^����_�������GB���IH8��w'������k�s�uZ3w�h��a�9T�m��:[N��;h8��M���DXu��������#��[�
�������2�����i�_m�U.�����;0���u|��(�Z��=
�>���%F���P9����\�}�n��e�:�b�<N�$���-C����j7IF���
�"�����R^���3�#����Xzv���M$"m�T����K���G�E`e���)3w�E�I��[,\�&���f�c�C���(�����Wd��3+�0V������Lg�A�6S�9k�K����7w�,Z��Z��%m�Q+�B�4�^Z��Vc��9�0�\�1�p���4!�]�gj�T^�T��/���	�x'�GP
������Z���n>i�+��
`�dq�h�����0�*���j�K
0w�\x�.�s���s��"���]��NJ*2��/�s��7�� A
��|la���%�����;|�p��r^��k5��J��n��ZS����	^~]c�����Q{���v��@���W_J�,q�&JK�^�����+V�_8��#�a��_J9�*��pX�0q{>�N�*O���q�V�1s���,Xx�|�� ���	G
������w��%\�{"V�� 0g�q(� �z�3i�0�3RZ,BI�dd�H�#�.^P��\���@��Re�z�Z��+�2�|�|m
�����xI��gpw�����t{%���T�z���������_C�^t�?��Gu��n��^��p�����6�I���O����b��������G������	�b���O�������{����	�ka�����pFq�S��v8% B���XQ��	�^����[�K���W�
���>�Z��]_^�_���K�u��~sN"d8�k:C�4�v�i�3(4�t���f���9t���yA�H�����&��}���t8��F%�)�3����=^�[/'�g���/�t���pD�>�� aJ%��*
xN��P�;��l|�N�������3�K:��/�Gh�hP���Pw�@���zw�o�`K������g_���8��1v�p�j��uk[Bm?	�8(H�)����b\�����?����|:�Q�CK	�F%u&�Mdz��k��7����^�C(*�_�wB�v~�������*H�m�� [�v��99[��_(RV7i�����M�?���#.�8=J��T�.�y�8�D|8�|�*�C��xF�$�2%q\�b���M;d���2q+�AVf-���on!�3PJ��t;=�����mm��l=�S�����-��x1w?�W�e��X���V:Z�i�S��
Jg�^��
tk�SM��N��fjt�b��/)��	��� �P�_��n�p��x{K�6JuE��4^R�B���W���7
���=�_��kvh���h�b���	%����8�����L%�~#S
����������O�B���2�\�n5M{f�{���%]K1sI���Co�EV�D���=k~e]��+:`f�@	�<LsX�7�%A�����2�� 5��l�������"�o	�O�m|U|�&��K��+n��-X��n;����TbBy�K<l��F�`AMT��]�e���~��$����U����4�tJk��_Vk�������r_����F�H
WV�������/���@U���t`u�(�v�YkX"1�V���J����G7?0�����������=�w8���m�J����8���U�u��(�/?r����SI~��j��C&�x|�E��2 =��U��V�MhD�N��P�8����$��������������O�m Pvd-��h��v��L+����;���7��
��"�	���q��@���e��]�������}���(qxYIOM�{���H`�*
��m��!Y�\��>�����^����;�9zwD�~���x���7��x�UgRE�7���\����b�G��u<e�xv����W�$�s%	���v����n4��i�[�TP�VJR�U�9#��2�����02�8��G�r�n,���3�/���~�)����#��u��v��*�����.SF�������/��������/d��gl�	������'&���k�V�2� ���L/V�4��n����J��
��T@6��r�0��������Mm��8]�(��B(p��@+L���O�5�e�o��������T��:�0�<	YT#7h����������Z�R� 
��/���_��_	����������4�b�%3tW8y���|N���tI�TTW)��j����9Q]+Iu��>`O��������/�g�g8B;������7��8L(]u�?T�*�Nf�����+��4���L�	v���;�f�_G�3��4V�GN��r������������4G�fwP�9E�� b��v�j@�^eM�v0	[;Z�0����%e��-V�f�@�B��T��L�XQ�o�������J�>���V�hc���\\u{��������F��'�k�{ �r���l�"ko+�*�j����tnZ��0B�w~pu�Z�N�70G>���f��i�F�x1^���h>�1�"���8�~�F����FB�����$��1�N�L�����q����N�o� �z��Z��ea��4�Qp1����ucd���R�@:l�O<o�
���(3���\(��&dM��:x���j�����8dh
��o��y���]������_����4�����rz2>���&-�U'���c?
�����8�
?������NR�vW�����^ ��+4F����� o��a
��xt��f:y��Q�K�>�6�3��c���D��"[��G���������� 	;��Tm������M�{'O����QQ����c����o���������\�ON~���'�Q@�_,0m���S���)�N�!w���y�E�cm��L;���L�3���'�l����6��b�>!�1e�d��0��x=�(������r?G�et�JN�����*�&C���������x����c��m+�;2�����8��Q�}2w|�6J>nH����K�k�������w������LN�=�;}}Z�����=uJ[G�,����L�<w�$��Xu6�<���q�#��N�v���3�N��Uz`��U�/�����V�h!�k�S3o>��
�P;rhR����#���������/�Q�feB�<<�Jey�6pl�?U_�UU���^2�Dn�#-���K��'*�}N?��o��S�;�*[Sl��Hy��Fv��6�������T��F������.p,��BCX\x���gR^H&4�����{�E
��.�g�]������K:TJI�tS%�0T����5u��m����\�F"Zl�5�a��FM����gz�B��k����u�k������,�g@|�T�P����A2IfH�pO�0�TBx���I$�:�Y|��z_��}N�}V��m���w#���C�Q�d����W�?��
B�:7��U�1�+	�����#�5B^}�{$�l+B�q�);7����Df����4����3W��9
��1���Q���`J��ab�\�!����[ER
-��pV����mX[�*�W����(�8F���npbY���]s�t�Y�E+aHXl��[7�H���������Xm���p�|`
��2h���!j_���*��3�:�pa^\��N0��>YB%�]o��f�����0\/\���ZGD��5��!���na�w�?�v�S��\w�/?4I&����.��i��sf��J������������8:]Gq\}�������I��RT>\4*���%�$��,�L�xI(��lCc���n�!p����b������3�PY�$B�vTQ'Fbh����X��T(�?=��n+]����s���%g>v���]�#y���������5���r�}�]�=�����B^w��B
��rIS�\��$�7w�8Lzw$��GM��G�Q����'R���1���u���2Y�H���&�gk�H�I�)eq�-!����k~I@���7�"T��RJ�y�(;�!������P� %*�%*��@�T�������}68������8R[$�v,�?x�����)[x�i�>v��QpjW��v�,�}L?5�P����$9��x!q�?U
���.Rg����jjgF�'����;�C
O�uv����=�Ox���,��?J��pE"�&6^�WZ�X��PB_���;�,�oG
4�TS�~[������T�2�T�TN
������x���-^B���C/�f��=���/�����K������i��>�g�1{����..4�N����
��eI�P��9�AS^�_�s�
�lq4w����jQ����`��sQq�7~���	�4��T���}���i7�l��2|��{�#v�TzR/4%��k����d���:���}������a���a^������k3R���%)�a���v4B�����w�B�8{�d
4�����0�2����p�+����+vY)B��6��_Y%����]��A`��9��e7�7X�GJu5*��GPA�<��k1l���O������Do��������S���P��W�\�s�;����{>	t9���2k�+-X\��^B�j<�1cpv���_g��qt���O��<c�<|tJ\G0yh���mF��9�����������/��n�����#~��i]Y��iv�F�,�������|.�l4��Y�{� �w~��=�w�X8�������e6�p��A�[�^U��*�BJ����}_U�#���R���X���(y�.���
�~����.���d��nu�T���M�/���y��B��X >��'x��5j��F�e���y=���Q�����T�$+Ha��(H$y24����3EUc���0k�A�7�7����N5�UE���"�!mv�� z�f �E��R/�3�����>Y�����.�S�X���6T�~_o���(�<�dL:\��BX��T���9qs�@�W�T?X�s�����aCI���	3R}�BN+SO���������Y�bd���P���3�������l��%'�@��T�K��f�� $�����
k�%vP������9C�:�N�3����*��\D1W8�~O��O�1�&�I����^aiT'Jv���Kxb���1^�X��0��VA�i�-h	�t A_��L]c������Y��2�9L��s�d����BE��[�D�0���5�OQ������3�KK����S��49=H�RKg?$-�IK�_|Qw�G��w��~��t�F�d�z�x���q�g:��1����b�ndb������<ba1�����������x3��� �|s�H��LI�h�h��.�u���T��P)'��LU,��[o�40������t/����T�Z�t}E*v�E�,>�/��r"�~g����R:��
�j�Q��4�������"Q�7#���aB-r?Gl�iF��a�{��D�P�|4Vf1*
��#�d��v<��>$d�e����^��
�0�=���L����{�.p����	�7a>,^UK�X"V�^���C���v���x�jR�t�'c�����.��	�S�������n�>i5+H���ZY���s)0MH!�U�8u��h�}��t�"E����8F��!}����Wlx����
M������^���ib4�Z�O�n�%���^5�Wi��C���K�!�H�
*s���<��S��M	j��"�t.	�n%�']&'@������LtX�&O\VO���V������!:����7x��X=�g���m;_��Q�_�}�!�D���R���[~����d�����1}z����F����r.["����V��s����*C�����������6[�"�$u�I�	{��2#A�4�1�T�5m�b��V�5��CBJ�Tbn.(?�(��6���}+zK�S�R���U�W�����n��s��>��C,q-�?i�8f{�*��e�(b�
h���f�������P�?SC�6
���qeyAz>�U1��������e����xW�t�nrj$��qj�l+4����(���B*;��<:?�x�����W�������x2>�:D�PW~#*��r]����~Y��`F�_�Ixe��( �z�c}8���jd��D�������a$��P�����
3�\0��Ca������W:|��Irp�|F�&�xK�����:��
�ax���3)��k��g5,t�f�s�teE4��!0l-P�W���V7��*(�`!���������?z|)��Is���QK:����A?r:�������vT����Io�X	\��HcY�����^����6VZv�08f�C�
�
{��g�lxn*�_������pN�]o#��0��]#��4M�W��������`���c��������������gq�/%�����G�X��Oz���IQ���Q�n15v�C�(����SS��`j�Y�@�:Kfj�K�Y�["K.�PfSH�oi�H����n(<7M�PM�^�m�� O�,��G>��_}�<31I\��V[� �"�=c�����.,t��@��f�u�����
e��\���[� Y����^3��b�:�Q[��>^���w��\E���p������%+��6���������^A	���
���I+/Ox5�?�Y�ptRXX+ )�Kt���p�,����T��4�2�F]�s�<>1!b���
r,��������=\/��;y�5 #^ybL:/���TH�����Up�>C:w���-[���O����r�F���<N��n��������J�._��`N�����2����X���%�C4�C7]������_���R~��E#�h��f����k��a�,u�N����j@UQ]�H�x��GV�p��IL��������A�8���Ea��4�
�����|{y��|p���o�����"���%\XJ�G�/�%� ���v��Z�F����}�]�T
e��`�A������������M�M�
���+����A�t��8w�m��z�Z�5(*F����c$�HO	��Is�����f�%u�)PE�T��o��)���P�D��ux��9���\�F}]�I��Oq8b��3F�?�t�0�8�V\]���k0*�������h��Y��V]eUB��p�����H��:krm��K�7*�B!����2��%W�g����x�#�  }!�����e��\��?�b��l7|Q�:��Us�]E7a�7�Q��[�S����Dx�8x:U���d���U�w��I���1���
'C����drss�(-M��/����������Zvg�n��~�;�u�*4�����R���(^���>�7t(�t$�W�������IR���$I���c-���wc��������&�mjQ3�w���
����k�dK5��;Kc<9:���b%&�����`p	�
7�[#����[�~���*)�,
�m�(�'�!T(����,#��*�#��F�r~/������4��k6��P��`�@�[6�T��U�J�������j�5��N�����S���4���v��LE+k4�G�lQ�W�<9A��2�O���%T��8���`G��������{�9�9E����#+���u�����:W�6���>+��� &�O5@$�3?r���0n,��5�����QUZ�f��bZ��A�26zg(���e@�E����s�Nj�q(���>��B�!�T����<x�2�j����G���������8��uO	o�`��������S�=��F����Z����~;Mv��9�B��l�`2B�:N�������Wy�0����Bw>k�
�$z���]��	WB��eKV��o�M��b�+��?PUG;�r�Psn�8��-��IZ:Y��������dW�OV�������N1�����
�4,��	�A
#� r��b�P���M����J�2�`v=����Hs�4I������H�z/,^��?���;o�i+E�(��=��,q�����h�Sf�F:�A����F�����#�'�����<�E��gh���N]T�,]��1����p&>�*>B����=YO���$p�"��)$Mcs�0�sDZ�'�D"���'�(�+�v��������<3��I��a�*<�^$��0Q(�W��t{�Fc��{T����)c�)@W�c�A~�n� l������B�����~�c����w=�?���:g5Y����8����9�ba�������}��
�$X���A����������W��}��N{����3�*K�ZJ�\��7�����`o�&�
����0��'7�����c�(�#��K?Q��A�3=�ev��vf-�I�<��M�S�����r������3iB�9i����^�kAmXn��kc��G)�xt��x�L �H����^��/k�V����=S%>NN��_�F������tg��|�����	�+sM6k�]*����-�����Qt��nl���)��K�T@�wK�kC'�0Q^���J��{e���y�$<b���Bb�0P�eSM��.�C��lh3����o�����r�.���'����}������ikT���[fh�I�H�����Y��&�������r@���8�����y)\__jZ�k����Z�J�;�Gy7�r����Z�
���G/����m��[}X�����2}������?k����*[xl�rK����u��0�5������j��IZ����S�h�!~T,J�K�zQ�K6���2��t������yb*��������!��p�5?N�����K�p2_^M�������,SA4�}A�o�����?����6��^c�d���^d�Q=��@�3$��@�*�)�����q��9|n�I�n�h����e��Qc������G��{���O����/fp������;��a�����|��zyr�z4���B�9_�58���	����_*j�b7��`�k��t
�;��N"�k)�b����T���������dh��� 6p�}��}���)���DY�#w�����`h-�XO��rT��
�_�_�m/�-�����P����o����t|��!������.P�V{�D�k�s�����k���'�K���7���-�6o�mJ$Z9^:'uKp'���L�`�S������9-N�V��L]3��8��k�eQ��y�}?����l��8��:'��E���R��
�.1��dR�B�rR��z�O%�}]
MAA������T��x���^	y�^���>��!��$���~J�������c������������Gi��%'������3��cR��e��������N����J�)�]����zyU=��l�6�*�����Hl�F���O0�T����.�����iS�Up�Ul.#\a���N����n`+�
����gplb��G��sL[^��fq3��S�W1�Y�l�62�#kn��nH���}]c�Y7�%���#�u���'s��&
�����e\��5��o����)H�q��)Zlr��bq-lw�%�z�xj�5��Kn�vR+���/[�7NTO'G����Y���W���`f`s����Yl��p9����\�9��y�D�lHv��U�Sg��G��6�����&6���P,j]�����&�d��I.��%�����|,	W�}E+�3����U�sD���
��N
B�!������F���\�R\����DE���b��l-���\�pQ��k�����_O���j����PGX\�x&�0��Y3�F�J\2@i|^���D���:�F�z�H}k`A���;����^��V�;�>�+]����&��S��2@�����=8"Z0������J��+@d;��F*"��m�w�v����t��i��'���1�����H��D�p��O�G�`�9��i����������U��)��>�p���X�M��������[�����O��n)i�1��D�I&EmI���XW�>���.P�g�r��0�}>�Y�|��'��1R��6Z�&�����@��0���
� �H2��h�/�.�PB<v��w��pdY�Y�����S��&+�
R[[�Nz�PNx��v?�����q��oa%����q��{�O�6pY�����K�s�B�Rq�W���wo�2�f����������G
������������+\���/�h�r>��eL��� ����6X�n�9
����Qp/������)���t�
4��<"X�b!V00~����_[��mu�&�"{n���v��w�W���'����g����7�����e��r5���x��V
��s�]�:n��m�r� �9V������-��������Q�3Gb�)������	�}�5���g���7��"Y<�SZ�j@��_�����I^&��+�5|�wb&���a�2�gu*E7�E�#��X2���.��K�:���H�Taq
R,�� M���7���� 6�U���� ��?������(v���k��]�~3����s�?E�R��}�	��zV�pq9��tvu�#i�6'<�=�X��s�	��k������%pG1`�7�����Qf� t���
�OX%sC��ZM���Z �Z��lZ�1#��lN(:��E?���L���l���{��X���������K~�B����P>�����uj�r�!�����;
J8�J��zZ37g��J7���������}x�vs���O5��z�B$:�}���x�4���@}6!��l�����������|�LD���oD?
h)��y[�f�k7�Nju�Z�mTSDQ�l����DR��������L����7n����O�����b�G�G����o?��)��))!�
.���8{��J
%�������
����t�'�3]��L�0�H�Q8��<I�����!:NAR��?`?�����1h�w��p���5���
��|�S�(m�^�5������b{�G
l7v�$�S~�����l�5�����X�B���
*���U�1��}�q����h
���Q������V��7����7����Q�U���q-������J��@����Q�������
��V�u��(_D
���]�
vS��E�6�iB4txz����;��k�wv��R�K.�Y��5��d��E�`��k3M"#��������^3��H��l�x�k�-�R�T-�"
�U�L���/����R^[}#���S�3�����E���&�k���r|�A!J�������L��T#��xh�&rJs�6N�U������}$�o��^�	b	�"��hZ���j����Y5����x1�-�t���b�@�U�����������9vh�iY$v�����9%��
n{L���,��a\mm�:F��Z��z��$�n9��Z����4�'�����=�S��o���0��/ps/�_@���f��6��z�V��TEt�"�:�����/1�7��R���1�X|��Vh�����������0S��P�i�Ex2I�N�
��a��"����?\\�TG=b�'����O&WuCEv��
`t�'?�5]�/*C��qSxRv��^����a�7�����(�Z�����	�J9?�py~��<���GW��O���-�-���[@ :�"����
;��t������{��"I����}���n����G�6�����\W�-���/�Q,��{�"A)K."2�'�K�+�����gc)]$\dd��>�qS�z���H�u�">�#�9 ���y��z�l����2�����/��W��m����Y�iO�~�a�n�*QG��h�5l�R����E)���H�����WJ��S�����e����f�Y�^���6H�]�t{xu�]���g�����>�$��hB	�nEQ �����F�d/�j�f�����F�������u�[]���9((Ae<�s�v����L�8����CQ~M[+"��~�		Q���l���y��pq����DM�[z*�GV�S�	i�~UG��y�(������7�)z��������������|p��
c9vo�i�7N[�V%d��"���#��D�U}��i�^��8#k�"��_^�!w���{8�������|�*��O~W�N�^�Ys����������"���R��98���c���W�oQ����[xy<�
?j{������������]L��F��u�^Nn^���)K�:��np9�l�,�/�=��n��j�tz-��Mr��t����ZE�����=m��a�k�k��.��HB�1���S���{!��;!$_���*��z����	����������<����h�7��N��f3�+���l���0�YL�u��X����Q1�M�n���;�MFle���5S_L��\R��Y�a��<i
�X!�2}���:�Uh�K�R�W/��d���+��p�E��A�l�^���i#�9m�[���UH���tda*)�w#[*y��(�eL��
��a�����tRo��Kjer�~A�����s�������DK*.e�RF��Wy�����L���.�q�,�<j�-��<g����n�i�
J��A8!B{��dt|3t��8��Fd+0!kX�"b�7�:0�LP��G���������q��M|�p� qj N�K���RO�GYBP�h�/�l�����i�3��_*�������aU��$�e}��7���	�\�����{���n���	��~�b{=9�H��/�E%����T���aT�,�����j.��d�R�%S<����V����
��w���T��*5����a�b�]�9���F Y��QK#lK*a������G�q����Z8������2�0���I�=t������NZ���k�8����u��6�"k��Mx�����j�
���,` �+�b�9���[/����[Y&�aR�|��L0��x��5����!kM��t�]^����Q����vI���]A�����h�V�{]��c�RXX	L�G����EW��W��������0�)��={���{�b��=w	���Qc.�k�B�
�����%�Rp��r��\���Dh�o}��k��Sdr��^��o��M��X��k����H�W����j�ER��L,T��E�X��h�(y��C�*�)�X�7��T�D�E��<�-mn��	N
U~�V'�3��
@EK�0���j7�5�vA��*�RK����)
�}�Q��P����s���59��<�
8) �Y�j����g�9�����9�BD�B/����������=p�t�\e�D4��m�����8ZE���9z_��y����+CV�2D�6����O>�?���?2@�#8�Q@o��0E���H��I�RU�kJ��;��p�Q��	�8�<)��S
%��������g�un��"��Z�gscNE���Z:���k5����7�/�i���V��.�+Ey��P�_���dU�&iU�n0�5Q��/��O���v����(���F����s�Y�b��Q%�(Y�hTI��(.�������VS^�����Q#��7#i�w�)���S-��i�`H���9��������E7���Y	!����? ?��\;^h[��h~@UO���P��
�V��`����6�0��1r�Z���Z�m�7���I��C���2I?u��j�j�������S��
�/G{��
!�vM�������#bX����`��2Ws�voH�3}�
�t�
�
0���n!v���J*�V�L3/{l������c�����RfeT�nV������	�*��i�,�9�Bb}��$�jgB�|�����!_W����6r��_�=� �Ivb�{��u����G��<�;�xz%��Hd����.]��p6�%�����C6��z>4�>6��d7M��2GA�p=	�.��s�����������E���:C�m�����h|�#6ad5�-^x�/��jY*%X=I�t��\wE���`���x.������7���<?(s����u�������;2�����3�F)�����v�BBP^*�gO�}��d�o�ko�
��dYj�0�ny��[�U�� ���������H�B����#�j���{��'��58��@�i2��2_0�!D_�/�/���.�����~+�����PU_�T�j{=
��X�����f�K���W����n6����+sz��lD��4!H�,�<�������P���"/�>�����}�8{H�
l�a�4�$��}C��w���1���m�.����/�P����Ze���
�=�����)� 6�~v�g!�5\	-�g3�3��r��}�a��A����N�8�D���'����9����T�G�������*��H)�h����Y��i�[��&����L��A�&�����w�'��zj������X�F����A���B3c�j�, ]U���T��x�����M]��%nS�&�M����JwTZ��X���6������jKy����6H�"9�m��&\}�a���e9����T(b:u�|�
'���l�]�C��J&�u�d�'�W �:t���a�g����j�����bxf�7���X���vz�Um�"��pE��M���K���W�4wG4uc`���������x�n'�i���"�������A�j+f�"�&iU���hL+F��(�+N���#&(����������9&�<Q�w���h����3����f����/���j��wy�d;37������e��=��YY���K:N'���&�+Y���<����j@B���	�ywr:6vgI��B5������Q3d����q4 Q^����r�����-�s_:�A���I*���*lJ��X� L���
���"�[K�[Q��mU�T��q�4[��`���������������|��3v'@'�r<+�rB:yR(�
��q<��7�QG���QKF)�|U��K�d
z�>��I���"�a�t|c�K�U�,^
����m��@7�4��z�5'�b$��'i���j���D�*�����
tW�`�u�����>G�k�'�"�x$vk�Y��Lc_O��-�����4m������������|������I�&g_>��~X%�
[vdh
���O6��v�a�Q���(}��k.>�
�{G�~�����&��}��K�����B��
��_d���/�	����T8q�Sy*?%
���H�\?�J��"�m.#�wm�y��g$�.N#��3u�Fc�g��VWH��B�
F�rHV����2�E�-��H�����������[�\��A*��C��'��[��&6�B3�
�60�8�K�-�j���LU��ta���k�i-(u��Nz ���}���/G7��'IS��K�b,�`)��AT�R���v�uJ���UP���%�o��p������3�r��o���>��5}(���P.|r�;	�G�c%R
����T������z]��h������D�RC)�
���,)��0�O�+8b��T�.I����HWH�%u'��]l�\�v&��C���I���@TQ�M��A*�66
�; �>���aN� ��n\E�!�x�	J���pi��x=q���gqX�l$��(�P+�d��p�T�9=��x%�X��EyP����38���F�5i����bE�N�J�fP�Ov=�GU(hdJ����`�f;�?�$����c�����'��G�:��S�:g��36�Y����>���u��1�9N�
�a��.o��XD��Jo�9`m��XS�~:69��l|����M3�8�?� �
[<s��Jm;k�h
��08C��Vl��^������&��:��nI�m�{Ij���m������PH�����9k4�:�
���F5E��Hl�od��BVQJh_�!5/?�a:�������S�� V��@}WX�Y]���
����w��s�W�l�K�.T�l��w�F������c�l�k O46����)��t#@�h�ELP�����8+�D\"c��K�Q@7`"��,�F�
Q�����kH����%�b��%3�b�1h�%�
4iHH��a5��sw�6"F�st�7G	Z�8-�}����t��l'����N��/���������b�ep�����$��
�� r���+�X��������V�H�w��i)L�����O�*Zk�����+T�E�?�:�O��b�o��B�����vx��<�i
m���+;=<���������xK�c���u��������@J�[��W�Uc���bl����p�������������b����{�{7��#z�"���u����CJ�s(B����Xb��������g�
U��a}W����f�F�uf�������5hl����T8$�-
��(�j�������I��jE]��x�R��:a�����)J.��������
����8��������w�����Q*���B8��\�`!����b#w�|����YT;&����*�� �K������cL���~�����l\O.t$��D����c[�s-R�c>1���)���c��G�����#I5�)L�x�*d8��������_r���|��)d�)�Vd�����.B;f���kc��wX�#���1m���+��U��s1t=�4/M+p�m5i�76��X!�-��bQ��r������#I��c����������M������������bC]Ke2�HRCmd��w+z����&OQ����j����Z%��Z�����P{0L�(�b"s�F��������,U_�[;V�$yMY]��w���<,�9y���-��L
���_�l�(�Yt��3�������7x��/�k>@e_J�Z�{�#o�T_T.&�=�N��������Y�c�es���+�������<}?��+�j�@K����*I���Fl��3sR�8b9$A�1 N������0�F0:�ql�sLj1L�MR����H��$����gz�~��UDF�����s�B�X��:}I���9Y�pm��������n��O�qqrF�k��I)�vA�3��?\;
���0f�i�]�z�-�G�&n-{�^��43�2�vL3�:����xvt9>��B���d�@'�+c�l��0P���	���1�JM�Y������K�V#X�����-K����F�0��HS[���"�����+��l�g<C!�r@���W�
4�t�����p�z���Ll�&O����?��E�������kon�F��>�[�%�1������5�zl��dvo2��H��Z"R���������(��$��M�2���Fh4�
��A�������C��)������L��	�����
&@'W�?jK0�g�[l>q�~����Z�%B�W�(��`�S}Q���b�e�m�hjm����x��Q�D���%lF�:L��,ID��
�3U$�U��U,a,�*9��#����?��w
gTP0�:M��X
�.9��#HgA�B&���V��2x:���Y���]w3Q*��~��l�����4[��+�gwuE�m�.2��Zi5�6(T!N����_4��+���Px���<�����R�0��Y:�����V��<
�9_�q4N��rK����d�	g3����r3�������d���W�j�<^-����E�����~��eH�Z���rc�'���W�T	"<mu��Y�w���jZ�0K�|��r x&�wdl��=�!���`rs�O�P�DGt��Ek��I��Y�����	&������<�O7��$���L���������h��
$-U��|��8W��r�k�9l<����c�����w����>�m?n]�l�8����7�x��&��������_�D.�L�6�o�N�?'L�GB<��1(���8G�$�1���3����]_r1�J����~0�k��<�����E�S�I.��eM�z��k�Yg�#G'�<��IF����iKM�+�O+�F�]�b��,���o�KB�;]<p�D�s����j~hc�hb���i�����u�����5�{Ca'1�o��p���Vx�@|L0��BUJ[��!����z^E�:L����qx��O
X�J���we��0�������V�F�D�M�F�)�3�
��4���u$	���x�k~��tsG���GP��0��������������+��Zc?�7c4�k�!�H�=i����x�Ref%8"dV�P�����e41.F���_e���sg�d��!�����T�����-� F�m����"���6v���UG:��t�Ot�L7<������3^&�%�����o�I�c���Kv"6�0���R��q�
��^�MN�x��T��B��`.���-�|2$�\<h;azY��^�w�MI�K��O�g@������D������f�����+���-����;� �����O	a���sH�#�b�B�g��-�j������CT~N��-����t�^�;�~����|�����@����W|�'R��:7(<_n�7Ni�X�Ic��|.b��r"��|7��Yu����Cp�����Y����{{���F �pYU�	3����+���A<��w����pc��p�9x�:�Z^�Bq����L�m���k�g}��0��������$o�gur�'�������^���/7�yWP���w�A��@&�u8T���rPQq1HM��)��l��5��KX=���xY�s���#������Id��H|��O��h�1�C��EH`r��K}��� �L�D"#���Ay_���K*`�w�x��{��J|L�.j��!yFv��)%R�e4)MoVu��G���������F�h������h|As��b����X�j�����Y;�������Y�����Z�c���0��"0�r@<"<�	�e,�*�_v�?p������1q@����89��rL���M������"ARA�P�d�U�������o4�d&�^����on:A/�M�%���i����91��/3���o����=����~S���;)�_{�����O��G�c/�cc���	F7�6��h��|��������3��J�2����2Cd���h2� ���h�	�qz|��}Z�L��=x���s��m��4y���{o�[�;��6mv�v�|����O'�U#�
z
���s�^*A)	Cpg+F�j�*N�[��v��0Z�+-�K����D<|�F�GU��*NiTp�)(K���6�0�p��?����%r{�Map�	���p�Y�� ��9�U�`,��'�h+i�S@m��=�Ai�H�������7
����g�!��t��[�I��B�H����o��=�����KqG��O��U0y�V�d}����_�K����\�������x
���� Hq�!�X���R����_�'����	������]��^e��r�EhM�4Pu\�|3����E&V����iu-�"�!b��*������G,�:��;0l�?H���~��W�a
1f��T�D��"��%�1=E lg[�w��4[�S]���L@��Y��"��%.
�\+�x��.���a���7kw�r7����������!/6!2:8��!�{�3N�g��G����X�,R���=���o�����	���������Ng�6�Ld�7�S�f
������p��mV�j�C�[&�Sc���'�x����� `�c����,�	�����k���@L{M�`�[�]�*L��P�.��kc2z?4�N������x8�
a�C�(�
�#���w/����a#�%�h2\gb�jFb%��LH��������$=r�+H��Np��|�^[�������>i����z�\[����YPZ���������&��?�&��3�|^��9�4c|�v8�+!!�:��:������Wp���X�������O�(�-��*�T�7hx(�"��G����X|d\.P���������S��?�z�_��3'���d�No�YO��5��23_:/����D���i�d!LQKH����&3�?/&�����`�{��q�_���-#����E����9��_Uv~5������K��B������j�����3cP��2,_:�/T����>�.xF�������K��C6�&Uv������#'�R=��,��.Ggl\�=�,�����Zg��P���]�QD�vr�DS]X�s�����������Z�KX�Y���D����������6�:��E�3mf |}B�W���f�
:\@��\� �
3��<�5�R��T��q�:���Iv�[l�@�S8y+�ul.p����0����Jp,��4��u�'�W<��	$49�g�r��H�))��U���*;����7��gr/_L4Y
���I�$E����i�s���7:���x��
�RI��@#���K.=
����.��XH��B����	�.���~	���W���z����������������U�%c5�����C_a	u<� 2%������rRud��Df6�!_���8+����v��O�
��������,����3+���.G�|�F'tWQ6#�C
=����&1�&6�0IL��Z�Y�Y�w�N���ma�TY�Ri��V[�Z�����mT��C����`c���c�b��L��u�%p�|u��Y�������TL)�
B�	�BH���F�^��ug��6Y��
2%����n?������`)�T���#u�+X^�y���
|����Y����LY/jw�J�r��k�S(j��K.8)�C�o&JF"���}�{��;Z������St ]��x�}���1|v��V�I@��V�C��iKG?A�E>r�,�� �=���s#1����l��v�����,�.�d�t\z�����+��Kv�A�@\Q�Y?�}D�e��x��V�O%��
���
�
A�r�r���A����`��(�u�dC=����v�>k�.�e�,_?�����D����S4P����\o�0�K����� �s�������B.��
��7,�n-g�s�����W0G.i��G0FfOi�ci~1�<:"�z:LH��
������������T��M�����)��9�_�=��D�:	��*���p��W��EBNQm�w�W������������'���kj��Z����&r�@-k���'x��a&�b+������U���w�����[
�:zw���N�T����$a����R���d��`���es5/�".������2	�B��=�k+I	u��JK�P��t�4���mq����KW�Q����Zj�k��1#pOM	�����U
a����'��c��F�!L����>�mp�������Lkk�MY�c�uo�|��4m�KT���s�N"��}���Z�1����[�������P�t0��:-����P(�sV��L1v�R���6�N��:Yf5QjBHD���};���7���m*L/����Fot�3��9�6X�t~5���t�U7��W� ?��(��u��;���������y�J���a'z����?�!6����_�������8�)�H�m��|�=7+SJ�5�,����k�$,�f:z�A�9)��#��T���_4N������o�B<	� t"s�x�x�b5�ZHC,.s|[��_���s%�����GU��$����_�g�m1T-���ujz��>������w���e����"�n������!��������FY.�_�G�!��faa�����q���t�dC�I���UH�F�qn�seZC4��=�����s�Ci�S�H�2�z�l=p�x�����]�J|���(z�6C�K��o
�_����
�\^�;nx\��X�k�N����b�
o<���O)�b{����+���IN��
����Z	�A5�����e�����j��G6�o������W��|6)��	�5����wU_�@����9�
�AC���H�r��G����okS+�x�  �+������%E�4��fW����>����c���
YJ���R�x��"k�bx�{A
]�A�]�,�����	���S;�	���b����c(|y�>P��0�"-^�O6�!�j'���I��{�,D�9�@����C<@�	�6E�ufV�^ovZS�T8�)�&�H$�d�/n7�C����x1����<5��di]�`Q�o��6�{*��%N`d��Q�R��|JZ�\�W��T�jFPI�
r���*��{��u� uZ����z�|�C:��dyA����sD�)��S���~7Rx�*r0Ir������}�����A"������������_�*hXeE�^z7�mfK����O�IL�&�l���/�B�l�F���n|�bpL����f��5;,�F���_����-Kl��]^�zO���z�e5���ey�����V��"u�B�i|���P���r�C����
"����DH-n���`e�
�� ��C������T�;���Ab��"P,H���Cj�� ���-6-�����xm�-��:ty���t�����-:G��p�D��q�Y�FF�O$h�����2B���q��k�HX���*�=�B�Q ^�y��!~	l'q+D11�rJ^0���z�%�����S3=�>�����~-s�o���a�\���d�������8�+_d(�?wf|�Z�e�Y����yr��pm�B���H\f������M��D�
�8c�\���V�oq�`�6������,����tu=������Ibx_Z�������m�W��XD����mA�	��������]"��i�sB��S/(�V����1m�����}��hN!7V����2��w�@�� "�8���Cx�Ru���s]���������]�n�Y;���V��I��	|�^Fr0#�um�z?�`���M
54D��J
=������.35
:��3&�0~���M��lJ�d�<0���<�P�Z�2nL���-���x�m���g�� ��%h�`��3G���eL��X���%l�����~���NOh�z-%���)�\k���K�Zi���9U����VY�x���>TI�b}�0��M�I&1�$vz������p��-��lq�%�A w��.�)]�s���%4��m���-M�f�	�Y��x��@��|e8�7��"�%a7��"�T)H
�`:�n<��Y�ll��%�
/_���5w�D7�e���Y���Ty#a�Zv�Q�������{��j��9���O�D}q\%�2��U�����2k����������T��]�KZ7�L������@v#a�^������`4�
M�U�,���Y}���?��l����u�
jU;�
��K�m�q<'�]3��E~|��M04���5�H����@8���M*���@��#�������9D�����2�+<P,/���%�Lttxe.�������������Y�^ov�v[W\IO�� �C���8�#�������B�lX=x+�v{��4�;��t�|9�a��\R 2i�[f�kGD1�v ��������
�I=�B3��3���Z��s����&��V
B�����KI�L;��]�*��2���
uS����R����\��=D�h#�?t#o�W�|�h�,E�q=c���v_�
���sZ;"�Az��y�a��\��g�G�Uy�O��;Ty2�-n�u�Y9�9��=���D[�R�4S`�0v����'�]_����B����Y��M$���e(��������{���q$Q�o��@gf'�e+z?:�����������~l��(��9�D5I�q�����	� E'�=��s2��D
@�
�p��[�q��gKv[�4n�	����^�$�����A�
|?�-:m�mX�u��L��A�6�.Is��f�)�u��2����<�Fzr��j!Q&O�����~-�)�k��
�k^!1��hT Cc/
t�=hT�}c_����wK.�P8v�������y���:����e^���L�3)W���M2J���#ng7��v|�����y�Wo�f^a�^Da����_�f&��S5iA
�h6�qQ^-)��p��[��V����^�O�n�k���Nw������"�u�@�\����>����[h�Sxz�����[�I1��w���r��}_�iz����l�� ����cZ��x���(�q|�_�����������Z1�\sQru6��X[c/��|H|T&O���}
�j��3/P9����4)�.]�Bo?���%����v�����5T����+*(��:�**�V��g/��~v3y�d�&0�-1�x��(��WF��;p�,>h���g�4���R��ZZt���8!o��dO������w�J�
#
��O�u��_cJ�;�#����X!���(!�����$l��aK�NY�bqk���UN�����v0v��1�/)nd�������$s��w&F������CW[j��
,��/��V�S��X�:������N�
+Iel$A�����sa�������/}�L���P���P��5���lW��%l����d6���!#���_,w���^D)?`8d���-F�9�ivhH��xQ8�����J��3��7���t�SgZ�/�]���>���Zd����a�}�)M��'R��:��F�c���A������@���x�t+j��dTc�����#���n2/���������y����$�~��zc�9�����7�����lR��>�Z_#���������.�����e�J�����L����AQ;���3lf���������"
#[bM�Ohk��
�t���l�6�_�d��"����k�Q��8��+J�%^������mJ��Y���������S����[�S����|�<����|O7Vm����'�HT��IM�*j�@$k�0�->������)�yk8��\*0�im�������~�x����c�3��.`��@fc4!�����
��B�Z�Z���Bs�A��/Wd�GQ+�+/�_���s��m(�n6`�-=�6�+�\��:�"�;�y
�Nx��F�Z�cF��_u�;�t`���1��� ���Tbbi�|��^�D:�b�����@��v�����-U��U�5h��g�a��G�agYiNX�6(�,37>�,�_.��|DWx��P�a�e�~�rr(��Zm����H��!����y��������)�=w>��v.WD�� q����4�����
_�8V�No��8V��9��2.\<<���a����0jY�I�N����~|'uB������}������.��_|���9�d��L:�����������%��[^��ep���$�6C���P`=8���OmJ�q�����v�,�(=b��Hn���h�xz�����N��;v#�lw�������T����crt�cJR�'�KL~���4Xi�2K�����MF��pT��_�$UX�B����S�#} ^���h"���U�Z|u�j�H�"�0�/(�%�$�0�n��N���^~���}��_��ku��szK�������qg//$
�!�Y��v��]���y�RDy��\�`+�w�E�7J�J��D�m��*w>����.U��w����6����e�������s�>|rss���n������������_���y��`H6(���z��
�i����4mf�C�R���Q��+),�Tp�D�p��!�S�UQ��h��T1�_���e.�vC��R���1���Z@K#
�l��B�qx4�H��h�1�vR;=��;����T����d��9m�
D��#�+��� x? �;z/�.@d�N� i}�Bf!�d3���Uo�$#{���������(Q��n�A�\6P�v�9��r�^��P��g��l�FH/�"���5����[�:���O��E$-y���rg��x}����S{��0r�zZ����a�����G���""5!�����C������������P����������l���sM�K�_�>����UP��4��k�LW$�sOE:���bzzri��r	W��h�w*�r����u��|>������[�|�#*���t)���v�n�6x6�O��i��h%��w �/q���Y��K��g>��w�!��"��#�=�	�he��wAX$���w ������sh�q��Mh�_��)�<�Y9������;��8&��'
�m�T��������FQXf*����lk8�.A���a��_���2S�:��Nu<��:N����Mm2���q#�������f5<�\m#���$�P�M])3�~6�����!�"�hDlN��B���m������������v��{�����:U��2�Z�����
�(z�����N��4K&���������n����J�6
q6�j��G�~x	S��G���:�+%���f���J$��G�4���*U�����M����20����1�8O��j��n����?�ZE�������l9m�3��_�b�`BG!r����'�Y����������T���;[���{#���X#��F�	N0h��N]�`g�v�OM��K2�z)3|/a��,\B6G�m�^F�3�����L5��!�y�G�)~,XO8sa��S=��Dh�2�nU��>SD7(�B��bh�a7��?��*���(���)N.����)�����)E���O��4�&��x� ��=�q�A=���U��zx�8����^r����6e�Z���J�	���"~�5���H$|,I7Ph���<��@�\v2�]�����!�����Si�j�gP��'��
W��M���V�*��������8x�D�$N$�kW����_���_�=�������7����8Rm�z�����V��-^��@�z�3���f�u:��p��lM�J�����2b��h���������y���zk��g�5"�l����l�q���h��A�m�M�48p���H	b@c����	���j�
t��yY���#��h��]�i>����f�vG{F�.���f�oP�����������S4�xw>�n&��f������#����*��`&��]�0;��]x'u&��N��/~�q�]bT�7����1V�l�u��.�{w�S2Oy�;c>CM)��F��x$�`�!�������NYu:ru��N���iR�!���O0,� go�{]M����� a���dX?����L�*1�H����z��M���w:��[�r,��R9t[��`�l:-���������x��P�����C_�n&o^�m�x~qa�_��j���VO�S�G��C-Q�
��9��=N�;:S3[Gh���EU\��@.���w'o&dq�i�tvryvrsF\#U9����Y����?�z(S���1���\w#����'8��n���dgR%���7������"A��-�0c�4��##�����juL-���7LU�\R�6J{]�����
�����jD��7J;^���tM�����
��g�G����ALH��Mc��7TR?.�t���B���UZ�*s4�s_�U�<�?X��p<��G����4Gc�s4��9��9��9�=c�o����jx-���c�m�Ep�E.K2�d��a�F����
N_�b���0i~J>�c/�.��@^ ��(�5�o�f/��S�Cl�&�K��yk������pvq����l������Fa�����P�b���������x���n��l�#g�������P���Q!C#<i��q�xKE�|�\�r�)���{�[�����W�_��b��m���`�v���r���gw��}f.|N����d:��Z��eP�R����"�"%B�F3��;�rx�=rv�H���
�9���o�<�o�`�F�������P�	��4�����"9[�
�Q�b6�cG�F�:"�O7��������3�p�����Yb*	���X|��XJn���o;������H����������f�7�-T`|qg�cg�
t���U�����&�6J|�AO��T���`�%����H��Y��,��p,\���DI�n���y��\������O/�_��*�����[����;���t�/�JcM���������)k��$����C�,8T���;���@���c�GdtB;���>����%�2w�"]�����X�5w�x�h��%����bg 8��9��(B��I����\GO���n��L�@i'��7j��'Q/��r9��$�C�8��"��yx����7Q|���i��l[E
i��Q��FA�)�$LS�8[�Yg��f��t���{hv@�f�O��<���{v��l���e�&�|�C��M�X�l�g�(}����t<��4vJs�d�
tR	nu�<��G)m������L:����K���$�+��)���(�2���� ��2�����4et�����{7<���v���P�i��S����o���Qc�j����[V�7(d�<}Z��@Y[�]�;�:w��r|��:�N�}�rce�Ft�^��m�'-B	wM�[�^b�*��+:%d
�h�'�+|����(j�=�?�~����������7�v�������dM�����qD�����������������H!%���}c�.�(`S���g#W7M;���fX��B��@o�]�)�0y��C12|��q
��d����������4��4
jH�z�n�R>��H��c�������������k���jx�r?�no-gn>�c�w!�@+����h�l.[�y��ge#�b�6����2'��� �_\�����:�A����p:���Y7������%=��|������:?�*K\Q1�:��Vc��6L�dB��T\�/��P��(t����T��T�7\�)�LI��~�^t����[.��F
Q9_�@���x�o����3h�c�e`6�x�!�8$�d��RV+;�������Nn.&�,��gN$K�]9!;l����kgVh�����9�X�W3�3�#>�����A8�l_�D��(�	��F��`���F6�S���j�T���+k2���7�!
I2���7��r�8������p�d���T����Zn�N�=�+M5M�D�9�'���}x�m
�_bf�N�����(6�=�	��j*;''
1�4�kj�J+^0!��H�E�YU��V�C�9d�����C��[oi������>���DR;����*�����%����a,zq9��p�mP�����t(�{-��7j6����[��O)�� 9-G��q_y���{������;�x�I��:z!a*�ikN������������O�����b���fg�,��A��O#*�4(G��A|�
�
�N�[����T9�U��;�c7Jr�o���8W������4���<���A�����h�
��{=�$q�?DW+���K�}�0��y��i�����Q�6_<	W���0�;#h�}�d�m@��H����%9m����8�;���b�)e���f�r_^ k���������B�UCQgns�Z��/�*��I�Zc��3���
���
�X�YR�C����1���6��(*��\��
�&���
&�J7����f����I�8���!�4��KK�4�;�@#���v�XH �[J^|����5aaQ�D���
#l1�A;>)%iU������m_�c���l5��(���^��E���l��Ak^�4��P>+F&@d�#@�;�>��WWW������~�\�8��z�s�>j��z�v���zwrzs�8�>N�����	����gG*���/p<�$����-�nQ�HdX�?����E��m�<)����qR~��6��J��Ar����30 ��3p	�)����:��Ti���+����j��K�����
Q,����"�r�!���5h��(�����i��:�g��`�
*�M�O-����S���,��g�1�|�a5t�x��<f;�7�O�k�YIp���\�$��2��� !����+=�����L�3��Qs8�;�Q�U���t
1��t��
5w���8�Z����&3���3*�:�S�Q|.�l����V1����*�b����3"�,H(��l�u>l���;l6-�]�Z���G�C��6�x;��*��n<���O^�E
%�PG��(<T	v=��>�P��?�
�yR;r��:I5���0:��UTeg�2���6���h�r�	9YT��|�Wh��������Q�;�~��T,�qF8�a��Q��m��������)�*5w�,���/8FT
�����hbMT�k�
EEA�OSI��T���6���vc�F�A�l���x�kU���7�����������xD�v:���Rz�Aj�z����O|��WL���G=i���w���@���k�+$L�>u�*���n^mCM��	��;wp?����V��iL�5
+M`�6�#3U5��A�L��'+@jJ�/v�%����>Y���gy��w�M��vtv,;C���g����������Kx�<��B���tq��]RHwI����>d���tO��@�&\H�;A��%�v�bd�<
/t@8qW�
0H��O(����
������|��v�M���~F2]�������3�������S���R��� 6��EQsM���m5��`F�����@�
�mV����v�%�k���Q5L"���n��+.�������J4�R/���-����-C���@y�}�~�A��i
+�(�O��_@G0Cf�;s���c�Y���9�/�2���0pf���1���G��u���#'7��d&�����8�11�?�1��RW��;7x���3@)Ez"��|�'�.��������E�)��cR��7�����@`��X��Ek@�1���QH00���55�����=
N�/lo�JcM����d|��:�H.��1��p�T�L���<D���.1T���F�v��T~1@����N"��@2 ��R��������n���4�u\���pP�i������X��rQ�!K���	��I����GZ8>�:X� ��@)����7F����t�0��R���-����=%�,�!�>����n6[K�?��+pP���biW�Y�@g��z�����������S���5�����z��E��-	�$`�SQ���\��?���O��r.s�r��L�5��=;�XcI[2bL��ix����G��e�c)�*F��!������(����&Q:��N��3�������|��UV������k{�e�+�Z���gu��
*��l��(A]��r�=���LZwr.���lj ��g[����G��������h|+���@|��w�a4�F��/\����p���v�,�f�����h?����W9
:l����O��#^[)��-��@����Z�V�;?�8�nz������*.�Ua��dP�6���6��?�W|h^�����E|��YK{���5��������j�*nT��4��$�&tG"f�.���"�d�4N��`����3|�:���@�DerL�Q�@&�qxe���\C26�����x��	��`m��h�� ��m�e���:6��Fm{�L2�*�YFh�itE�1�|@U#��*������)G��	b��1d��Nj��#�?����t�I�r�k(R�$�����K
���z��	�CK��
�6@XqF������h�s��������������z�s��	)�39��E�>v_�MH��(r�=_+Z%�.�;�[�%����/�e�A����%��&y4AQt�6&����Q"}:cxJ��:�e��|�����6E� h�0�|���yI� �mp���)�:�^��o�����4�+i���lR��=�����{��1�`.����B��-F�V��l�n�pZU�X�Q��������U0��l��	���W�q��j�#J�G��942:y��\�����`Z,��!���J���
8�$ |���W�T��@f�X�xw������K`�����1����1������?g��/&�������3�WHr�������_�w����tC�F���xG�`N�v�r4��
c�|6�,Ko��\aZ�A�=�0
GB�L��ro���`�0�P�G��dd�jSE=��N�_�=o��;��Af�srH�Lv����x0��R�8q�XSE4{��Db���Y^R���R�<�������^���RO]}��[��h �.����m8c��yo�����HJV��#=�=������~��"�@y��j5N����D=���� R6������H�nt�/�r�V�����s�BwTB$���X����.�R�A���Zo����
��'��V�Y<�t�TUz�N���2�j�K'�/Q>�CR�@�*�O�h0��7����*#p�z'8�p�[�K��H�l�}U$t
d���\������R]���h�X��p��;���6t0��0���v�?,��3���x��4��J�]I�Qd�4�����f=�n&n=�f���zNw�����d:l�9y���.���t������R%<��!E���2���w���#A`���4����Z�D�8$R���;������=���q��Ks�3�K��\�=g4p+p_��9o<8j�D�?�]�/��)'�Pa�|W[T
J���lg�T����K��=��U�h5!�#���=�%Y������
`�ow����v�(f^��D�p�/E���$��>"�t��wl��(��V����`�X�~a����.d�HF������I\bm
���I�~������{��j�t������&��*�Eb��Shn9��bG���������h�\���D����~��0u��[kocQ�^��A\�n��k��,�0n��3��~B�fmo��<��:j�*I�"�h�%v�$��Bg*�I4����^��;��M`Y����jH�HfY��
d�(�V�;A}�.�o-�nC�����/�����7s�ZD��x1j��P��n/[�*+S��lqJ����X=Q]�g��X%������� ���Y���el������IN���qm_)��g��W�E;�N|�7q�y:>b���!Z�2�M4oF���(T����#��V���2�0���a��q{���Mo���l�0�A4)"���`�=��J�xb��=Z�����b�N������dG!uA�r+i'������u�������e���E���E��_M�E�z.��r>���f����CK��(w�R���b������.^  �4������p�M����?D�*�� hc	������x��=2�
)c������N�(����.;h�	���p����.��)�l��+�ny�u�[��������W3�����R������dOx��'�����>L��GS�?�^'������gu��X���������P���\�np&���p��H���~�o�����d:�X������)�$����p���EE?�K�<��&�'"j�)g	���t��5+�hJ�B�<�X�� o����U$���dYX�x��Qb3���	������C��?SF�.^��C�K����5�:���{��M��a�W���!0,�Yi60���H?P�v�/����f�7���	\��o%��:h��2�=k{��1�����O�������Ce}��C��������*�r���5�(�s��������x�,�� 7B���*~��%�k��L�F�`�M.�i�L��N�!���(���U�3iCG
r�j������4�nq�_Q�����H�A�)�k��N��Im1���q���s;�m!z�d��
`1�);�g�-I���H�Y�7=O_�2+
�����C\���j��]I�^��aw����/���/�\��3s��A���$-o�kv���e���U}�FC�T���AF@}���������&:����Q���F�ZK�R��'&��g��(E5�����E��<gQ���|5�D���� 2��<

H�6�{/F��_�S�0��Cd��w>���O��\��4 
��A(����T�+0���[te��PSc5�}u��qy�h���:2]1���H�s�&;3H����(�n3�iO-jEcO{�oV^�k�i�$-'��I;������DN���"<���pS?����C!���������_b1�O��b�����SN��f��� �MVx&m�L���=��Q�����?aW����V�Yq��"�%���F��{�)�[�S��Q+\��|xzZCb�v���&l����n��wv��d���&y�b��PC�Lj
]����:Y��%��K��I�'<<��TR�V����T�6���/���x��4;Z��� �G�(��(E,�<�?�(k��!��RE1��f}�HUM�Ud*�_��H�*{��M��
�@|�?o��J�J
���d���4%�E�
�
S�S�u9-h+L��u��&�!y=,�x�ByA�n���k;9���u6�+lT�-��JOP9Z�����
#��

n��4��c�s��:#?��(���(
G��5�W�|y��m�������i~�V=���*��7��Z��8���[�69}���Ax�Z��S��`���Qno(���dT��?�e�JM����|?p�M6�b)��~L�]��"}V/q�[[��@&\|J�p�K��������.r����u3KB,�#�"��^>�>,��3�Q��Y�.9��&I�����4���w��H7���k���cJq���$�+_x����@S���J�?��{��;n�;��t���g�=	��6'�����S�%����m��6�^���2Yb���O5�����S�Gn�Yj�W����G����2Y�z]\@�E����Yx^@�*���o�T�i2*������.t��P<SZ��~��>�)�������dvrvvs~�������o#k�����)o��`�_��M���|^:;�������Ld#�m���}��yU�����ra����_�&	�q��I���U�S������Jc��2ZX}�`���g�r|�_������6����@����<�;n��[}������y����/��l����N��h��[|������;1o�e=|_{�c=�M �r�5p���B���p���^���u|l��m�8���0E��<�9�h9�F�d'<Q%��!BEot5���Za:Nk�a@���-���C`���o���yv���0^���(�S��
���U*_�4�&w$���g�C�);��*��_"�R+��Nf���A�����ch-�{>�����n4��.���O�h��v������9>e��Bi����;{F����R�.�K��=�U�����B��5o���*�T�>���(��C�rz39�M��T�����������
V���b�T�2}�:z
��&�������.���on�~LAi5?HW�T�'�w��Y������f�������O>���#n�{1^\]}���#�:E�H��1VlVBcBN�q1�A�^P
L����ZCy���'�~��l/�x��h��Wo�����.�r���hN/Nn&8�I<�p�����o&�����ol�{@OVN������������I+��
V@�;w5�y��G�(���^|����+�2P�/:�e�H�������s�B�;C4��D�$H�j�����*�3�#��^��R2x&���M8-���O���s�u�N�P�CX���C�D�4'�qQ���F9!����������/�����G�U����7�Tr��v[���IH��[L�y�)-
���_����'v{�"�%�`&����H��7Y�5]�#�i{�{��{�	8�%W�-���` �&��e�
�{��/Gd*MeQy��Z�������k�����wp_����P�9(e�����xF6	��K���,{�~��l����]*����B�@R!�}
�c��_��g��
�u5�����m�V�-�f%1������|�M�7\�J�i(bZ��#�q��~�J��\�X�Oh7�QR{\y���\ �U��BR-�
��x�
���c4��'5R���:�&V�-�2^x����=�����rl����z�)=�#L������wO�z�����Q�y�,��x�,�k�tl0���f�?����o��-�:����kR�\�A��
P)P[!A�i������oa��S,:J�%�D�R��"��GA`���ba`�$JvoK�P��x���M�)�C�7��	 �n����%7�B����S��)�Bz�gp[ ��{���q��"x�Vy_R%��kHj<��s�Z����L�������3���w�����=o/��nw�YtK"�K��7��� ]�������q`�pP���
��������Z�6�[���q�����������������I �t2NJ�^N��A�k��x���\N=<n���GqE��d�J
KvR�+��:�e-����;S�G�8�����M�#�yu�>��yTM���0��������FI�k����w{�xr���� ~
!��&�c
�lMq90�����������3v��*�L�)F<�Z�����VO��9�g��o4�������No�����z=��pb����Ay4;�#q~&37�Y��X��7^�[��q���<�g��������"����$);��w.�k�-�JM�ko���y�_w;������'5����p}"��Rj�������>	A"��o!U��~8���������
U���~���z����6l�pD���Sf�����Z�����%u%�����������y0j����D�}u���Vu<*���U��eB��������uv��|F5�^w�s�S��-�@��uzu���%��k8��2��>4����7o��~e]L^����N�W�2w�j�"���j4���a�X�@���:��c*��e��A�������!�M/l_g�:4�
��@�&�V�����>x�d���*���e���������]�
[��K\���U������R��%�����7�q���F�����q{>e��������`?Z��<��pZ��+x�2������lbM���NfV+���=*��Qfw�x
��F���q}��v_�n��S��.V�}r��W�������=��V�+��
*l�a�ZIOm<K*32I��T\��lR�@��
����(�P�^Vi���'T��Y��m2{{~u}~J+��6�It��[X��e�K|�����V��d�JK�
K�����d����J�K
K��]XrX�nk��rn���OY�{��U����������'�� �Ve�f����SC�=<a��2H7I����#�^O�(Lf~nd�M�������z6H�8�OR"�v����h=���b��r7��1'���(�oHs��qU������3��"
#|���Jt����&��M�t�r{
�*6z=�D��<����t{F��[N��{'��v��{u�v��]��c����0t�E�0�ME;
��������{{5��������
PS��z�q�q��|�5�#3r�)=l����N��4=��������ff+��(B�*�W^�L�����8�J���������&������$���R���8[���;{U�����n�����0���?	&0��7�d���N�BZ�jq����}]E���,v�����q13-�#7���2
|.�����^��b�����Y�G���Bc5���(�����|�$=��i!W_���f��pr{+s�J���D����-<�P��{v���e��Ha����5F�w��u7B"�����3��W)��k�m��(V�j���G���P���ln��&/3�*��v,QkQ�pq�j����u��P�H$-NJ�Dt��"��UA���h��V�>i��B�J5
T�F�L�([jy��%Q���U�F�Y'l�I�0v@��Z���s��1�L!W��7�m)r7d2Z�;&��t��,�fs0������=j(��G
�L�:��?L���%��Fw����u�p"r�����{�e�F�.=�><����^�������Y6�_���r��V#��y/|�ILpy�����i��=-��m�����N�0�i�qg��S�8��R��T�M7��w���"��E�@c�����V�5�����-�OYBzE[�{�����"�S�	��/���`�����9~�|G�)�9y�Q��B��J���0��Q��Fy;IB1�T���KA!��y�����F3���x�[�q��o�d��h���s��G��<ZF;�
e�����+��PH�@�l��� ��:�u������,
��d�4
����z��15{'��%8�a�Bl�����#G��\m�-��oh�Q"\RFzt����2Q�	.�D�������G��kx1P:�T���v�����q����m��6t���?�"���d_oQ��]���d��>���>�������3�O)f-!���O�'����C��x2�TD{���N>&Fi�C�FyY��s�Q�$���J�vpI$���r�����e��,|��u��(y-%��;�/��fs�X��e�W9E���7�F�;"}���ZO��g�,nw
�i�8��b�Z�z��b�eS��FX\��0T{$/���T�S��Dc�����	�n����g���r6�if����~~�Fk4��-������9��hE�����3,�����\8������C��0��jS6�#Q����q@���6��ZOd������s���������TU�v�����������d�
~�q������Q�N��5d�_�"�<�����C�.��Zq��2��\������b_�3�K;�7������I�n�^bTiQ)P�@l\�A%�x�"����B�HT�F�^�A�F�����G����M	���f�q������V���I|��� _����h���Bo�Y�y�M�B{Rf���b�,������Wg���/O�{BO$�N���ly������f��_tC����o���v�&��P�����C��Ii��_�t��������e����T�y��K����j�ww���+)s�+�w$3](-�-���
�2Q1$;IW�LFD��)��A{�/����^'W�I�X������_"�Bz�o�<�.D�R��k��E�B��=h��F1.^4�1%"��a��4!qV���]F�^����(�/���F�23:����W^���hqH�yg�H�N��6���zDi�����"8n<���%�eGEZ�CRmex.���q�_��
��9��l�N��,�\���|��0�	��aN�(�Ok4����iT���
����������lHi��.������D�C�%�w����)h�49��+-�K�7�Yo�E��f�Yk�H)C��Bw����+<U������+�!Z�
�
#��g"���I�R���sWp,���'�����6�������L�[w�-=�N^Ok���Z2���1>�3
 �>�8�0��T�T�pXz��K�
����6������o�t�,����F�E�P�i��:��	7����KT�`|c�����W�c+(�3���b�{[�e��t�:�J�G�/-�z��y��!��#9��|C��a.y�����l$dO�/S��Wd�B����<7/u+L�e��v2�������S�.�/����K��<�
;W�����!����(�^�R�J�v0]&p�_Tk��N�D��K�%!I*�Y��IYsh�0��zG	�]�p�8��cAH��`H�&��9J'X���z��3�*��1E����3"���nJe<U�B��tb���3�5�Gj��*��r��b���FA�q*�!y�����.�e����>N;���,T$K}A�)&�K/f�����S��`N���n��*�x@W��j@5c�4��0s������1�����}���\l#N���a]ykR��
��������[I�ZE�ku���n6[���^��v
A�F���^nH�~�x>�A�c�i����������]�o�}$3n��.4m��
��������m�]��!�� [�Hk��ZE�,{�hI������.Ql�#.�����m�
O_�&�t�w!]�~Sk��(c�A�O[��?0o�4����I�D��r����O8������4QB$�����R���4������i(�����!��Q���!�<�N+j���-��A��,�	�=����l����W+�b	Z���P[1��~���l?k�:��������9Y����fJ����5���u\$�����{�1)�2f��Ak;t!+�5�=S�V��h��m�P��`�x���(�Bf_���XFm����/��`�9�2Bf�
g6�g���^]Ng7'��3k���������u�����y�����_�.	��nW����j�#��>�����[-W�V1*�oV��x69�N>B�QN�,'�>���<�W9��	K�N�WAz;��rc7���3^T;��l����G���#����.n)�	99(����#�af�������H�s���"������z���T�B�>?-!�)����y������FE��6��J7��.�����n;�
���d��b�#���RJPQ)'��������BF�
	A��-KZ�8cV���u@�Y�`F V����C�w���Z?����4��Ah��Va�f�m�H|��)�4��0�����S^�9w��c��g���y���Nr����7Q�)hb���	dmo�[�6'��������
#u�7y��.,)u�����A��!r�@��R�w.'�q�y0s�mS3������FQ��G8x-@�����z��$Z��D�U&�m����p#�4i3�Bd��� ��0-�a��l��Ak��$"�8J���X}|������)V�����%U0n@9���%�U���a5���6w|V)�{����4�jh��7-B%�(x�RE�Z����D]!��Ek�l����v�UL"��a�$Q���t����W7��O..&t�0<�4<�����L�(�������Z�a�8��
�����?��A���4�������3������������X�oNN��!Z�v���3����mw`�����pYy�3�}��P|�G�S��)3^���s�����J��,�sqd�\�����6o��������8|���j�����*Be������T���\X1Q����	!��D���'��
�\4I! )�?i	����bv�J���s����`E/�,��������&u��Ra����������$rA~:�@�_��y�ha���x���kLB)c�y�Zf�����o�QTAv���c�I2/�3��
E/�
'������!b�~o�k5��=����+�p�k
������(���l����J��w��n�\K�z����S�)C�{;0�F���cU �C���S����zi?��E)��xZ	Opl��HY>:��ls������Q�k�vQ����G1b1�������n�[�?���T��^��~?��p�}5�(a.����tz�zbM.O���9��W�[��w�����kM/�/��V�.>��N���\���8�h��������K�FS��U=�oXQ�A�����������Y�?4��n0��%#��5�����b(�F+kzY����y���&6n�Dgz$��f�|��Czx��^�s�Fu,�H
2�]��m�c�����0�X�)p[���=�:��;���i�+�1���8?;�,nz�<=.P����p���B;_5Y�'��p��P yT*��M�d��lgw��LT0!��Q(8������K.�a�i���G��)+*w`���aEtz��)��,h��|E��t/5�8�U=�V��e/��,��@F�PL^9���,����(XRy/(�����A�%D]&}<R����4�/�!{!�e���kS�B��^
s[a���M���ju�@��a2��x�����4��������3���'�2��!
�h]�J�J���[�x[��
��@W�����9�x�_�G�u��xnY���/i;�4N���Z���<e�K�x��o��X��$�kCUx�8�-3��SQ0����}4��a>��EZk�d��	�_�_L�2Y|�o�M�xU���Y�y�\�9������?���8��c?	�`B��b�ux���y�aKm/��w���g'?S6�`��uUL��=(�O�a��{{��hS�N��"�}������0�x���])�A��&6��k~��Njd�x������SdB�����:�]]�������?�Na[����.>�����t�7oci�k2�^ZN��k�
�B��vsqz2cy��v$�L(C��0����T���u=I0���������*A���<��c���S��K'j���mv�S����=J��������w���su�u�rPt@�k��V��il��\Xq�J�q��@e[�95��hE��I
�HbE@2e�����,����KR-���\�����C�V�H�h���r�������u�B���	���0���Q�����R��^)������y����[�2%n��y3�_����U�?� ��Z,e��Z���"s_t��<E��.D����[����8������O���?o!�k ��[�wC���������0Z�riE���@�k�)KD'���x��aC~�#vDG���;�Hu��W���#�,��aN�C�r�fn0���1���O����'�Z")� y��^���tL�D�.r���DV���nu�%����4eB��dD���0�ih��E���0��o)�g��,�Wl�aRm���Ut�K��������7#����Q���t,rACw����!�"7�~����T4�mO����O$����>J$���P�.����=C���d|��MN���Z��l��������P+}k����4l-��bP���EM�|��/��44'�������L'�J�6>$�=�P'B� �;���:�� ���� ���C�=[�����`�U8f��N�3�[ F�6
a*�����z	�{��
�YG�$3����=M��4`(���qm2z���i���z���x�7k���Z�_������R3y�f��\�&��ob����S���:5�45��E�p?nA�F)���(�
�������=gEFi�v<5�s��t�N��c1��<�k�K{��7�PEg(�z��M����U��X����N�|AETp�����z]a����-���.$d�,�k���������r[:�F���|u���E�� �v��w����[�IV���Y������u��hPT���UXQ�����G�{����|��2����e��9�N�]�����p��a����L�d�RHr +k�b7k�Q8 GBa��X0�o1�As���O�3g$�D+�J���V�Kc=x����Xo��R�����E�:�b�qQ��z��1�����3���0��8����P��Z���4a1��	N���d]��Omt�r��$�|�^B^���5�����W@D=nX�W WA��������(����,�7!;��;���7�c��,����K�����2�"����<���a�`���'����G_>
m���O�4�E)��}C�����6�a��������u�ng�l���N��\�W���B��������I����0�H���<9�t�2�
	����Q@���PS�[��>B���[�y�x��W����1	O����������9E���>f8Ko�4����������L��r,�BZ`=������u��`�<
�N��������K����m����:��*�����D<4J��
^�~s��%r?n2Q��`�Oz������l��^���u���<%,��Os'L`��Y�1��hkh�IP!}fcw���S]1�\u���t�W�����\�����k/�W��,�Bkn>��E�����������R��VlMP�H����T�B#](�-��W=m���5l��7p�^�96��/�QH��
�w�
{�(�J����N4�� ����
�<�Btt��^n�H��/p�W�WT�Y�}�@���->�f��,��p�
�QTjT0���+��K+����KHu������v�.��.�U./e��&j0�����9C���/e�"��8�-]�D;�'+�6�0�������������Q)D��P�R���E��Sfw�t���&�%�O�w""��?J�����J�I��-m.�d�����y
|�>��O������������&h�
��
77c�7m�Io�����/**�L�*p�w�g_J���$m�5n-������w�4��=)
�Z��Q��j6�4$��W7�{LhpC$r^����7
�@���#��oA���AX`q�n^��&��6o�k��)	�=c�2�v�Y���8t� /�Q4J�g���E�Q
/������((�A
A�t�����
���
��]� ��w3o�^x������1���3fG=��Y��1C�BL��h
h���x���mw��x\z+�	��a�f�YM�3�6�R�oz##t�(�������'��
��e�}I�UYx�l�QiU��)�|J��J���h���n�'71�U�#Y*���l
a�RTaY�h�	��lw$#�
K'��dz]@4�(o����C�&��(��&��h�����V-a�/�[��f���~�=����f:������N8\q(���%"�aV��U��(C����=M#��=e}I
��(�q�a���/	���U5����_I:^���7��L2���j��2���^`xew�������L��aw�t����e�������&�@�L�ls�?L%��.0%T�Q������KUcm}�S���k��$-��!����Nt�{�	@��KS�v�k/a���v���v��k�������:��h\2�za�x��I3�|�7�]f��Ap��0	��f!�����N8�;���Q�����w���rq����������t���?���x��P���(���l9�:��t����F�O~�� i�F4\#s"�.�(@�":����c��Z
���e�c�S�������?���qx�$���(���20Y4�!�'��m���AF�2�27����y�����z8<�^-3X������\B��e=��(���hP���(K���50���6
��y�|�;m�c�-go�Yvel��`b�,-�4�]��c����L��j��C����5_}�L�vE$��a���v���9L��$��:P��Pl���!O-{�7[h���(J'���9�������(����^�=�J��+v�p�����=^�[�f�v:�a�	O�x�hI�&$w���@r�?���O�%F�~����:�����{�5���D3{�6��	���W��%������Q��{�N+��R9�[����x(���P�N�?�7��~�7�*����x���C���v��U�j��`�@����{N�/~���\���BE�����g�lzr�z?{�.�����tf��Nn�������"�V����'E������5�xO�z!�����
��p8.
_+]�xA��
�Pg�w����n��,�w��x1j�rg�V�!�P�D��)A�e����������2�`v�3����{���
"�,���D���p��v��?��N��������@[�Ho�UXLol�y����7r�a����JF��YH�o��P�'8��4?����6}����Im�m0�N
�����������tr:�G-�1�����T�6+��*�|�sW���Wi%�V��������������`vJ�����[���*���]*H�2$�B�<���9"��,g��x*� ��x\���Gij���AIs�v��QL����@@zy��^�=�E�-���>�S#
!�������Z��P������(�+��������ERYk[M�"|�e_��-
��2yS��G��/@���(!�����T����������H��;[����j��R�0�_�������0�=�Hyle��z�~(�����6�3����V��
z���_-u%��-5��
�9��;<��4�|�B�Z��|�����#�}y�iu#���jF�(�k�|!���1�����Rz�d��mS}�7��~0�e�O�R��H���xl`�GJ_���s����UT_9/�"oeR��_*��r�_t��Q�����=�/`���`0@���7�j^s\����?7
c��(#onC�H��rZ�i��h�2uf�������29�b�f�|�&�{/�7���7�$}���Q�(����$�����8f�mAD�"��^�/�;>-���H�P���v������J��P�3D��mZy�#YxgS�2E�(|mE���S!w��P�����;���$��3"���&��]x����2�����F	���`���1�?(_�����������n���R��IW&�P?-o�:�KV�t�Lz����#iBY���e4r4�H��.iy���E�n�mu�����'�v9"A��|QO|�i��|�FUl��=�A�P��h�����V��.�C�e2�@�]��j�o��?)��pHE��!bi���t6���*�{��8p�Q�B�"{o�i,=�7}wZ�Y���[5v��M-�*J.�x
�u��[bR�T�6�.��f��X�{e68����%���1��1�Q�{��lrb]��]��Y������(����'R� Zv��;f��tLF|m�$���L�B��@^IZ��i�Ot�2F���V!�����?o6��y�_��9����_��1�bF�N�.I�����/������M�Rr6���X��:;�^[W?Ln^_\�X��)I|�C����NwA��kM���ue�}�.�e�����/~J+�t��j�s��'U_Z{�
��$:]T���`�����k����w��V��v�N��2ZYB^�
������T�NA�[��Tl6x}Sz���]�%���?.)��l5�?�N�]��}R�2�PYr���"	��Y*R$W���c��7�4\Hpn�L�j��Q��
����f����^�F�����F�Z��w�X����4��������������;L|Z?�Y��L�J�o��4�&q9�=������`[�{8��RW[��>���A�����a������LKd�T�`�q2��}1��5(�fp7���\����
�K3S	���>��^og��(4�N��Ir�x�F��"&�l�ZH����,z� 1�d7E��5����_���)%���RS�v]���6���)U�s|_�(��_B�Fe�&��i��I��L���y������U<���d�tj���������rm�d������go����;���2�Xax��������x��f�N�
_�|�V�1Z��$^�8D�����o�*����9����-��K.:��t�J�fylN���'���Z�����%�W+A1S�1&S"�-e�s}ry~
�:2u�������^N-�@!kW�FFg�0���7��
��L���!c;���Qc��=6��i(AS�PnN�"�C��[�x5����� ?����-"���9�w�1�V_�������L'G2p�V.���V.���V�d:�#.���cu��L�9���t"��D���fm?��2^�:p�9*B�Mb�q��|��Z�X�[�AR�v;e��g�������M�4�:>��]3�9�y<���%,��%��Q�cU�pr���X�+;"gkM�3�>�97_��C���F&���X"s�E~5D5%��d�[nc|�b��6*��<����/�HR*TO4LQ�����y(��I���[����v�(`z�4YC�5���Mo%���z�"���4������H�h9:�����������I��hOb��5:y{!�����z;_��U������Q��P�a�
���D\@��f��]������)p��)z��=���}�Q�q�(�cX<�1��.��A��j6��Q8�W�E�`'@|a���vJ��&��_qH�+G�q�4�Y�i��VN������I
�+W�Z\���_<�+ �nk�9Fg=?����@�L��I�2����e���m���|���4�2at~���=Cqu��7�O�Z�L�X�3����pq�VY����h�l��7w�{U�I�"�M d2wJ���Ov�q�~���hY����y���������0�r�X
�v�8�`� �E���rJ����!x�I'}��iF��yrY�=�p��r\�p
�3�� �����)(�
ke�u<_
���=KT��k9��yk��K��7o����[CP4�������6�x�Q�?y��=Q����/���1�bP�p���I:j-��<�W;>�j�u��Z�R���N���P��D�iT�I�&|�G�OC������'�������GBbJ�_�$���h<Z4��������� .^�1������e6f$Xi��&J|���{�#�>�u��x�6<@5��*?�{�}����\#K�H�
���-��������&��@��=`@��S�L�r��H5�?��&��:�h4kzz�b���z�����L���N��.�V�g����!N��m#��6�rrX�9�|3�����/_�j�������R"[\���<%��|.z���|q�e;Tv�?�e7;8o�/�f��trv`��>��3�n�p��pzu9;9��&��g?���Q����[�����2[>���K����l$h���c)Y���D��G������Z���'W/��{{2�Q�zyV�9#�_�����:Cq��I>R)�H}��>�w�V1z��X��`4�6�w�w/��e���X��S�-<�� "�
���F�,���3��#�h�GFA�F/Uz�F-f;�v�����30�P�r�����)�w����,���K����|���1��1�AHg�����7���5�8i
9�%A����#��� j�
T����r�P�������?b�sF�R9��Eog�������;uHk�e����Ln�\��h[I^��n4w� ;:��=p[�F\CP4��
��`�-�i�Tb�po����C�eE���dXuKq��%�"��%)��
���|5aF`L&}E�t~����e�Q���y���<k�UXac_m����,O��T������I�Bi���_�cy�T�	�����Q��4����H!�uj��<PFP5�N*�G�
�V����m�:��Z���
A�
��prH�
i�|U&���Zu�.��T�S�l_zn(o]{K��.�m�!TT�8������8$L6$^�� ���$' �~�d�{?�#H�,l��H��
T{��?K�����������QC���0���}��$
L<����@����i�Z"u���2���
��)����d����f����/I������.�&��RJ���V5>�U�(2'K{���Ky�lG*�hV��D�S�w `)Eo�bla=9{�t�P�ao��H�[{S�+�^U#���C�)��b�Lb���=�m{L��M���.1�0i��hPF��FE��}C-f=k���i��:��T8�|\���r���c�/�t�vw��V��-f�VAiw)
J�k�l����=�<;����X�WG���'�'�WW��g3v��i��b�{K�07<����);`~u~yr����d:��R��; {�m��1]�����0@0�K{��/����[<���t���GD��A�v������lv������
��1����}�l�x�����.�Ir�87���87������Q�T?��n�/��~�����=��5��o���A���[�����m���2�P'�[�Ba�`?�����
��4��_,�\";v�)C_{�F�Xw�k���]��&��oP�wu���'���;���[����Q�Qg����� �-�3��J�k���Rj�T���X
-n�K�FGyce:�!��\������*�;�p���]�H 
B�������V��98��<n-�]�a?l��������Y=�����oK
=1�����$��������#�P�^9�"`wA��
���PY/���*�P��i���W��o*���Q}0��l�����A�\[Kgh���������$�l����i`��DK��,�m����g�g]�����6 "�m-7������~�^��r��?t�����9	� �����z����0�lS�k��er�W�������������~��j�����7��A�����'�.]K�W�����|���T����,�b$F�(!�~Af�qp1?H����,�z���Fu��L�3����9��_�a%(MTE(�A��[��cu$����0�(�p�P��!,Z�m���_ZI>`��G�f�@�A�f�V�����Q�`��"f�a*���U'F*��V"��Q�:���(nHbh<��I�"r)����%H��OE�
c�wE����)JT�v�	��+W��������t�b���|��������.z���W}%O0�_�XRx�x��r��NN&L��$���n�^K����8}��bS�z�D������ee��&�����HV����*S���V��;�DP�$Q�#��2@����)�M)[���0J������ �J��%!����x`���U3�A)��fk��a�.cp����5+�	L
���m��������g�	�� ������:?�J�?��o����oE����I�E]��[��H�L��4����/8(���PL��r���"���N~�,�F���M�OE^�;������Z���ef�P:~sy5���B�Ef}���RG���:���k���<�\�	d�p��>�6��&>�}U
Ey���	�H�2>�bC)D�������O��x���+��������.��XH�������j��V-������B��0G.%n��J9�Hr�GN���"��.���cm��3��kZ^\���?�u��#�S~*���m�T�����q��z!&~v����X���5���&����On�a�q��!�����M��zg���x���1	����.F�����:7�p�T����_��R%h��iao0<��p��+���<:�"S��l�_>|����j��i�%�V�_�P-%b�8*���@4���/�@#��Mh�k�"_�E[��k��k��FiV�m�[�Q�����#U�B���8���B�K��K�Y��X���!{�����#R�/���HL��v�OE�'v�/#	��c��`r�c�>�i$#��[����V[�o�7�$�o���/�W����n���a5U����n�	&�Z�9�k8����M��M'���������ly�-�Aa��| Gd��(��K1��1���[���(A{����3K?j �"(,_��EtH,k��~���e�Z)
jb��c�`�w�A��O�F��f�P��N���C�*L�����M�<*L'�Hy������� �����DR@'}f�^&ot9|��lh?hL�e�f6!	�V{'��x�6p���J��4����-��5��n=n��u���J�	*&���n����`Z�y����V�5_���`�����$(�G�>���3	��
P��n�	��u�c���nx45���q��l���{l/?����[^��5���{����<��$o�Q�����`dVm��J^���g���+�*fX�2�#4"5���<���6g��'�d(�G J������8�|m�r@�l��?-9��Q�K�}^6�����*�{2������,�
���w�'3����$����BW�������X�����fc`��Y2��5�%
������#�+^��+�i���^���n�S[s�2ba�*d����G��iDi]�(+P��-�+��U����d�'��Z�����Z=u��*�&0����X4��[f�,�W�I�a�_�x��x����,z_�,���=��eE����U��,����O!���������tZ ����`4�W�mbD�e������;�&���A��{n�u@IYz��KWa���v)B�i+0����|�]}�p�H�(j������G��w�O ?��@|$����?�,T�Z��J3���H�}}~1A�3�����5�
�?q���������>��R����D��/\
���]��w�����#|=�$��U9�����
���1E"yq���	Yd[kf	�Z�e�N-�����!ng`������`���	�/1��#�cZ��u�W|��v���Vw�^�s�H�.<�$�&����S��o�Ha��P��k5
�^6xL��"���Q�o���h���8-����J$�i�=���D�[e':|x_z�#K���n!��h!h
��m�l\��Bx�=�&��z�W���B��Zl��F��x�Y��9�:*�0�l��"����O�d��}��h1�XT���I������.S#�����4iR�����^O,4���������r�K�����_���D�S���q�g*���=���7��Zf����f_bU������7A��A��]�td4�K5���x?e���U���2V�~���A��I�%*�&K��;)Mx+�@.8���@O���0���D���S�R#v~��N�<&{����	��.�O���D|��&����b�[v��:���qu�M��/�)HL6��(;�����M�QH�oamK�Y?RP��q�t��n��c�`���>e�z��4XU�la�^�g��9h��P�.�8Hn�=�8z������r�������t������� }��s�Qy}���<��/>0
s������AQ,��Z��U�J��\��q&w1�
+8��+^�J���{&.t��l�����:}{r3��;������#����v!���[k�g��b�U��C�a��,�z{a��DY�S�\���,��a��tl�i4eL����2��Bq�aayR�]xhI�M���s2�\V�Zvp[o#[���^�\L'*>���~��P�4X,zCw�lv���=��U���dKd�^��-de�������Z�~/���J ��-L��t���:�2���0S��'(���S�%����Qi�>���1�C�)��6����o��DT*��C�A\V�i0m%����A6��^u�P��|:S�8�#) ����[���l�m�2v������z?)��0Q�"v���8d��|�
���D�����W!��`:,y$A��������;�
#	+� �o,�S@H/�pJN���������AHQL���hS�p��	�t\����py��=u���<I5V�P��Gk`
�H�K>}��T��+O�^y ��n�wG���Y<}�%�O��mil�o
����!���wc39�\"N��s�A�9v�����t�B�^�5��pNS�V�$~���2o�G�M��{����P*�t������r8�����4Vx��UA-�"=�bf�������S�brYk�[�E0�I�����B��C�5����2:�`���?>����[w�[�8�5e�����p��X`�j��+��t��AY)�g����f�'���z�7>d��z��� *���v�-������?�Y<�C����q��v���'�m��?0�W������2��������bh�$ln:&-�����\��~���=��'�����l�i����l__��]i��J�tb��wM�xt�$�Z���8Y��+���GQ��B�R	8r����+����^&dO�%;m����LR����z%�/#�����y�>gc����u�N�P�nVA�;������=�	i���/AWqL
P�dv��+����'���U��"���/����t����_��I��S{��-I�/��������N����#��'�@9����e�b��[���D�[1u{P�Z��>
��R�	��H��n�/�������]���<���3�����P�u �M�6'�z�T�d�N�/T�-{b����3A��d������FD����������M!�2�7���R��_�U�;�����=W��s
����/��~���l����������w������|'�]]��N��������F1��f��������t23p���5pY��F���Y��g�������
�0����j�������	[�ua�8��b�~������,�����+B�����H?
�*#�t��_~�����Q]e�9�E�	�3��Q�6Z����<�+�G"��\,�x?����?�Qi��������J����5{.J:dd2�1���)X�H���\��������,�?�����T ��/�+��9�
U���%01��C��I��;f�'
,2�����-,��+�=�d�x=�0������w���g$%�
������P���4�A,�&�!�
�����1��P�u�[��r����Q����W��-�����=8�s�Ru�����;�|��O��Xl��c����X\zB�
��<�"q)#R� ��KC�����Qb��[\:�,"�����a��}���n��,?8�D�n��1<�����=-�i��2��������<%��h,e~�L"���m��=L�K��8��������Yy�/�f~�����].�����Tl&d4��5��'m�+#�t;��B��L�����r����b�l|O������Z�]g�8��8�>L��rj��U&y<���.��1G����T������@����1f[�����[��-'������P�����K���Y"F����[
-Z�oh�IB��P3?���<�+nbI��4_���Q�$7\JX}%a�`��/�d��
�k���u�< ����3�R{�bn�<�U[J��RZ�����	�LJTVB�^� ����C�Y��.��\�
�En���������m��aV�J

��#
����E=!%5�_��y������@�'�
�I���R��i����2\������e$7�Z�(��SI����Q��D�h��L~bX�&q�?bh}�I��u6X���}�V�F}���w��1GPx�Q�
��L��V���jT��t��m�op��p���1��)=w���,FF@���3L9�9�����;�I���S���V5����4�={�k9�'�=h�*]=h�tK�R7N�D��u6�&�>�m�b��#��HR�<�N:�,��M�|�?q����������'TG�%<�g7�?���eg�C�}�R������}�*����/��/G�3���R�"��$��4�-�&����[���j4h�Qn�u�='��K�����9��P$;��)�W���������S�@��wx�$=aj�5A��#�c�}z��N�Q5�
���k�J%���'G��t�{v��0�.���#_���.
z:�]�K���7��.�����I��.S�G�y��,F��J��N.�B��S�E��_����/&���t��f2�~�����N�j<�Nn~8��^����(�����	�UF���V����*���d��g��u�c�z���x���2u��5
)�\�}���)GVW��	���		���f��g��I�$?���/��"�2SG�L@���x���rZ)XQ�ZL�J7������\�@]���z�D{Es�Z��)���2�8����m������5���J;7L�����v��}�}6e��QPt��n[n�:�T�N[4�W���X�N~��'��>��3��K>���t��h���4��?���(BS��1?�z������5O���b��'?��
�
XY�����^�d�s�U|C
�U:��������?R~��0�7�Z�w��J~����%I|�
��`9vu��x���/y��^�����ww��;|S����F�^$:��WxG&.�(�z5�]����~S���;'�����P{�{@��2�	��z��'�T����47������_P�
5<aUmK�[a%u�^�����B����,	�f*���E���G7�8c?��D�W������ta��:=���)�����i
9�� �n�����#
9v$�B9�
�G��C�di=�r��
��|
��O�2$�md��!�Y+��8�%�j���|)���adun���=���y7k� ���x������T_������lBh�O�Z�.����*V<��c��ooFjJ|��il�R�P;���-E5��H���Y�Lm������_�F���q�^Xk	��[p��qf��[���r��j�^���4�RG�9�	Yn��oz���(���)�$�3.�aN�x S�n���I������&��E�rA����)t�7���l���"2l�U� R�Q��^sa����fS=��:J��y�y�lU�v�~�����Y0�r�v����o�Q�]Eg�ET",fA�PM�o/)!�[Kp������4�@n��4��cb�:������k;q���v'C&�"�������Y�S9�w
�VR�M�n��rI�t�d�xe�w�����D����!��t��)�������[�D���G�k������\*��H��5����s�?v�N��l��:��s1F�.���[#$�����?�*�~��M.k�1[����C�@��^?(��/Z�����q�$�NZR���;T���4VI9�V��6�g���L����(�������]��_�����g������T���A�=�V��*Eb��]���O2E���������gt������(��=��^���k�%^�.B0Z����q��N����f�U
���`��F���;�iq�3P�X?w�^��s�Q�3����~����0H` ����3���?T_xKYV\�v�����qBK�j1���=����"@����
��������E������XK����2afw��<y7��g�a��t��������21Fm}����k\�\+Um��O�E�L�\1��P��������]�R��6
�P�8�����VO�������&%��
'���H)��8�
���n�P3��S��`��)q-w��M��d\�X� ��fB���zbg�SG�[c~������2t�ZT�<��V�S�gV���`������� 5C�f9����*���h��[�r@9L�J���!��}�z�e�T��+������dvu�
m�_���8BC1��P�^����`c��[#�
�;;���[9d�4w9A��U�5Z�Bk��DCNb*�TEq��S����)p��3�&���/4��o`�dKm��'�v/����]�Tb����O��MgZ��:Ra���S>��js�N~�$������O�E���$M�2�e���<@����wW@�����+���9--mhCTmi��'WU@q��e�~}�4T�3,{�����EE��)������r�Vd�s��<d���f�Z��O���L�����_rz�
T�B`�D�w�$��m$�Qq��^�zx������X��p�@p�Zj��R{���/A��G&"��vi�����I����.N���~�ms��v��������P�E�d�YJ|}>�����/&�J�D�����R��������P��;��|�k5��v��v���5T���0���(�y��T2Z={��xz���W�p6-S��4�=���
��s��uX=�i��3�lFq��XVfCOe���:��1w�mR�c�v9S2��Kh����_�>��c�6z�y���h�g��_�T����n]N��U9xQ�ij��BW\�<�
�*H�4��.�����XR
}���V�d%�88�*���i����lP�OTU������@�P{����P��A��O�q�|�a�	�e/��rR���b���T
��B�K)le�d���c��ha�r����>g�8���������Jm�_���������@fL]�{����9�j5�b����!��\�,9�y��-��&��{������������H�Dz�������/��b'���HgNskr��^�dd1����!�I���'�����qx�]W�S)�a���{[�������e�m���A�9��s��5}S����%���8?��x��.0���Q]o&��0={���%m+)���C��t�k���K�M�Eak�O'7m!a-��������D'_�S���JJ��k)c��7���b��$G�CFFY�t��h���?�o�
X��e���1����t��]��c6����sX&{���<����������R���S����3�\m�$�����n�8������N>n_��Km��������.3t��w��B�����6�5����>>���~]& J�"va��������!����o���9b���~��p�p��FG��� ��r�|�|���
[#�~����<��v�������L�����w�d�D�f9w���:���dU��cn%�s��v`��*c-����F%��Q%��n���&�����[���S����k��2;�D����Nh�D�q�t���05�0������(:�s@������W��5��B�����o�����g�������������iY�9��?u���k����}������7�sW?mF�A���L-"	�R*�8���G\wk��@�ob��]���p][�bn+s���u��>4q0�B{�XyhoK!
��/06����q3���Q����
��ORw��Q�/>`�$�TD�qox��)����T�,*��
�/���-���	h�i_[���\z�a�g����ip�iG���]����jZ@�a�km='��I���[��������L�����o0z��Ri"����h(���*��ST�^2U��"���FC�������������[19����EVo���>��*rP����d���%���Q������C{��Xd5�e[�����S��
����KO���e�
+�$�=�L�,J�Pi�w����f�;n;�E5�_�(�%m�����)G�6!���������8]��_�bR�K��\�|Nb��{
�
�������]Q._��'���@���j��_^�y���k��j�f�/~~���[l/��oS���V�������/�8���o*����D�f�</�r����b>0� [��P����4�t�)
b�@4�-C��F�T�Cm�_�B�e�Q/L��N�4^�bu�6�~����'���&J�:)�.+!��6�$�q������"|���py�����L�H�����1��'o�_���,HV6W����V}FV��{���IY+ GOZl�����]�iF��B~ip�/�P��)?���R��Ti�O��)T4��-v��OruS���R$*�BB�b��e�8_����ga{aZX*�-�(R*�H)�,�����5������j���Q.�((v���e%�W��-
0$ED8cIO�6�9u5�I�q�
����X��:��Z0#x
p��3��C��������u�6�w�q��������Z�S�'����.�����VKKU�`C4�r�}8�����'���9���|�l���|���1GY9���I�cG��rt�6^��+�����"5��H��:f��������/J���;���NF`��.���<�T�3Xw��u<x�������g^�.?x���GJU �U��
]�><����D.���6�R����|�2��L���)���{Ov�wEc��R����7�4�����Wa��.�@������(cy�g�t�w��eY#�V-�}�Z&I��ao<X��
�ow��TZ�U(�T������yq���������M*7L���h�3�9Ul�f�$���pA�#t�v#R��i"0��k�����M����.�7>���Q��O�GF ��j����f�i��k.��t�����'���� �����#�
��"_Z��^=_J���>����?y��u������S?�4t�����������h��~���� �oo��[�q=��9����������0�vJ���U�5D�.�� ����-�|�>ts���������+���b��V����"���`�c6�Gi�$�e��(.^�4O+�
h���$-l�����������R��f
M�������
I���2	p(�s���G�
~v1�cv���8���M�B��P��Q�?������:f2�����h)w�'�"2��u�U6�l���e����T�S��TkQ���1K��C�����>����a��T�B�"B;�o�^��Q��.�
Dw�k;��tU��d�@�R{]��������Ru��1���z���K��C�Ep��K@8S��Q�nD6A�y��4
S�+��������s����v��'��������=j6G��h�W8*%�?�<K�@/�G������l�lOq����Y�F���Kex(67��&K���M|���ROc����pR�A*����=�����Z�T�m@.���;�����^���:/Y���������Q��Z��_q�rc�]���n�>�������p���5��y������h2b������1���#������XL���z���tv~ui��������lw?;C�P�r��S{�"���Y2���;�����LE,j5���trf����N����lj]]^��W�2�B��IHs>����s8�o`�e`2��>W���L�����N�./'����1�
[���m���k��t��~���[��3(?��(@�������=���[=�e2�s�^.#W��������������������P��k������)=aR/�����Pvr1y7����~]^]R�2���[P��x���O?������
�Q�l����w���Cj�82���y�t�`��W����W�k?��y�Y��L97�5����c��I7�q��_����Th>������@�r�y8iK%[����<��0	��E�B�����C��Z����c��V��\�����\�y2����C ����[�s��s�~}������p�r��K�j�����G�����n��I����je�N�[�Z?�.�mq#;����/,���1��jzL�F�8v�[s����
H��S�{�!�8���i<�GX�*���|�,����x������[�	�2.P0x����Y`�E9j�x�7!�$n�-q��_�7�o3l��@h��:b�)*�-V��]1�O��
�:T�����&��g\.���o�-�S�@�.N^M.H�<�mB���ecE�/3�?i�eR�&��'aQ�48n{�0���f�s�<��Y���{|�Q�Z9Mu��;�6���p�r���BP�F
���U?�/�����a�����hh!eo�?����j��A�f�~(%):�:�)�1.�C����jL�����:����[�����R3�2�d�,�AE����b�$ro��d���h�l�mw�8E��/��<;(�9f���/���|e&��������C*p�tIg7?�i���D�"�V�h�e����#9��JDG��NR4[x��
|�-�2�K�@��_}8��j������8��{��q�b)��/d����/��v�a�H����$�'��2'9V�h����u5��������0yu��O I�@��Q�p���_��7������A��!��V�]6���b[�aH�B����9X��h��������������'c^g� ���Y�4�����zuqu�}��H���?�E������+�X)kK�Z
���_=�B��}������o������������5��8�Ei�� <)���H2�`�-j���L7��y=<�J�V�?�-j��k�a�A(��e/8^g��3e����F�>p�����n�Ke�!~N�0�%q�D�[R�X^h�].���B;�c 8d��������2(�D�B%"�������nI�G�V�Ji&������
�����������:;����h;%�Y�;SjR/�r����]�A��Q���
F!]43��|	q��K�@3
��[tzp����������d��eN�X����>�r@����]��E�!g�C����F���t,���i	"�5E��<T|������;hH�����D*i����
 9t��Fy�\%���h$����1�rd����������h�1�!��0�9�"�����L6$f�����)���p0T�����U-W�m��s:��it�Q�+�Ji��o��;���hO����m�>�c����pg�n�n*�_nbf��B���tg�Q�������
������jF6I���P�f�Qn�y9��f��A
�4��d�n������������c�! �3��>�^�N����I�}�&?w�(�
+Z�$�^������N���0�I��dL}qX��K_� �p���%�k�leHM�
e2ED��	H�Q���^*Z�~P"�dZ�����gee�L�v�mg�u��~o��v�������9yI��E��%?�s�K�i��g�g�m�z#�@���<n72���Id����'>�O3���T��,,(g�4R���4D����K��l���`Ex���+2 Z����<y7�.�a�h@�@�`Z+skQ�"V���nu>���x��/j[��#�r�Wi��VCU�W��"Y��dj�����[
��b�xP���O��aQTe����f �����Q=V������N�C�5.��`~�W������H��I���F����O��$}���V��U2[1�)h������I�pN�BB�k���9Zio�/���x~9�9=�UL.�l�b�[:ep �~���9/>�Z��.��~z~9�N�.��z�
��
������n"P�FKB%�,���,=P	z���"PBz��w.��x@��
%��(R���+���2y%����k�����0
'��h=y����t���^o@l��V��K�O,�2������G���`mc1�H��,d����GG�U��I�N�����o�D������N���TLDfweoC���`� +3$�Tv&x��y#-�<�$����-������T���x*afK&����8�y3�0������P�]4�@��,;�7�	�=V�w�����fs0r�NoX0����������o���b�����XDa��y�������&YTm
m�)��o�)(��~��$�.m��P��XR������j	. ���%�BJU�t+��9��:�t���x���K��m��w������`tE�#�^�� ���[�,���!F�Q��s5;��N��%��/��w��qI���o��"�?��-��_ZC�e�����n�0`V�t�lr����3B�X��z�}���Q��m��mn:�-��\�{�f���-��v'�:�htP�R�?8�.n��D�P'���?������S�J$�2kD����9?������f�w�u]�I2�����JM	H�� 1@�B�����)������Al�?`�~n?���h3 U2�����R��O���fC�������)U5��F(���ew8o/.��]��n:����C#s���j����%{;Z��1r�\MA~�h���er����:�Ev"H9������;f���>�oW�k���R[W����F������a�������}����J�����+����frrfMO^Of?����0��[�|~f�$iioeG��N��Z-�7Q6I����1t~��~����Zzrvvs~��J��=j���*V:�
�Y��^���J@{��$Q=O���
UGA��m�������C��j:{�3&���5�y���i����se����cX8�nk�]Z�Jf��-�$`u����-e`��p"�8~H��z�������J�x���nDb�k���N]����x�l.z���Ge��K�h�����i�
)��k�����b��.3I��w'?YW�'�7���Z
��e*���W������*Eo�mZ�oa9�R��tNg3;�)���K��3�0y�;���x��n`�[O��uP��������t�-�����*����,�s1�:~�86}��q����Bc��_�E��g����&bz�v��Df1�r�g�����g�'�Y����0#�8�^Pq~)��#?�W���s�]E����#��P���P6nI�;Y��u��g��I�����_�O���'j���x��0,>��>\]����:��Nn&B���<;*`3���V�����
�+�t8��� W���r1�0�C���0|[��3����0��D�0�'�K�5�
�[�����$s��
&m~���8_�S^�9(}�{H��/Y%1Z����Hy��P�����{�A���4J�Ke4ow��n���Z#���a��x$�������EL9������ydw[��!%C2����|t;���l6w���a�yH|}����h�O���:o�HO���:"�*�y$�G�/u;���@����$D� M�79�\L��L`��E���6������w�u��PL�����"���G7vA�
�Zs��zA{�J���J��;K�u������<cam�M�Yg�b�c����!Z�h�4���&"��D������o��w��������l:;"���W ��5E>���(��H�j������uDcJ�5���.���<��,%h�caa���(������_P9�y�Oy����h����
��t�Y@9)�(Q��gPR�obj(�tH��'p�~�T:1��,�������,~P���r��/��jX/H��z���P�sr�y��^ps�y|��eY�l�#�2q�%��
���w72l����{\��+�9�����Ng7 �a;����2c���4����z�����7��\��T�[����4�j�!����Q�]Pe�
6�+��t��Dp]���������>i�|�����4��M���������<0�S�Qy�TF�l��/��T�8|�W`������ghXh]�Q�����H�Q�S��q�y>T��/�����	��U��!�����r���������LRk""{��������8�d�����.t3���E����o�W�V]��������'���|���L�qB��4�n�`R-00��Z�Vlf��G��A�a�2����F*��P�/��pM`C�����uz;`u�/������b��ko�\�1),����Z�R�h�=��qf�vz�@�O�
����9��#�O��F�T�bS���0��J�����Sn�!Y^�
�:�DV~���H�(,���C+V�4N��P�r��#�.���!Ok��Tm&����a�M6������E���#
B�� ���P���4��$XXhYw�4R�Ob���������3�@$F���4��9��P�����6������2��r���b	_2H�Y�H���7�L��G��'��u9���;���=#��|2�@�-����k�f� ��"��(�ZC��4/BQCB�������HC~�#\�B+�v��g���]�9\Uw�W����H5��Y�vt#)��y��Z��[+b��u�����%G��m�{��J?U*o�=��G���o��@����*���7;x��{P�u�Z��={���'����k	�1r�����7����>%�����)z��.��D\	|/����xh���b��=8�[���7]�|�M���\O5��L9A�����v��#�����v]����|�C�Qj��J�s����5����1��ucK*O��R��&]Z������H@��($Y�ei1<�jD�?g�M"=	��PAR��@[��
p��r��]��N�9����������b<���)��5Lc��2 ��P���:o=)�Q���{��J�qJ�g:�e�W���6iX�7�k�#~K_R�-��n���s������m�v�Q{4_�u{��iMLIn��c-�������(n��?����9�$t��	��9DZ�
��K���h4�E��c���[����K����Gdk2Z�N�v����_���1_���������h���t;@�:aJ�������tL�hp�`X��:�`���:Z�I���"�B�l/�2G!4
��PvC�z�J�l5�1s����l8�;���N���bqV�}�,jd�j#Mml�mc�'���2@3��w?��.�]���.	U�@y�����a�NI7����i	S��I6�SP���A:#d}1e�C����Y����`_�+o�Z��*+��?��m���S�������������6	,P���V�����Pt����I�#��CF��p���AzB�:?/��S�T�� ����4Y�����Nfn����|���>~��ww�}�b)�.��_&n>R��v��K���m���"{�~c��'�����P�P���6]�����q>���3#�sp�(4i���6�E����,D��@�?$B�>Df<�;�4+0J=C`�5>����r����|���b���v�5�`	d��������v��_,�$����
�)�f�il�b���E'N�F�v���"�5��^�x����S�CY_��(�9�!����W����2���%���
�c�K��8y�L����}y�]��
'wG���a�I�_�B�,I�-���jC�����P���M�M�Y��	K�������z(��u-'N�$w�+M��~��Y���Z����x���M�6�]��w�z��x�*��R�b�$������D%���5��<�j�S0�bJ��:}����Ym>���H�mW�?��8��>��P�����e�g�T�CwM�y��W�0Z���$����b���'�3���4��o���u��x}s�9uvu$�>����A�����_Ao��^����������n��<iq������}R3G�q%�F��%���G`����
����g�?��Z���O��[��..�~�/G�e���<���e��A�4�k���OI�haT�8����M	�:(���d�m������m�:���Z2�������c��4\���������������g����w���7������?��d/�?CQ\}m��i~�U��B\�L{����!�Qk�t�*L���nx!�K������������Sj~�K�SQ�L���W0�KUW<}��������C���(lr���_Y� {")���>����v��������aNvF�%=���'��68L(�1�]������+���xm�H����Y
�������0iF�s��s�����@�� f�M2Rqn9�����3��~:n�����-r��\Y:a#�9@8�:�M�����r�PZ��[���1�����Xos��f(�B�F�����U��E�'
574��������QX$VK.d��N��R���`���I!hw��l��*h�!��d�9�����������bO�G~I�_�(�o�=�.�����T��4=���b�~X�Z�����X�N����h�SV�\l�I�_���W��������%k�k�T�����z��E��uu9��S
)�X����yb����1���Ae�Sp����x*u�v��V)I��3��1|����r�m)�J��_�,�����R�#l����Z�d��g�5���X^��y�Y"y-�-t��,�0r�_PH�����5�����w4P�L����]�hIV;L��&j�Z���z����|z�@zB#��dm ��
���h�dH���7��������c�G�e�L�xZ�H��K`a��
��r�z]�!?�h��.%������nD`Y~����hk��)�g���
88�����Z,o���j��=��rm�U<;`�}���6q
\�ALB������OK/�tr:�������o
(���	w $���� � �"]4
L�x�M4��'����<1\��z�z4�G30J�p��<���	g��T�
o)��1�L���lC*��O��<�
H���Cv�e~U��l3�����Ov���z?�{�C����pP������#|�-1�FH�>���������U8vw�c������|duZ�D�g-��m0�����))7���#���'e0Z����b��t����'���'�B�&=��^P���om��d���f���,�S����zN�X��!�7��Z��'�����c�(����[�����.fj�������9���2O����c�~r�(����������}��t��9�K6���zM�:���mn��
?�0�����c!��mG��-�Y�+q�������c���g�h�3���^O��c���lJ���`���������,Q��m��Lv��q��������1
l�I����*�GG����$����X���LX<�w����e��b�$w���D�/.� ������A��_"|���5�[��/^��a���A����m���=�O���������}�?�������z����_��
p����k������\j�]5�*�v������H����cSHc�W�B�%6K�g�x5=�$Wq�����
c	�v��8u��n��PX���$�������
�9� r�����j���w?�q�1�0����"wa�~��;�F��Vp�k�p�e��������8��GL�J=����0�%�7��|����*3j�\���>�r�X��e��N�x�,� �plB�-��
-Ca�e��!�������>���1�����F���������u��������lX�9�k
':������c�"j�`$��e�������i���G@���5���@x+��������>G� -a����x�C�m�lJ�Dx��P��%�x����L�B
��?a����u<I�;d��_k������z6������9;M���
�����'���oYH��OBr������/�;\GP��c�wr��mZ9���xx�	p�Z(8�X�@P���Bur2��O��f,:>������"HKX���;#��o��" ����Z��'�����v-��a��?�IE�MJB��g��,�7�Sh�6f$�Vl �W.I�F%�ja	ZTv C����x�?���1^��C���
�@��Kp���yu�C7��t,��o����"�v(	x$�h�T8��d�"��zw������R��'���t��'[��^�������b���u�Z
%D�7���-�k�}|��}������������d�DS���87���X:g<G:c?���s�h�S��E�
��S8v��U04���|x��`\��J.�8�!n��G�4�9�KXI��-'������HS�Zj����
[�s��#s�{���d��Qb�����	������E�]�s�������q���������+1�u�#���JKhve���Z��i���N-�z�����t�#��y����+�q'��U��b�������$C_����Z�}�	� ���M�`��jox��+{��'�
L��	2&/)�8r��2C���_������M=�8U��-[�t���^)���uv7�Kn�4k��2�i4IV��^��Iy;Qy�B���
r.�������Y9�O_XP����
����G�����m��n����eX�V)
6����������T���_����}Y�9>��Q��*���i��dS��=���?����G���F������F<�q�����I������,X����V�
�\������$���McbH9��4���e�V��6
w}�%+�������6y��O�Hw�C
��r3
�, �������5I��
R9+1C�_�9�\>�/���4���<�������\;~�4~��~��'�I��d�����72��2L�}��AfjrB_~�Yx����F8�������!���������7�b�d�u\L���Q9V�#�����I������)O+"��F2��y$~�3'�[s~��$��z�T�U{.p8�5���l��8<��	�`�8�����n7���e�bF����TS�aq��M=nT#FI�K�����T����P�a�3�h�*:�`1�[v�i/�����SE�
�����NM2���KE5���0��0��������2�"O~	�����c4t� P?�����C6�|����"��
Rj�nzP*��7��8��?���H�PTU�i���w0��+L���tU}�������_�^��G��8��	D�h�r?&c�{!�����~{�l��}w�0E*���8����p�cr�Se��C��Z��K��#����#��#�%��2�@7�XE�j�N��n6���h���1�.7������_�q+��F�3|K������#��(�G��Q�g��~��?)x/����>��:�%���
�K{U��D����Nda�nlm���u�-E�/xq�4#�.��{8*RA������_��*�a3��^yk/�����39$P�
#51Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#50)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On Tue, Jun 13, 2017 at 05:00:31PM -0400, Tom Lane wrote:

Anyway, it is now time to fish or cut bait. I don't think we can wait
much longer to decide whether we're going to adopt this new indent
version for PG 10. I think we should. The floor is open for votes.

Works for me.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#52Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Tom Lane (#48)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On 2017-06-13 22:23, Tom Lane wrote:

I could not find any places where reverting this change made the
results worse, so I'm unclear on why you made it.

I must admit I'm a bit confused about why it's not fixed yet, but I'll
have to analyze that later this week. But the idea was to convince
indent that the following is not a declaration and therefore it
shouldn't be formatted as such:

typedef void (*voidptr) (int *);

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#53Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#52)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

On 2017-06-13 22:23, Tom Lane wrote:

I could not find any places where reverting this change made the
results worse, so I'm unclear on why you made it.

I must admit I'm a bit confused about why it's not fixed yet, but I'll
have to analyze that later this week. But the idea was to convince
indent that the following is not a declaration and therefore it
shouldn't be formatted as such:

typedef void (*voidptr) (int *);

Hm. But that's just a function pointer typedef, and we like the
formatting we're getting for those from this new version --- with or
without that change. What do you think needs to be done differently?

I note btw that this is not the first time we've discussed that
particular bit of code in this thread. I proposed a couple of
different possible changes to it before ...

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#54Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#53)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

btw, I was slightly amused to notice that this version still calls itself

$ indent -V
pg_bsd_indent 1.3

Don't know what you plan to do with that program name, but we certainly
need a version number bump so that pgindent can tell that it's got an
up-to-date copy. 1.4? 2.0?

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#55Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#54)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On Wed, Jun 14, 2017 at 10:38:40AM -0400, Tom Lane wrote:

btw, I was slightly amused to notice that this version still calls itself

$ indent -V
pg_bsd_indent 1.3

Don't know what you plan to do with that program name, but we certainly
need a version number bump so that pgindent can tell that it's got an
up-to-date copy. 1.4? 2.0?

For Piotr's reference, we will update src/tools/pgindent/pgindent to
match whatever new version number you use.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#56Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#49)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

On 2017-06-13 18:22, Tom Lane wrote:

Also, I am wondering about the test cases under tests/. I do not
see anything in the Makefile or elsewhere suggesting how those are
to be used. It would sure be nice to have some quick smoke-test
to check that a build on a new platform is working.

They'd started out like David Holland's tests for his tradcpp(1), with a
similar makefile (again, BSD make). But I was tenaciously asked to use
Kyua (a testing framework that is the standard regression test mechanism
for FreeBSD) instead, so now the makefile's existence and use is a great
secret and the file is not under any source control. Adaption of the
indent test suite to Kyua made the makefile more inelegant, but I'm
attaching it to this email in hope that you can do something useful with
it. I can only guess that you have the option to use Kyua instead, but I
don't know the tool at all.

Ah, thanks. I hacked up a gmake rule for this:

test: $(INDENT)
cp $(srcdir)/tests/*.list .
for testsrc in $(srcdir)/tests/*.0; do \
test=`basename "$$testsrc" .0`; \
./$(INDENT) $$testsrc $$test.out -P$(srcdir)/tests/$$test.pro || echo FAILED >>$$test.out; \
diff -u $$testsrc.stdout $$test.out || exit 1; \
done

and I'm getting one failure, which I don't understand:

--- ./tests/f_decls.0.stdout	2017-05-21 19:40:38.507303623 -0400
+++ f_decls.out	2017-06-14 13:28:49.212871476 -0400
@@ -1,4 +1,4 @@
-char *
+char	       *
 x(void)
 {
 	type		identifier;
@@ -13,7 +13,7 @@
 	return NULL;
 }
-int *
+int	       *
 y(void)
 {

Does that test case pass for you?

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#57Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Tom Lane (#56)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On 2017-06-14 19:31, Tom Lane wrote:

Does that test case pass for you?

No, I broke it recently. Sorry.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#58Piotr Stefaniak
postgres@piotr-stefaniak.me
In reply to: Bruce Momjian (#55)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

On 2017-06-14 17:05, Bruce Momjian wrote:

On Wed, Jun 14, 2017 at 10:38:40AM -0400, Tom Lane wrote:

btw, I was slightly amused to notice that this version still calls itself

$ indent -V
pg_bsd_indent 1.3

Don't know what you plan to do with that program name, but we certainly
need a version number bump so that pgindent can tell that it's got an
up-to-date copy. 1.4? 2.0?

For Piotr's reference, we will update src/tools/pgindent/pgindent to
match whatever new version number you use.

I would like to go a bit further than that. I see that GNU indent
doesn't recognize -V, but prints its version if you use the option
--version. I wish to implement the same option for FreeBSD indent, but
that would force a change in how pgindent recognizes indent.

As for the version bump, I briefly considered "9.7.0", but 2.0 seems
more appropriate as the 2 would reflect the fundamental changes that
I've done and the .0 would indicate that it's still rough around edges.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#59Tom Lane
tgl@sss.pgh.pa.us
In reply to: Piotr Stefaniak (#58)
Re: pgindent (was Re: [COMMITTERS] pgsql: Preventive maintenance in advance of pgindent run.)

Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:

I would like to go a bit further than that. I see that GNU indent
doesn't recognize -V, but prints its version if you use the option
--version. I wish to implement the same option for FreeBSD indent, but
that would force a change in how pgindent recognizes indent.

Not really a problem, considering we're making far larger changes
than that to the pgindent script anyway.

As for the version bump, I briefly considered "9.7.0", but 2.0 seems
more appropriate as the 2 would reflect the fundamental changes that
I've done and the .0 would indicate that it's still rough around edges.

Yeah, +1 for 2.0.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers