SlideShare a Scribd company logo
ASE Sept 5, 2018
A Large-Scale Study of
Test Coverage Evolution
Michael Hilton, Jonathan Bell, and Darko Marinov
Carnegie Mellon University, George Mason University, and University of Illinois at Urbana-Champaign
http://www.code-coverage.org/
ASE Sept 5, 2018
Coverage is the start to a
conversation about test quality
total # of statements executed by tests
total # of statementsStatement Coverage =
code-coverage.orgASE Sept 5, 2018
Coverage Uses
• So how do the projects in the middle use coverage on a day-to-day
basis, in a regression environment?
• Try to increase coverage
• Try to ensure each change is covered
• Use coverage for regression test selection/flaky test detection
• Our goal: Revisit what coverage can be used for, develop new
metrics through an empirical study
code-coverage.orgASE Sept 5, 2018
1a. Literature
search
2a. Clone and build projects, collect
coverage
29 projects
5,360 builds
Identifying Projects Collecting Coverage
2b. Extract data from Coveralls API
1b. GitHub +
Coveralls mining
18 projects
2,456 builds
3. Analyze diffs and
coverage per-build
4. Visualize aggregate
data
47 projects,
7,816 builds
Synthesizing Results Generating Visualizations
Methodology
Our dataset of code coverage information from 7,816 revisions of 47
projects is publicly available: http://www.code-coverage.org/
+
2b. Extract data from Coveralls API
1b. GitHub +
Coveralls mining
1a. Literature
search
2a. Clone and build projects, collect
coverage
3. Analyze diffs and
coverage per-build
4. Visualize aggregate
data
18 projects
29 projects
2,456 builds
5,360 builds
47 projects,
7,816 builds
Identifying Projects Collecting Coverage Synthesizing Results Generating Visualizations
Coveralls: A (previously) untapped new resource for
researchers
code-coverage.orgASE Sept 5, 2018
Tooling
We used diff to compare across file versions to track the changes to
unchanged but moved lines
$ diff --unchanged-line-format="%dn,%c'12'" --new-line-format="n%c'12'" --old-
line-format="" $FILE1 $FILE2 | awk '/,/{n++;print $0n} /n/{n++}'"
1. Foo;
2. Bar;
1. New;
2. Foo;
3. Bar;
Source file,
version 1
Source file,
version 2
code-coverage.orgASE Sept 5, 2018
New Questions
• Which statements were covered but are no longer covered?
• Which statements are newly covered?
• Which statements flap between covered and uncovered?
• Broadly: How does a change to one statement impact the
coverage of other statements?
code-coverage.orgASE Sept 5, 2018
RQ: Instead of trying to examine the total
coverage, is it enough to monitor just the
patch coverage?
code-coverage.orgASE Sept 5, 2018
Patch coverage does not correlate with
overall coverage
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15
P16
P17
P18
P19
P20
P21
P22
P23
P24
P25
P26
P27
P28
P29
P30
P31
P32
P33
P34
P35
P36
P37
P38
P39
P40
P41
P42
P43
P44
P45
P46
P47
0 (0−25) (25−50] (50−75] (75−100) 100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
0% 25% 50% 75% 100%
Percent of builds satisfying patch coverage % at level indicated by color:
Percent of builds satisfying coverage % at level indicated by color:
0 (0−25) (25−50] (50−75] (75−100) 100
25% 50% 75%
Percent of builds satisfying patch coverage % at level indicated by color:
Implication for developers: Do not rely on patch
coverage as an indicator of overall quality
code-coverage.orgASE Sept 5, 2018
int x = 12;
if(x > 10)
{
doStuff();
}
RQ: What impact do patches have on the
coverage of non-patch code?
int x = 12;
if(x > 10)
{
doStuff();
}
Original version: all lines covered,
doStuff() is called
if(x > 10)
{
doStuff();
}
int x = 10;
New version: first line changed,
reduces coverage since doStuff() not
called
code-coverage.orgASE Sept 5, 2018
Patches often impact coverage of existing (non-patch) code
P01
P02
P03
P04
P05
P06
P07
P08
P09
P10
P11
P12
P13
P14
P15
P16
P17
P18
P19
P20
P21
P22
P23
P24
P25
P26
P27
P28
P29
P30
P31
P32
P33
P34
P35
P36
P37
P38
P39
P40
P41
P42
P43
P44
P45
P46
P47
0 25 50 75 100
Patches with changes to code files:
Patches with no changes to code files:
Increase
Increase
No impact
No impact
Decrease
Decrease
P01
P02
P03
P04
P05
P06
P07
P08
P09
P10
P11
P12
P13
P14
P15
P16
P17
P18
P19
P20
P21
P22
P23
P24
P25
P26
P27
P28
P29
P30
P31
P32
P33
P34
P35
P36
P37
P38
P39
P40
P41
P42
P43
P44
P45
P46
P47
0 25 50 75 100
Patches with changes to code files:
Patches with no changes to code files:
Increase
Increase
No impact
No impact
Decrease
Decrease
Implication for developers: Do not assume patches
leave existing coverage unchanged
Implication for researchers: Do not assume changes
to non-code files do not change behavior
code-coverage.orgASE Sept 5, 2018
Tracking Coverage Over Time
Ideal progression of
coverage
Also possible
progression of
coverage
40% Covered
Version 1
50% Covered
Version 2
60% Covered
Version 3
80% Covered
Version 4
40% Covered 50% Covered 60% Covered 80% Covered
Covered
Not Covered
New idea: what about tracking the
coverage of each statement?
code-coverage.orgASE Sept 5, 2018
RQ: Is it ever the case that coverage
changes in ways we cannot observe using
traditional code coverage metrics?
60% Coverage 60% Coverage
≠
code-coverage.orgASE Sept 5, 2018
Percentage of commits (size of bar) with statements changing coverage (color of
bar) even when the total project coverage did not appear to change.
25 50 75
0 1−10 11−100 101−1,000 1,001+
P01
P02
P03
P04
P05
P06
P07
P08
P09
P10
P11
P12
P13
P14
P15
P16
P17
P18
P19
P20
P21
P22
P23
P24
P25
P26
P27
P28
P29
P30
P31
P32
P33
P34
P35
P36
P37
P38
P39
P40
P41
P42
P43
P44
P45
P46
P47
0 25 50 75 100
0 1−10 11−100 101−1,000 1,001+
Set of lines covered each build can vary
Implication for developers: Do not rely on “steady”
coverage indicating no change to coverage
code-coverage.orgASE Sept 5, 2018
RQ: How does the set of covered lines
change? Are there hot-spots of coverage
change, i.e., lines that flip between being
covered and uncovered throughout
evolution?
int x = 12; int x = 12; int x = 12; int x = 12;
code-coverage.orgASE Sept 5, 2018
Lines often flip coverage state
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●
●●●●●●●●●●
●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●●
●●●●
●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●●
●●●●●●●●●●●●●●●●●●
●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●●
● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●●
●●
●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ●
●●●●●● ●●● ●●●● ●●●●● ●●
●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●●
● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●●
●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●●
● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ●
●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●●
●● ●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●
●●●●●●●●●●
●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●●
●●●●
●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●●
●●●●●●●●●●●●●●●●●●
●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●●
● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●●
●●
●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ●
●●●●●● ●●● ●●●● ●●●●● ●●
●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●●
● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●●
●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●●
● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ●
●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●●
●● ●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●
P01
P02
P03
P04
P05
P06
P07
P08
P09
P10
P11
P12
P13
P14
P15
P17
P18
P19
P20
P21
P22
P24
P25
P26
P27
P28
P29
P30
P31
P32
P33
P34
P35
P36
P38
P39
P40
P41
P42
P43
P44
P45
P46
P47
25 50 75 100 125
Implication for all: Coverage can be non-deterministic
(flaky). Tools and methods for using coverage must
consider this
code-coverage.orgASE Sept 5, 2018
RQ: What are the reasons for coverage changes?
Does code coverage change because old code
becomes tested, or because new, tested code is
added? Or, does deleting lines drive changes to
code coverage?
code-coverage.orgASE Sept 5, 2018
Many factors have an impact on
coverage
P01
P02
P03
P04
P05
P06
P07
P08
P09
P10
P11
P12
P13
P14
P15
P16
P17
P18
P19
P20
P21
P22
P23
P24
P25
P26
P27
P28
P29
P30
P31
P32
P33
P34
P35
P36
P37
P38
P39
P40
P41
P42
P43
P44
P45
P46
P47
0 25 50 75 100
Deleted tested lines
Added new lines that are not covered
Coverage lost on existing lines
Added coverage to existing lines
Added new lines that are covered
Deleted untested lines
0 25 50 75 10
Deleted tested lines
Added new lines that are not covered
Coverage lost on existing lines
Added coverage to existing lines
Added new lines that are covered
Deleted untested lines
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●
●●●●●●●●●●
●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●●
●●●●
●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●●
●●●●●●●●●●●●●●●●●●
●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●●
● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●●
●●
●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ●
●●●●●● ●●● ●●●● ●●●●● ●●
●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●●
● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●●
●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●●
● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ●
●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●●
●● ●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●
●●●●●●●●●●
●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●●
●●●●
●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●●
●●●●●●●●●●●●●●●●●●
●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●●
● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●●
●●
●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ●
●●●●●● ●●● ●●●● ●●●●● ●●
●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●●
● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●●
●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●●
● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ●
●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●●
●● ●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●
P01
P02
P03
P04
P05
P06
P07
P08
P09
P10
P11
P12
P13
P14
P15
P17
P18
P19
P20
P21
P22
P24
P25
P26
P27
P28
P29
P30
P31
P32
P33
P34
P35
P36
P38
P39
P40
P41
P42
P43
P44
P45
P46
P47
25 50 75 100
P02 - Flip factor: very
high!
Most changes to
coverage are existing
lines
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●
●●●●●●●●●●
●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●●
●●●●
●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●●
●●●●●●●●●●●●●●●●●●
●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●●
● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●●
●●
●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ●
●●●●●● ●●● ●●●● ●●●●● ●●
●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●●
● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●●
●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●●
● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ●
●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●●
●● ●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●
●●●●●●●●●●
●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●●
●●●●
●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●●
●●●●●●●●●●●●●●●●●●
●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●●
● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●●
●●
●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ●
●●●●●● ●●● ●●●● ●●●●● ●●
●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●●
● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●●
●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●●
● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ●
●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●●
●● ●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●
P01
P02
P03
P04
P05
P06
P07
P08
P09
P10
P11
P12
P13
P14
P15
P17
P18
P19
P20
P21
P22
P24
P25
P26
P27
P28
P29
P30
P31
P32
P33
P34
P35
P36
P38
P39
P40
P41
P42
P43
P44
P45
P46
P47
25 50 75 100
P38: LOW flip factor,
most changes to
coverage are to new
lines
Implication for developers: Coverage DOES at times
go up due to deleting uncovered lines; it might go
down from deleting tested lines. Just looking at
coverage as an overall statistic is not enough to
understand what the tests are doing!
code-coverage.orgASE Sept 5, 2018
Two Key Observations
Total statements in program 100 10,000 100,000 1M
Percent change of 100
statements
100% 1% 0.1% 0.01%
1: A change the coverage of some statements might not be observable in a
large project, but it might still matter!
60% Coverage 60% Coverage≠
2: Lines can and do “swap” coverage, yielding equivalent overall coverage,
even when the set of lines covered changes
A Large-Scale Study of Test Coverage Evolution
Michael Hilton, Jonathan Bell and Darko Marinov
Carnegie Mellon University, George Mason University, and University of Illinois at Urbana-Champaign
Data and prototype visualization tool: https://www.code-coverage.org/
Darko Marinov's group is supported by NSF grants CCF-1409423, CCF-1421503, CNS-1646305, and CNS-1740916; and gifts from Google and Qualcomm.
ASE Sept 5, 2018
P01 apache/commons-collections java 189 12,765 40 84%
P02 apache/commons-dbcp java 164 5,662 19 48%
P03 apache/commons-exec java 212 971 65 63%
P04 apache/commons-functor java 248 2,693 69 83%
P05 apache/commons-io java 35 5,021 2 88%
P06 apache/commons-jxpath java 199 9,633 94 75%
P07 apache/commons-math java 217 45,034 16 90%
P08 apache/commons-net java 53 9,210 1 30%
P09 apache/commons-validator java 104 2,854 10 77%
P10 apache/empire-db java 241 21,258 60 14%
P11 apache/httpcore java 223 13,198 18 77%
P12 ARMmbed/mbed-ls python 60 804 6 75%
P13 bitwalker/timex elixer 128 2,615 16 65%
P14 broadinstitute/recloud-orchestration Scala 170 2,658 13 64%
P15 containers/virtcontainers go 296 5,332 9 66%
P16 coreos/alb-ingress-controller go 98 2,041 7 3%
P17 damianszczepanik/cucumber-reporting java 248 794 15 88%
P18 dask/dask python 290 15,322 7 94%
P19 doanduyhai/Achilles java 111 11,008 9 56%
P20 dropwizard/dropwizard java 246 7,700 9 86%
P21 eBay/cors-lter java 204 280 45 94%
P22 F5Networks/k8s-bigip-ctlr go 103 5,621 5 76%
P23 fasseg/exp4j java 233 640 40 89%
P24 Gillespie59/eslint-plugin-angular node 212 1,213 19 100%
P25 goldmansachs/gs-collections java
P26 google/jimfs java
P27 HazyResearch/deepdive Scala
P28 hector-client/hector java
P29 ikawaha/kagome go
P30 ilovepi/Compiler dotNet
P31 jhy/jsoup java
P32 jknack/handlebars.java java
P33 JodaOrg/joda-time java
P34 joel-costigliola/assertj-core java
P35 mailgun/kafka-pixy go
P36 MITLibraries/topichub Scala
P37 platinumazure/eslint-plugin-qunit node
P38 PragTob/benchee elixer
P39 raml-org/raml-java-parser java
P40 ShiftForward/apso Scala
P41 spatialmodel/inmap go
P42 square/okhttp java
P43 square/retrot java
P44 SteamDatabase/ValveResourceFormat dotNet
P45 terasolunaorg/terasoluna-gfw java
P46 undertow-io/undertow java
P47 zxing/zxing java
ASE Sept 5, 2018
Coverage
Project Lang Builds LoC
Time
range
(months) Start Sparkline End
P01 apache/commons-collections java 189 12,765 40 84% 84%
P02 apache/commons-dbcp java 164 5,662 19 48% 51%
P03 apache/commons-exec java 212 971 65 63% 72%
P04 apache/commons-functor java 248 2,693 69 83% 97%
P05 apache/commons-io java 35 5,021 2 88% 87%
P06 apache/commons-jxpath java 199 9,633 94 75% 77%
P07 apache/commons-math java 217 45,034 16 90% 90%
P08 apache/commons-net java 53 9,210 1 30% 30%
P09 apache/commons-validator java 104 2,854 10 77% 78%
P10 apache/empire-db java 241 21,258 60 14% 14%
P11 apache/httpcore java 223 13,198 18 77% 75%
P12 ARMmbed/mbed-ls python 60 804 6 75% 78%
P13 bitwalker/timex elixer 128 2,615 16 65% 68%
P14 broadinstitute/recloud-orchestration Scala 170 2,658 13 64% 68%
P15 containers/virtcontainers go 296 5,332 9 66% 61%
P16 coreos/alb-ingress-controller go 98 2,041 7 3% 21%
P17 damianszczepanik/cucumber-reporting java 248 794 15 88% 99%
P18 dask/dask python 290 15,322 7 94% 92%
P19 doanduyhai/Achilles java 111 11,008 9 56% 54%
P20 dropwizard/dropwizard java 246 7,700 9 86% 87%
P21 eBay/cors-lter java 204 280 45 94% 100%
P22 F5Networks/k8s-bigip-ctlr go 103 5,621 5 76% 83%
P23 fasseg/exp4j java 233 640 40 89% 95%
P24 Gillespie59/eslint-plugin-angular node 212 1,213 19 100% 100%
P25 goldmansachs/gs-collections java 249 38,242 16 92% 93%
P26 google/jimfs java 100 3,401 45 89% 91%
P27 HazyResearch/deepdive Scala 111 1,913 5 81% 73%
P28 hector-client/hector java 137 8,583 25 35% 39%
P29 ikawaha/kagome go 91 1,099 27 80% 86%
P30 ilovepi/Compiler dotNet 96 1,874 1 87% 90%
P31 jhy/jsoup java 246 6,615 28 76% 77%
P32 jknack/handlebars.java java 100 3,935 9 83% 84%
P33 JodaOrg/joda-time java 248 14,789 35 90% 90%
P34 joel-costigliola/assertj-core java 241 11,104 9 90% 90%
P35 mailgun/kafka-pixy go 64 4,387 13 80% 69%
P36 MITLibraries/topichub Scala 102 2,466 11 57% 60%
P37 platinumazure/eslint-plugin-qunit node 62 628 22 100% 100%
P38 PragTob/benchee elixer 148 441 6 94% 94%
P39 raml-org/raml-java-parser java 248 6,455 16 86% 86%
P40 ShiftForward/apso Scala 94 1,629 9 54% 59%
P41 spatialmodel/inmap go 55 5,983 9 81% 83%
P42 square/okhttp java 247 11,854 10 78% 78%
P43 square/retrot java 181 2,479 17 56% 57%
P44 SteamDatabase/ValveResourceFormat dotNet 179 2,794 23 82% 73%
P45 terasolunaorg/terasoluna-gfw java 97 2,561 17 99% 99%
P46 undertow-io/undertow java 238 51,388 9 60% 60%
P47 zxing/zxing java 198 15,440 21 68% 76%
Total 47 projects, 384,412 LOC Average: 166 8,178 20 74% 76%

