Identifying Hotspots in Software Build Processes
-
Upload
shane-mcintosh -
Category
Technology
-
view
162 -
download
2
Transcript of Identifying Hotspots in Software Build Processes
Identifying Hotspots in Software Build Processes
Shane McIntosh
Ahmed E. Hassan
Bram Adams
Meiyappan Nagappan
Source code
What is a build system?
!2
Source code
Deliverable
What is a build system?
!2
.tex
.c
.cc
.o
.o
.dvi
.a
.exe
.deb
Build systems describe how sources are translated into deliverables
!3
(4) Test
(1) Think
(2) Edit
(3) Build
The developerβs work cycle
All builds are equalβ¦
!4
β
β¦But some builds are more equal than others
http://xkcd.com/303/
Why is the gtk build so abysmally slow? This hinders our ability to run gtk bots
and keep the gtk build green. :( β!5
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.olibrary.a
del1.c del2.cutil1.o util2.o
util1.c util2.c
!6
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.olibrary.a
del1.c del2.cutil1.o util2.o
util1.c util2.c
!6
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.olibrary.a
del1.c del2.cutil1.o util2.o
util1.c util2.c
!6
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.olibrary.a
del1.c del2.cutil1.o util2.o
util1.c util2.c
!6
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.olibrary.a
del1.c del2.cutil1.o util2.o
util1.c util2.c
!6
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.olibrary.a
del1.c del2.cutil1.o util2.o
util1.c util2.c
!6
Before refactoring:!4 commands!
triggered
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.olibrary.a
del1.c del2.cutil1.o util2.o
util1.c util2.c
!6
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.o
del1.c del2.c
util1.o util2.o
util1.c util2.c
!7
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.o
del1.c del2.c
util1.o util2.o
util1.c util2.c
!7
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.o
del1.c del2.c
util1.o util2.o
util1.c util2.c
!7
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.o
del1.c del2.c
util1.o util2.o
util1.c util2.c
!7
Refactoring can improve build performance
deliverable1 deliverable2
del1.o del2.o
del1.c del2.c
util1.o util2.o
util1.c util2.c
!7
After refactoring:!2 commands!
triggered
β¦But where should we focus refactoring effort?
Files that rebuild the slowest?
!8
β¦But where should we focus refactoring effort?
Files that rebuild the slowest?
β¦but they may only rarely change!
!8
β¦But where should we focus refactoring effort?
Files that rebuild the slowest?
Files that change the most often?
β¦but they may only rarely change!
!8
β¦But where should we focus refactoring effort?
Files that rebuild the slowest?
Files that change the most often?
β¦but they may only rarely change!
β¦but they may already be optimal!
!8
β¦But where should we focus refactoring effort?
Files that rebuild the slowest?
Files that change the most often?
β¦but they may only rarely change!
β¦but they may already be optimal!
Focus on build hotspots:
Files that rebuild slowly and change often
!8
(1)Dependency
Graph Construction
(2)Dependency
GraphAnalysis (3)
Build Hotspot
Detection
Graphanalysis results
(1)Dependency
Graph Construction (3)
Build Hotspot
DetectionQuadrant Plot
Build Activity
File
Chu
rn
(2)Dependency
GraphAnalysisDep. Graph
VersionControlSystem
Hotspot detection approach
!9
MAKAO tool extracts build dependency graphs
(1)Dependency
Graph Construction
(2)Dependency
GraphAnalysis
(3)Build
Hotspot Detection
Design recovery and maintenance of build systems B. Adams, Herman Tromp, Kris De Schutter, Wolfgang De Meuter
[ICSM 2007]
!10
The cost of traversing an edge is derived by timing its build command
(1)Dependency
Graph Construction
(2)Dependency
GraphAnalysis
(3)Build
Hotspot Detection
!11
Median of 10 repetitions
!12
Mining frequently changing files from version control
Terminal
$ git clone β¦ β¦ $ git checkout <some_tag> β¦ $ git log --oneline <some_file>
(1)Dependency
Graph Construction
(2)Dependency
GraphAnalysis
(3)Build
Hotspot Detection
(1)Dependency
Graph Construction
(2)Dependency
GraphAnalysis
(3)Build
Hotspot Detection
Quadrant plots highlight build hotspots
Rebuild cost
Num
ber o
f cha
nges
!13
(1)Dependency
Graph Construction
(2)Dependency
GraphAnalysis
(3)Build
Hotspot Detection
Quadrant plots highlight build hotspots
Rebuild cost
Num
ber o
f cha
nges
!13
(1)Dependency
Graph Construction
(2)Dependency
GraphAnalysis
(3)Build
Hotspot Detection
Quadrant plots highlight build hotspots
Rebuild cost
Num
ber o
f cha
nges
!13
(1)Dependency
Graph Construction
(2)Dependency
GraphAnalysis
(3)Build
Hotspot Detection
Quadrant plots highlight build hotspots
Rebuild cost
Num
ber o
f cha
nges
Refactor
these first!
!13
Open source case studies!!
!
!
Rebuild cost 90 seconds
Number of changes Median
Thresholds
!14
0 750,000 1,500,000 2,250,000 3,000,000
2,752,225
38,102
Build dependency graph properties
0 35,000 70,000 105,000 140,000
60,170
121,710
5,131
3,375
# Nodes# Edges
!15
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
ββ
βββ
ββ
βββ
β
ββ
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
ββ
β
ββ
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
βββ
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
βββ
βββ
β
β
β
β
ββ
ββ
β
ββ
β
β
β
β
βββ
β
β
ββ
β
β
β
β
β
β
β
β
β
ββββ
β
β
β
β
β
β
β
β
β
β
βββ
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
ββ
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
βββ
βββ
β
β
β
β
β
β
βββ
ββ
βββ
β
β
β
β
β
β
ββ
ββ
βββ
β
β
ββ
β
β
βββ
ββ
βββ
β
β
β
β
ββ
β
β
βββ
β
β
β
ββ
β
ββ
β
ββ
β
βββ
β
β
β
β
ββ
β
β
βββββ
β
β
ββββ
β
β
β
β
β
β
ββ
ββ
β
0.25
0.50
0.75
1.00
0 50 100 150Build Time
Nor
mal
ized
File
Chu
rn
Rebuild cost (seconds)
Num
ber o
f cha
nges
(N
orm
aliz
ed)
65 hotspots!(7% of
source files)
!16
glib/glib.hglib/glib-object.h
Main culprits
Max: 148 seconds
Rebuild cost (seconds)
Num
ber o
f cha
nges
(N
orm
aliz
ed)
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββββ
β
β
β
β
β
ββ
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
ββββ
ββ
β
β
β
β
β
β
β
β
ββ
ββ
β
β
ββ
β
β
βββ
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
βββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
βββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
ββ
βββ
β
β
β
β
β
ββ
ββ
β
β
ββ
ββ
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
βββ
ββββ
β
β
β
β
β
ββ
βββ
β
ββ
β
β
ββ
β
β
β
β
β
βββ
βββ
β
β
β
β
β
ββ
β
β
β
βββ
β
β
β
ββ
β
β
βββ
βββββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
ββ
ββββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
ββ
β
β
βββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
βββ
ββ
β
β
β
β
β
ββ
βββββ
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
βββββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
ββ
ββ
βββ
βββ
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
ββ
β
ββββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
ββ
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
βββ
β
ββββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
βββββββββββββββββββββββββββββββ
ββ
β
ββ
β
β
β
β
ββ
ββ
ββββββββ
β
β
βββ
β
β
β
β
β
ββ
ββ
β
β
β
ββ
β
ββ
β
ββ
ββ
β
ββ
βββ
ββ
ββ
β
ββ
β
β
β
β
β
βββ
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
βββ
β
β
βββ
β
ββ
β
β
ββ
β
β
ββ
β
ββ
β
β
β
β
ββ
β
ββ
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
0.25
0.50
0.75
1.00
0 50 100 150 200Build Time (s)
Nor
mal
ized
File
Chu
rn27 hotspots!
(2% of source files)
!17
postgres.haccess/htup.h
Main culprits
access/genam.haccess/xact.hutils/builtins.h
Max: 191 seconds
Rebuild cost (seconds)
Num
ber o
f cha
nges
(N
orm
aliz
ed)
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
βββ
β
β
β
β
ββ
β
ββββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
βββ
ββββ
ββ
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
βββββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
ββ
βββ
β
β
β
βββββ
ββ
β
ββ
β
ββ
β
β
βββββββββββ
βββββββββββ
βββββββββ
βββββββββββββββ
βββ
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββββββ
β
β
β
β
β
β
β
β
β
ββ
β
ββ
βββββ
ββ
β
ββββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
βββ
β
β
β
β
β
β
β
βββ
ββ
ββββ
β
β
βββββ
β
β
β
βββββ
β
β
β
β
βββββββ
β
βββββ
ββββββββ
β
β
β
ββ
β
β
β
β
β
β
β
ββββββββ
β
β
β
β
β
β
β
β
βββββββ
β
βββββββ
β
β
β
ββ
β
β
β
β
β
ββ
β
ββ
β
β
β
βββββββ
β
β
ββ
ββββββββ
β
β
ββ
ββββ
β
β
β
β
ββ
β
ββ
β
β
ββ
β
ββ
β
ββ
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
βββ
βββ
β
β
β
β
ββββ
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
βββ
β
βββββββββββββ
β
β
β
ββββ
β
β
βββ
ββ
β
β
β
β
ββ
β
β
β
ββ
β
ββ
β
β
β
ββββββββββββββ
βββ
βββββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
βββ
β
ββ
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββββ
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
ββ
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
βββββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββββ
β
ββ
β
ββ
βββ
β
ββ
ββ
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
βββ
βββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
ββ
ββββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
ββ
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
ββ
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
βββ
ββ
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
ββββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
βββββ
ββ
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
ββ
β
β
β
βββ
β
β
β
β
β
β
β
ββ
β
β
βββ
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
ββ
β
β
ββ
ββ
β
ββ
β
β
β
β
β
ββ
βββ
β
β
β
ββ
β
β
ββ
β
β
β
β
β
ββ
β
β
ββ
β
ββ
β
β
β
β
β
ββββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββββ
β
ββ
β
β
ββ
β
β
β
β
β
β
βββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
βββββ
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
ββ
β
βββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
βββββ
βββ
β
ββ
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
ββ
β
β
βββ
ββ
ββ
β
β
ββ
β
βββββ
β
β
β
ββ
βββ
β
β
ββ
β
β
βββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
ββ
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
ββ
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
βββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββββ
β
β
β
β
β
ββ
β
β
β
β
β
ββββ
ββββ
β
β
βββ
βββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
ββ
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
βββ
β
β
ββ
β
β
β
ββ
β
β
β
β
ββ
βββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
βββ
β
ββ
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
βββ
ββ
β
β
β
β
βββ
β
ββ
β
β
β
β
βββ
β
ββ
β
β
β
β
β
ββββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
ββ
βββ
β
β
ββ
β
βββ
β
β
β
ββ
ββ
ββββ
β
β
β
β
β
β
β
β
ββββ
ββ
β
ββββ
β
β
β
β
ββ
β
β
βββ
β
β
β
β
βββ
β
β
β
βββββ
β
β
β
β
β
β
ββ
β
β
β
β
ββββββ
ββ
β
β
β
ββ
β
β
β
β
β
βββ
β
β
βββ
ββ
β
ββ
β
β
β
βββ
β
β
βββββ
β
β
β
βββββ
β
β
β
βββββ
β
ββ
β
ββββββββ
β
β
ββββ
β
ββββ
β
ββ
β
β
β
β
βββ
βββ
β
ββββββββββββββββ
β
β
β
βββ
β
β
β
β
ββ
ββββββββββ
β
β
β
β
ββ
ββ
β
β
βββββ
β
βββββ
β
ββββββ
β
β
ββββ
β
β
β
β
β
ββ
βββββββββββ
β
β
βββββ
β
β
ββββββββ
β
β
β
β
ββ
β
ββββββ
β
β
β
β
β
β
βββ
β
β
β
β
β
βββ
β
β
β
βββ
β
β
β
β
β
β
ββββ
β
βββββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββββ
ββ
β
β
β
β
β
β
ββ
β
ββ
β
β
βββ
β
ββββββ
βββββ
β
ββ
β
βββββ
ββ
β
β
β
β
ββ
β
β
β
β
β
ββ
ββ
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
ββ
β
β
β
β
βββ
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
βββββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββββ
β
β
β
β
β
β
ββ
β
β
βββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
ββ
β
ββ
β
ββ
β
β
β
ββ
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
βββ
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
βββββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
βββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
βββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
ββ
β
β
β
β
β
βββ
ββ
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββββ
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
βββ
β
β
ββ
ββ
ββ
ββ
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
ββββββ
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
βββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
βββ
β
β
β
β
ββ
β
β
ββ
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
ββ
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
ββ
ββ
β
βββββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
βββ
βββ
β
β
β
β
β
β
β
β
βββ
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
βββ
βββ
ββ
βββ
β
β
β
β
ββ
ββ
β
β
β
β
β
β
βββ
β
β
ββ
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
βββ
ββ
ββββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
ββββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
ββ
β
ββ
βββββ
β
ββ
β
β
β
β
β
βββ
ββ
βββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
βββ
β
β
β
β
β
β
β
β
βββ
β
β
β
β
ββ
βββ
β
ββ
β
β
ββ
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
ββ
β
βββ
ββ
β
β
β
β
β
ββ
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
ββ
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
ββ
ββ
β
β
β
β
ββ
β
β
βββ
βββ
β
β
β
β
β
β
ββ
β
ββ
β
β
β
βββ
β
ββ
ββ
β
ββ
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
βββ
β
ββ
β
ββ
β
ββ
β
β
β
β
βββββββββββββββ
ββ
β
β
βββββ
ββ
β
ββββ
β
ββ
ββ
β
ββ
βββ
β
ββ
ββ
ββ
β
β
β
ββ
ββ
ββββ
β
β
βββββ
βββ
β
β
ββ
ββ
ββ
ββ
β
ββ
β
ββ
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββββ
β
ββ
β
β
ββ
β
ββ
β
β
β
ββ
β
β
ββ
β
β
ββ
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
βββ
ββββ
β
ββ
β
β
ββ
β
β
ββ
β
β
ββββ
β
β
β
β
βββ
β
β
β
β
βββ
β
βββ
ββ
βββ
βββ
β
β
β
β
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
βββ
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
βββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
ββββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
βββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
ββ
β
ββ
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
βββββ
β
β
β
ββ
β
β
β
β
β
ββ
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
βββ
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
ββ
β
β
βββ
β
β
ββ
ββ
β
β
β
β
β
ββ
β
β
ββ
ββ
ββ
β
ββ
β
ββββββ
βββββ
β
β
ββ
ββββ
β
β
β
β
ββ
β
β
β
β
β
βββββ
ββββββ
β
βββ
β
ββ
ββ
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
βββ
β
β
β
ββ
β
β
β
β
ββ
ββ
ββ
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
ββββ
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
βββ
β
β
β
β
β
ββ
β
β
β
β
β
βββ
β
ββ
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
ββ
β
ββ
β
β
β
β
ββ
β
β
β
β
ββββ
β
β
β
β
β
β
β
ββ
β
βββ
β
β
ββ
β
β
β
β
βββ
β
ββββ
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
ββ
βββββββββ
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
β
ββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
β
ββ
ββ
β
β
β
βββ
ββ
β
β
β
βββ
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
ββ
β
ββββ
βββ
β
β
ββ
β
βββ
ββ
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
ββ
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
βββ
ββ
ββ
β
β
ββ
ββ
βββ
β
β
β
β
β
ββ
β
ββββ
β
β
βββ
β
β
ββ
βββββ
ββ
βββ
β
β
ββ
ββ
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
ββ
ββ
β
β
β
β
β
ββ
β
β
ββ
ββ
β
β
β
β
β
β
β
ββ
βββ
ββ
β
β
β
β
β
β
βββ
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
β
β
β
ββ
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
βββ
ββ
ββ
ββ
β
β
β
β
β
β
β
β
βββ
β
β
β
ββ
β
ββ
β
β
β
β
β
β
βββ
ββ
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
ββ
β
β
β
ββ
ββββ
β
β
β
ββ
β
ββ
ββββ
β
β
β
βββ
β
β
β
ββ
β
β
β
β
β
ββ
β
β
βββ
βββββ
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
ββ
ββ
β
βββ
ββ
ββββ
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
ββββ
ββ
β
β
ββ
β
β
β
ββ
β
β
β
βββ
β
ββ
ββ
β
βββββββ
β
β
β
β
β
β
β
ββ
β
βββ
β
β
β
β
βββ
β
β
βββ
ββ
ββββ
ββ
β
β
β
βββ
ββ
β
β
β
β
β
β
β
β
β
ββ
ββ
βββ
β
β
β
β
ββ
ββ
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
βββ
β
ββ
ββ
β
β
β
β
β
β
β
β
β
ββ
β
β
β
β
ββ
ββ
β
β
β
β
ββ
β
β
β
β
ββ
β
ββ
β
ββ
β
β
β
β
βββ
β
ββ
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
βββ
β
β
β
βββ
ββ
β
β
ββ
β
β
βββββ
β
β
β
βββ
β
β
β
β
β
ββ
βββ
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
β
β
β
β
β
β
β
β
βββ
ββ
ββ
β
β
ββ
β
β
β
β
βββ
β
βββ
β
ββββββββββββ
ββ
β
β
β
β
ββββββββ
βββ
ββ
β
ββ
β
β
βββ
ββ
ββ
β
βββββββββββββ
β
β
βββ
ββ
ββββββββββ
βββββββββ
βββ
βββ
β
β
ββ
ββ
βββ
ββ
ββ
β
ββ
β
βββ
β
β
βββ
β
β
β
β
β
β
ββ
βββ
β
β
β
β
β
β
β
β
β
ββ
ββ
β
ββ
β
β
βββ
ββ
ββ
β
β
β
β
ββ
β
ββ
β
β
ββ
β
β
β
ββ
ββ
ββ
β
β
β
β
ββ
ββ
ββ
ββ
ββ
βββ
ββββ
β
β
β
ββ
β
βββ
β
β
β
β
β
β
β
ββ
ββ
ββ
β
ββ
ββ
βββ
β
β
ββ
β
β
β
ββ
β
β
β
ββ
β
β
ββ
β
β
β
ββ
βββ
βββ
ββ
β
βββ
βββββ
β
βββ
β
β
ββ
β
β
β
ββ
ββββ
ββ
β
β
ββ
ββ
β
βββ
β
ββ
β
β
βββ
β
ββ
ββββ
β
ββ
ββ
ββββ
β
β
β
β
β
ββββ
β
β
β
β
β
β
β
ββ
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
ββ
β
β
ββ
β
ββ
β
β
β
β
β
ββ
β
β
β
β
ββ
β
β
β
β
β
βββ
β
β
ββ
β
β
β
β
β
ββ
β
ββ
β
β
β
β
β
ββ
β
β
β
β
β
ββ
β
β
β
βββ
β
β
β
ββββ
ββββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
ββ
β
β
β
ββ
β
ββ
β
β
β
β
β
β
ββ
β
ββ
β
β
β
β
βββ
β
ββ
β
β
β
β
β
β
β
β
β
β
ββ
β
βββ
β
β
β
β
β
β
β
β
β
β
β
ββββ
β
β
β
ββ
β
β
βββ
β
β
β
ββ
ββββ
β
β
ββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
β
βββββββ
β
ββ
ββββ
β
β
β
β
β
β
βββββ
β
ββ
βββββββββββββββββββββ
β
ββββ
β
ββ
ββ
β
ββββ
β
β
ββ
β
β
β
ββββββββββββββββββββββ
ββ
ββββ
β
β
β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
ββ
βββ
β
β
βββ
β
β
ββββ
0.25
0.50
0.75
1.00
0 2000 4000 6000 8000Build Time (s)
Nor
mal
ized
File
Chu
rn 732 hotspots!(8% of source files)
!18
qtxmlpatterns
High hotspot!concentration
qtbase/β¦/corelib
Main culpritstmtm
Max: 2hrs 19min
hot.c
...1 2
hot.o
nn-1
!19
General trends Transitive property of build hotspots
hot.c
...1 2
hot.o
nn-1
!19
General trends Transitive property of build hotspots
x.h
hot.c
...1 2
hot.o
nn-1
!19
General trends Transitive property of build hotspots
x.h
hot.c
...1 2
hot.o
nn-1
!19
General trends Transitive property of build hotspots
x.h
hot.c
...1 2
hot.o
nn-1
General trends Transitive property of build hotspots
!20
x.h
hot.c
...1 2
hot.o
nn-1
General trends Transitive property of build hotspots
!20
hub.h
x.h
hot.c
...1 2
hot.o
nn-1
General trends Transitive property of build hotspots
!20
hub.h
x.h
hot.c
...1 2
hot.o
nn-1
a.h b.h y.h z.h
General trends Transitive property of build hotspots
!20
hub.h
x.h
hot.c
...1 2
hot.o
nn-1
a.h b.h y.h z.h
General trends Transitive property of build hotspots
!20
hub.h
x.h
hot.c
...1 2
hot.o
nn-1
a.h b.h y.h z.h
General trends Transitive property of build hotspots
!20
hub.h
x.h
hot.c
...1 2
hot.o
nn-1
Limit internal use of βheader file hubsβ as much as possible!
a.h b.h y.h z.h
General trends Transitive property of build hotspots
!20