Dynamic gathering the values for seq_page_cost/xxx_cost

Started by Andy Fanabout 6 years ago12 messages
#1Andy Fan
zhihui.fan1213@gmail.com

The optimizer cost model usually needs 2 inputs, one is used to represent
data distribution and the other one is used to represent the capacity of
the hardware, like cpu/io let's call this one as system stats.

In Oracle database, the system stats can be gathered with
dbms_stats.gather_system_stats [1]https://docs.oracle.com/database/121/ARPLS/d_stats.htm#ARPLS68580 on the running hardware, In
postgresql, the value is set on based on experience (user can change the
value as well, but is should be hard to decide which values they should
use). The pg way is not perfect in theory(In practice, it may be good
enough or not). for example, HDD & SSD have different capacity regards to
seq_scan_cost/random_page_cost, cpu cost may also different on different
hardware as well.

I run into a paper [2]https://dsl.cds.iisc.ac.in/publications/thesis/pankhuri.pdf which did some research on dynamic gathering the
values for xxx_cost, looks it is interesting. However it doesn't provide
the code for others to do more research. before I dive into this, It
would be great to hear some suggestion from experts.

so what do you think about this method and have we have some discussion
about this before and the result?

[1]: https://docs.oracle.com/database/121/ARPLS/d_stats.htm#ARPLS68580
[2]: https://dsl.cds.iisc.ac.in/publications/thesis/pankhuri.pdf

Thanks

#2Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Andy Fan (#1)
Re: Dynamic gathering the values for seq_page_cost/xxx_cost

On Tue, Nov 26, 2019 at 08:59:22AM +0800, Andy Fan wrote:

The optimizer cost model usually needs 2 inputs, one is used to represent
data distribution and the other one is used to represent the capacity of
the hardware, like cpu/io let's call this one as system stats.

In Oracle database, the system stats can be gathered with
dbms_stats.gather_system_stats [1] on the running hardware, In
postgresql, the value is set on based on experience (user can change the
value as well, but is should be hard to decide which values they should
use). The pg way is not perfect in theory(In practice, it may be good
enough or not). for example, HDD & SSD have different capacity regards to
seq_scan_cost/random_page_cost, cpu cost may also different on different
hardware as well.

I run into a paper [2] which did some research on dynamic gathering the
values for xxx_cost, looks it is interesting. However it doesn't provide
the code for others to do more research. before I dive into this, It
would be great to hear some suggestion from experts.

so what do you think about this method and have we have some discussion
about this before and the result?

IMHO it would be great to have a tool that helps with tuning those
parameters, particularly random_page_cost. I'm not sure how feasible it
is, though, but if you're willing to do some initial experiments and
research, I think it's worth looking into.

It's going to be challenging, though, because even random_page_cost=4
mismatches the "raw" characteristics on any existing hardware. On old
drives the sequential/random difference is way worse, on SSDs it's about
right. But then again, we know random_page_cost=1.5 or so works mostly
fine on SSDs, and that's much lower than just raw numbers.

So it's clearly one thing to measure HW capabilities, and it's another
thing to conclude what the parameters should be ...

regards

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

#3Andy Fan
zhihui.fan1213@gmail.com
In reply to: Tomas Vondra (#2)
2 attachment(s)
Re: Dynamic gathering the values for seq_page_cost/xxx_cost

On Thu, Nov 28, 2019 at 12:48 AM Tomas Vondra <tomas.vondra@2ndquadrant.com>
wrote:

On Tue, Nov 26, 2019 at 08:59:22AM +0800, Andy Fan wrote:

The optimizer cost model usually needs 2 inputs, one is used to represent
data distribution and the other one is used to represent the capacity of
the hardware, like cpu/io let's call this one as system stats.

In Oracle database, the system stats can be gathered with
dbms_stats.gather_system_stats [1] on the running hardware, In
postgresql, the value is set on based on experience (user can change the
value as well, but is should be hard to decide which values they should
use). The pg way is not perfect in theory(In practice, it may be good
enough or not). for example, HDD & SSD have different capacity regards

to

seq_scan_cost/random_page_cost, cpu cost may also different on different
hardware as well.

I run into a paper [2] which did some research on dynamic gathering the
values for xxx_cost, looks it is interesting. However it doesn't provide
the code for others to do more research. before I dive into this, It
would be great to hear some suggestion from experts.

so what do you think about this method and have we have some discussion
about this before and the result?

IMHO it would be great to have a tool that helps with tuning those
parameters, particularly random_page_cost. I'm not sure how feasible it
is, though, but if you're willing to do some initial experiments and
research, I think it's worth looking into.

It's going to be challenging, though, because even random_page_cost=4
mismatches the "raw" characteristics on any existing hardware. On old
drives the sequential/random difference is way worse, on SSDs it's about
right. But then again, we know random_page_cost=1.5 or so works mostly
fine on SSDs, and that's much lower than just raw numbers.

So it's clearly one thing to measure HW capabilities, and it's another
thing to conclude what the parameters should be ...

regards

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

I recently tried something in this direction and the result looks
promising based on my limited test.

Since the unit of a xxx_cost is "seq_page_cost", then how to detect
seq_page_cost is important. In the cost model, the IO cost of a seqscan is
rel->pages * seq_page_cost, it doesn't consider any cache (file system
cache or
shared buffer cache). However, it assumes the OS will prefetch the IO. So
to
detect the seq_page_cost, I enabled the prefetch but avoided the file system
cache. I tested this with 1). drop the cache on the file system. 2). Open
the test
file without O_DIRECT so that the prefetch can work.

To detect the random page read, I read it with pread with a random offset.
Since the random offsets may be the same as each other during the test,
so even dropping the file system cache at the beginning doesn't work. so
I open it with the O_DIRECT option.

I also measure the cost of reading a page from a file system cache, during
my test, it is about 10% of a seq scan read.

After I get the basic numbers about the hardware capability, I let the user
provide a cache hit ratio (This is a place where we can further improve if
this
is a right direction).

Here is the test result on my hardware.

fs_cache_lat = 0.832025us, seq_read_lat = 8.570290us, random_page_lat =
73.987732us

cache hit ratio: 1.000000 random_page_cost 1.000000
cache hit ratio: 0.900000 random_page_cost 5.073692
cache hit ratio: 0.500000 random_page_cost 7.957589
cache hit ratio: 0.100000 random_page_cost 8.551591
cache hit ratio: 0.000000 random_page_cost 8.633049

Then I tested the suggested value with the 10GB TPCH
workload. I compared the plans with 2 different settings random_page_cost =
1). 4 is the default value) 2). 8.6 the cache hint ratio = 0 one. Then 11
out of the 22
queries generated a different plan. At last I drop the cache (including
both
file system cache and shared_buffer) before run each query and run the 11
queries
under the 2 different settings. The execution time is below.

| | random_page_cost=4 | random_page_cost=8.6 |
|-----+--------------------+----------------------|
| Q1 | 1425.964 | 1121.928 |
| Q2 | 2553.072 | 2567.450 |
| Q5 | 4397.514 | 1475.343 |
| Q6 | 12576.985 | 4622.503 |
| Q7 | 3459.777 | 2987.241 |
| Q8 | 8360.995 | 8415.311 |
| Q9 | 4661.842 | 2930.370 |
| Q11 | 4885.289 | 2348.541 |
| Q13 | 2610.937 | 1497.776 |
| Q20 | 13218.122 | 10985.738 |
| Q21 | 264.639 | 262.350 |

The attached main.c is the program I used to detect the
random_page_cost. result.tar.gz is the test result, you can run a git log
first
to see the difference on plan or execution stat.

Any feedback is welcome. Thanks!

--
Best Regards
Andy Fan

Attachments:

main.capplication/octet-stream; name=main.cDownload
result.tar.gzapplication/x-gzip; name=result.tar.gzDownload
#4Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Andy Fan (#3)
Re: Dynamic gathering the values for seq_page_cost/xxx_cost

On Fri, Sep 18, 2020 at 09:28:10PM +0800, Andy Fan wrote:

On Thu, Nov 28, 2019 at 12:48 AM Tomas Vondra <tomas.vondra@2ndquadrant.com>
wrote:

On Tue, Nov 26, 2019 at 08:59:22AM +0800, Andy Fan wrote:

The optimizer cost model usually needs 2 inputs, one is used to represent
data distribution and the other one is used to represent the capacity of
the hardware, like cpu/io let's call this one as system stats.

In Oracle database, the system stats can be gathered with
dbms_stats.gather_system_stats [1] on the running hardware, In
postgresql, the value is set on based on experience (user can change the
value as well, but is should be hard to decide which values they should
use). The pg way is not perfect in theory(In practice, it may be good
enough or not). for example, HDD & SSD have different capacity regards

to

seq_scan_cost/random_page_cost, cpu cost may also different on different
hardware as well.

I run into a paper [2] which did some research on dynamic gathering the
values for xxx_cost, looks it is interesting. However it doesn't provide
the code for others to do more research. before I dive into this, It
would be great to hear some suggestion from experts.

so what do you think about this method and have we have some discussion
about this before and the result?

IMHO it would be great to have a tool that helps with tuning those
parameters, particularly random_page_cost. I'm not sure how feasible it
is, though, but if you're willing to do some initial experiments and
research, I think it's worth looking into.

It's going to be challenging, though, because even random_page_cost=4
mismatches the "raw" characteristics on any existing hardware. On old
drives the sequential/random difference is way worse, on SSDs it's about
right. But then again, we know random_page_cost=1.5 or so works mostly
fine on SSDs, and that's much lower than just raw numbers.

So it's clearly one thing to measure HW capabilities, and it's another
thing to conclude what the parameters should be ...

regards

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

I recently tried something in this direction and the result looks
promising based on my limited test.

Since the unit of a xxx_cost is "seq_page_cost", then how to detect
seq_page_cost is important. In the cost model, the IO cost of a seqscan is
rel->pages * seq_page_cost, it doesn't consider any cache (file system
cache or
shared buffer cache). However, it assumes the OS will prefetch the IO. So
to
detect the seq_page_cost, I enabled the prefetch but avoided the file system
cache. I tested this with 1). drop the cache on the file system. 2). Open
the test
file without O_DIRECT so that the prefetch can work.

To detect the random page read, I read it with pread with a random offset.
Since the random offsets may be the same as each other during the test,
so even dropping the file system cache at the beginning doesn't work. so
I open it with the O_DIRECT option.

I also measure the cost of reading a page from a file system cache, during
my test, it is about 10% of a seq scan read.

After I get the basic numbers about the hardware capability, I let the user
provide a cache hit ratio (This is a place where we can further improve if
this
is a right direction).

Here is the test result on my hardware.

fs_cache_lat = 0.832025us, seq_read_lat = 8.570290us, random_page_lat =
73.987732us

cache hit ratio: 1.000000 random_page_cost 1.000000
cache hit ratio: 0.900000 random_page_cost 5.073692
cache hit ratio: 0.500000 random_page_cost 7.957589
cache hit ratio: 0.100000 random_page_cost 8.551591
cache hit ratio: 0.000000 random_page_cost 8.633049

Then I tested the suggested value with the 10GB TPCH
workload. I compared the plans with 2 different settings random_page_cost =
1). 4 is the default value) 2). 8.6 the cache hint ratio = 0 one. Then 11
out of the 22
queries generated a different plan. At last I drop the cache (including
both
file system cache and shared_buffer) before run each query and run the 11
queries
under the 2 different settings. The execution time is below.

| | random_page_cost=4 | random_page_cost=8.6 |
|-----+--------------------+----------------------|
| Q1 | 1425.964 | 1121.928 |
| Q2 | 2553.072 | 2567.450 |
| Q5 | 4397.514 | 1475.343 |
| Q6 | 12576.985 | 4622.503 |
| Q7 | 3459.777 | 2987.241 |
| Q8 | 8360.995 | 8415.311 |
| Q9 | 4661.842 | 2930.370 |
| Q11 | 4885.289 | 2348.541 |
| Q13 | 2610.937 | 1497.776 |
| Q20 | 13218.122 | 10985.738 |
| Q21 | 264.639 | 262.350 |

The attached main.c is the program I used to detect the
random_page_cost. result.tar.gz is the test result, you can run a git log
first
to see the difference on plan or execution stat.

Any feedback is welcome. Thanks!

That seems pretty neat. What kind of hardware have you done these tests
on? It's probably worth testing on various other storage systems to see
how that applies to those.

Have you tried existing I/O testing tools, e.g. fio? If your idea is to
propose some built-in tool (similar to pg_test_fsync) then we probably
should not rely on external tools, but I wonder if we're getting the
same numbers.

regards

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

#5Andy Fan
zhihui.fan1213@gmail.com
In reply to: Tomas Vondra (#4)
1 attachment(s)
Re: Dynamic gathering the values for seq_page_cost/xxx_cost

Hi Tomas:
Thanks for checking.

On Fri, Sep 18, 2020 at 9:50 PM Tomas Vondra <tomas.vondra@2ndquadrant.com>
wrote:

I recently tried something in this direction and the result looks
promising based on my limited test.

Since the unit of a xxx_cost is "seq_page_cost", then how to detect
seq_page_cost is important. In the cost model, the IO cost of a seqscan is
rel->pages * seq_page_cost, it doesn't consider any cache (file system
cache or
shared buffer cache). However, it assumes the OS will prefetch the IO. So
to
detect the seq_page_cost, I enabled the prefetch but avoided the file

system

cache. I tested this with 1). drop the cache on the file system. 2). Open
the test
file without O_DIRECT so that the prefetch can work.

To detect the random page read, I read it with pread with a random offset.
Since the random offsets may be the same as each other during the test,
so even dropping the file system cache at the beginning doesn't work. so
I open it with the O_DIRECT option.

I also measure the cost of reading a page from a file system cache, during
my test, it is about 10% of a seq scan read.

After I get the basic numbers about the hardware capability, I let the

user

provide a cache hit ratio (This is a place where we can further improve if
this
is a right direction).

Here is the test result on my hardware.

fs_cache_lat = 0.832025us, seq_read_lat = 8.570290us, random_page_lat =
73.987732us

cache hit ratio: 1.000000 random_page_cost 1.000000
cache hit ratio: 0.900000 random_page_cost 5.073692
cache hit ratio: 0.500000 random_page_cost 7.957589
cache hit ratio: 0.100000 random_page_cost 8.551591
cache hit ratio: 0.000000 random_page_cost 8.633049

Then I tested the suggested value with the 10GB TPCH
workload. I compared the plans with 2 different settings random_page_cost

=

1). 4 is the default value) 2). 8.6 the cache hint ratio = 0 one. Then

11

out of the 22
queries generated a different plan. At last I drop the cache (including
both
file system cache and shared_buffer) before run each query and run the 11
queries
under the 2 different settings. The execution time is below.

| | random_page_cost=4 | random_page_cost=8.6 |
|-----+--------------------+----------------------|
| Q1 | 1425.964 | 1121.928 |
| Q2 | 2553.072 | 2567.450 |
| Q5 | 4397.514 | 1475.343 |
| Q6 | 12576.985 | 4622.503 |
| Q7 | 3459.777 | 2987.241 |
| Q8 | 8360.995 | 8415.311 |
| Q9 | 4661.842 | 2930.370 |
| Q11 | 4885.289 | 2348.541 |
| Q13 | 2610.937 | 1497.776 |
| Q20 | 13218.122 | 10985.738 |
| Q21 | 264.639 | 262.350 |

The attached main.c is the program I used to detect the
random_page_cost. result.tar.gz is the test result, you can run a git log
first
to see the difference on plan or execution stat.

Any feedback is welcome. Thanks!

That seems pretty neat. What kind of hardware have you done these tests
on?

The following is my hardware info.

I have 12 SSD behind the MR9271-8i RAID Controller which has a 1GB buffer.
[1]: https://www.cdw.com/product/lsi-megaraid-sas-9271-8i-storage-controller-raid-sas-pcie-3.0-x8/4576538#PO

root# lshw -short -C disk
H/W path Device Class Description
==============================================================
/0/100/2/0/2.0.0 /dev/sda disk 2398GB MR9271-8i
/0/100/2/0/2.1.0 /dev/sdb disk 5597GB MR9271-8i <-- my
data location

/opt/MegaRAID/MegaCli/MegaCli64 -AdpAllInfo -aALL

Adapter #0

Memory Size : 1024MB
RAID Level : Primary-5, Secondary-0, RAID Level Qualifier-3
..
Current Cache Policy: WriteBack, ReadAheadNone, Direct, Write Cache OK if
Bad
BBU
...
Device Present
================
Virtual Drives : 2
Degraded : 0
Offline : 0
Physical Devices : 14
Disks : 12
Critical Disks : 0
Failed Disks : 0