More Related Content

Similar to A Large-Scale Study of Test Coverage Evolution (20)

PPT
Comparing public RNA-seq data
mikaelhuss
 
PPTX
GSC in HUB_Kaikai Yang / COO, Energo Labs
VentureSquare
 
PDF
Deep dive into Nagios analytics
Datadog
 
PDF
Spray Democamp Dresden 2011-11-08
joergreichert
 
PPTX
Aiello-Lammens: Global Sensitivity Analysis for Impact Assessments.
questRCN
 
PDF
Community dynamics of the adolescent vaginal microbiome during puberty (UOreg...
Roxana Hickey
 
PPTX
Gemeinsam kreativ für bessere Software - Vortragsreihe Dortmund
itemis AG
 
PDF
Fairisle knitting
zafiro555
 
PPTX
Entwicklung in Spielen als Innovationstreiber für Usability
itemis AG
 
PPTX
Entwicklungen in Spielen als Innovationstreiber für Usability
Michael Jendryschik
 
PDF
正誤表 p39
zafiro555
 
PDF
データ社会を生きる技術〜人工知能のHypeとHope〜
Ichigaku Takigawa
 
PDF
Building Flexible APIs with Spring HATEOAS
VMware Tanzu
 
PDF
The Ecology of Forage Fish in the Salish Sea
Tessa Francis
 
PPT
アイ・トレーニング10点)
kenji sakuma
 
PDF
Will data scientists lead the discovery of cancer therapeutics?
Laura Berry
 
PDF
Innovation & Issue process
Katsuhito Okada
 
DOCX
Pocket dot grid pages
HIKOO
 
PDF
17 polishing
Hadley Wickham
 
PDF
機械学習~データを予測に変える技術~で化学に挑む! (サイエンスアゴラ2021)
Ichigaku Takigawa
 
Comparing public RNA-seq data
mikaelhuss
 
GSC in HUB_Kaikai Yang / COO, Energo Labs
VentureSquare
 
Deep dive into Nagios analytics
Datadog
 
Spray Democamp Dresden 2011-11-08
joergreichert
 
Aiello-Lammens: Global Sensitivity Analysis for Impact Assessments.
questRCN
 
Community dynamics of the adolescent vaginal microbiome during puberty (UOreg...
Roxana Hickey
 
Gemeinsam kreativ für bessere Software - Vortragsreihe Dortmund
itemis AG
 
Fairisle knitting
zafiro555
 
Entwicklung in Spielen als Innovationstreiber für Usability
itemis AG
 
Entwicklungen in Spielen als Innovationstreiber für Usability
Michael Jendryschik
 
正誤表 p39
zafiro555
 
データ社会を生きる技術〜人工知能のHypeとHope〜
Ichigaku Takigawa
 
Building Flexible APIs with Spring HATEOAS
VMware Tanzu
 
The Ecology of Forage Fish in the Salish Sea
Tessa Francis
 
アイ・トレーニング10点)
kenji sakuma
 
Will data scientists lead the discovery of cancer therapeutics?
Laura Berry
 
Innovation & Issue process
Katsuhito Okada
 
Pocket dot grid pages
HIKOO
 
17 polishing
Hadley Wickham
 
機械学習~データを予測に変える技術~で化学に挑む! (サイエンスアゴラ2021)
Ichigaku Takigawa
 

More from jon_bell (8)

PDF
Replay without Recording of Production Bugs for Service Oriented Applications
jon_bell
 
PDF
CROCHET - Checkpoint Rollback in JVM (ECOOP 2018)
jon_bell
 
PDF
Efficient Dependency Detection for Safe Java Test Acceleration
jon_bell
 
PDF
Phosphor: Illuminating Dynamic Data Flow in Commodity JVMs
jon_bell
 
PDF
ICSE 2014: Unit Test Virtualization with VMVM
jon_bell
 
PDF
Unit Test Virtualization: Optimizing Testing Time
jon_bell
 