root# /opt/MegaRAID/MegaCli/MegaCli64 -LdPdInfo -a0 | egrep 'Media
Type|Raw Size'
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device
Raw Size: 745.211 GB [0x5d26ceb0 Sectors]
Media Type: Solid State Device

CPU: Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz, 32 processors.
Memory: 251 GB
Linux: 3.10.0-327
fs: ext4. mount options: defaults,noatime,nodiratime,nodelalloc,barrier=0
Physical machine.

It's probably worth testing on various other storage systems to see

how that applies to those.

Yes, I can test more on new hardware once I get it. Now it is still in

progress.
However I can only get a physical machine with SSD or Virtual machine with
SSD, other types are hard for me right now.

Have you tried existing I/O testing tools, e.g. fio? If your idea is to

propose some built-in tool (similar to pg_test_fsync) then we probably
should not rely on external tools, but I wonder if we're getting the
same numbers.

Thanks for this hint, I found more interesting stuff during the comparison.

I define the FIO jobs as below.

random_page_cost.job:
[global]
blocksize=8k
size=1Gi
filesize=1Gi
ioengine=sync
directory=/u01/yizhi/data/fio

[random_page_cost]
direct=1
readwrite=randread

Even it is direct IO, the device cache still plays an important
part. The device cache is filled in preparing the test data file stage.
I invalidate the device cache by writing a new dummy file. At last the avg
latency time is 148 us.

seq.job

[global]
blocksize=8k
size=1Gi
filesize=1Gi
ioengine=sync
directory=/u01/yizhi/data/fio

[seq_page_cost]
buffered=1
readwrite=read

For seq read, We need buffered IO for perfetch, however, we need to bypass
the file
system cache and device cache. fio have no control of such caches, so I did:

1). Run fio to generate the test file.
2). Invalidate device cache first with dd if=/dev/zero of=a_dummy_file
bs=1048576 count=1024
3). drop the file system cache.
4). Run the fio again.

The final avg latency is ~12 us.

This is 1.5 ~ 2 X difference with my previous result. (seq_read_lat =
8.570290us, random_page_lat =
73.987732us)

Here are some changes for my detection program.

| | seq_read_lat (us) |
random_read_lat (us) |
| FIO | 12 |
148 |
| Previous main.c | 8.5 |
74 |
| invalidate_device_cache before each testing | 9 |
150 |
| prepare the test data file with O_DIRECT option | 15 |
150 |

In invalidate_device_cache, I just create another 1GB data file and read
it. (see invalidate_device_cache function) this is similar as the previous
fio setup.

prepare test data file with O_DIRECT option means in the past, I prepare
the test
file with buffer IO. and before testing, I do invalidate device cache, file
system cache. but the buffered prepared file still get better performance, I
have no idea of it. Since I don't want any cache. I use O_DIRECT
option at last. The seq_read_lat changed from 9us to 15us.
I still can't find out the 25% difference with the FIO result. (12 us vs 9
us).

At last, the random_page_cost happens to not change very much.

/u/y/g/fdirect> sudo ./main
fs_cache_lat = 0.569031us, seq_read_lat = 18.901749us, random_page_lat =
148.650589us

cache hit ratio: 1.000000 random_page_cost 1.000000
cache hit ratio: 0.900000 random_page_cost 6.401019
cache hit ratio: 0.500000 random_page_cost 7.663772
cache hit ratio: 0.100000 random_page_cost 7.841498
cache hit ratio: 0.000000 random_page_cost 7.864383

This result looks much different from "we should use 1.1 ~ 1.5 for SSD".

The attached is the modified detection program.

[1]: https://www.cdw.com/product/lsi-megaraid-sas-9271-8i-storage-controller-raid-sas-pcie-3.0-x8/4576538#PO
https://www.cdw.com/product/lsi-megaraid-sas-9271-8i-storage-controller-raid-sas-pcie-3.0-x8/4576538#PO

--
Best Regards
Andy Fan

Attachments:

main.capplication/octet-stream; name=main.cDownload
#6Ashutosh Bapat
ashutosh.bapat.oss@gmail.com
In reply to: Andy Fan (#5)
Re: Dynamic gathering the values for seq_page_cost/xxx_cost

On Mon, Sep 21, 2020 at 9:11 AM Andy Fan <zhihui.fan1213@gmail.com> wrote:

Here are some changes for my detection program.

| | seq_read_lat (us) | random_read_lat (us) |
| FIO | 12 | 148 |
| Previous main.c | 8.5 | 74 |
| invalidate_device_cache before each testing | 9 | 150 |
| prepare the test data file with O_DIRECT option | 15 | 150 |

In invalidate_device_cache, I just create another 1GB data file and read
it. (see invalidate_device_cache function) this is similar as the previous fio setup.

prepare test data file with O_DIRECT option means in the past, I prepare the test
file with buffer IO. and before testing, I do invalidate device cache, file
system cache. but the buffered prepared file still get better performance, I
have no idea of it. Since I don't want any cache. I use O_DIRECT
option at last. The seq_read_lat changed from 9us to 15us.
I still can't find out the 25% difference with the FIO result. (12 us vs 9 us).

At last, the random_page_cost happens to not change very much.

/u/y/g/fdirect> sudo ./main
fs_cache_lat = 0.569031us, seq_read_lat = 18.901749us, random_page_lat = 148.650589us

cache hit ratio: 1.000000 random_page_cost 1.000000
cache hit ratio: 0.900000 random_page_cost 6.401019
cache hit ratio: 0.500000 random_page_cost 7.663772
cache hit ratio: 0.100000 random_page_cost 7.841498
cache hit ratio: 0.000000 random_page_cost 7.864383

This result looks much different from "we should use 1.1 ~ 1.5 for SSD".

Very interesting. Thanks for working on this. In an earlier email you
mentioned that TPCH plans changed to efficient ones when you changed
random_page_cost = =8.6 from 4 and seq_page_cost was set to 1. IIUC,
setting random_page_cost to seq_page_cost to the same ratio as that
between the corresponding latencies improved the plans. How about
trying this with that ratio set to the one obtained from the latencies
provided by FIO? Do we see any better plans?

page cost is one thing, but there are CPU costs also involved in costs
of expression evaluation. Should those be changed accordingly to the
CPU latency?

--
Best Wishes,
Ashutosh Bapat

#7Andy Fan
zhihui.fan1213@gmail.com
In reply to: Ashutosh Bapat (#6)
1 attachment(s)
Re: Dynamic gathering the values for seq_page_cost/xxx_cost

Thanks Ashutosh for coming:)

On Mon, Sep 21, 2020 at 9:03 PM Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
wrote:

On Mon, Sep 21, 2020 at 9:11 AM Andy Fan <zhihui.fan1213@gmail.com> wrote:

Here are some changes for my detection program.

| | seq_read_lat (us) |

random_read_lat (us) |

| FIO | 12 |

148 |

| Previous main.c | 8.5 |

74 |

| invalidate_device_cache before each testing | 9 |

150 |

| prepare the test data file with O_DIRECT option | 15 |

150 |

In invalidate_device_cache, I just create another 1GB data file and read
it. (see invalidate_device_cache function) this is similar as the

previous fio setup.

prepare test data file with O_DIRECT option means in the past, I prepare

the test

file with buffer IO. and before testing, I do invalidate device cache,

file

system cache. but the buffered prepared file still get better

performance, I

have no idea of it. Since I don't want any cache. I use O_DIRECT
option at last. The seq_read_lat changed from 9us to 15us.
I still can't find out the 25% difference with the FIO result. (12 us vs

9 us).

At last, the random_page_cost happens to not change very much.

/u/y/g/fdirect> sudo ./main
fs_cache_lat = 0.569031us, seq_read_lat = 18.901749us, random_page_lat =

148.650589us

cache hit ratio: 1.000000 random_page_cost 1.000000
cache hit ratio: 0.900000 random_page_cost 6.401019
cache hit ratio: 0.500000 random_page_cost 7.663772
cache hit ratio: 0.100000 random_page_cost 7.841498
cache hit ratio: 0.000000 random_page_cost 7.864383

This result looks much different from "we should use 1.1 ~ 1.5 for SSD".

Very interesting. Thanks for working on this. In an earlier email you
mentioned that TPCH plans changed to efficient ones when you changed
random_page_cost = =8.6 from 4 and seq_page_cost was set to 1. IIUC,
setting random_page_cost to seq_page_cost to the same ratio as that
between the corresponding latencies improved the plans.

Yes.

How about

trying this with that ratio set to the one obtained from the latencies
provided by FIO? Do we see any better plans?

My tools set the random_page_cost to 8.6, but based on the fio data, it
should be
set to 12.3 on the same hardware. and I do see the better plan as well
with 12.3.
Looks too smooth to believe it is true..

The attached result_fio_mytool.tar.gz is my test result. You can use git
show HEAD^^
is the original plan with 8.6. git show HEAD^ show the plan changes after
we changed
the random_page_cost. git show HEAD shows the run time statistics changes
for these queries.
I also uploaded the test tool [1]https://github.com/zhihuiFan/tpch-postgres/blob/master/random_page_cost.sh for this for your double check.

| | 8.6 | 12.3 |

|-----+----------+----------|

| Q2 | 2557.064 | 2444.995 |

| Q4 | 3544.606 | 3148.884 |

| Q7 | 2965.820 | 2240.185 |

| Q14 | 4988.747 | 4931.375 |

page cost is one thing, but there are CPU costs also involved in costs
of expression evaluation. Should those be changed accordingly to the
CPU latency?

Yes, we need that as well. At the beginning of this thread, I treat all

of them equally.
In the first reply of Tomas, he mentioned random_page_cost specially. After
~10 months, I tested TPCH on a hardware and then found random_page_cost
is set too incorrectly, after fixing it, the result looks much better. So
I'd like to work
on this special thing first.

[1]: https://github.com/zhihuiFan/tpch-postgres/blob/master/random_page_cost.sh
https://github.com/zhihuiFan/tpch-postgres/blob/master/random_page_cost.sh

--
Best Regards
Andy Fan

Attachments:

result_fio_mytool.tar.gzapplication/x-gzip; name=result_fio_mytool.tar.gzDownload
���i_�]	\G�oQT�G�H4��&�U*
"r�
�B�!�\$�����(�U(j�(x���
RP����-*�"V�Q����$@�4�}o���$���<3�3�53�����yb���]� "� �g�D����D�a"Ip���?3]DETt�a�2YV�Xf��P�Pil1��!�
����,�V���3����a2E�X�=�%��?5!��?��K����w��j����H�?V�f����T6+���}h�
��P}l�$%�c�Y\�%B9V� !������c��ZTn� TR&�t� [Z�'����t[V|'~��*��l�*�m
�!n��'5-�B���M5"��f�l`*U���X\�u��T���b��tl�xA�7ah0A���R|k�5��
|hT.��^���~TLWk���������b
�-B��S����=�Y���;����X����iL�`�,<�����8����0`	P��K>�����WP����`7��ll�cA{a=�Xs��""������=!bqP��p�@K��E�q	���x�>"^�����z�2��9�[��AD��%��H"���6��2UBG���-�>���|��i��Z^���Y��JD��D!��qp��L�T����q���\OZ��L�?H�S���V�F@Y����)>�;q?V|aC�L�|"B�6��M�I�����"|3!��~?�Z7+41�$���xL���" >�4�uv��~����}�	���eC����4UM,�.%��
�4�MgC�\[��o�WKcl$`b��RIe���)I�n�A������4�e(O�|���'��{+��P�)iJ���H�joK�OTk�HG������j�DgaSgi?��y����j6qr=��o1�-�����1/��<^�k�H�����T.�X�E��6:I��+�T�T�|X�6�����(� 4�v�Rsz�0��$q���V[��>�������GY�P��R� =Z�(�h<?������QWXy
4��Q`���*iw@��:4eK��%��4D�/-��AH�?�S��V&����4���?m@C���2y��e^��y�F#B�"��G�p4L�x��������4n"����3�%��X�5EE���X���U�m)����{k�T����j�s*S}
���i��("L�<��@+�����Q��)R�0�@	0��!�DD"@�Y�*����u��##��lb�/G)��]9i�%�)��Vw�EWJ�`���t���������-��$�
E�yp�1�^�4��J�ql;�.E#�J�
F��d��WCZ��d�_��?F���/������km����f����PI�	#8�fBiJ�8wH������L}p#�e��a*A��m�0�J��E{�j��f��,�\�r����G���$g�ym����'�D*��b�4��Sz�4&JS��� �##L)�(k��S'�m����6��	������nI~L9���R!�J^���E=�$\���n����R+�����<O�����Zh�c5�_m�������J\{�^5]m�����`�.���!������A����d����?m�M��>U���H���,i��������>�����X3�e�dY��K�o��?e���D��&�Z��h)O���-*�m)�$�:)��v�HN�����J�i
uNH!�*�=|�s[�2���iesU5���W��%��P����������dG��EB��s����*����)�����F��� L"�"�`H ���@��PTr�P�3�����,'����I
gRvN������y������v<=\�}�::�'Y��-����R�x[Gc�}���d������<�I$����O���'E��ii�t���O��������{LM�����,*��X������X���t�P�0��r����~z#_��N_{�74�P��R��<F=O�5K��E�
]<56��2���������?>15��K�X���
J1C��b�F��'��!���R��a�p��8�n[�����Pm��+C�=��w���Kn��9c��Yv����i������&s���-�&���`I�7�����8���A)m����?|^��g�}�K���&����d�����
(�/@���4�?�P0�c�?Q�m�	�E���s���D"B:�kM��D��O.������
��?�*�\�O�G��
�&�'S��ht*��BT�A���0���@t"Z3`���lH6d��q7W��X����(M�9\�v�u�_h�:�K��$��i*�oMg���D����T*�a��4!�PU�>�&�b�)�&��!
���ZA�^��,�5���0�t�H���}����7q	��������5��d��;L����I�7��glkN�`��B�s��l��%/��O$��7�D����f�?*'$���
�p��t��������;9�>��7�*������XI �dd7��;!�����!����g��<lV�1�A����^�F�Z?�����d�z���;RJ#V�v
�m��{��;�_P��|����G�����n�O��G��q���1���/:/������+���S�>g�:������jx�C�������l���L��:;e�����]{,�a�t6�����uV/��#��������z��&�.�	�}��d����F���~��p������z�{�F��������q�w���4\�lkz����g���Y����vIo ��w~�\����:no����L�9�b�W>O����|ma����mG�J��<7�1r�Zqw%��:�oav��#u5"��+�������]E�����Z�	u��b�3��O���Z�J�� ��A��T���t�F'�P�0���C LFlh$��hC�C0Ll���n�_+����������PL�w��;��}t����rg��lb�A����,����k�.��~G~��n�2a���Wv�'��>�d����eg_���1��`7k�����L|@*s�n5�A��1ct��+�C*Oe���R��M�~5���h��������	���=�@~��m��5��}�:�Y��)/�f�	�g�MO����7w@�r>�Q�~�H�VW:�����$*!�d���������%3�U{�������,�]q�M|���@��[�]��[�o���:l�g�?[�M>z�����{Ye�n������$��_2>o��k��d�3}?����;f�pUio�^w�G��8s�c�����l��4��ET��0�=�������z�,����c6����0c��#&W�{m�f��_`��5b���6��'55��.g/�=�|�n��q������{_5|��i��zG�Ef	��w=H]�T����F^��F�������]ZdX�?�e������.G��/IrK�x:,�G�^��+��W��=��8�o�������=��>Z�k��0�y��Z���kD�����Yl��[�2��������������,H��-�U|������7��?6��>]\;������%6�2:������������Cqz�m)/�_^_;)�v_OA�mAJ�A�n������E�QISV��_�wp�a��X��^�Sh��m����0Q����n�G+P�B�k��@H	D!:� !(QC����D!2���-������!"���G���~^9hX-���R�^���[��J�����������Z���	���{����&#�I���y�p��c���]�q~|i�A/�����q1�F����-7N\������C����%?���>��K���z�W��x��0���x�o��n��>}��u;s�r���o���0���k���v��o�L��0�'�_37����%E���#��\����9i��7w��\r1<��f�H��+��������hd��j��!�?���'>>x�%b��������'~<kr�(u��i�g�������T\�QO���;0��9�;��������ZU�Gx����]�%��c��9[�-}�����$�����������y����%���������*��uO(�?@�;g�O���W��������i�'N���I��C�r�0:�������)��=o��,{����>>t�W4����M����������.f��$���Kv.x��G],�%�s��sn����;9����G�����xP�c��(�����[����,2��B���3�7X�NT���o���oR�~==GXC���3�G�o��r����RMFo�M�N$�;<���}C��������w������o�Ly��B���h�������Er������h*�Og�k!3l`�bMF�����F�!�k����}���%A�����Hw�S+��;���rt���� h��`��p:k���A��1������G���)���8��K\��+W��xu��W�(+�ve��ag�����xl����������/�|!/+��|!~��J�[���y}�o��%G��g
�jp�>�<�����5��T8���9>�jZ�W�kS�B��)����\�?���/����g\��^�6~���q�
�����=����$�O7+�'*���p��?�a�8�������m~@r?o�j��-���
�Y`>�������wovf�i��n���K��7�_�l^t���K���t���v�����!k,DP�5�42�NF�0�N#2 �a� �k���?���!�N�kX��;3�:hr3/�4����
W���,xt����t��A����C�����U������{�X�����C�/�o��,uYYne��������|x�m��y���������A&kk���:A�y��m��S��������m��`�Oa��|�- ��N�~hJ93��Cfxwp|��w�g%*��\�bQ?����m�Qu�aA���1#��/���J�?�:���@'�
���[���5���LM���5�q�Q���k.o���'��XE��~R]�+�9�;��f�!���|{e���������o�+���>�����������~ukb�����g��)����� '�xeYs��8//��a������3�������M7�\'sh�2�����������Q� ��z�G|�����;����-��J��"(�$�p+)�TrQ�I�$g���J���%�����(�"9I�P� B�S��5�����Y=��
�ou?�Y��s��g���g��j�'�mjg����l���1���9�w�W^�=�h�9�f�4b/�^M���{@u�2M���<�.��C��_�c�0�o�}��Q�\L2�zV9Pm4��-o�*�L+7_Iw�s�K`�����^���>O����j�vnN�&bw��L����)��=w������x�?7��������N�w[���8�_ ���m[���A�P$L���0"�D�����`IX(�O������������'����l���r�A�|�
/L]A
u8�m�,���xI���_f��ll\C���
�
���m(<Q���SFq�j$����4B&�j��igU>:�T����yP��sh1�w���mP^��R�}�/r�=y`��{4��7�d���&^��uLF����r���h|h�F=��P%��~M��l����%�?|��o[���"�X�#8<
!����|���D`�0A��_��R����;�?lNt�Z���/[��J��[�&�A�
:����<:p����Q-�?��'�����j����z�am�������sd��a�����\�
�T/���.�EO7�\����g�Q��q������/�j���r���R����/u�>�T��+�+x������s��I�Ka�=���sy5�C�m��q�������	�u��m��?s�#�"c�{\����8n\;��mY��Y-l�w����Zn-�c��B�x�[�\yh���<y*:d*C���R<z3%J'�������;�z!6�����VV����$
{�����xr�l�/7���Z���	e�{�)4m��a��������RvJ��>~�/{�%�Q5~�~]kr�a���v�����5����O\[[:��"_�"����VRXRo�~v��[NRKg�Ky���+3�M~���b@7I�k�}BMc$R�CQh�k���������>����e�>��c��1`��K{�_,��>Q�I��������?�k��&7\���2g��!E�$F_Zb~�������-n6����h��3*�N��4���g�r\�J2.�$$?�GF'<�w0'�?��w]��c�un���#QSGP(
�0��A��'��{�����h���{$<��p����O�@����8�b�x�,������x��j�n�sr�
U?����Ej�,��n�Y�g������l��������o�������/����~����������
 !H(AB!		��p��`xFAp�?<���� ��?����=8�Q����W�+w{���[3��2B�2F���@^ �(ny�xt�|f2Q�����k"�5O��5�����@W����p��z�h%@�<�k�D7�!�a��>gn������7"q�j����/�6�fl�YBk�p���������n�x����<_���������S��Wl��L����B�w�����,�&I�g��������r:�XdY�������cY��#*�H�O�<���s=�zu�E���@���2t:�*���L���M�'�����W���U��8s�l�HT<M$�����I}������~3���`6�&��G��|J��V�-�fxKp��%U�>���;���b��A��}P2�����mi��Q���g�����m��C�W���^�)g��7��z�z@�/����IM��\�:����k�)�K&��%�7��
�Q������d�lX�6���Q��s�tQ_p��(f���.���{O
��m��UEL�8�=�n�g~4|\%,>'Zn���`��.Sq��8�th.�=���t��f,�`�������5����b�,|���a��~J��m]y���2s�{W-d���$o����;�������������maK��$�x(!@�	
�BI(�@�a$(����_00���/���[���5{�/W�,A:lv)L��5j�h�X����
�W�Z�E0�%��.���jY�>�v�d�pZ�^�Rc2�j�>X��;�:��`�"�2]���J�dy �.��!P�0��D?%a����Z��Q:8D
��|���� �N��s�'?���/�<c;��21�^�YS
�������Uqc&I�T7�F����������)���W�~�K�f���������w�?m[��((�p8G	C�a	�~}C!�`��w�_0�?��[�������DWi�M���H5���
�J�3��.�g^�Ro�
����,b�6=�����f5$�x���])���=��^�/���V�K��h��K��k�=]���?<7�����Y����gp��.\6B_y@�l�������&�KJPt8K��O��Z�sI�B�Xp7�Mf$��@.J��}�*��7U�uU\	+!��A��b~]�g`���V���%��r�$�����)���8��Px*K������s�s���X
����-��qK)�T�d7��H�eDP���GDn��$���xzU����Q,K�)�<,���
a���F�����������@8���XE`hK��^y�;���5���Z����2��'1|J�:�"��e�h�N}H��'�����[��7�[b�����g��O=_��m��{A����&��8����v8R�B���^�t1~�e���u�Y�����b9=�@��|�$I,�s�?�nb,����j>���"�J��I��r��1�FYiP�����3���B��"c���yr4c�Q���� ��?��_A� v������G !`��$�"�<��� "I���������������?�r��g[p�;.�����>`"�vFhU�)�����J��������4���&���)������R�P��a�rW���h��M�����erko����s���w�
,�O�y����gc�8.���������tO(��H9�X����N�$���T0���m�Db��DD�����C,�f�)�ut�4����zP�b����]4%�����V�X�������+s�|�S�>�=�]�r���U��
3��q�jjb��IV�LhW���2F	�~����Q�b�}��PZ��Z�P��J�(��AAe�+��V�&�jV�����R�)���4VV�*���gi����Y��SnKn�-��YC���Y7w~T�DM�+�+�-�2���c���������xu-8=bM^y��>\����&����_��/���-'��g��
�{�1�]M��f>P�!�G��'�������A���R��q���62E4j,���V�/~s��;��f6���0�C���T��9��x?�d�����#�-������p��7�V�c|���c._#�N
�Mq�4�Q�`�)�S��(MHI�l6�p�doUd�f�b,��h���82�^�x��kG��@hK��Y��CIQ�,���+O��_�S��G��+��~+�~>S��<��~z<��5�o0�o�}92����	���uL����*�(�d����H��gj���L��}��* �D���[����+W��k�_�-��_!� v�������(��#�px�D�#P8�D�4���4�H�����s����a��_��������5;����EI>�8+'Z��`hBw(#�S^�P*o������3+�k��L&&&V�\|{�\�e�s'��<#S��cz�6�����t8!�^�|�� nw&MM_�T���������A��4�g�Lz�Z�-���e��3���{O����.���e��@m&�%D�>5��%�)���qB��3L.�fM���~���Q��w5�b'YN�������e
���@`��m����:��Y3�wV�W'7�����]�t/����3��"I����a�X�L9 ���x�<�p?U��JC��dI�d��P������"���*�'��k�z����������;�&LU�Rj�[������rV��X�MKSzB�L���
�R��\�3��� A��
ve\�U��9j<'���S����gf�}_��gU�[�;N��	�����3�c������kecZ��(M��8]��>{���z��H�������������\���B�_�|8���&�,��Bq�o7� �0$�����Y�H0���O|'������������{+�lJv��86�VX�t��tL��_�����Q1�[��P����Q�p�~��q��rt�5��}�e:���CUI4?Z�m��m�M�������z��/��2u,�6���n�Z��HOzrZ��������������;�k%jY���p������.j-�v*�WG�d��P�R'�q7���o��eP�����������������5@��-xpw
.�!��@���w�����<53�����������SW��]�������{��-G�1��q���g���y��O����G�o��D���z��o`Y�z��$7�kTe�����M~�������|�F=��������'��=I���s+�+�g��t�s����{E��f������s��.���a&4�$g��h6v�g�lYe�3����H={�����N=����'��Ab�	��5�P��'�4�&rv����i�x�m�2a��mX0�����E�1�M�X[VZ�����O��;��������~:��b9<���[^�y�e�;&�n���5��*!�(��2GX�Oy����a���m�6~u�	R
�J�	�1q���Q�&G�q����P����"�>}	,��7K�����,n��X��F���LX������j(���L�~�I��S��t�wg+=:9!/�vlG�����@�4u�k���_Ro
�'���2�B���t5���Z|�c�����1hS��X��V�j�Nx��l6��%f--/�����L�km�d�+�S��I�X	j���������2"�HL�YyZ��)��n�����kS�L���j�����5�
Cts+h���+������y7pK�-]�����y���!,`���.`�I��`Z`������F^�Ap0�8#'8VC��le�r�����Ns_�)E�k��=��i&EM��G{�p����r:nr_*������c#E���+(�	�y�����'�0�&��B]f���{k�6�
�pkrE���i�Q��S���1���P�������M�4��	���:������u3�FFzB�W�Z��jl�+��1F���((��t�or	� �� �|�Y������7��J�_
�~J�MZ�$�5
���:u�R�g�I���'���x���._���t#�%���]�l��yi��~S���7��h����r�F��X���6���������80TC.ol���0'G�@��Q ��*6����q���H�|�FO0��Z�`�����/M'{��hF�L�T[���"���3�X���o.�N'�m]7�������*��Hwt��\�o����d�\1�:�{�}u�W�S�\>��/
^V�VIPzYi7�;��$n��j�
�f\����h"�&����g���*��h�6��qH|��qPX)S�I�8�L7������T�9A��7�DN�F8�z�S�b������z[��uP�&�7Q���$O6}�Q\������f�rB����p�X���m����F�K�6��{���3����RF�#k������EV)'\������R|��0������(���f@����6CV���~T���+�"z���A���v�z�M]�/������Hs���t��%��aG�����[@�A�P���m5��.-q"2�T�@����������&��	e���7p�#'�RcA�D���j(�2��e���FH���;W�d��C��j��r���|���k����l:c��j~J&�0�S��Q�m��u�w��"u�{������/z
�X#�X���C���/�oXdjf2����-����g* C�����]�<�W�5��t���H��������G�D�:��Y>�M���HV����cls��6��m�����>��UV��vmFE|d28���]l\�{�� o��>OL�HKp�,����Y��I��O������ut�8SI�����$���=<h.�wl�{��Q�`I�~Q�D��2*�!M8p����>+�QjF�D��zd{�T-g���Jl����d��I<1iST�3�������)�Q�s����
�q��W����:�f�����@<�c�����4(gA(r��T#
�L�S�t �7|��[��z���0".?G���q���eY���,C�D{J���1
HI���sJ �	a'��~���%������nyN&�����k�Y`	���
{��h�4����M��:	�Y���������9te&��z�Mn��������?����y���k[��ab�0�z�
WV��Uq������������u$��KsX<��#g��)��d���^~���kbA|Y�'e�=<d�U[�������i�����T�|y?����0�'������Q}N�}~,aa��/���/09�M*�L��k:�����ZOu�V�"��%;�����%�\��}�S�Ux=p�Y���|�8�TIg/����)��K��#����|�U�ZN���z�n5�;�Y��e/��(�/;������"~�!���*�V1�y.���\V���`�R�6!��e��m'M1\_�/��m���������zR������v�B�\�}���}�v�4���;�D�"��#�Lf3T���fCD�:6F��6��;�������S��A����������f	�Sm����~�x�Mu��9UKh�)]'�`Q�]����P�9�R��6��� �2��WU����b�?�"����l4��NY�$�T:�\r�ss@�%L�,�����|����a.����O�w�U�KoE=?��A�P���QE�!k3p�
�o@����E�����'F�z
{�k�1k��Q_����
S���|��r�YP_��FI�|������S�T���4���Q�� ���*���mQ��+<�������]�Az�BF�}�����<�AN�nq��U�����.
�������4���6���v�R�����V��~�P�U��F7<�_r+��K�e��L������l����1j���|CvFf?�"�v:�.�#;N��O�w�N�h��y���n������%�y7��;]c�g6��vX��D�<!�P=<��O��	6���q��
�Q{����3�E�"^����^w����lN����6���d���'��v�O��i�$�����&e����A�{����D���A��v�`�bG�e����8.MtT�H��`N������Y����t}�>�)���`��n!Svl`�B�^����s{C���Q/�k9�\�/�:,Kp�	���-�����������7Y_W�N���y_\>4����'�7��9YS��[w�����7���� 
|
��DY�V�w�y����8� Eob�{�F]����U'X�Z�h��5/%&���r���U���be�Y���x�+s���v��}}�&���HU��.�H���P?M�\`�Pr���X���0=�X��a��:�P�;���N��jO	���W�nl����eZ2"���@��f����3�J����������mE�*�>�0��/������$:��Ug���8t���,T2@�nD�&��h�N
��?��������bY�"�e>��IQ2�o-�'��Hab����y���"m�W�,:�"�����/�MecY�fb�B�ip~e���VG���!�h�����,��8�k@	���l�%J�u��x!q]S	;_�/�����=	#}D��n��3���
����/��A�r������/�O����& ��lr�@
ap076���2���@��?�����%�"����|�%
rY��cO���s7�35qB����fb�?)�Z��j�kQ&�! w��+C��]��5=�<���f�m���xptx0D��?�#4<�j�j rK���t�d%��o�t�'�"se�?>[����u�a��`�Y�����.]:���`��D2TijUT ��1D��T
���(�Q���:��`�z�W	���#�9� �W��]����3v���bo�B�p�\�B�s�P5�P��b����q/�qu�bY�E\L3S�����0�p���hD�(��8d���/�F�
�d��{�IE_��� 
`R��\�T��QI��S��t��j`�c��@{�k�����j���c
w?h=�O�Wtxr�D#���������w�-n�r�J�������Spa�h������
�wXWl*�����X�q�XZ�-���fl��(��������H����v���=��u����o�?�����?���~�T������B9
�@.N�����M��n����r�U��?�?�����W�-+�yA���5�6S�J���D��\�N�x�zU,"�������,���]�1����<�U��������@�� k�P<�����C��R�������������l���O1��z/OV��]�s���X�,��1�F�o�������OZ���Yc�Z���l��+/���
�.v��-B��^��k1R�9G����~1q��9f&������k�L����[�
����!����?��WK��iY������[��tf���3iG'�H�t����<�4���������
�����u��B�Mm�go��3��,�->�8��
���,���3x7��8*4��?���p��}��p��b}�����K�ef���������D��V����S����R��2p�Y�����I��G��(1q~��>���y��O�����6��C�z�6icb�E
G��5@�N��h�*�Q)��
wg��\��G����NN��.{��c��&�uC3���I����(���@*!Y�!�`A�M�
k��E����\(
��������
1ODa)�������i�?X�,�����-��'����|As�X����"WK������k������s��Q:�1�����)�|��8�]����{�x^K}�?}]��#�u�#]�"z
���I��2�/)S��BET��ovhBDn�gW�z>rP�V+���S���fY�����@��� k�58.JN������"��9�
�)���Fr��s�xn���(rJn�U��h�G�S�7)�kd��Nil�
��f�G6:BX��)uO����+��g�����7��dFGH��#������%q�����L��Tf�#A!� ���Tx+���KOi��Gu�6�G�89	����X#�u��9u>�T�O�uo���J�
��T��=�y#�X�Sg��O�60�EvtSdf��DnQy��l�x����8���L������2���@}��[E|$-?/�6'|��Zs�!���2�������'��Q?��m���OM��)$;��8�VX��P�!bF����}��h�
id�m������X<t�Ai|J�MdY�r���e�����]�j��-��>����y�"�&�S+��d{�1�U�������T7|R��Tg��Qd��q�c^d�����u�W��p�&y����q�u�"��r�� C������61�"�(�*i�PT�O�5x	���Qv�	�y�u�k�/� �����7�T�>�*]E���6�T3vx[�S���I�D�N��,F�<�J�\��g��	��|��LW��-,a�o�I�PL���8�DE��m�R���������rD�hJ�Q�f������|��~�Fz'<���"��X����G�7��	`��BH$d���z������[��^��O��S
Lp9�6���~�9	1�����{��)��K����������|6��Dp�X`5����Xb���]�c���.p"P+��#�igt<���7�ZA	����e|8�dD*�*�4�QMA^V�;ah��I�����t����"9��(�����U�c�xB	��]]J�����s�p�����^q:������Jv@"���FHj�8�yt:���@*�������T}�����8�[����������w+����i�{���'��v��O/�j`�~��;#�+�z���B�l�/H�8�}�kc�Q+���i$sP`����F���=����qfk|�����[� ��&)�=�����z��y�s�^��q��k6��`�c�(z��G�Z��QGpm6���.kC|�{��m�n4���z4��[}��W%1�����vlY+f)s>�XM�w�B�
���zgP�w��W1a�]����������*���:�#%k,_x3��X�y]�|3��~W��7�b�t6���l�����A�+h���d�u�PW�P��������jK=L ��a�VW�&���>������T�jv��^�����dZ���E����f^����5�t����*'�;����'��G)�)8'��U\/��)��U��x��F���z���K\��m_��z$��6����L��`A�,� 9�����m�0�.�������q����Gd���X"W�0�u����A��/2����o�����?�/��qA�~���w������a 0����AL9���@p`��9

��yu����o�����;����a0FI�����P�u{���w(��'X����zR���Ur��l�5?w�\���7�<t!&�G
�g��\{�����e�A%��zK����AxZ��b/3��@�_P��4���c��efP%!rq��h���QR���� #E��Rf[8'u9;x��V.7�m��rc%�E&�!�Ey1I�g
����"����v\.�i4��s�B����X_x��x9�����K�Cj<��Z�n����P^���������&N}N��iS������5���Y5m��y	6�"P�W�������v�+�_�?���?~	��1j��`F�F\�pn�!���	�@ 0'�d���?������`����KpE�T�����Z���%���	��������+��eb1��U������,�V��AL�������QQ/�S��qz^ fzx�y�y����l4���^����W�R���R�����rwL��,cG�VB��pn��I)�c�H0&�;:��8Dh������xet��j���=5!I���/�mq��\� ����M�4��Z�����M��C���E���BdN���~@Y��
���|�U8>���SX2��T�;�>���;��D�b���b�voP����^�
��3���w�����=2#���I���"M��������#�\����?��!�5]#������rq���(�P�t��~�5�<4z�kepP���3Z������}���8a-���i��1��l�:�L���C��C9��;k�{�4�C�g%��M>���Ij�z�[���3sV1��������X���
.��*���	��c����d�3c+�
��Ig�i��R����j�b.[��K������H{�Vj�v\��M���3� |���X��d���B�/�,:����GZWV�t������F�f
)W�����}�j�]�`�W?�����?�/���O����?��?���il�L@�{=�`A0���
������5����o�����������p�me3�M�6|O�s�<#�����-���hN�b�{U%��I��?as�����>�(i��H��[I����������p+����?�L����z�����^n�<
�Ob��U�[**��(���0\S��2lY=����p���qQfU��r�8y���3K�J&�p�����oI������X2�}�t_MO�h�����t_<�0�������<KT�]H�5�*������+���]���4�A\��n��L��J�]�AE/N����{��^?��Mk:��r�|sh��,��I#eD=��#=_���llz[�\;P���-��9�e��;���o�+gGdw,�y5?���uH�6'�RT����8 t�W3a#qJ5��Gzo==Q�7�(�&���?-%N-�d�i�*:���H�\9h-3zd$�����hP�m�:B��"���|��"S-�`�`�Y__���P�]�����n����s";	y��2[����	�.�KkT���"G��|�'�'��o`f�Dq�+����o�gdDE_r�@������6�!j��n
��$���W2�m�_	Y������`��M��3V�)_�|[�l����{�����S:�����`���=�����'���d	�����he��R��MWi��T`l�Z��\�7e�:/����^O+�L������-L�x�c�������T��Cc�����^��
_g����;z.U��
�$-��D��6?Q-�J�WAG��x������[S��;�����}I�{Fo����Y��,�����#8/d���|8N�Dx��&?�O��V����$�pl�����&?z�o�Y��(�������h8������{6�oj�������/��l7.JX;D[��xy2S��f"'u�AdY�s�_���iQ�� ~����L[�-q�+���VIn\����g�����G���_��!���G�*����M�v�5	�-�K1Z����b~`��C�!D(DPP�$��}U���-��k25��������
~�:����]|�ZQ��G���{��yY�����B�q�A�SwlT���������9�c8�Qy��
k���!��N6"�8�"�����!�*��l;�ZoI�D���������_�_���!r���hH_���:S�����#�R�.P���u!�����m�M�>���
�6o#��=�u�r�	�\8�(��K��n�F��D�y�G�����a���St�@�M����u�Z�v�E��q���]�A��c���"��&�x������bz���w�]�wRMo��^MCk<��Z�p���B��x��&��c�7��H�?�������GrN>�R���a��vh*S���'�Q��V���������9X�E���&+�J�3[��������$�;��[g�J����.����<Lz�A��Lw���(;�Y�>��b���/��ow$���WM��uUw<C���lu'�/%��_���,��8LP�Q�lw-���6�M;E�����K=�+y��1�������������f���Y�Pq
q!�����2>E(c"���V��y�J���w��3��3������ZS]JR�[K��s�Jz���{��2���9�/���"�^��=Q�^�:�+�����������_�]�h�u���YK��F���KMY�=����'��M�,S<������
#����L�	�T��Oro���vht��W���
&�{��:[d#��2�����9�G����L�����0����^�qV���������x\�x���n�_��iy�AmO����|����o?�.�W$EH�at�u$����F2|%��t�Fr��@]�l�&�����7u?�W���B���������?:I���P���F����
J����;���Y�.������E�rO��Up�?6l�-��P>7A*��B�:��"��ar'����836�SPh������D������8!_�|�e�����B�xS���;{�lI���y��z�~�Z������p��z��!�����"n��%��>�9�_��6����+B�3��!�<����B��X���C����"��I����W���?��I�W��p��3���Ba����3�^/�mW�/�g���~^�5mv�U�T��%m�<��{ ��r�!�<f��~s ��E��v�����Z3$�P��h�N)\�����4���62�'�Qr$�O�������0!Y�m�������Vu=h���z.5��{��q��iQM��M~������eRVg
�beO����zg�}�`A4�E���-���%��b*�x�gk1�07�l�I����F1+�����h�Wm�S>�E�`mB�,�:��4k1�~��SEX$oe�)|������`��`��$�s������������^"o-=mY��f-�1�d��i��[��:#��)��{�r�J�����6�����P������/���2�p���^�d�L��YSs��������>�xi�����P����]�:�N���qy�'�M�"d�����>���g�P+������>�t�}���H��
%�Gk�_?���B�%���J�O���������v�T��vo+L�vf���94w�=��������^2�G����:D����#1�^<�^.���6��2�N�2�l�\�'�
�e�xN���-Q.q	e�cQ{�J���C5�����oJ���S�k]l�V��'���{Q��Eo%�)`Dh�j)r�����^a���/$�y�G|�X������KG:w�1,-�����c-��i}�E�q������QG?����lw��z��JDX��5��<��R�5V]����~oq��Z�o����HX�_H����X]92w��\��C���~�?��ZT�wdE�k<b���|����E-z��n�1��x|�'�D��Y=�Xe=�9�O]�0t��T�RD�oo�4c�'(���c��nyg����b��gl����|:e^��^��_��<��l��d��$�b���g PCK�h��%"v����b��e���+��;����-�,�V�k��J*��g�x�uG|�X����i�����g��T��c`��&K2���������G���Euv���n�������������	�?��``lb0�@�17��8�M��`����������7����KpE��1��$
\�l
�������j��-� ~j�2��GN�s���=���_�=�u������d<(2�,D!&|���>�$".Rrhn%�6(/9����m��!��HNQ\F�O�CQL5���������$v[������u�K�I��1��a�������n�-=u�6OD����q�����
e�E]�R����P��~%6���c'(Kxq>N%�����N�_�k���O���������_����L��
�@F&0�!���L`0cn��d�6�������Q�������?�����h��CH��b�q��I��S�!�^6������xa���W1F���<��K0XI%Z��
�)���C��=�������?g[�no�O//6q} C�g�������Sf,���I=M��Iwc{�$����6q&���f�@O'�&�>��"�UO�$6�Wz����BR��" o�����~6mR��7j���jy��t�y�Oa7���}�oc���H'�1{9�"��j�L�B��)lq*/��F7#����F��2�7h)-k��Zfd��y���O����n���C��\7�;,,g��E1#��������8M�~��E����!��WC~/6��O{Z���`"rU~�<(Hg{3���!�W����.k�����N)E`�H�����&s��
I�U�>K���[�l�-'���\�����cY����_f�N�E������od���s-Pu��%�S�+�)yFr�� K�9�&�K�����*Su���.��pr-4�=�nj�2��e3�3��h>���h`&1��B��V{\FM�:����IM�,�/�q+���O�5[�������gQ����������]��H=��e�	+Xy��(��*����y�����������i�P���DJ��+����HBW�`Q������i����+y����������q2�f,�$�Z�p{r!zr1{I�>&4=�-l����e��-,�:�H[������#��]0k� Q������q��}��t�-%�C=��ic��:CW����C�={���e��w������x�U)����Q6lWz�\"�S�mQg�P�g��������?�Z:�h'��q��c�\�U��.��������Y8*��w�P�EA�R�@� �z��C��%[��U7dj;����|�6�=�$��L{�z���.V����S����	�Dz������m��hP�H��������vt���~����gHHH�B����N�G���U6A������P�	�����U~�?���[w�=����J7���8!c�_�*�6~|q�l.��qo�9e��ee`�K��#�s��31����rE���wD��a*������tV3h~��A��X"m7��m#�MB]��*,v�_GG���S��iZ'�L�pU��f�'G��K@:=Q���m�=.��rJ=�(Nak����X�5��,���qN�T,R�����M�-u}$^�?j�FE���E'n���nQ�8#"7<a��D��z�(��7]������C�Z������-GZ}d�cK�(����
:
���E4h�����t�xOKr��jnM+��,u����k�<EH
�x���@�k�F��2w����J�y���;tD�VEj^R�	��b�D����3j�N�(�)��sM������J3t�1+���
��:�����������~��Q���>Z�_,:
��'8���T+���X1����Ol����)��~�9���������Mf���}+�����}�6�zk�'��PJ���(��������T�� �}�iXZ����PI{H��{���H�J�*���@1��?��[��'	+�#�l&����o�bQ��:p!^���}���
PY�amze-���(B����6��AH^|�ZB�u�d�=�xZ�{S���<��\5����x!7
��P��cM</��gu�9��n����i"�5;������~
���:����_����j��|�e���$p��Np��{�n;,�ndp���8
��UG6v���|���G�I�%�����[
U�J�c����������O�����7��Qw9p|oG>���|B��ZnC�v
���O:�k���k6��	����&T S&S(�����!��[]���
h�|{,j3�O�D8<������<7���������s]V�<��^H����Q����N�C���,� +��g�:l_�Q.0�kxb��p��g��}�Wp1Y����&xk�I�9��I���QSp��wj�[��e��8'HA���W������	��[RV��e���!����d$���XA.t@�gO��D�kk�w�'�":9�GPz���G�^���r���8���0Ki����2�`���,B��H�Y����� ��v1q-�C�c�q�%��a�j���f�2�r�	�"�����+�y��z�U���������R�sC��^��i��6��=
?Z���'[�|�b�%4���O�'�Y��V��	D���a�3����.�$25���tX�}&q���������5b2��[��tcO���gU���POe9��di&�{'H��F�W�{�O�����R� '����_�����i�
��Pc#�1����
��6���0.N��������������~	��q�
_8��Z�*�]*1��$��3]��K����,��<�K���>/'��s5��������cl�������On��t=�8����?��|]+�0�����@���h�zhG����d�]	�\�Tc�3�B���-V���������
�����EB6��6*���"H��u��j�N/��wo���$4�d�~O�"��2]�3���3��>��c����q�`�\�5U�	�M��W�
kn��&>rA���)�| D���	�~�q��<��<A��*qq��Dc�p5��H%�}x�i��\,A^Xev+e���j^�.oy �)�c(�H*K��H��:���,&���f�;[ �r<f���P��=��D�1,},�%�����������4�3�p.�/����b�?��������������@�1�FnN���1��99
�y��d������_����oc]��$5�O���[����?��6��X^���d@VE�Y���4�8XN�k>t��,� �V9��Y/E\2H��|�>��Q�����,���3�4t�O����*����3yY�<2�+u{����L�)Kb^���gI�~�#A+���e�TA�e��\A��	�6r.k��u�J�fr[[0>oh	��i����%��P
$>	�����G��+�n���L�,|�s������0���&j�����x:���7���!}�C��w��������q��D�*6\�@�A�Z��'����P#�� 1�'G��6�e���_O��L��$�x������Y}:0�3��l�����x�(����,!?\PwM�6�i��z6@�S�n�,^ P,�5.�h�fP�
Ff�W��0E�(@U@>F�I�\�u��(Vv��>~�f�������Y7�M������g+��<�� 
w�8���nT~�^>2|��h�l����&$U�bM��U�������y��<+�fBYFs���-�E���G.��/E����/�dD��X���?�3k���e�@���`�w��K�G�!\i����������O�����f�h���
��p��\����@8����������Q��;�� �w��/��N���'�A���2Z�o	�n����-���V�#I$2�K{��8��,"6���GK��@���Nb<���n�@a�,���#?"�fcO:����,r�|��8�$�5�DbZ���pE8������j�es���%a��g�\Gb�2Y��:�����bVM�U���!��*0�>c`%�v������g��]Y��M��,��U;������TkqU��j*d&��OV���R�%L��vU�������<�|�
X���JX��k����7)b�b�N����U��������O�����}������+�?����lh���~�(hL��^G�2�W�������������������?����jlhb�i��`�1����	���&0��j��^�?��`�����������_�+B����8'�&�}�-2F2*G��4�h^����,�k����s /C�;���9�g��k��-�'����o��N�uZ�=�0�������Xu��Q�~�P+Tq��q#���y�^��q ������~<�<AU��)����0������w��� >v�h��3jc������S|��x���������.���'4�)��BzSv^���
�9�������74�z�G&ov>�o�v�:-��d����
fa���������mW�����y�icm�V-��{\��c2J.A.9<��~��Q�
��M����������J����en����-���CO���� 3���K
���r�B�#�Q���BB��)�
I��f I����o��I�����Iw	Dv�V��
�6�v��)Y�����Zl���r2B��k?�6�����-�b����I^���-�fj��_�����~t�t��M��LH	R���_���(*qY��CI~c�{Pnz�N$�C>�CJ5}5;��k�#����R�A^�G^��H���<9�o�C��/�.w���W����m�fV�����+�tq����mE�	�!Z�6ue���H�0.e�Y�^[��#�����7����a��?�'������������T(�h��! 8�����@&�?RB#���x%�`��5���?������������������M�r(�����������G1v,g��u��3[
����o[�N�<~��/AHx���J�)����X���>�a6#�]�"N��AD�,MT�:��@�O-cj7t?B;�odm����s���~>���\���f�k���;Y`����
��z�Zw:_a�
#&����&����,C�?�9���Zw��Zc��ZSg�j���/�^��z�v�o��I�$�&���
3�+f��_|�������}#v��te}�������oe�\����������6��;����[�H����F>�yi�������Bi%��� �NJ�=>�����Q���U<�����=A8�T~���]z�<�
(�c�kT�2���e�j��@���g���{]3q*YF��4�]H
F��z�Y�AO�C��gBQL�V%��xm U�p�+��#���m=�7!W�6|��L������'q�R������D�_D�G*o�7�H�������&��P�a�
��|������A������,��!���T��F�$4!�j�N�?�^�),���I�P]�_�W�_���?���?@����������O���
A�3�2q��Hkdl�	�s�!�&`��	��������������~���\����L�5T�mcA�z0�������{2~����g.�}�13�������������m�������]�L������uB��^��0�]wX��
o���KSb���=�v��� �y��^n�~�gT5��E�T��zZ`��J!�L����8��.Oc����P��{��D�>c�j7W�UVT\��d�a���)�)T���'W�m���I����c�g�������G��I]�������w���KP:������j�2���������?�����K�S�A0.���1rr�@a�&PC(�����5���y��_�����A�������	{6��x7��km`1�	�Z&U��G�
1i�Z�T�$<~^�����K�X�W>���::9��#4G��v�Z���m��t����	�����#J�Bg��u8�zS����_�����F�a�0`�5cU1�<���JqA��
�\j������%��$�c���e}�\Y� ���C��[Fzr�D7��b��1�����7�WX������<�SM��$L��C_{�wmK�/�=�,Z?���������U�i��hV�W�/$/+U/1�V~x����{��/k;��?��=�g������<����V����������e�9�fyd�����u�C�
����$o���
)=!"��	�,!�����C��"Q?�GVH6M�~����YR��VLd��[�W�4�g���l���u[�~T�P�u1���/��:)5]f����zy$��,��j�Qo�������!I��(��ncU�������YFU�n�^��C�s�+�niIiY�Z�tK�(� ��� �)����!
"%���{�q�w?c�g�g=��/���u_s�+��c�.����Y��fs�76�~ K^���3��-^�y�GKkk��tCr���3������e,�i�mS��������qkZ�(,����\Ua4uy��.������X%~E�(+��|�G��t��{?���l����K�7O:O�
o���WO���M�u��Cm��������)���`�)�p8(�C`S�� �6C�MM���������G(�{����~�_S�z@1W����]��'&5	]S_�E� K��>���@�=��g���9��s�����1��G�����ujz�W���NXB6o>u>u}:j�M��B���e5���t#�xF���Ap�X�9A��S���=�Kib|kd)#_�i��^J�T��P����[���Q�O�������������~q7ji�j!d���^c�<���2Ll��wXa(��}C=�=��y�Q�����l�����������F���Q����m�-��[K�����\|D���>l��n��+������1m���1���V9������y\M����R�q����-�����W���G�����44�7�L���o�[�O�u�Mh�&�F%��J��������$�>�9�����9���U���e�e�k��jF�K�!A��\^��!������������������������V����0T�_���_�_z����_�?����O�/�  @~SS�� ��
D
�

��� 0B�B�������`0�g�����^����F�B��zr�y!�$5f��o<��l?V@Y�fT����u&6�����-II����;�������ea�H;�q<���-��Y������[���M7_=$�oo/��p��w�2Od�+��r`w�����.grN����:�nI��*df\cd���d�p*���8:���4EV��y����r���T�h������o5nOlnf��A�b�^;�&�z�����9�6���Q3��""71��.(�y����@y�����YE��������Z�8�����#�gR��K�����k����<�
26xOX��f_���knN�F3�3).���|�{l��S�����/L\<������S�C����DF���#���(KE��_? .H2���Mi��5H�����r?������:�3n�F���2�S���N�CU�z��Y~s��v��EC����z�&��#_�o�w����&$ �=���\���}���&��������v
�T��bn�LCe{t�0���;b��e�"(}H��O������|�����>:I��3����
+>�fq�-,�krJ��K��9��T��W#��rD�/s�B�����S=`a���ef0v���RQ�*�
?{\|�����&��G����\=�J������yT��w�5��O_)��#����>�[M�z���D7M��BE���h�g��8�)HQwZ��0���dk�d�:$�
p;q
?&pwJ��:K��O���B����.&w.=�K}Q���n�D��ib.�W[�2C_8��b|�\�g����������0���3MM��)�����}`<�;k���u_������E������W�����~2�hwt���V�l�n����R����Du}��b�N�/��H4���J�<B�Go�U?�J���g�
���6����d<`f%������l�����S{N3�i�a%�g}E����IzH����C�Ow�\YK�i�4��b_��IA ��g��9n�-������z76^������6�e��K[(]���@�f7_�DI5 �t�U,��u�
���s�Cn<�����^T
S4�k����&_����6E+6��F���+�.�v�����e�y�	�� iwB�.}'������K��3��*��BO�����x��lcFU�������	����^h�N����ki���T���J���W-������'d�#|���a�\�����5�}iM)�-�E��NTS�U�9kc���j�^�	�0�f+�Y%h����,�r�b���L�����U�7X�hg�ny*��A�q=J����I��g�S�q��2�1M��G���
+�6���JV>%�j�a�m��h�!9���������))��"���^Ra|��0V��5^�o{�����8x��(�j��;V�jc�R��Rv��$�������L�'A�j���x���0d�HZ��]�{�#��]�Q��A�8�&��r�QwS�K�T=�o��n�=�jvw�^�\�=���8��k���i���|D'�39g�YJy��AK�]��B��@��F����.��Vky�>����&Nj)E��UC�u���9��_�h=�
���������om�L^���!eU!O�Fv����U
������2L����������	��8���:��������|���Bs�������3�7�gVW��W�����$bJa�=���o��%��}Ey��1������*V���)�����$�~w�����,�
��e������eo��N����F(G��mL�*7�-��UKh[)�>qbh�!�,3B�5�*/���R|���/Aw�Z��=���#�z|�������%%p(��EG*��`?B��.r��u.��'��n�������yW�!�{�:��e��BQd
c����jV��?�}��(aV���RK��������}kc���o��s��������c����,Y��O\�>���%�����[��!z�;�����pM$�6/���:
�k=���e�#+��,{V�x�cx|b{Bgd(!����Kj+�*����>W�`���i�_���q�W�����������:���5d���"����.yEU���]Ht��wA�_nI�^�h_�s��kr�^�l���Q�?:�P4��q�������������=�l�Jl��]�A��,��K��T��� �7�x1����k���������;���_���ad�+�Xd���5�m�_EXO-��TY���6����kohW�B/�D�������W���K3����o����Tp/��O�Yd��g�CTcXnE"e}%���t��)Q�2	�=���rTq��DEKk�\G+zD8R���L����%�:a���gG>��a�)���ftk�'��N���q��?�_�yH].A	<��TE�;"�b�k}F����M]*��I��o�g3��9���><y��7�����g�l��������$y^;��	*T
������}����$�=��������e�Q�|��3��f��ie����k��
������c��P����^��=#�K�E��r��h<���E���X�f���Y]����KPW:���j%$]=�'_~<G,��<o�o��|~(Ik����ljR��"�L��:��/�
�K� dY}�������lO:�����C��C��:������/T��9]�K�_�~9��eP�ZK����9��p��Z{f�~o���+��R���R]�J=�cu+%���p��D.}�����UF��R0��-N��2M�"��X������T��RU��]�P�X�
�d�K�)&�w�g������z����4fM^~�m�0#L��9���X	2p������.�,T���n�u�C����oeB����yy��2�MsC�&����N����k���� ��?�w��3�K�?�~S ����� 3�B�B�&`A��n������@��������9�����G���u�Mu��O��`�.']���G���n����r<���CZ�/����(�_�7���a��������}��G�"Qzk�}��������z��[P3I�)�2K�t�`uaex�!�Y���#,�)����2a���v�b��rR�4�^t'����lH]���|�B�D��w�.�2M~���w8#�K�����
������'��L��^
����~'��Vj�rxt����5�\J����U��
Yb�v/�������Z��B�S�PD��7j�OMD}^L�����<}�l�x&�d�=�0��3-o
�#�d����*&������o�N�$��v>6�]U�.~2�8g�`w�[���yu�NX������b��ft9�9��1�QTyT8I��K1F#����-"��p�qV��u+u����P�}:��~X�������~�Et���D����=�$��U������q��k��@��?���)���`3S�#MM� ~�
�B&�PD�M�c��(�������~�����,8��-���hI}���~��l�W
f�(#�wd�R<�u{���P|�^+��M)�8�������6�W����/���7�'��Yn�Q����$��no��p�
T r���)�US�G���3�H�X���u`��i�&&�%_�k��\�i.�������EttF���)� �x����`"�"f�s���[�t])arg���`�w����%[KT�B+%�&4�.#/��I��r���M s)�kd2����,�Xy�Y�Q@}���v�9X�AE
���:Qz{��U&���4}��;Y3�}U��IA���JD��2	�3��n���Y\�4s���x�J�!x���CcPk"��y�����i�����f7d�R�S�^�G����r�y��Ah����B&�-�]�Q�L����VW��zP{�)�!�A�$��]��G����X���-�A�����k�([���\���2��o[_���F<�S����AW�g���?Z���ziTx\0��.���DhF�}�@��B�Cc!��}T.s��b��W��|<�"�Wm�_���&}I_�b7�3{��&J}������wC}���<�a����Y2>�W3�91|��6��b�t$BW7^���V���� 1C�Z�x�S����c	�������\��-mM��L~6�L�{@����`x���������%���a�W���2�z�mXp�2eX9��/�*����2ji@�r�c��_u>1��&������*>����3�L���g��I�1���n��.����+�/ZQ���Y�*�����30�[a�=}�m�r�</.�Y�f����x����ln�m#����3��/j�9��z��[<���@D����oM��B������{6'^N�`�^��:���;4��K(�?����=M~a�5�t2T�R�u����h�s�M�������oQ��������0��c�?*������[�K&xN�)#=��w����I)����� y��1�F��J�$�*���|nv7��hB)��i����ev�6���n��~��`tN�/�f&Dg�0��u�_4�Z'saW�{X�-Q@W���������Rx��E��=%MB�����(&���e�J9Fa��;�����yJ��mf� ���z��������BjW�i�<g��(�;~xp2�X�
�P��U�����e7
����0��j1�Z�u�#-��%`~��k���6Y��S�G]Q�x��-V����X�|���X�8���TNFX�V@W��_s�i�?�����Z��[`��U�m���f��o�j$�+ux���.g)��-�.�
W��21�#���T��ywEb>�*/J�5�X�z�A�����Z��x�A:��\8./3&��+�Vqc��;�${8'x�?�&�o!	>�ft��B;gG�$pa�F�2��U�}=>7%?���f�x�����R��T-7r�q,��Y�z]���P����uS�5z�s�Y����f�w��;���2�lu�h��x\�R�-��N^��<�F�}���\y�)w~$��A9��3������t��R��
��c`� R��������	>��}di��y���8)z0��v�)�jdM?���NE�h:�1i�^�	������^W�f�B�X��s����M���4>�����`}��%'��G&��@�G����$��w0�hV�?�����x�F��U��&��M%�.-�������=��t&�$4��Y*F������b�U�w��agm����w&+H;b��<��=�����C�O
��'������D7�lu!�{K��q{���
9
�.6e�)!���W��������������8�����m}�.q���?Q9�(O����s-n�fVA���2r�������G�S�w�a,u��8������	��-'lb����i��w���MG���'�bZ�C_���EYJ)`�BZw�G����	#�~qW���R�%�O�q��p]�����Ti�M:D]�W����w�u��+�[�wS���e?����
�_��1��M�9��{K��I�n�������? �?��~��?������86���03?2�AMAPDP����@������@���?���Z�v�����I�����R�[~QM���\!J+�)I��q�����!�R�m^Xjtb>����pL�9Z���fC���q���`4~[�����z����={����)�"�0D�1�`��Y<�oT+��#�:����6v0�Z{gc��j%=j��<~�����X#��}?�C��Wi��<�bq���.�|�n�X��
���4b�`|�|�/���o��tS�tjLh��??%'�-�%O=�o8��\���t
���0�P^�o�N�N���^tb/Le>?Q:7�1f��o�3�Q��������a��}������!|�5h#+B�#]	���r�q^T�g���BoM�T�!���Z���M�=�{�ww?��E�Ui����LP�r��cr�X�l(�����}��{4$��.����>H���U<��{+}92���m����9Z�{�������]��N�����;�������aR�"���F��E�����B�`�����g_�"�o�4f�����s���\��\.�z�@����C������#f9�(�
�����:��w���L�z���?�����_����O����??���!��
 �$?�#���P�0��4���c����������?0����O��nS�'�Vq��s�N))��P�N�� z��d+�p��JS���%W�`�A�$��w�h��B'�'�6Wi���`~�G�c�^w?�����^��%��u�En��h�/�������l���
��\)V��2���������H����������?��Y�������o�d� x�w��W��6����/DL��_t�,9�����������O|�
�	�Zn�^�Q�Z)�Whw}^hrC5�����U���wy�rC�����D7j��L`,����v������
k6�Ln��c�w2���2����$ba���]��7����
J�<���`S�|��������?��0��`P(B���A� �?�#~����?���� ��q~��?�?�����B��o^c����d1H�$t����9���=s�U�7q"f�^��I�+����R����eE�9j�d�y�I_��<o�~+N#_�����bs�w>�����Ee������SY��"n�:��
�n�t��>�N�u������L5��/R���������f�{9�bA��S��e	�������������e'�6g�Z���y��'v�Nzs��G�H}��B#nG]���3����w��q�A��R���.�\�:����|��H�����+d�D�N���Up���6,|L��?���t|+N�2�K��i�x��`=�"��w?*U��1�u<�z"��,kw�0O�X�V���r���!�������G��
+>�B�"�$7�/��qQ�'�lF�+�I��a��;!2��4����H]�uJ��?^�rk��f������8�0b�U8�J��5t�P����)��W6V�8�!����(~�vP=�l,����2\N��&�aE��L��#5�.?W}Y3�p��.�q�K@;]Mx���<%
�8�?�x�`��]�&~���P�7F7��A��:B�GW�67��]���y Yk�]�����J�?�������b���]Z?�}��k������]_G�7>�Sb^Q�Ze:�I$9s���
\���Qa�\�)o#p��U���2(DY�{3�^���6)l�-A����{���������D*R�S���w�����#;��QN��D#;	!�q.�f(�
��d�z��4��^��%^_��(��5d�(���}�+� xja���R�Bl `jB(����?k��0-	TB����&�����(�L�
*qB��#���;����z��N$�W6
��>q�b�3�"�^?]�al��X9��e\�}�^�h����:�_=��?�Ii!�|���4�j;�n�������s��.v���r�#B��X��k��L*�����-
��4����:�g-������n�`��n��B������'����U���>>s;�.[+��1@gW0&���;s�����[��F�����wB�G��r&[��'�=w
�K���:`���A�����5CiR���D)���|���r��6�a���B��{?��^"�#�H[~��)�)���~~Jl%����+R�F{:�����TV=^��5@�
�}��J���d�#����'��������'&iq�5������G��~@\�H��[��0�c��s,P]���8�l:��7P�����$�kT�%B�:�c�5&*+KBz/V�F*+�=�#�<iQF�T��p����W{UW����X%�L��;�^�J�M0��0IQ[C�c�������E^%��^f'���p�+�K�K<|'�9(��Qz����J+�$��R�y��L�~k��UM�{��S�C^���������P����R�Onb�����J��Wj�����lT����N�j<9�a��QM���K��P�3���=X��n	�Mt�x;B��3f����P�^CV(b5
��8Dmb>�&����y��<�~\��<���g�a4i�*�h���i��C
Gx�|��Dy=.i� ���"8~�F�H��s��� �vl�p�O5���{�����<��K����%��&A;���$����1{�T����|�u3����T�qR����|
�$9~�W����'���������MD���L�ci��?���:s`>C��f�.����\���D
'���y���+)����7����4,������{�l^wE?�bF10�6���~�(A{�oD��Y|�����������d�m�]e_��d���~k-������������o*E:���e�
�B�21V(��
���071D�T��3����Q=�<�"��.��}l�@KZ��-�S!��r,xx�bN-[s�6s�L#pp��k[Y��������q�Y���Z����,��JN���]��+��I�~6�au��/�����"EMX��V�L`>`��%>��6������a[1�`������w@���r"�!���+�g27���
O���vW��(5.��v�k@����������E��$��W����d��dJ;D,��q��(�jt2�����JQ��fL}���p&��I~M�-��9��K?OGp�4���+%���a���k�R�Z>����F������M���
�8�"U<���a*�4�����y����3�'�0>Ny�X]�wN;��`�i}�{��"���%��h6��������W�9���h����3���8��|�D��bz����������_�_��/>�������O?���i���~����f�`(?	������
����c��?z��IP����O��n��3������+�GL�E\3�e�O�B(>���j�W�9@�-�{3d�@�4j��o����]	�9bV��&,�,Fui�BOF��i<���a����%��b�f*���$p6�+�B����$���Q�GA3�h��xQJ� �`*I�1�����5(b)e�e�%��=& Q��+�PZ5?�@3��	2�������#*��c�����Y4
���s����N1��}�{}!r�Y��^Y9�QnkN��u��:N�nlv��
���"!���w	'��$��t������JR�g�6�o l��9�=��*M�R��.6�"����Up�be3��Xl�2�^x_��(b�����
J =���):rg�{�/�� z������A���V|��hD��al����g�5��t�-��J!�����O��5�[�e�[�I+������u���g��<�k(a)(� ����3�H���:�(�ua[������`���K5�kT6�zsk6�H�.��;k#��P���hM����Y�l�~1�����r�kx9�	 ��iJ*:�M��`UW=���u����>#��zt�jn?Y������o��u�{���e������G"�X����	���=$��H���h����g9J�Z�O��2����$�Dk�&]������	������=��JtPY���n���Br>�����;������?��������?41���@$��D��08f
A��!�L� ~A������@��?����)���j���|:��cF�>g�H��P�����4��1Xl��l&�T�z�W6��W>�+'
W�
��6�)��~�I%{��NK^7�>��!��Kd����]���6f�Q����m�����&I�4��A�{@��R�JR_��A���z��D�+3��)&�QKb3���+��p���R�v�_�!������$4�6I:���Xu�������Nm�]P��dX�b��~�#��������=��ht����&{Z����Y,�ei�����.��Q��j�f��R�2w���^�� �?< @^�	��;x|�	������c��G+�
G�F�9���1�f��t:�����tf��E&�+\m��^������-��,�1�5+��{Vj
	<�O4���~J��tBY<����]��rX�bTy�u����{~}S���/���f��8<�=��r�OiB�eD_���cC0����.�*
Z����TyY��;���W�4��\uy��fbS������>�7��*�A�D�5��Y��_�_�����@�����������!?�>L��B��0�����)TA������w����������)���2��I��o�l������$�'#���sEdBt���RL5�J\������Y�iq_}�sYv�7O��y�n~��X��x*
���R�m�` ��-�{�R���0��X���aD�s���P4�!b�y�m��p���E=�,���\.�{�T��h����^�H�+�qD����9���%C��NKBZ���v����w�$���\�3��SCe��"G��nn�+v�v�N(�o��XS����f:���a��2U2r�i��@���(w[��M����R�
7Dq����zd����K��������UY���� �+���
���\Jr��
�4C���G����OK��v��;e)W��
�7�og��������B ����m�F�9RL��Y���X�S#ug����M����U"z4�N#�W�zc�5�u��`E������,��%{w?<�/������a���nEt���S���A���;�uS�fnr�&(���c�9��]����_{xB|�V
2�kaV��d^8<�}m�Q�>���EC���q��2�&q������j	��+���c(C�6�]�LU�L��Z��V�e{�XS���~QvzR;Jbw�^��*�������;?sE��]SA��S�.���������'���������� ���O�/������f 8�G��H���iBB�����#������7�d����O���?k5 ���hB�mMn���]�6zu��E�
��v���Od\����Y�>����~�+��gN�`p��f;�%5ET���so��k�3������z4�k>Zd���=��%6/l�I���8��m��?S�N�C=��hO�,'
�e�*�aT�4.����J���my��S�~m����\:�}Y�gEm�l���N�}�� P��q������B�b�J�����#�w�%������b����[@���a���W1�����;W2T���`����Dql-�z�6�N��`�RZ�EEE��	�$Q��z(��~8WS�+S��b���^k#���x�s,tp�p"%�!�������������n�V�50�M.���i���.o��H���*��Z>���\��-�����S��O��'V^���y.&��Z#�e�.=�1(�4�5u�wy���Y�a���y�wB�����Sl�\�ef�ZoF�8�.��_����#d���D�_�:�{4E��2{��+{�_���-��mh9Y���(�> h�������7��]�M��4��C��D�R����P���#��@�	b� ?b?������P��������p���nh��G����]��g��]����B)�=e4c<�l)���#�|���s�(wk�y���c^�����},�6O�f�H���6��X�v�_g(��l��MxW:�%�Q�X*%��������qT�k����T�UE��;�3^0��W���&gv�[�6�jK��ND��F��>P�d�����g�]��O�<��r�
��+S�/��;>��y��9�J�K ��]:�BHD B(�6w{�����{�H�"���T�A�"*H���T� �A����{w�D���?��'r����y�g��y#�M��Jq~������,�5l���2��c�f�0�B�������h�����l�;0�H��k�����C�N���-?��x����?�d�Q7y��;]n�n��5~����b�@u�����Vi�����B������*v���V��?�u6����c)]�l��c����6���h��a�Wi����8�����oU��}���W7�����R��y�5�K<��O�?�����?��D�g6�3��e�Aa�CC�����3����Qx�!����X#�����p���<.��i=������A����n?�z���7F^g9yd�����yW�������'�~�o������oi��6~������+8�>���:w�f��_�Y��X��������~Y������[�y`��
;��&������M7~���p��7#��t�P������6��=��������%�uV����b��������B��Ub�n���
�������u����������k�_�~�e�1}�����lL7&��~�jF�����~$�}�T}[c]�}g;��,�_�s�.����.|��><���y���-+\=^�	������������	�����,�V|������\�������������������]Z7���������t8Wx�����.�n�3���
�N�tlE��&5w���:�[��f������p���W���r�E��������F��lt����s#�&�����UQ�c���n���s���������4�T�����<vd��a��{z�^������=��-��)���^xker��}����N����?V��]���������
���ru����w~S8tz���	=nW��P����W�=�0�J��5v�����w�lU�W���������u���?�[8j}l���i�)s�D�nW~����J���� u��=�YK�A��b7���V�fn������>���Y5�+�f��K��y��~�&���'�}�������]^;�WOX��0���u�
_Y:h�W��^+3�4�6d���i�
�R����tj�k��O��������;���Sx��x�Hi���R������;/���s�b�Z���R��6L��!�R�r/-m8yC���b:]z��9��w���I��?,U����}��R��9k-7�������o��j�1��aI���2�~d����_�;�����^Y1l���o*���n8;+�����	�GM\�m�I�:/jH�^��P�~~��A��%U���Q�����=�k�91&
;�����}�����;U��?����S���E0��5+�^x�Gh�F��L2��ge��k�������v����&��|J����=�^���y���W���?x�z��)�����Ma2[�oy&Z�&����N)��z�h������xsd�7r^otl��������2$9wu�j����``���:V�zj���������>m������.��o�=Y���I��?Z������q����U?h�v��������R���v������R��vL
�����N$'�������%�@�����u5'h�5|8a�u��_'K��-f<y���a�����:��&�a������T�����)?t\������6:r��gM����8�%���RC��M��Z=5��iC��7��*/�j������NUN�z��w���WE�b�v�����{T<9�pH�����_�����������5���pR������v��=�m�z�k!��k���Q�jK�.�:x�C����j��-
����������k�E����[����8U���q������ag��S��e�������c�m���6���1"���$u�7C�n1����\=�f�SU�j���Z�}w��Z�
;������]X��9J{��������)�Pz��5��!~7W��Y�v^~�a�������lny8pmzx��.�^����N��m���:����������u�I5O���[u�G�N�f���z����'���a����;o�����*�;����Lf:��\�����	��9�u���FF�|S������hG��������_�_�:���Cp��m�(���{������+?-�}n�������s���T�Y�����P��������'G'����o��E�e��_s���U���{�����N�H�<�~���k}T}2/��~:��Y�#N���RU���z�?;Ust����5aP���V�-������.�/�y84n{���������:7!�M�gF����;b<��6����j��U�Qn���nF
o�����Z����kxn�s$������|��q-�b����(�u"�Kx�^��o����K��6��������J�=�|�%���nUY{8/0���2��Z�KkO��p�K������������5gsv�z�����������O�LN�Q���w�%U�<��9�����y���tm��y�Pn�{^?_��Y��X;^���������)�|�����7�/����}�N�B>��\�]V�Ml�-n���v���t��4<2,,����3G~��0��E���Rg�%�YFA��&�
��F���-��?�Z����~������+���}��������>�Vj����*���:��6
~�Q���76����Vo�G�y����,���;w�c{q���o�L}�N����"_2��U���I��I�U_���%ez��������������75�r6�����hp�����9�D��?Llq���|����]i]q~��rmF��<�Q��]SS�U\q�i�C^��'�<?���'����n�j���/���Tg����L���N���^�n�sls�U]k�s������g5^����������U66n6�G���G�OH��7��>(c��>��w�����������9����J����NwK���L�++���U��d����������yWN��z~�+/?�&H�_�������]h��c��>aT���K�����]�x~q��vuW�Z|������w��z�R�����������7����hl��+����X�G��l;�������������R{��	��a����V%m�8���UB��3?�V�����'��3�F;�7�X�l�;�v�<2�k��QwLzwFX��,9o�����7c��#9k�wu��?��y��{_�������B�5�_���������u�o�'m����������L�����(�X��Z��e�L��p^������i�^����������3~����K����05&�pB��[������t����7�-�e�2�������~Ms�u���A��l���-�l�M~�������W��6�����V���.���q��:4b����_�r��������9{h��u��}6=��Q�������^{�����R����`��Z}�������BN�����A����~�
;-���"�\t2t��c���>�������u�x���1�l����k8��{�&t���'E�v���RU�����w�����#l�����R�^�����m_
nv4�h��'��\g����vzFU���������:2����c�����\s���nd}1��j��~Q�s�C���^5���
����:�������y�8��}�t����N=`�����'�O��n��1a�������q��C��l����V�N���R�ac��������k��t.����!���������V�^��d���K>���zV���I��d��>��G��^�&���r�RF�����'�-��=�����_?*��R������J����f����.��"z���>���1�����X�GJd��O�5�< ��~�g;��s>��.���U�sR'^��I=����:�R�����pa���S�-v��������G��1�5����'����{���z�Pn��T���F�_s��Z>��������~���������_��Tm�'�`�hK�����Q���?����I��>o��|���s������
m�<u�%�����,�4R���I�Z#�+m��Lj�E���>}���xA���1�6�g
�Y�q�U��������&9/Gf�}�*}�h�����]���7��2G�����o���M�
�8�I�������N3��x��#o����L����x$�_�����e��gN����3��Y^��I�t����?�����E�����������_�;�}��_��r��Q���&��\������Vb-V��w{������F���?(�Q����s�<������4�:+'�U*�'#�D��I>��"o��$�-�m\DD����"U*O&�g��D<F��&���	���qY"k��N��p�l��*E�tFV�e��l{��$�q��2�p��'G�r���[g��6���\.���"LF<7����Uy���2.&����OY&xgx�GoE�����@_�el&�2<�C��x�`��ham6�-� ��Efv��n�r6|cX��b���Y���pL&���J&^��s6���dU-���eK�d&0"gfm�A�HQl�`0�-W{"6��"ge��&3Q�������2!���L3�
�@���<k�� �������������7rHb4e�?"�u���f��
�[�/����n���f���o��N\6��I�Ey�"�P(�R�LF'&:��W�����]�+�+d�y��`-IftL���D�
���&�Q����jD$#��s�5oom�H��`�R7�#W2Y���gy����r*$�+���������D�c�-R�����3�
}^V���&�-:����ED��lq����C������ti:��nE���$rL+a����S�2�"g��Q p���!8�Px��T�=�q��<p��d��
�4�����3�S;�3���$��1I���hxAc�my������!
��1� �������E&�'�F��
��K39����r�@V"�j���H�w.:M/����LE+�?���<h�
h������"Gt�5�h�|�^`���d���x��XV�����l���2vv�h>lBM�W3Y�����i���a�����y ��7U3�M�b0���v�:��d6Hjf6Y��R ���mb#d���<-�W�8RN�0N��T�c���XD���(`��l���[z@,K���dt�����x�Y�x�D�$��S�� ���z����'����O�acrX��ZP�5K��@q���,�Tr���(�GBR<���GWj6�����2�P7�St]rK&x�U�DU���.�#������%[RX���;F�	��:==@�Q@�*�!��N�	��Af���t������ 0}a��x�"�(Ec
P��V*^=�k� 1Ay�"�M�%����Q#�����^������y2�u��]����H��=$�����|8X�0W1���$'EDtNA�p���DT��z{&�0�m�?���-�.P���c�&[c�kb����ch�=���&<�	 ��%hb�r�(�����-:�/���9GA�~`����PC}�~�[��#�3����E-�C|B���:�`@�{Uo��$���d��Ap�h�s����P��k:F��9q�����y�h(�������� a�Ltr�$���d�t	j��&�;jB$������,<Ts[�����@l[��1��,�c0d�A���
��8��10Xh4�����uC�	��
�<2W�0	L�h�1��8�c�\�=L9&���{�:����6QUp�������4����p��g5����Y ��P�Hl��@u@�d����D���7�K@�`��_�_������#��\&+q�{��\���� ��O��������s)���q�5O4eeC��e�������w��I`���,���H��NqQ;�n��S���1RS��Q!�!y64�7��B�?1p������Z(����`A�<1$6�B1qX
xMN�t���K(�1@�@,"��V�h�AfyB&B����r��|��8tV&=9��')h���p�n
�8}�b��1�7��J�,���D_m��*#e�����5t�E����R���1����5�a����#����6o3BE�6�_=������y�`7�@}�qy�j��$��1.�PY����<]8Z����������T�YR	x��N�Z���. K:� �
sV�Yw�)��)�Mz�5#�2!6�;$�*��0����$����n�9�6p6�2Se4�Tz�P!+�k�U.4i���42R�����7���hNb�X�H"9%a��c���b���wE�a� X1�@H��Z�I���'����Mp�x����AO�J��DEbC�����g~>�i�>[`b1�$P;�B1���{�2�'�@�0�q	�pQ,��� &>�~��Q�`H�AS�h�����s���!�>p�,�,"N|�$���������Y bi��9�'�M���ty������]��e�e�������c��*O�#�,�)��r��0k��	�n�q�������
0�Z�uw��'��W	��Z������ ��2�]����I�lw�`��"A^��S,��@JR� ��0��o1���Y]U�@zGF7�D�t!�S@=���
�x�:���-AR�U�����}�D�8?eD6�
te����;��,�X�9	��i}��xja�������5@�j��
}�y�����a� ��d5�l>�4^�/��Na}q�����q�t��9����B�
"�+vP�/�I�Y�V"/���51@�y(MP�V����#>�x�y2��U��jFY 0]&!�N��vEI]��(��?**->9.�Q\�2=�`�\��
R���y�t���*6�+o�"`Z�7�t��d��C���R1~L2��<� ��Q�w|"j��JA�2 �������g"E9�����|�~�8���u�]=�+�x���\��L�b�Zb,�R���L�	����h�D��s�h6��Y�|^����c��Y!,4�$,@���'%J9@��S�`��.���9Ib�<bb�`%��`:GJ�=9��;����L(�l���g��Wb%���0����L�.��pEE��)Yo�LZ*�t�,8���_*�q��'����;W��i�uGr���R�J���1A��TQ�?v�T�����Eb�����:�\���^L���N4�H�X�R�xR�����\o�@_�{���$
-&!#*������e!���S�~���g���`!�(�d����x�Dr�"�
�IR�qUj��A�7�"�`Q4��(6 [J6�~N����F#=���Z9��a�3�>��q!$@�o��`Q@�I���	�+���GO� �I���MPF��I���5r����.A�!Ar�#HV���;�� *����
�tY<��c���D�;m!De&s�8��*�/SV����x�,��>��J��Q�sST_�dFrB�9"���8I�j���%ZVcmT)d
�P�����h��'=���#=��b�q�`a&�e2�%���+a��]��4����H����J+6�u\&A1��Hy���k�:B��!�����W�b�a��q$O+jD�)�%��!c4���L6R�5�F��M"s��9FO4���O�N��8mrG�1��b!�����'%���h�m#��h�97�Kc�8��I"�����q<�"����[�:h���L7
q�	I7JMR(y�|�4���]��g�A���?�;���LPqd�ZK}��u����?7�*%���+t��Ur�W��r�����B���������r���y?	�P������	V<n�j+��*�H4��`��N�l.2��R�L=�7��hoDw�k���Xw�������&j1�ex��'AGmwT3x�1�m���2#�m���������J������&phm��f4f����0����4D�
@`�\�$�H]��P��)�T���J���lE�;�`���~�j,����Hr����h��p	�x�����i���"�<���-�/��r�������������'�7
s��
zq��\����zG�&-eBb���$����s��O���C��%4�dV����#1Fr�B��<�?F^��2]C��	k�

&#��y�3�O'����8D���3�l�S ���gs*E����+4R�F�lv������^>J�jeE0�
����UE:���!��785�������7������@�������4�������F��n������\O���\���(0���g��:H�,�u���TahY�T)U�n��/��S�8��Ql0����)���L��	�W=����XC���h�J�w�l���T�hL��cI9�u3M�*OWr��V&i$�����������x��N���-�H"��r�V*���BP�'���aD����U��i�Z5������3��w]�S�����6��Fl��
idc������E;/]�AH O�����,J�%�8#��������A>�-lz�*�j4�2��!7�I��,�]���

�f
|�#���s�`4j@���;�DF���H6l���.��(	"0���`d	��������6m �o��"�yb��h�@�VJrj�8��Ji��R��1���lOHE8��s�&U����I<�i�0��K��'_nX�Q��$�6�^�I9<�?��������w�)A+�z���A���1�]DO�/�%�;��@�
����yAn���(	yRX���~P.R��ESg��+:�CB������x�����������I���y��@���z��i��b
v�����L���Gg-�4a}uI��d������B�� �MV=J����
Kd�'��9[I�9fzN�p3$�X�_H���<����9�h2b�x:��H�b����(�V���m�\#r��F?u�'9�(��,�o���
�
�{�.��������v�A1
�b�|JM:�hG
��d��)+�A��r��	�$/f��s��v��l
}�hlt�cy_�{��-�#]cS��.��=������4)/�D;Dd�a%��$/.�j4��`�����8_\�=G;
\�%�lN�*��bU
�E$�������DZ���gG�s��$�#��HjI-����'�\	���(2�0v��94�zu�4b"��P@$G�r�*}�HV���lV�i ���������HIW0�E��w�HQ5��e I�q����j&@����"v���(��M����d������&1������l��l�����L�����~�&���#-��2�N"� �~��j������_��h�&9�%�iU��Q�(��c�|�g` 6
��S�R�>�Z�e��n�������_zD�L����}�+�b��rQQi	��U	�F@k������ ��N�!��Vn���mY���-�rb���/P�����u�SlYV%z
���������|�F6,JAA%�%6APs��H�(�D;O�_R}!/�a_���%( Q^�����SNlD����
Q,i�J��/Gp$�7A����I+6=�+���W
��I���h^T���^�����-��\�����F��������<��i��L�Z��gy^���6K�B$�(��U<�S�������@G���:J�l�F0���}�@�
�Z+���v>h�\L��H�E�2�&�������/��\9�WJ�J���q
2�fy�$�,�;���w�2I���Y���	G�)��		�yOF���I����U�+�^k]%�0�������������#����h�S���5�z��K�	 �d�r���g(����^*� ���'��U����h@G ���Aj�	��V&��F�>��i$J*r�&����;�xB|]��"+��XY���V>F�!uFK�
����oiy��b��d�+���m�0Qt?��n&�W�[���)�f4�Ag;�S ��i��0�/V-���bI�
��� ����b�����c}U�����Y������D�ex�D�@���(�����Z�W����� �1������s��U��r�H
��T����Yj?H�j_��~~~L[:�����=S;��.�}�7���s�<+'���,e���h�Z������,c���:��������x�K����H�;�E���D-�������@fk���kl
�����)���,H&��fz��?��/y���k�8H�)eC"��,���'OO'|)�5Ev��"Y��I�b��}U�����Jc�@z)��4�8!��O��k��4i$&���1q���!V� ��9��K3
P���������MJ1WR8�����W<"u�������h0���WW,��^�p+�)2��0n�1�X��/E�S����M"m	kC�x<�U����2.
(��� *j/w�K������uy��c��}	����b^�Y�����FR���a��V�<�$e*6������i�~�X^����\>&I)���o��*b�Hr���>;�u#�8$������N���qQ��S���y��r��J~����L_\��r����}?������b���(0�E��s�����'��ak�R��/����8����T���pRH:4������BG�H����_���'��{_�O���'t�g<�]EK~����`�����@IQ]9�2A����n�A3=����_#�0#���C`���f:�t���_�����h�x4�Iv5lLp�QW��A��Ob���a��!�]69���F�����������gz��}PEu�}����{��{�}v��8�M1r>�3�vz�<�����C���in����������/:o�A�
L�Hr
�!��YA�B�l�\��E{k���,
g��M��Z��!�D��%���T��,�y��D���M�0�	�"�V8c�*f����=#��V�[cA�z�)6�����
��;���yE���Bc��T�g���2��d��
i�R^ Y<�1Z�:����0(Z�F�������r]x������U����K�����B��W����_�&=�u��N�i��Q�5��A����`jC1C���0�<m"��D��
�I�"�a�>Hp����N�6�q=�l���f��� I2`$ ��t4Y�������h
�������q���I���nyU���#�x�4uq�����:K-�51��"A�wN���74��`��d<f�2}]P!��!Y8�����{w.xa���_h/�����#�?S���fX�sO���\v���/oabFTO���B�e�vC*@�k�|�8��7�\gTk}s3�
FK�h)���;�0�S�C�?m�]����z4��p��j+��f&u����O:�tW��6R����u��o0�X�
	���t�$���X�NgU�VD��VZ�&�(k��l�����]9�uc��o��0����)S��7kW�4Uw�>��FQ������KW�NB����1�����S�f�n�a�3�������Rz$X���{[}��W��)���P��o�N"94w��"��n��NN��9@�����];9-����������o�q�K����."G�g��� ����u��{���������[N���*�65s��I�45]���/����$~���{��o������O�1��Ww_y�5M�F8b���,�;��x.�>m���j�����y��=[����mGe��>�|_����%�����O����j������(�:���������+�_}������A�
b<��0-��^M|�p�;j�=�������g|���G���:�S;Z������S�������K7�I�6�������������^�t��7�9������e���W��n|�Nh���_-��������������Q|B9����^O�&�_�����RN����>��K/�}������b�'��{f�/��^	�	���f�|��g]��9������[��_2G}��'|�R�-�dl|�S�Oz�^������GI�����_�����4�������f������3y����j�{�C�����74����;�}��M��>�;?�����;���]L�&�����~}��gv���ce�[�������~�O�O)���)�f.�W�7�i�k����'��m�}o������_��{�Z���O���F�&?&z��g������S{^��_�;6w��?�>����Vs���Y��|�^������o���P���{��ow�{������o�in�K�f��u��y�3��^��v������S����H\w������H-�B�&�f7�)�} �������yt�#�[�?|�65=��������O�j���n�s��[�vL���G-=��;�/���g��g<�*u}���j�����s���Y�e���<y��7��&�:�6n�W|���f��Vz5��t���5{�u�W~�q���3�=p�g�����~���/��
�@�Bz5�{���H�����?=���_�x��[�^������q��'��%�������Y��_+w\p���<�����������b-��_�����w��W�c�����������o����
��g��������+����s��>z5����oj��/��s�(�_|z����J�����0>���}��a���j��7�����i���5��L��y���
�*�|�������\M�f�~��}����?��UW,����[T�����a|��������4����������9��+��t��/��n�)wOZ��,��;4����
zB/�U�I����o$^�S�������m'�{��;)&�}���������yW���^7i��������)#D����_$5��u���2���B����6i5�
p��S�q9�{4��r��������F#�Om��������Iv�)��3����F���
�`��,�!�3���#���:���%��lF��sr�������
p�B:����q��������R����f���OO�+9C������q��:��3�U��j�����<`��q7.eT3���_Q�=��C�u��_���z���J�veT�IBr����`���`-���r�%������*69+e|\@<�H\��DU��\\���.%Y�(���Z�y�����/0s,�������t6�b�m.;~0���Y��qf�K��hm�e)K2lm�%#r
��X!�T27�?_���1��*+7G�`*!&�R�)9��J�����8�R�r\�5!�k����%�>p�������|��xVh�\�d<��Q\O�Q
6J�d]�() NM��$'4Q���	W��������<������E��?����1�7���.��?��3e���`��������V%ry}5$�����V���� ���4��>�K��Fj�)`������?��x&	�
�������-�f.����_����e��?���r#��>���?�`��#O^�������������?��R<�f8��aZ=���VFsGz��`px�!����5����o���
o���F���SoX����"f���������f�/�/�i�pe���:�~�<[��1~l��0���A�OJ3����f�^����l���9>��u�&���-��������P����4�n�p~��G�>8�+�Y#?��-����jd����[�t�\����10'���a��.���E:���B��_N�N���F��J���{6k?,+��������trc?�@��?C����#L��?�Z�6�C��J5\����I����%�YP��8��Uz�����:�I[��g�:��
�_�CZ����A��?'`u������::���"�e�����1k���������Tn�������}�V~��%l�@���RY�
����tf��	70[���3���������0Y�U&+P"Rr~PF:!HE�.�C��z:���`�$�����F��������t��f�z0�L��h�Ek6`H��v�?������o��-��:�?���CX��C�Vjx�l�eu��/3���B[s�VN����C5��O��`�?An��]�,�P;m��Q��!r<������5h9&;����c ���k����������<Q`s���!�a"�8gHf��_�2+����g�/X^{'��%N0��\�l���X%fAw���z�G.��xT��]t�^6�������UE"T8	�3�V��D��W	��"!���kT���%PIy=�L���'���R�����0jZd6����E��9#�����dc3>����L��~s�t�B�Q������]U�4t�&R���DV}�d��u��+H��?<���R��S�(�
8|� Z�0�p����������2���@��v�:��;�Zw:��h��N��+x)�����73x�v������l��z���sk�|K�2f~W_w�l��w�g�����K��%[.�P�Z�fa3*1������z�:H���{3�k!.��3*wP�y��\
����V��)-���1iw��@�AkY�e�c��s��u���%a���wQN����Z�;����v�7���wX�"��H��l��/%����K_���,�a�w������|4R�g���&�7��Z�0�^�s�y�|�d����b(>��Bb�"�]�@��j)�c���V����*n��|l�m�c��oZ�����c�s��"cPq
s�!
���,�g-�����d��_�
�O#��>PaJ=<��~4���4��� e���kF�$N�YYfY�SeN`��;%���N;'�1�x�X��<pZw��*�������*��dJ�DL/������+�KEW�����
�t=�'�p����`.>�Bi+��G�X����0��uf&�9��0�NoO2]H�J�"]�,����2�)�dw ~J(T)�4��5��J��\plT/u��N0u"A�s�l5L����l��%�NI�>�"	Zcby�X��r�!s���T��C��j��,Ko%��:��pN�D����������F��o(�1�&|?�����N��
�#R�dEy'�x���&r�( F�&B���\�"�<"��4���=S��������bF?��i�"�������%;bh�
/��V����'��!���D�����8�@ay�'���������]��/�ZZCf�$z�0}si��MV|��|��g<Y\��!��c�I�D�g�(*V�%��_h��3!$:���;,�H�}�L/�03GJ��:�g�h(���*���U�1�&@��u0���+
y,v�5K���!"4[k��5��<���v���l$���|�-�0� �*�b5[�a�C���l�l6RU�&!K�fK����\��Ka���	f=V���$����]�V3��I��)U�;��R_{��R��gSf�s�;�vf%�����"���0��u���h}��P�!�@�����JAR���q%�?Y��.�x�
�*G�"*Z���A�
���B������6\��,� �(��G�E�[�0��������x�!�P����I��C��?�Us��T�Jz5����F�v?6�?��*�S�����j��<v�f��/��b|��	Y?�2��>���[�+o�z�\>?�����������	�o>���*��={"c�-�;��vN-������T��������{�`�'�����,���������a%�IM`�F*���P���A��-lB��)`����� �"��WN��%�������wP��"��"�^n��J�T��:G���*n�������c9<C��*���\G���tx�<��$�XG��7������wx������2�*V4l���{s:�?��1��gUK�V��� {�JE��r��eS�DE�aM-����!?����D�8�������"�Q��J	[�UO�EV���,��h,/H`��"��B�����Fm����Ym��5������t�vf�,E�����=�pO�T����WK����@VCs!�������&���$�`h��e�_������y�n�`����������U���0��Y$se+� ��`r�@��/l�?kW-���1e������
�),/��%L��]���
��D�����c���hl��!V���x!��>��1����2��|`�q��	��\c|4��jd�$PI8k+���D�P�M�5������YA����I�6N�+5���K��������e"
-�2tX�E�R�H���UK9���gc���)@�����Q��Z���0Pn*�3�����d�&�`��y�k0��|�bF� �X�A��V�1,�V�b�K��|
^��[/$F0��������Nq�Tqx�!R�5�cQ���feV,��$��� K����,b����	�`*��V���CQ�*��S��2�]��&P�,������X���O%C�f����M~��'b��1��������K3�������
G7������� �e���u�S��]���@��<�P.E�|(W���b��)��5T����gw�wW^s�����d���?!���#���"��1��F���@��������H��Khv;hT$�d�DoM�OWJ���#AeI��B$*�H���o��:_lWK��Z�4���D}��A�d3<C�b����V��!�����"�^�[��}yA �#���v����D�T��y=�RYE�8���%�"Lz	4��;x�����S����]��P^V����x�z�*�T^a5[��Q����yt=����(�'���NN�{n/{�0�x������`�����h����� O
��SHMT{/�(k���U� #`Y(���	*ou� S��o��Tc|�w�5���V������r)T��!:��
s����y�������j�%xZ���%jB4{qh��v�h}��6	Y^4&|'�{W�+7nd�����f��`���G��;�$^���`���3��`����,Q�(��H���;�zp�mwK�X��"�N	��&����m5��MVFt�=���
qO-���yfW����v2'��Tg�������Ss������ytc����x�?���y7�B5������X"��D��o4�c��`�\��i�x"�Fm���X8jg�t�%��h���������[�Bs�H��R�������:�fz~����$�y��C�=r�M(q��������|�9���Q��Lh��(=<=����t	��:�H���X������=j�L�M��1����)qi�f
��V�}<����p�O�e# �C�A�.�Y
�������e��%��)@@~�����c�Uf+�r��
c�~�Y������K�T����f`"2K�v0���k`��]���5;�0���0��;�D$���5����I����F[Y��c��	@�������;\Ma�a)7H4�eq�������@�T��Ps�M���?����[x�Ek���/�����n�����7������7�4�i������������*��TZJ�T���E����w@o���6R!g8qZ�R'vAIUt��=����do���=�m*#es����q�@P��G���&RJ	�b�<�E��~���AQs�I=$hZYB*���������u;372�:�%�X@X^��[���*c��"f1��W����28�������mL+_����w���S"�����4��x�$��az���`��\c�J���8�
�o�\�IQ��r�;�
c�+N������W��$x����������R�����s�0�(!k���������Ev�2.�x�A$J�82���Z��we#�F]��t���+XW�_JW�Ph%^y�:�N�&A����)q!�^�EC�vg�C���ZI�*�����������������>|������}����%h{8n���DA�����u�l�X�����m��h�M���GT	�#��7��{����I���4��;�����cf"8��C���.�3��k����4V
[2.���]�2����P0F}^�F}�?�:��u��FG���
J�1�XmpY9���&f��w�
L���<|X��{��J|�C$����]4�J���N,�S���jrl~��q���z��-O!��4�����XW��G�g�LE_�������8p��O����#�;�0�������	�_�1j��)��}<f�`�U�.V�gm��{q��v�����Q`+����;�~��,�
�2�bl�^+����>���,�P����o�����9F�a &��5�,�V�0�ZVv�����������ZQY4�J�F(��
F������ES��K��K�=�������������|:����x�
1�mn�L���n��&8�UcUm�kD�A4��&cAI�5��K����u�-��-�=u�1�Z~��uF�<=�
�f,�E�G��C�$�����'T-:Fu�����w)�$�����6��P���3�y�0��B�5��K6/bN�y���NTh��!���}�������:��J��������h�`��\����h��������d�t���3N2�a��$�����4�r���������7��n��� ,�7���'���9$s�)��9���k����;i=��_w�%_��n��h�l�+��s�����I��������_���Z5�}��e�4p7/����������^$4qH5���$�?�x4w��K@���{�~�Y�^���7����������_�G_|���W����]��?}����cX�����*v�������a������c�?�dM2YrZ���wsz����{gn8����lmV(��L����@�r�<	WY	���%O����C����<�i��:�A���?C����T�i�4�0mD�A��p�C�BZ�e��P�p
N�_�����)_�&���=D�P�/�e��?O-f���$�x�S�� r����edw�9?��c?��UH��9����4=Q����mW��pgS�������A�wb����;�d�����?d?�|�>'�Vt[+���cI\��4��0��D<��Q}���V�bZ�=��)�S*v`����a+��^���"�q!�@�����"�I����b������uj����/���OO^��n��	����G�J#?AR�}4a�p�0�4���JP?��+o��8u����y�E�o%\67��{������
C�0/	l�e��?�<^�M�
��/3.S]-�Z�C9Wu��}�����7��r�3��h�0R�6��Q$9��&g�F��X�@U�H{b�!�tM�
��2�V"!nf�����hIefM�F��h�O��.%'����h��U-�@�*��xD*��f/�
����#����D�F�H
-��y���B�0�I��������]���{wZ ����]��CV��[����t���Y$���e�����9�l�u���03��G%�0�U:��x+���q*�V@��L2��&�E#i���b�_6X������gL���<�Z��'�F�vdm |!z���8y�����J�Z�k&����$�XY�c�������J��9�G���<[O����M���f/M>R��+eo8�
Uow�\�	"�8,���Tg��F�	o�4�Q��d%��g��,�H�8�T�j�,!�2��/��B���E�P�)�Dq�q��Xf�y����m4�{��iH(�f!2[������
���b�%��W��r���]� 1a��J!��2��*+V1_��M��o���e=ue*x��k�i'P\�7��8�a��N�un������qgD<���l�A���+����������l�0N�6##u�{%������cg��)���s�UX�
Zj{6�������4]�.�f����K�s��_(�!k\��q����"y�/�B��������dm��<�0�*���!2\��D
R<�����#T)�U�0�#�p
�#@I�9��6QW�8�;�C����KzP!�Z��Wyv���Yfan�����V�<����%�Hf��H��Su���La
o_�XK���a,���Q/�1��������z���7��R��2_W�0p���++{��J��@���o�{����/�����-�Tk��L�����������B���z���DM���e����!�*��]H��3��Y��A���G�-�HW����,�� �f{����0_;��� �'���W}3?�rBCDKQc~W4�4']��������;�2���,,b��������|�
�������T�d+�k��������?w^+;����?������?���9du�oB�U�����M��D�����������zDt.��z��W_#1�r���f������<����s�nU��
�6S�}����f|����+?\�FQ��!����	���:�)�}������x(�!*A��^n�����k�Tx��\�d\�d���k<��5����Q�V��'����(#�����;p�Aqk��m��u9������\��������G�����U���{ >�M�^�>�W7����������||�	C])���+�Q�I��� ��@���� �h/=e6��n����������d?����L�_1�!}a�:1�mQ��-*,S������-��A�v��_9g��f����������Q3�#���fX��$3#��O����x0!u_[��S�3��:~��z��H/�[�s?��)���������rl���a��C��P�g������Y#��B(�E��$�7�6a��<e����P�(r���.K��Br�������y��sW���P������R�������y�����#��`��O����a�����+[-�����v�������=>�GM�'�,���ba��
��c@`���y!n���@��c�!��\#9M�k�S���j4��AC�\;)���tJ3mTU��%h�,]C���i5���pMTC��v"�CX#����x��>zsuj�7����/�z����2����o�)&&���7W��@�m�J)V1#�'F���.�;Q��]���J)�<��f}����h��.oH*��b��z U����v�]�^�S:�EV��# 7T�v�y�\"�Q��d��~�x6\	�F�`��C!���z���X��+���QT�M�nxMJ"���l��cHLX*4�8��������GM��� 6�$��D��4Z���0e���d�\��x�x�v� b�E�v1��!��.����[����Jb�*=&
�3�'3��J�s���V�[)|X!�[f��y�����^���tQ�vZ��a�;%Y��4�D�F���K	��m]��d�\j#2Q;�D�e������(k�������
��DC��i�&�DK������� 
�6��������%,P�.���f8��Ik1#
�|��''�.���v�C�P�K���_S���-�zi�b��U�;@sLy���Lz�l��	2��@�g�V U���I��N����k��%�*"=T��Bku[������W�s�5>4"[�a����@5�����mp2�f��?8�3$�i���?�0j��J�]��U����n
hz����J���M��&�\�2<���k�d�w4~E�j��r��ch����"�r.�S&��`I�����n��\R�Fu�{��r��v�}�L�
+�������R���	���;�(�FZ_��,#�/e��T��i�1���U����&��\���D���^1�Ff���M�r�����7-q:*n���yZ�����L+���J�_L5J��/�8>�(��0uiF6���m����������������b����������X��62+{�Km\=���3�P��JE�x���.Rkb�*s�l~�M����J�������1��}y��L���^��lze�P(n�zE�f�Jl�K+,pA%G�����xv������@�k��)ox�HlC��b���{q]u/bR��DL��'��������h�`��X�D�;�����@�kP�����3��n�}�������������>�oF����^�M+c��4��W�ZHq%-`����&���=���Lcj%f��S�9s�L�����D6}p����)85m_;���suNW�����?6q
Q
��)q�������`�2��u�����6��X���OO_={��������y�����7_����.<�jgc��B�\�-Ev�2��u87�B.S`�y���������[c�h�v�B��0�3���L�I��)����b�z��Z�7�+Z��;)�y���_TU+���Y���
�E1c2L���&��[�(.��'���n�������J���je�����������1�{U��nT����������~Vj���Ad�|w�h�ogXE�*g����,�pq�8+7|��!�x��X����Qw�S����@Xeq+oA�T���s\������d#���
JU\8����J
��2b������Sg+q������/�v����`z]
��u���4�u������x<=������;h��K�7DM����{��,{R��x��U?N�p��z����l��1�9|��@8:�#i&W�����/N����5��D�%0�l����1��B��:�j��$����A���Gf����?,����5�be�X�n������$�eo>���V������\�H����VG(�v~��Z:��?�A���Z�b��1h����K�tO�P�����T��A0�����p��i������{�e�{�-��	��P������:�3|���A\:�J������I�R
���t���Gx�����>���G�����iR��i���H��0J1��-��]8+1�'�_���5+�4Yu����5�H~���?�\3c��G�V����&�a����e��U�������*�Z�(\]�0���U�>8S���_/X�O`*�������������iIj��^'�i��f����$��uf�kA���.�	~B��Uu	��+����t�v��=(*�G�Vi��BcBk�TX;wbV�J�7�W_��Bv�x��g��^,����8���!v%e-���U��\H����f��r[���N��
�7J��u��t�����v�-�n������%�l�����R��??�?�E��NJ�39���$�KB��o��[����]}�,r����l2��U�/�e
%��'H�V������E���d�`���Dl������e��Y���l������������D?���]���������=��,>e<�'o�F�2\+e�t�2��|v�7w����m6C?���H�[>,����)U��|��~���T��>%\�y]���]���4���]i��_���h�Ykl��}_������/]gS���PG��wo�F�N���y��l���Ek�2���PF{sD�h#�o#e�WoOrDbt����:��d\zf�]���ef�LQ�Yo��]|}��n`�����nLVW��G���{,�c���-%5<&k��]@V�*�g��6��qz����t|��^��}L|��M%+���L{�D����a�w�����"�����q����"��yr{�shmv�G��~��*���>���Ir+��8K[}�����zF�W�����k;�����zD1J���+H2����'�=r���Eg�#s.cv�+�����%����G����w��H��������z:��U�8���m�����G����_�iC�����<�S�=����	�QM/����5h�[���?>}��4���P��"��o�d[�����X�uz�x�i�C���������Y2�E�gK�i��v���-������n�U�����7s����`�yIN�m^��&�:v(T�S����<��Z�n��ed���rsK��s	�����G8��?�������w)|Lv�����K���4�gv����%�wJ��p��`�������o?�^��r�x_��������J�O]Nr_�k�����]�7��3����q
VN���Uw%����k�z��C��y��Z�h���w�^����/���=��"��I+e�V���h���������~��_>���W�W��7���tK���>�����|���O�^�_�-����K�^��&]r��7���>3�����_��8������|�����rz��h��>��,�����m`$�(�as"e�M�[L��q�!�r�!�r�!�r�!�r�!�r�!�r�!�\��?r��
#8Andy Fan
zhihui.fan1213@gmail.com
In reply to: Andy Fan (#5)
Re: Dynamic gathering the values for seq_page_cost/xxx_cost

It's probably worth testing on various other storage systems to see

how that applies to those.

Yes, I can test more on new hardware once I get it. Now it is still in

progress.
However I can only get a physical machine with SSD or Virtual machine with
SSD, other types are hard for me right now.

Here is a result on a different hardware. The test method is still not
changed.[1]/messages/by-id/CAKU4AWpRv50k8E3tC3tiLWGe2DbKaoZricRh_YJ8y_zK+HdSjQ@mail.gmail.com

Hardware Info:

Virtual Machine with 61GB memory.
Linux Kernel: 5.4.0-31-generic Ubuntu

# lshw -short -C disk
H/W path Device Class Description
=====================================================
/0/100/4/0 /dev/vda disk 42GB Virtual I/O device
/0/100/5/0 /dev/vdb disk 42GB Virtual I/O device

The disk on the physical machine is claimed as SSD.

This time the FIO and my tools can generate the exact same result.

fs_cache_lat = 0.957756us, seq_read_lat = 70.780327us, random_page_lat =
438.837257us

cache hit ratio: 1.000000 random_page_cost 1.000000
cache hit ratio: 0.900000 random_page_cost 5.635470
cache hit ratio: 0.500000 random_page_cost 6.130565
cache hit ratio: 0.100000 random_page_cost 6.192183
cache hit ratio: 0.000000 random_page_cost 6.199989

| | seq_read_lat(us) | random_read_lat(us) |
| FIO | 70 | 437 |
| MY Tool | 70 | 438 |

The following query plans have changed because we change random_page_cost
to 4
to 6.2, the Execution time also changed.

| | random_page_cost=4 | random_page_cost=6.2 |
|-----+--------------------+----------------------|
| Q1 | 2561 | 2528.272 |
| Q10 | 4675.749 | 4684.225 |
| Q13 | 18858.048 | 18565.929 |
| Q2 | 329.279 | 308.723 |
| Q5 | 46248.132 | 7900.173 |
| Q6 | 52526.462 | 47639.503 |
| Q7 | 27348.900 | 25829.221 |

Q5 improved by 5.8 times and Q6 & Q7 improved by ~10%.

[1]: /messages/by-id/CAKU4AWpRv50k8E3tC3tiLWGe2DbKaoZricRh_YJ8y_zK+HdSjQ@mail.gmail.com
/messages/by-id/CAKU4AWpRv50k8E3tC3tiLWGe2DbKaoZricRh_YJ8y_zK+HdSjQ@mail.gmail.com

--
Best Regards
Andy Fan

#9Ashutosh Bapat
ashutosh.bapat.oss@gmail.com
In reply to: Andy Fan (#7)
Re: Dynamic gathering the values for seq_page_cost/xxx_cost

On Tue, Sep 22, 2020 at 10:57 AM Andy Fan <zhihui.fan1213@gmail.com> wrote:

My tools set the random_page_cost to 8.6, but based on the fio data, it should be
set to 12.3 on the same hardware. and I do see the better plan as well with 12.3.
Looks too smooth to believe it is true..

The attached result_fio_mytool.tar.gz is my test result. You can use git show HEAD^^
is the original plan with 8.6. git show HEAD^ show the plan changes after we changed
the random_page_cost. git show HEAD shows the run time statistics changes for these queries.
I also uploaded the test tool [1] for this for your double check.

The scripts seem to start and stop the server, drop caches for every
query. That's where you are seeing that setting random_page_cost to
fio based ratio provides better plans. But in practice, these costs
need to be set on a server where the queries are run concurrently and
repeatedly. That's where the caching behaviour plays an important
role. Can we write a tool which can recommend costs for that scenario?
How do the fio based cost perform when the queries are run repeatedly?

--
Best Wishes,
Ashutosh Bapat

#10Andy Fan
zhihui.fan1213@gmail.com
In reply to: Ashutosh Bapat (#9)
Re: Dynamic gathering the values for seq_page_cost/xxx_cost

On Fri, Sep 25, 2020 at 5:15 PM Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
wrote:

On Tue, Sep 22, 2020 at 10:57 AM Andy Fan <zhihui.fan1213@gmail.com>
wrote:

My tools set the random_page_cost to 8.6, but based on the fio data, it

should be

set to 12.3 on the same hardware. and I do see the better plan as well

with 12.3.

Looks too smooth to believe it is true..

The attached result_fio_mytool.tar.gz is my test result. You can use

git show HEAD^^

is the original plan with 8.6. git show HEAD^ show the plan changes

after we changed

the random_page_cost. git show HEAD shows the run time statistics

changes for these queries.

I also uploaded the test tool [1] for this for your double check.

The scripts seem to start and stop the server, drop caches for every
query. That's where you are seeing that setting random_page_cost to
fio based ratio provides better plans. But in practice, these costs
need to be set on a server where the queries are run concurrently and
repeatedly. That's where the caching behaviour plays an important

role. Can we write a tool which can recommend costs for that scenario?

I totally agree with this. Actually the first thing I did is to define a
proper IO workload. At the very beginning, I used DIRECT_IO for both seq
read
and random read on my SSD, and then found the result is pretty bad per
testing
(random_page_cost = ~1.6). then I realized postgresql relies on the
prefetch
which is disabled by DIRECT_IO. After I fixed this, I tested again with the
above
scenario (cache hit ratio = 0) to verify my IO model. Per testing, it looks
good.
I am also thinking if the random_page_cost = 1.1 doesn't provide a good
result
on my SSD because it ignores the prefects of seq read.

After I am OK with my IO model, I test with the way you see above. but
I also detect the latency for file system cache hit, which is handled by
get_fs_cache_latency_us in my code (I ignored the shared buffer hits for
now).
and allows user to provides a cache_hit_ratio, the final random_page_cost
= (real_random_lat) / real_seq_lat, where
real_xxx_lat = cache_hit_ratio * fs_cache_lat + (1 - cache_hit_ratio) *
xxx_lat.
See function cal_real_lat and cal_random_page_cost.

As for the testing with cache considered, I found how to estimate cache hit
ratio is hard or how to control a hit ratio to test is hard. Recently I am
thinking
a method that we can get a page_reads, shared_buffer_hit from pg_kernel
and the real io (without the file system cache hit) at os level (just as
what
iotop/pidstat do). then we can know the shared_buffer hit ratio and file
system
cache hit ratio (assume it will be stable after a long run). and then do a
testing.
However this would be another branch of manual work and I still have not got
it done until now.

I'd not like to share too many details, but "lucky" many cases I
have haven't file
system cache, that makes things a bit easier. What I am doing right now is
to
calculate the random_page_cost with the above algorithm with only
shared_buffer
considered. and test the real benefits with real workload to see how it
works.
If it works well, I think the only thing left is to handle file system
cache.

The testing is time consuming since I have to cooperate with many site
engineers,
so any improvement on the design will be much helpful.

How do the fio based cost perform when the queries are run repeatedly?

That probably is not good since I have 280G+ file system cache and I have to
prepare much more than 280G data size for testing.

--
Best Regards
Andy Fan

#11Julien Rouhaud
rjuju123@gmail.com
In reply to: Andy Fan (#10)
Re: Dynamic gathering the values for seq_page_cost/xxx_cost

On Sat, Sep 26, 2020 at 8:17 AM Andy Fan <zhihui.fan1213@gmail.com> wrote:

As for the testing with cache considered, I found how to estimate cache hit
ratio is hard or how to control a hit ratio to test is hard. Recently I am thinking
a method that we can get a page_reads, shared_buffer_hit from pg_kernel
and the real io (without the file system cache hit) at os level (just as what
iotop/pidstat do). then we can know the shared_buffer hit ratio and file system
cache hit ratio (assume it will be stable after a long run). and then do a testing.
However this would be another branch of manual work and I still have not got
it done until now.

FWIW pg_stat_kcache [1]https://github.com/powa-team/pg_stat_kcache extension accumulates per (database, user,
queryid) physical reads and writes, so you can easily compute a
shared_buffers / IO cache / disk hit ratio.

[1]: https://github.com/powa-team/pg_stat_kcache

#12Andy Fan
zhihui.fan1213@gmail.com
In reply to: Julien Rouhaud (#11)
Re: Dynamic gathering the values for seq_page_cost/xxx_cost

On Sat, Sep 26, 2020 at 1:51 PM Julien Rouhaud <rjuju123@gmail.com> wrote:

On Sat, Sep 26, 2020 at 8:17 AM Andy Fan <zhihui.fan1213@gmail.com> wrote:

As for the testing with cache considered, I found how to estimate cache

hit

ratio is hard or how to control a hit ratio to test is hard. Recently I

am thinking

a method that we can get a page_reads, shared_buffer_hit from pg_kernel
and the real io (without the file system cache hit) at os level (just as

what

iotop/pidstat do). then we can know the shared_buffer hit ratio and file

system

cache hit ratio (assume it will be stable after a long run). and then do

a testing.

However this would be another branch of manual work and I still have not

got

it done until now.

FWIW pg_stat_kcache [1] extension accumulates per (database, user,
queryid) physical reads and writes, so you can easily compute a
shared_buffers / IO cache / disk hit ratio.

[1] https://github.com/powa-team/pg_stat_kcache

WOW, this would be a good extension for this purpose. Thanks for sharing
it.

--
Best Regards
Andy Fan