PDF
Chronicler: Lightweight Recording to Reproduce Field Failures (Presented at I...
jon_bell
 
PDF
A Large-Scale, Longitudinal Study of User Profiles in World of Warcraft
jon_bell
 
Replay without Recording of Production Bugs for Service Oriented Applications
jon_bell
 
CROCHET - Checkpoint Rollback in JVM (ECOOP 2018)
jon_bell
 
Efficient Dependency Detection for Safe Java Test Acceleration
jon_bell
 
Phosphor: Illuminating Dynamic Data Flow in Commodity JVMs
jon_bell
 
ICSE 2014: Unit Test Virtualization with VMVM
jon_bell
 
Unit Test Virtualization: Optimizing Testing Time
jon_bell
 
Chronicler: Lightweight Recording to Reproduce Field Failures (Presented at I...
jon_bell
 
A Large-Scale, Longitudinal Study of User Profiles in World of Warcraft
jon_bell
 
Ad

Recently uploaded (20)

PPTX
Nanofertilizer: Its potential benefits and associated challenges.pptx
BikramjitDeuri
 
PPTX
DNA_structure_2025_Curso de Ácidos Nucleicos
Cinvestav
 
PDF
High-definition imaging of a filamentary connection between a close quasar pa...
Sérgio Sacani
 
PPTX
Chromium (Cr) based oxidizing reagents.pptx
karnikhimani
 
PDF
Control and coordination Class 10 Chapter 6
LataHolkar
 
PDF
NSF-DOE Vera C. Rubin Observatory Observations of Interstellar Comet 3I/ATLAS...
Sérgio Sacani
 
PDF
A deep Search for Ethylene Glycol and Glycolonitrile in the V883 Ori Protopla...
Sérgio Sacani
 
PPTX
mirna_2025_clase_genética_cinvestav_Dralvarez
Cinvestav
 
PDF
Sujay Rao Mandavilli Multi-barreled appraoch to educational reform FINAL FINA...
Sujay Rao Mandavilli
 
PPTX
MODIS/VIIRS Standard Cloud Products: SW Calibration and Trend Quantification ...
ShaneFernandes24
 
PPTX
Quality control test for plastic & metal.pptx
shrutipandit17
 
PPTX
Evolution of diet breadth in herbivorus insects.pptx
Mr. Suresh R. Jambagi
 
PDF
Pulsar Sparking: What if mountains on the surface?
Sérgio Sacani
 
PPTX
The Obesity Paradox. Friend or Foe ?pptx
drdgd1972
 
PPTX
Hericium erinaceus, also known as lion's mane mushroom
TinaDadkhah1
 
PPTX
Pengenalan Sel dan organisasi kehidupanpptx
SuntiEkaprawesti1
 
PPTX
Home Garden as a Component of Agroforestry system : A survey-based Study
AkhangshaRoy
 
PDF
A water-rich interior in the temperate sub-Neptune K2-18 b revealed by JWST
Sérgio Sacani
 
PPTX
Q1_Science 8_Week4-Day 5.pptx science re
AizaRazonado
 
PPTX
Pirimidinas_2025_Curso Ácidos nucleicos. Cinvestav
Cinvestav
 
Nanofertilizer: Its potential benefits and associated challenges.pptx
BikramjitDeuri
 
DNA_structure_2025_Curso de Ácidos Nucleicos
Cinvestav
 
High-definition imaging of a filamentary connection between a close quasar pa...
Sérgio Sacani
 
Chromium (Cr) based oxidizing reagents.pptx
karnikhimani
 
Control and coordination Class 10 Chapter 6
LataHolkar
 
NSF-DOE Vera C. Rubin Observatory Observations of Interstellar Comet 3I/ATLAS...
Sérgio Sacani
 
A deep Search for Ethylene Glycol and Glycolonitrile in the V883 Ori Protopla...
Sérgio Sacani
 
mirna_2025_clase_genética_cinvestav_Dralvarez
Cinvestav
 
Sujay Rao Mandavilli Multi-barreled appraoch to educational reform FINAL FINA...
Sujay Rao Mandavilli
 
MODIS/VIIRS Standard Cloud Products: SW Calibration and Trend Quantification ...
ShaneFernandes24
 
Quality control test for plastic & metal.pptx
shrutipandit17
 
Evolution of diet breadth in herbivorus insects.pptx
Mr. Suresh R. Jambagi
 
Pulsar Sparking: What if mountains on the surface?
Sérgio Sacani
 
The Obesity Paradox. Friend or Foe ?pptx
drdgd1972
 
Hericium erinaceus, also known as lion's mane mushroom
TinaDadkhah1
 
Pengenalan Sel dan organisasi kehidupanpptx
SuntiEkaprawesti1
 
Home Garden as a Component of Agroforestry system : A survey-based Study
AkhangshaRoy
 
A water-rich interior in the temperate sub-Neptune K2-18 b revealed by JWST
Sérgio Sacani
 
Q1_Science 8_Week4-Day 5.pptx science re
AizaRazonado
 
Pirimidinas_2025_Curso Ácidos nucleicos. Cinvestav
Cinvestav
 
Ad

A Large-Scale Study of Test Coverage Evolution

  • 1. ASE Sept 5, 2018 A Large-Scale Study of Test Coverage Evolution Michael Hilton, Jonathan Bell, and Darko Marinov Carnegie Mellon University, George Mason University, and University of Illinois at Urbana-Champaign http://www.code-coverage.org/
  • 2. ASE Sept 5, 2018 Coverage is the start to a conversation about test quality total # of statements executed by tests total # of statementsStatement Coverage =
  • 3. code-coverage.orgASE Sept 5, 2018 Coverage Uses • So how do the projects in the middle use coverage on a day-to-day basis, in a regression environment? • Try to increase coverage • Try to ensure each change is covered • Use coverage for regression test selection/flaky test detection • Our goal: Revisit what coverage can be used for, develop new metrics through an empirical study
  • 4. code-coverage.orgASE Sept 5, 2018 1a. Literature search 2a. Clone and build projects, collect coverage 29 projects 5,360 builds Identifying Projects Collecting Coverage 2b. Extract data from Coveralls API 1b. GitHub + Coveralls mining 18 projects 2,456 builds 3. Analyze diffs and coverage per-build 4. Visualize aggregate data 47 projects, 7,816 builds Synthesizing Results Generating Visualizations Methodology Our dataset of code coverage information from 7,816 revisions of 47 projects is publicly available: http://www.code-coverage.org/ + 2b. Extract data from Coveralls API 1b. GitHub + Coveralls mining 1a. Literature search 2a. Clone and build projects, collect coverage 3. Analyze diffs and coverage per-build 4. Visualize aggregate data 18 projects 29 projects 2,456 builds 5,360 builds 47 projects, 7,816 builds Identifying Projects Collecting Coverage Synthesizing Results Generating Visualizations Coveralls: A (previously) untapped new resource for researchers
  • 5. code-coverage.orgASE Sept 5, 2018 Tooling We used diff to compare across file versions to track the changes to unchanged but moved lines $ diff --unchanged-line-format="%dn,%c'12'" --new-line-format="n%c'12'" --old- line-format="" $FILE1 $FILE2 | awk '/,/{n++;print $0n} /n/{n++}'" 1. Foo; 2. Bar; 1. New; 2. Foo; 3. Bar; Source file, version 1 Source file, version 2
  • 6. code-coverage.orgASE Sept 5, 2018 New Questions • Which statements were covered but are no longer covered? • Which statements are newly covered? • Which statements flap between covered and uncovered? • Broadly: How does a change to one statement impact the coverage of other statements?
  • 7. code-coverage.orgASE Sept 5, 2018 RQ: Instead of trying to examine the total coverage, is it enough to monitor just the patch coverage?
  • 8. code-coverage.orgASE Sept 5, 2018 Patch coverage does not correlate with overall coverage P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 P16 P17 P18 P19 P20 P21 P22 P23 P24 P25 P26 P27 P28 P29 P30 P31 P32 P33 P34 P35 P36 P37 P38 P39 P40 P41 P42 P43 P44 P45 P46 P47 0 (0−25) (25−50] (50−75] (75−100) 100 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 0% 25% 50% 75% 100% Percent of builds satisfying patch coverage % at level indicated by color: Percent of builds satisfying coverage % at level indicated by color: 0 (0−25) (25−50] (50−75] (75−100) 100 25% 50% 75% Percent of builds satisfying patch coverage % at level indicated by color: Implication for developers: Do not rely on patch coverage as an indicator of overall quality
  • 9. code-coverage.orgASE Sept 5, 2018 int x = 12; if(x > 10) { doStuff(); } RQ: What impact do patches have on the coverage of non-patch code? int x = 12; if(x > 10) { doStuff(); } Original version: all lines covered, doStuff() is called if(x > 10) { doStuff(); } int x = 10; New version: first line changed, reduces coverage since doStuff() not called
  • 10. code-coverage.orgASE Sept 5, 2018 Patches often impact coverage of existing (non-patch) code P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11 P12 P13 P14 P15 P16 P17 P18 P19 P20 P21 P22 P23 P24 P25 P26 P27 P28 P29 P30 P31 P32 P33 P34 P35 P36 P37 P38 P39 P40 P41 P42 P43 P44 P45 P46 P47 0 25 50 75 100 Patches with changes to code files: Patches with no changes to code files: Increase Increase No impact No impact Decrease Decrease P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11 P12 P13 P14 P15 P16 P17 P18 P19 P20 P21 P22 P23 P24 P25 P26 P27 P28 P29 P30 P31 P32 P33 P34 P35 P36 P37 P38 P39 P40 P41 P42 P43 P44 P45 P46 P47 0 25 50 75 100 Patches with changes to code files: Patches with no changes to code files: Increase Increase No impact No impact Decrease Decrease Implication for developers: Do not assume patches leave existing coverage unchanged Implication for researchers: Do not assume changes to non-code files do not change behavior
  • 11. code-coverage.orgASE Sept 5, 2018 Tracking Coverage Over Time Ideal progression of coverage Also possible progression of coverage 40% Covered Version 1 50% Covered Version 2 60% Covered Version 3 80% Covered Version 4 40% Covered 50% Covered 60% Covered 80% Covered Covered Not Covered New idea: what about tracking the coverage of each statement?
  • 12. code-coverage.orgASE Sept 5, 2018 RQ: Is it ever the case that coverage changes in ways we cannot observe using traditional code coverage metrics? 60% Coverage 60% Coverage ≠
  • 13. code-coverage.orgASE Sept 5, 2018 Percentage of commits (size of bar) with statements changing coverage (color of bar) even when the total project coverage did not appear to change. 25 50 75 0 1−10 11−100 101−1,000 1,001+ P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11 P12 P13 P14 P15 P16 P17 P18 P19 P20 P21 P22 P23 P24 P25 P26 P27 P28 P29 P30 P31 P32 P33 P34 P35 P36 P37 P38 P39 P40 P41 P42 P43 P44 P45 P46 P47 0 25 50 75 100 0 1−10 11−100 101−1,000 1,001+ Set of lines covered each build can vary Implication for developers: Do not rely on “steady” coverage indicating no change to coverage
  • 14. code-coverage.orgASE Sept 5, 2018 RQ: How does the set of covered lines change? Are there hot-spots of coverage change, i.e., lines that flip between being covered and uncovered throughout evolution? int x = 12; int x = 12; int x = 12; int x = 12;
  • 15. code-coverage.orgASE Sept 5, 2018 Lines often flip coverage state ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●● ●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●● ●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●● ● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●● ●● ●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ● ●●●●●● ●●● ●●●● ●●●●● ●● ●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●● ● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●● ●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●● ● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●● ●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●● ●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●● ●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●● ● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●● ●● ●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ● ●●●●●● ●●● ●●●● ●●●●● ●● ●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●● ● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●● ●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●● ● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●● ●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11 P12 P13 P14 P15 P17 P18 P19 P20 P21 P22 P24 P25 P26 P27 P28 P29 P30 P31 P32 P33 P34 P35 P36 P38 P39 P40 P41 P42 P43 P44 P45 P46 P47 25 50 75 100 125 Implication for all: Coverage can be non-deterministic (flaky). Tools and methods for using coverage must consider this
  • 16. code-coverage.orgASE Sept 5, 2018 RQ: What are the reasons for coverage changes? Does code coverage change because old code becomes tested, or because new, tested code is added? Or, does deleting lines drive changes to code coverage?
  • 17. code-coverage.orgASE Sept 5, 2018 Many factors have an impact on coverage P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11 P12 P13 P14 P15 P16 P17 P18 P19 P20 P21 P22 P23 P24 P25 P26 P27 P28 P29 P30 P31 P32 P33 P34 P35 P36 P37 P38 P39 P40 P41 P42 P43 P44 P45 P46 P47 0 25 50 75 100 Deleted tested lines Added new lines that are not covered Coverage lost on existing lines Added coverage to existing lines Added new lines that are covered Deleted untested lines 0 25 50 75 10 Deleted tested lines Added new lines that are not covered Coverage lost on existing lines Added coverage to existing lines Added new lines that are covered Deleted untested lines ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●● ●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●● ●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●● ● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●● ●● ●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ● ●●●●●● ●●● ●●●● ●●●●● ●● ●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●● ● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●● ●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●● ● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●● ●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●● ●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●● ●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●● ● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●● ●● ●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ● ●●●●●● ●●● ●●●● ●●●●● ●● ●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●● ● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●● ●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●● ● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●● ●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11 P12 P13 P14 P15 P17 P18 P19 P20 P21 P22 P24 P25 P26 P27 P28 P29 P30 P31 P32 P33 P34 P35 P36 P38 P39 P40 P41 P42 P43 P44 P45 P46 P47 25 50 75 100 P02 - Flip factor: very high! Most changes to coverage are existing lines ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●● ●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●● ●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●● ● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●● ●● ●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ● ●●●●●● ●●● ●●●● ●●●●● ●● ●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●● ● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●● ●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●● ● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●● ●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●● ●●●●●● ●●● ● ●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●● ●●●●● ● ●●●●● ●●● ●● ●●●● ●●●●●●●● ●● ●●●●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●● ●●●●●●● ●●● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●●●●● ●●● ●●●● ●● ●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ● ●●●●●● ●●●●●●● ●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●●● ●●● ●●● ●● ●●●● ●●●●● ●● ●● ●● ● ●● ●●●● ●●● ●● ●● ●● ● ●●● ●●●● ●●●●●● ●●●● ●●●● ●● ●●● ●● ● ●●●●● ●●●● ● ●● ● ●●●●● ●● ●● ●●●●●● ●● ●●●● ●●● ●● ●●●● ●●●● ●● ●●● ●● ●●● ● ●●● ●●●● ● ●● ●●● ●●●●●●●●●●● ● ●●●● ●● ●● ●● ●●●● ●● ●● ●●● ● ● ●● ●● ●●● ●●●● ●●●●● ●●● ●●●●● ●● ● ●●● ●● ●● ●● ●● ● ●●●● ● ●● ●● ●● ●● ●●●●●● ●● ●● ●● ●●●●● ●●● ●● ● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●●● ●●●● ●●●● ●● ●●●● ●●● ●● ●● ●●● ●●●●● ●● ●●●● ●●● ●●● ●●● ●●●●●● ● ●● ●● ●●●●●● ●● ●●● ●●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●●● ●●●● ●●●● ●● ●●● ●●●●● ●●●●●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●● ●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●● ●● ●●● ●●● ●●● ● ●● ●● ● ●●● ●●● ●●● ●●●● ●● ●● ●●●●● ●●●●●● ●● ●●● ● ●●● ●●●●●● ●● ● ●●●● ● ●● ●●●● ●●●●●●● ●●●● ●●● ●● ●● ● ●●● ●● ●●●● ●●● ●●●● ●●●●● ●●● ●● ●● ●● ●●●● ● ● ●● ●● ●● ● ●● ●●●● ●● ●●● ●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●●●● ●●●●● ●● ●● ●●●● ●●● ●● ● ●●● ●● ● ● ●●●● ●● ●● ●●●● ●●● ●● ●●●● ●●●● ●●● ●●●●● ●● ● ●●●● ●● ●●● ●● ●● ●●● ● ●●●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●● ●●● ●● ●● ●●●● ●●●● ●●●●● ●●● ●● ●●●● ●●● ●● ●●● ●● ●●● ●●●●●●● ●● ●●● ●●●●●● ●●●●● ●● ●●● ●● ●● ●● ●● ●● ●● ●●● ●● ●● ●●● ●●●● ●●●● ●● ●●● ●● ●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●●● ●●● ● ●●●● ●● ●● ●●●● ● ●●●●●●●●● ●● ●●● ●●●●● ●● ● ●●●● ●●● ●● ●●● ● ●● ●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●● ●● ●●●● ●● ●●●● ●●● ●● ● ●●●● ●●●● ●● ● ●●●● ●●●●●● ●●● ●●● ●●●● ●●●●● ●●●●● ●●●● ●●●●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●● ●●● ●●●●●●●●● ●●●●● ●● ●●●●●●●●●● ●●● ●●●●●●●●●● ● ●●●● ●● ●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●●● ●●●● ●●●●●●● ●● ●●● ●●● ●●●●● ●●● ●●● ●●● ●●● ●● ●●●●●●●●●●● ●●●●●●●● ● ●●● ●●● ●●●● ●● ● ●● ●●● ● ●●●●●●●● ●●● ●● ●● ●●●●●● ●●● ●●●●●●●●●● ●●● ●●●●● ●● ●● ●●● ●●●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●● ●●●● ●●● ●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●● ●●●●● ●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●● ●●● ● ●● ●● ●● ●● ●●● ●●●●●●●●● ●●●●●● ● ●●● ●● ●● ●●●●● ●●●● ●● ●●●●●●●●●●● ●● ●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●● ●●● ●● ●●●● ●●●●●●●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ●● ●● ●● ●● ●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ● ●●● ●●●● ●●● ●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●● ● ●●●●● ●●● ●●●●●● ●●●● ●●●●●●● ●● ●●●● ●●● ●●●●● ●●●●● ●● ●●●●● ●●●●● ●● ●● ●●●●● ●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●● ●●● ●●●●● ●●●●● ●●●●●● ●●●● ● ●●● ●●●●●● ● ●● ●●●●●●● ● ●● ●● ● ●●● ● ●●●●● ●●● ●●● ●● ●● ●● ●● ●●●●● ●● ●●●● ●●●●● ●● ●●●●●●● ●●●●●●●●●●● ●●●●●●●● ●●●●●● ●● ●● ●● ●● ●●● ●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●● ●●●● ●●● ●●●● ●●●●●● ● ●●●● ●● ●● ● ●●● ● ●●●●●● ●●●●●●●●●●●●●● ●● ●●● ●●●●●●●● ● ●● ●● ●●● ● ●●●● ●● ●●● ● ●● ●●●● ●● ●●●●●● ●● ●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●● ●●●●●● ●●●●● ● ●●●●●●●●●●●● ●● ●● ●●●● ●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●● ●●●●●●● ●●●● ●●●● ●●●●● ●●●●●●●● ● ●●●●●● ● ●●●●●●●● ●●●●●●●●●● ●● ●●● ●●●●●●●●●●●●●● ●● ●● ●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●● ●●●● ● ●●●● ●●●●● ●●● ●●●●● ●●● ●● ●●●● ●●●●●● ●●●● ●● ●● ●● ●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●● ●●●● ● ●●●●● ●●●● ●●●●● ●●●● ● ●●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●●● ●● ●●●● ●● ●●● ●●● ●●●●●● ●● ●● ●●● ●●● ● ● ●●● ●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●● ●●●● ●●●● ●● ●●● ●●● ●● ●● ●● ●●●●●●●●●●●●●●●●●●● ●● ●●●●●● ●● ●●● ●●● ● ●●●●●●●●●●●●●●●●● ●●●● ● ●●●●● ●● ●● ●●● ●●●● ●●●●●● ●●●●● ●●●●●● ●●●●● ●●●● ● ●●●●●●● ●●●● ●●●● ●●●●●●●● ●●●●●●● ●●●●●● ●●●●●●●● ●●●●●● ●●●● ●●● ●●●●● ●●●●●●●● ●●●● ●●●●● ●●● ●●●●●●● ●●●●●●●●●● ● ● ●●●● ●●●● ●●● ●●●● ●●● ●●●●●●●●●●● ●●●●●●●●●●● ●●● ●●●●●●● ●●●● ●● ● ●● ●● ●● ●●●●●●●● ●●●●● ●●●●● ●●● ●●●●●●● ●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●● ●●●● ●●●●●●●●● ●● ●●●●●●●●●● ●●● ●●● ●●● ● ●●● ●●● ● ●●●● ●●●● ●●●● ●●●● ●●● ●●● ●●●● ●●● ●●●●●●● ●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●●●● ●●●●● ●● ●●●● ●●●● ●●●●● ●●●●●●●●●●●● ●● ●●●●● ●● ●●● ●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●● ●●●●● ● ●●●●●●● ●●●●●●●●●●● ●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●● ● ● ● ●●● ●● ● ●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●●●● ●● ●●●●●●●● ●●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●● ●●●●●●● ● ●●●●●●●●● ●● ●●●● ●●●● ●● ●●●●●● ●● ●● ●●● ● ●●● ●● ●●●●●● ●●● ●●● ●●● ●●●●●● ●●● ●●●● ●● ●●● ●●● ● ●● ●●●● ●● ●●● ●● ●●● ●●● ● ●●●● ●● ●●● ●●● ●●●● ●●● ●● ●●● ●●●● ●●● ●●● ●●●● ●●●● ●●●●● ●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ● ●●●●●●●● ●●●● ●●●●●● ●●●●●●● ●●●● ●●●●● ● ●● ●● ●●●● ●●●●●●●●● ●●●●● ●●●●●● ●●●●●●● ●●●● ●●●●●● ●●●●●●●●●●● ●●●● ●●●●● ●●● ●●●●● ●●● ●●●●●●●●●●●●●●●● ●●● ●●●●● ●● ●●●●●●●●●●●●●●●● ●●●●● ●●●●●● ●●●●●●●● ●● ●●● ● ●● ●● ●●●● ●●● ●●●●●●●●●●● ●●●● ● ●● ●●●● ●●●●●● ● ●● ●●● ●●● ●●●●●●● ●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●● ● ●● ●●●●●●●●● ●●● ●●●●●● ●●●●● ●● ●● ●●● ●●●● ●●● ●●● ●●● ●●●● ●●● ●●●● ●● ●● ●●●● ●●●●●●● ●●●● ●●●● ●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●● ●●●●●● ●●● ●●● ● ●●● ●●● ●● ●●● ●●●●●●●●● ●● ●●●●● ●● ●●●●● ●●● ●●●●●● ●● ●●●●● ●●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ● ●●●●● ●●●● ●●● ●●●●●● ● ●● ●●● ●●●●●● ●●● ●●● ● ●●●●●●●●● ● ●●●● ●●● ●●●●●● ●●● ● ●●●● ●●● ●●● ●● ●● ●●●● ●●●●● ●● ● ●●●● ●● ●●● ● ●●●● ●●●●● ●●●●● ●● ●●●●●●● ●● ● ●●●● ●●●●●●●● ●● ●●●●● ●● ●●●●● ●● ●●● ●●●● ●● ● ●●●● ●● ●●● ●●●●● ●●● ●●●●●● ●●●● ●●●● ●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●● ●● ● ●● ●● ●● ●●● ●●●●● ●●●●●●● ●●●●●●● ●● ●●● ● ●●● ● ●● ●● ● ● ●● ●●●● ●●● ●●●●● ●●● ●●●●● ●●●● ●●●●● ●● ●●●●●● ●● ●●● ●●● ●●●●● ● ● ●●●● ●●●●● ●●●● ●● ●●● ●● ●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●●●● ●● ●●●● ●●● ●● ●● ●● ●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●● ●● ●●●● ● ●● ●●●● ●●● ●● ●●●●●●● ●●●● ●●●●●●●●●●● ●●●●●●●●●●●● ● ●● ●●●● ●●● ●● ●●●●●●●● ●●●●● ●●● ●● ●●●● ●● ● ●● ●● ●●●●●●●●●● ●● ● ●● ●●● ● ●●●●●●●●●● ●●●●●●●●● ●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●● ●●● ●● ●●●●●● ●●●● ● ●● ●●●● ●●● ●●● ●● ●●●●● ●● ●● ●●● ●●●●● ●●●●● ●●●●●●● ● ●●●●● ●●●●● ● ●● ●●● ●●● ●●●●● ●●●●●●● ●●● ●●●●● ●● ●●● ●●● ●●●● ●●●●●●● ●●●● ●● ● ● ●●●● ●● ●● ●●●● ●●●●● ●●● ● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●●●●●● ●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●● ●● ●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●● ●●● ●●●● ●●●●●● ●●● ●● ● ●● ●●●●● ●● ●● ● ●●●● ●●●●● ●●● ●●● ● ●●●● ●●●● ● ●● ●●●● ●●● ● ●● ●●●● ●●● ●●●●●●●●●●● ●●● ● ●●● ●●●●●● ●●●●●● ●●● ●●●● ●●●● ●● ● ●●●●●●● ●● ● ●●●● ●●●●●● ●●● ●●●●●● ●●●● ●● ● ●● ●●●●● ●●●●● ● ● ●● ●●● ●●● ●● ●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●● ●●●●●● ●●●●● ●●● ●● ●●●● ●●● ●●●●●●●●● ●●● ●●●●●● ●●●● ●● ●●●●●●●●●● ● ●● ● ●●●● ●● ●●●● ●●● ● ●●●●●● ●●● ●●●● ●●●●● ●● ●●● ●●● ●● ●●● ●●● ●● ●●●●●●●●●●●●●●●●●●●●●● ● ●● ●● ●●●● ●●●●●● ●● ●● ●●● ●● ●● ●● ●●● ●●● ●●●●●●●● ●●●● ●●●● ● ●●●●●●●●●● ●●● ●● ●●●●●● ●● ●●●● ●●●● ●● ●●●● ●●● ●●● ●● ●● ●●● ●●●●●● ●●●● ●●●●● ●● ●●●● ●● ●●●●●●●●● ●●● ● ●● ●● ●● ●●●●●● ●●●● ●●● ●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●● ●●●●● ●●●● ● ●● ●● ● ●●●● ● ● ●●●● ●●●●●●● ●●●● ●●●●●●●● ●●●●●● ●●● ●●●●●●●●● ●● ● ●●●●● ●●●●●●●● ● ●● ●●● ●●●● ●●● ●● ●●● ●● ●●● ●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●● ●● ● ●● ●●● ●●●●●●● ●●● ●●● ●● ●●● ●●● ●●●●●●● ●●●●●●●● ●●● ●● ●● ● ●● ●●●●● ●● ●●● ●●●●●●●● ●●●● ●● ●● ●● ●●● ●● ●●●●●●●●● ●● ●● ●●●● ●●●●●●●●●●● ●●● ●●●●●● ●●●● ●●●●●● ●●●●●●● ●● ●●●●●●● ● ●● ●● ●●●●●●● ●● ● ●●●●●●●● ●● ●● ●● ●●●● ●●● ●●● ● ●●●● ● ●●●● ●●●● ●●●● ●● ●●●● ●● ●● ●●● ● ●●● ●●●● ●●●●● ●●●●●● ●●● ●● ●●●● ●● ●●●●●● ●●●●● ●● ●● ●●●● ●● ●●●●● ●●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●●● ●●●●● ●●● ●●● ● ●●● ●●●●●● ●●●●●● ●● ●●●●●●● ●● ● ●●● ●●●●●●●●● ●●●● ● ●●● ●●●●●●●●●● ●● ●●● ● ●●●●●●●●● ●●●● ●●●●●● ● ●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●● ●● ●● ●●●●●●● ●●●●●●●● ●●● ● ●●● ●●●● ● ●●●● ●●●●●●●●●●● ●●●● ●●● ●●● ●●●●●● ●●●●● ●● ●●● ●●●● ●● ●●● ●●●● ●●● ● ●●●●●● ●● ●●●● ●●● ●● ●● ●●●● ●●●●● ●●●●● ●● ● ●●● ●●●●● ●●●●●● ●●● ●●●●●●●● ●● ●● ●●●● ●●●● ●●●●● ●● ●●● ●● ●●● ●●● ●●●●●● ●●●●●● ●● ●● ●● ●●●●●●●●●● ●● ●●●● ● ●●●●●●● ●● ●● ●●● ●● ●● ●●●●●●● ●●●● ●●●●● ●●● ●●●●●● ● ● ●●●● ●●● ●●● ●●●●● ●● ●●● ● ●●●● ●● ● ●●● ●●●●●● ●●●●●● ●●●●●● ● ●●● ●●●●●● ●● ●●● ●●●● ●●●●●●● ●●●●●●●● ●●●● ●● ●●● ●●●●●● ●●●● ●● ●● ●●●● ●● ●●●● ●● ●●●●●●●●●●●●●●●● ●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●● ●● ●●●●●●● ●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●● ●●●●● ●●●●●● ●● ●●● ●●●●●●●●●●● ●●●●●●●●●●●● ●●● ● ●● ● ●●● ●●●●●●● ●● ●●● ●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●● ●●●●● ●●●● ●●●● ●●●● ● ●●●●●● ●● ●●●●● ●●●● ●●●●●●●●●●● ●●● ● ●●●● ●●●●●● ●●●● ●● ●●●●●● ●●● ●● ●●● ●●●●●● ● ●●● ●●● ●●●● ●● ●● ●●● ●●● ●● ●● ●● ●● ●●● ●● ● ●● ●●● ●●● ●● ●●● ●●● ● ●●● ● ●●● ●●●●● ●●● ●● ●●●●●●●●●●●● ●● ●●● ●●● ●● ●● ●●●● ●●●●●● ●●●●●●●● ●●●● ●● ●● ●●●●●● ● ● ●● ●●● ●●●●● ● ●●●● ●●●● ●● ●●● ●●●●●● ● ●●●●●●●●●●●● ●●● ●●● ●● ●●● ●●● ●● ●● ●●● ●● ● ●● ●●●●●● ●●● ● ●● ●● ●● ●●●● ●●● ● ● ●● ●● ●●● ●● ● ●●●● ●● ●● ● ●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●● ●●● ●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●● ●●● ●● ●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●● P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11 P12 P13 P14 P15 P17 P18 P19 P20 P21 P22 P24 P25 P26 P27 P28 P29 P30 P31 P32 P33 P34 P35 P36 P38 P39 P40 P41 P42 P43 P44 P45 P46 P47 25 50 75 100 P38: LOW flip factor, most changes to coverage are to new lines Implication for developers: Coverage DOES at times go up due to deleting uncovered lines; it might go down from deleting tested lines. Just looking at coverage as an overall statistic is not enough to understand what the tests are doing!
  • 18. code-coverage.orgASE Sept 5, 2018 Two Key Observations Total statements in program 100 10,000 100,000 1M Percent change of 100 statements 100% 1% 0.1% 0.01% 1: A change the coverage of some statements might not be observable in a large project, but it might still matter! 60% Coverage 60% Coverage≠ 2: Lines can and do “swap” coverage, yielding equivalent overall coverage, even when the set of lines covered changes
  • 19. A Large-Scale Study of Test Coverage Evolution Michael Hilton, Jonathan Bell and Darko Marinov Carnegie Mellon University, George Mason University, and University of Illinois at Urbana-Champaign Data and prototype visualization tool: https://www.code-coverage.org/ Darko Marinov's group is supported by NSF grants CCF-1409423, CCF-1421503, CNS-1646305, and CNS-1740916; and gifts from Google and Qualcomm.
  • 20. ASE Sept 5, 2018 P01 apache/commons-collections java 189 12,765 40 84% P02 apache/commons-dbcp java 164 5,662 19 48% P03 apache/commons-exec java 212 971 65 63% P04 apache/commons-functor java 248 2,693 69 83% P05 apache/commons-io java 35 5,021 2 88% P06 apache/commons-jxpath java 199 9,633 94 75% P07 apache/commons-math java 217 45,034 16 90% P08 apache/commons-net java 53 9,210 1 30% P09 apache/commons-validator java 104 2,854 10 77% P10 apache/empire-db java 241 21,258 60 14% P11 apache/httpcore java 223 13,198 18 77% P12 ARMmbed/mbed-ls python 60 804 6 75% P13 bitwalker/timex elixer 128 2,615 16 65% P14 broadinstitute/recloud-orchestration Scala 170 2,658 13 64% P15 containers/virtcontainers go 296 5,332 9 66% P16 coreos/alb-ingress-controller go 98 2,041 7 3% P17 damianszczepanik/cucumber-reporting java 248 794 15 88% P18 dask/dask python 290 15,322 7 94% P19 doanduyhai/Achilles java 111 11,008 9 56% P20 dropwizard/dropwizard java 246 7,700 9 86% P21 eBay/cors-lter java 204 280 45 94% P22 F5Networks/k8s-bigip-ctlr go 103 5,621 5 76% P23 fasseg/exp4j java 233 640 40 89% P24 Gillespie59/eslint-plugin-angular node 212 1,213 19 100% P25 goldmansachs/gs-collections java P26 google/jimfs java P27 HazyResearch/deepdive Scala P28 hector-client/hector java P29 ikawaha/kagome go P30 ilovepi/Compiler dotNet P31 jhy/jsoup java P32 jknack/handlebars.java java P33 JodaOrg/joda-time java P34 joel-costigliola/assertj-core java P35 mailgun/kafka-pixy go P36 MITLibraries/topichub Scala P37 platinumazure/eslint-plugin-qunit node P38 PragTob/benchee elixer P39 raml-org/raml-java-parser java P40 ShiftForward/apso Scala P41 spatialmodel/inmap go P42 square/okhttp java P43 square/retrot java P44 SteamDatabase/ValveResourceFormat dotNet P45 terasolunaorg/terasoluna-gfw java P46 undertow-io/undertow java P47 zxing/zxing java
  • 21. ASE Sept 5, 2018 Coverage Project Lang Builds LoC Time range (months) Start Sparkline End P01 apache/commons-collections java 189 12,765 40 84% 84% P02 apache/commons-dbcp java 164 5,662 19 48% 51% P03 apache/commons-exec java 212 971 65 63% 72% P04 apache/commons-functor java 248 2,693 69 83% 97% P05 apache/commons-io java 35 5,021 2 88% 87% P06 apache/commons-jxpath java 199 9,633 94 75% 77% P07 apache/commons-math java 217 45,034 16 90% 90% P08 apache/commons-net java 53 9,210 1 30% 30% P09 apache/commons-validator java 104 2,854 10 77% 78% P10 apache/empire-db java 241 21,258 60 14% 14% P11 apache/httpcore java 223 13,198 18 77% 75% P12 ARMmbed/mbed-ls python 60 804 6 75% 78% P13 bitwalker/timex elixer 128 2,615 16 65% 68% P14 broadinstitute/recloud-orchestration Scala 170 2,658 13 64% 68% P15 containers/virtcontainers go 296 5,332 9 66% 61% P16 coreos/alb-ingress-controller go 98 2,041 7 3% 21% P17 damianszczepanik/cucumber-reporting java 248 794 15 88% 99% P18 dask/dask python 290 15,322 7 94% 92% P19 doanduyhai/Achilles java 111 11,008 9 56% 54% P20 dropwizard/dropwizard java 246 7,700 9 86% 87% P21 eBay/cors-lter java 204 280 45 94% 100% P22 F5Networks/k8s-bigip-ctlr go 103 5,621 5 76% 83% P23 fasseg/exp4j java 233 640 40 89% 95% P24 Gillespie59/eslint-plugin-angular node 212 1,213 19 100% 100% P25 goldmansachs/gs-collections java 249 38,242 16 92% 93% P26 google/jimfs java 100 3,401 45 89% 91% P27 HazyResearch/deepdive Scala 111 1,913 5 81% 73% P28 hector-client/hector java 137 8,583 25 35% 39% P29 ikawaha/kagome go 91 1,099 27 80% 86% P30 ilovepi/Compiler dotNet 96 1,874 1 87% 90% P31 jhy/jsoup java 246 6,615 28 76% 77% P32 jknack/handlebars.java java 100 3,935 9 83% 84% P33 JodaOrg/joda-time java 248 14,789 35 90% 90% P34 joel-costigliola/assertj-core java 241 11,104 9 90% 90% P35 mailgun/kafka-pixy go 64 4,387 13 80% 69% P36 MITLibraries/topichub Scala 102 2,466 11 57% 60% P37 platinumazure/eslint-plugin-qunit node 62 628 22 100% 100% P38 PragTob/benchee elixer 148 441 6 94% 94% P39 raml-org/raml-java-parser java 248 6,455 16 86% 86% P40 ShiftForward/apso Scala 94 1,629 9 54% 59% P41 spatialmodel/inmap go 55 5,983 9 81% 83% P42 square/okhttp java 247 11,854 10 78% 78% P43 square/retrot java 181 2,479 17 56% 57% P44 SteamDatabase/ValveResourceFormat dotNet 179 2,794 23 82% 73% P45 terasolunaorg/terasoluna-gfw java 97 2,561 17 99% 99% P46 undertow-io/undertow java 238 51,388 9 60% 60% P47 zxing/zxing java 198 15,440 21 68% 76% Total 47 projects, 384,412 LOC Average: 166 8,178 20 74% 76%