--------------090700090302050407010606
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
M. Edward (Ed) Borasky said:
Now I could look at the benchmarks themselves and throw out those that
were obviously orthogonal to web servers when comparing languages for
implementing web servers. But I don't think I need to go that far --
it's easier to just throw out the statistical outliers and come up with
a set of numbers that's a general characterization of the relative
performance of the languages. That's why I asked for the raw data (which
I received, by the way).
[snip]
Of course. I'm still in the process of crunching the numbers, but what
I've seen so far is that MRI Ruby is *not* in the general neighborhood
of Perl, Python or PHP, but YARV *is* in that neighborhood. I do need to
tighten up the calculations slightly and get rid of some bogus points,
but I'm not expecting a major change in that.
[snip]
Well ... let me finish with the numbers, but I think you'll be surprised
at how close Perl and Python are to each other and how far away MRI is
from the two of them. It's not a "petty microsecond dispute" for MRI.
[snip]
OK ... here's the analysis. The attached PDF is what's known as a box
and whisker plot, usually shortened to "boxplot". The raw numbers that
went into this are from the Alioth shootout page, and what I *haven't*
done is checked out which versions of Perl, Python, YARV, Ruby, jRuby
and PHP these tests used. They could be years old or they could have
been run yesterday morning.

I discarded all the tests for which there
were any missing values.
The value plotted is the ratio of seconds for the benchmark on the
dynamic language to the seconds for the benchmark with gcc. Thus, gcc
equals 1.0 across the board and lower is better/faster. How do you
interpret these plots?
First of all, the bar across the middle is the median. Half the values
are above the median and half below it. I sorted them by increasing
median, so gcc, being the fastest, is on the left. Next comes YARV, then
Python, Perl, PHP, Ruby and jRuby.
The whisker on the bottom is approximately the 5th percentile. In other
words, only five percent of the time is your performance going to be
that good or better. And the whisker on the top is approximately the
95th percentile -- only five percent of the time is it going to be that
bad or worse.
The bottom of the box is the 25th percentile. 25 percent of the time,
the performance will be that good or better. The top of the box is the
75th percentile. 25 percent of the time it will be that bad or worse.
So now we can make more precise Chad Perrin's notion of "general
neighborhoods of performance". We do this by looking at the height of
the median and the width of the box. And we see that relative to gcc,
YARV, Python, Perl and PHP have fairly close medians and the boxes are
about the same width. So they are all "in the same neighborhood" and gcc
is faster. Ruby and jRuby are *not* in the same neighborhood.
Now suppose your boss comes to you, as bosses do, and says, "well, all
them high-falutin' box plots are dandy, but the board of directors wants
one number for each language!" It turns out (and I'll let Google and
Wikipedia fill in the blanks for you) that the one number you want to
give your boss, aside from your cell phone number, is the *geometric
mean* of all the benchmark ratios. Again, smaller is better. So here's
how the languages stack up:
gcc 1.0
yarv 13.2
perl 14.0
python 14.2
php 15.5
ruby 29.9
jruby 55.0
So yes, you can pretty much expect the same performance from YARV, Perl,
Python and PHP. And you can pretty much expect something like a 13 - 16
to one speed improvement if you decide to rewrite your application in C.
It's pretty clear to me from these numbers is that the only reason that
deploying web applications on the LAMP stack and its cousins using
PostgreSQL, Perl, Python and Ruby is economically viable is that they
spend most of their time either in the database or on the network. The
bad news is that for an application with 100 percent dynamic language
code -- no C libraries for the intensive calculations, no highly-tuned
web servers, databases or other components -- you're going to end up
throwing twice as much hardware at scaling problems in Ruby as you will
in PHP, Perl or Python. The good news is that YARV will level the
playing field.
One final note to implementers and language designers ... Python gets an
extra little pat on the back from me for having such a low spread. YARV
and other Ruby implementations need to pay attention to the fact that
their boxes are wider than Perl's and PHP's and a *lot* wider than
Python's. In other words, look at the benchmarks where you really suck
first.
In case you want the numbers that go with the boxplots, here they are:
gcc yarv python perl php ruby jruby
Low 1 1.2 1.4 0.93 1.4 1.5 3.4
Q1 1 4.8 4.6 2.90 3.1 6.3 12.0
Median 1 8.7 14.0 26.00 31.0 34.0 50.0
Q3 1 68.0 45.0 55.00 55.0 170.0 340.0
High 1 150.0 98.0 67.00 110.0 380.0 410.0
--------------090700090302050407010606
Content-Type: application/pdf;
name="shootout.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="shootout.pdf"
JVBERi0xLjEKJYHigeOBz4HTXHIKMSAwIG9iago8PAovQ3JlYXRpb25EYXRlIChEOjIwMDcx
MDA2MTY1MzA0KQovTW9kRGF0ZSAoRDoyMDA3MTAwNjE2NTMwNCkKL1RpdGxlIChSIEdyYXBo
aWNzIE91dHB1dCkKL1Byb2R1Y2VyIChSIDIuNi4wKQovQ3JlYXRvciAoUikKPj4KZW5kb2Jq
CjIgMCBvYmoKPDwKL1R5cGUgL0NhdGFsb2cKL1BhZ2VzIDMgMCBSCj4+CmVuZG9iago1IDAg
b2JqCjw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovTmFtZSAvRjEKL0Jhc2VGb250
IC9aYXBmRGluZ2JhdHMKPj4KZW5kb2JqCjYgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL1BhcmVu
dCAzIDAgUgovQ29udGVudHMgNyAwIFIKL1Jlc291cmNlcyA0IDAgUgo+PgplbmRvYmoKNyAw
IG9iago8PAovTGVuZ3RoIDggMCBSCj4+CnN0cmVhbQ0KcQpRIHEgNTkuMDQgNzMuNDQgNjMw
LjcyIDQwNy41MiByZSBXIG4KMC4wMDAgMC4wMDAgMC4wMDAgUkcKMi4yNSB3CltdIDAgZAox
IEoKMSBqCjEwLjAwIE0KOTAuNzQgODkuMjkgbSAxNTcuNDkgODkuMjkgbCBTCjAuNzUgdwpb
IDMuMDAgNS4wMF0gMCBkCjEyNC4xMSA4OS4yOSBtIDEyNC4xMSA4OS4yOSBsIFMKMTI0LjEx
IDg5LjI5IG0gMTI0LjExIDg5LjI5IGwgUwowLjc1IHcKW10gMCBkCjEwNy40MyA4OS4yOSBt
IDE0MC44MCA4OS4yOSBsIFMKMTA3LjQzIDg5LjI5IG0gMTQwLjgwIDg5LjI5IGwgUwoxMDcu
NDMgODkuMjkgbSAxNDAuODAgODkuMjkgbCBTCjEwNy40MyA4OS4yOSBtIDE0MC44MCA4OS4y
OSBsIFMKMTA3LjQzIDg5LjI5IG0gMTQwLjgwIDg5LjI5IGwgUwoxMDcuNDMgODkuMjkgbSAx
NDAuODAgODkuMjkgbCBTCjEwNy40MyA4OS4yOSBtIDE0MC44MCA4OS4yOSBsIFMKMTA3LjQz
IDg5LjI5IG0gMTQwLjgwIDg5LjI5IGwgUwoxMDcuNDMgODkuMjkgbSAxNDAuODAgODkuMjkg
bCBTCjEwNy40MyA4OS4yOSBtIDE0MC44MCA4OS4yOSBsIFMKMTA3LjQzIDg5LjI5IG0gMTQw
LjgwIDg5LjI5IGwgUwoxMDcuNDMgODkuMjkgbSAxNDAuODAgODkuMjkgbCBTCjEwNy40MyA4
OS4yOSBtIDE0MC44MCA4OS4yOSBsIFMKMTA3LjQzIDg5LjI5IG0gMTQwLjgwIDg5LjI5IGwg
Uwo5MC43NCA4OS4yOSBtCjE1Ny40OSA4OS4yOSBsCjE1Ny40OSA4OS4yOSBsCjkwLjc0IDg5
LjI5IGwKOTAuNzQgODkuMjkgbApTCjIuMjUgdwpbXSAwIGQKMTc0LjE3IDk1LjEyIG0gMjQw
LjkxIDk1LjEyIGwgUwowLjc1IHcKWyAzLjAwIDUuMDBdIDAgZAoyMDcuNTQgODkuNDggbSAy
MDcuNTQgOTIuMTQgbCBTCjIwNy41NCAyMDAuODAgbSAyMDcuNTQgMTM5Ljk4IGwgUwowLjc1
IHcKW10gMCBkCjE5MC44NiA4OS40OCBtIDIyNC4yMyA4OS40OCBsIFMKMTkwLjg2IDIwMC44
MCBtIDIyNC4yMyAyMDAuODAgbCBTCjE5MC44NiA4OS40OCBtIDIyNC4yMyA4OS40OCBsIFMK
MTkwLjg2IDIwMC44MCBtIDIyNC4yMyAyMDAuODAgbCBTCjE5MC44NiA4OS40OCBtIDIyNC4y
MyA4OS40OCBsIFMKMTkwLjg2IDIwMC44MCBtIDIyNC4yMyAyMDAuODAgbCBTCjE5MC44NiA4
OS40OCBtIDIyNC4yMyA4OS40OCBsIFMKMTkwLjg2IDIwMC44MCBtIDIyNC4yMyAyMDAuODAg
bCBTCjE5MC44NiA4OS40OCBtIDIyNC4yMyA4OS40OCBsIFMKMTkwLjg2IDIwMC44MCBtIDIy
NC4yMyAyMDAuODAgbCBTCjE5MC44NiA4OS40OCBtIDIyNC4yMyA4OS40OCBsIFMKMTkwLjg2
IDIwMC44MCBtIDIyNC4yMyAyMDAuODAgbCBTCjE5MC44NiA4OS40OCBtIDIyNC4yMyA4OS40
OCBsIFMKMTkwLjg2IDIwMC44MCBtIDIyNC4yMyAyMDAuODAgbCBTCjE3NC4xNyA5Mi4xNCBt
CjI0MC45MSA5Mi4xNCBsCjI0MC45MSAxMzkuOTggbAoxNzQuMTcgMTM5Ljk4IGwKMTc0LjE3
IDkyLjE0IGwKUwoyLjI1IHcKW10gMCBkCjI1Ny42MCA5OS4wMSBtIDMyNC4zNCA5OS4wMSBs
IFMKMC43NSB3ClsgMy4wMCA1LjAwXSAwIGQKMjkwLjk3IDg5LjYxIG0gMjkwLjk3IDkxLjk4
IGwgUwoyOTAuOTcgMTYyLjQwIG0gMjkwLjk3IDEyMi4yMCBsIFMKMC43NSB3CltdIDAgZAoy
NzQuMjkgODkuNjEgbSAzMDcuNjYgODkuNjEgbCBTCjI3NC4yOSAxNjIuNDAgbSAzMDcuNjYg
MTYyLjQwIGwgUwoyNzQuMjkgODkuNjEgbSAzMDcuNjYgODkuNjEgbCBTCjI3NC4yOSAxNjIu
NDAgbSAzMDcuNjYgMTYyLjQwIGwgUwoyNzQuMjkgODkuNjEgbSAzMDcuNjYgODkuNjEgbCBT
CjI3NC4yOSAxNjIuNDAgbSAzMDcuNjYgMTYyLjQwIGwgUwoyNzQuMjkgODkuNjEgbSAzMDcu
NjYgODkuNjEgbCBTCjI3NC4yOSAxNjIuNDAgbSAzMDcuNjYgMTYyLjQwIGwgUwoyNzQuMjkg
ODkuNjEgbSAzMDcuNjYgODkuNjEgbCBTCjI3NC4yOSAxNjIuNDAgbSAzMDcuNjYgMTYyLjQw
IGwgUwoyNzQuMjkgODkuNjEgbSAzMDcuNjYgODkuNjEgbCBTCjI3NC4yOSAxNjIuNDAgbSAz
MDcuNjYgMTYyLjQwIGwgUwoyNzQuMjkgODkuNjEgbSAzMDcuNjYgODkuNjEgbCBTCjI3NC4y
OSAxNjIuNDAgbSAzMDcuNjYgMTYyLjQwIGwgUwoyNTcuNjAgOTEuOTggbQozMjQuMzQgOTEu
OTggbAozMjQuMzQgMTIyLjIwIGwKMjU3LjYwIDEyMi4yMCBsCjI1Ny42MCA5MS45OCBsClMK
Mi4yNSB3CltdIDAgZAozNDEuMDMgMTA4LjI4IG0gNDA3Ljc3IDEwOC4yOCBsIFMKMC43NSB3
ClsgMy4wMCA1LjAwXSAwIGQKMzc0LjQwIDg5LjIzIG0gMzc0LjQwIDkwLjcwIGwgUwozNzQu
NDAgMTM5LjI5IG0gMzc0LjQwIDEzMC4xNCBsIFMKMC43NSB3CltdIDAgZAozNTcuNzEgODku
MjMgbSAzOTEuMDkgODkuMjMgbCBTCjM1Ny43MSAxMzkuMjkgbSAzOTEuMDkgMTM5LjI5IGwg
UwozNTcuNzEgODkuMjMgbSAzOTEuMDkgODkuMjMgbCBTCjM1Ny43MSAxMzkuMjkgbSAzOTEu
MDkgMTM5LjI5IGwgUwozNTcuNzEgODkuMjMgbSAzOTEuMDkgODkuMjMgbCBTCjM1Ny43MSAx
MzkuMjkgbSAzOTEuMDkgMTM5LjI5IGwgUwozNTcuNzEgODkuMjMgbSAzOTEuMDkgODkuMjMg
bCBTCjM1Ny43MSAxMzkuMjkgbSAzOTEuMDkgMTM5LjI5IGwgUwozNTcuNzEgODkuMjMgbSAz
OTEuMDkgODkuMjMgbCBTCjM1Ny43MSAxMzkuMjkgbSAzOTEuMDkgMTM5LjI5IGwgUwozNTcu
NzEgODkuMjMgbSAzOTEuMDkgODkuMjMgbCBTCjM1Ny43MSAxMzkuMjkgbSAzOTEuMDkgMTM5
LjI5IGwgUwozNTcuNzEgODkuMjMgbSAzOTEuMDkgODkuMjMgbCBTCjM1Ny43MSAxMzkuMjkg
bSAzOTEuMDkgMTM5LjI5IGwgUwozNDEuMDMgOTAuNzAgbQo0MDcuNzcgOTAuNzAgbAo0MDcu
NzcgMTMwLjE0IGwKMzQxLjAzIDEzMC4xNCBsCjM0MS4wMyA5MC43MCBsClMKMi4yNSB3Cltd
IDAgZAo0MjQuNDYgMTExLjc1IG0gNDkxLjIwIDExMS43NSBsIFMKMC43NSB3ClsgMy4wMCA1
LjAwXSAwIGQKNDU3LjgzIDg5LjYxIG0gNDU3LjgzIDkwLjg0IGwgUwo0NTcuODMgMTcxLjY0
IG0gNDU3LjgzIDEyOS43NCBsIFMKMC43NSB3CltdIDAgZAo0NDEuMTQgODkuNjEgbSA0NzQu
NTEgODkuNjEgbCBTCjQ0MS4xNCAxNzEuNjQgbSA0NzQuNTEgMTcxLjY0IGwgUwo0NDEuMTQg
ODkuNjEgbSA0NzQuNTEgODkuNjEgbCBTCjQ0MS4xNCAxNzEuNjQgbSA0NzQuNTEgMTcxLjY0
IGwgUwo0NDEuMTQgODkuNjEgbSA0NzQuNTEgODkuNjEgbCBTCjQ0MS4xNCAxNzEuNjQgbSA0
NzQuNTEgMTcxLjY0IGwgUwo0NDEuMTQgODkuNjEgbSA0NzQuNTEgODkuNjEgbCBTCjQ0MS4x
NCAxNzEuNjQgbSA0NzQuNTEgMTcxLjY0IGwgUwo0NDEuMTQgODkuNjEgbSA0NzQuNTEgODku
NjEgbCBTCjQ0MS4xNCAxNzEuNjQgbSA0NzQuNTEgMTcxLjY0IGwgUwo0NDEuMTQgODkuNjEg
bSA0NzQuNTEgODkuNjEgbCBTCjQ0MS4xNCAxNzEuNjQgbSA0NzQuNTEgMTcxLjY0IGwgUwo0
NDEuMTQgODkuNjEgbSA0NzQuNTEgODkuNjEgbCBTCjQ0MS4xNCAxNzEuNjQgbSA0NzQuNTEg
MTcxLjY0IGwgUwo0MjQuNDYgOTAuODQgbQo0OTEuMjAgOTAuODQgbAo0OTEuMjAgMTI5Ljc0
IGwKNDI0LjQ2IDEyOS43NCBsCjQyNC40NiA5MC44NCBsClMKMi4yNSB3CltdIDAgZAo1MDcu
ODkgMTEzLjkwIG0gNTc0LjYzIDExMy45MCBsIFMKMC43NSB3ClsgMy4wMCA1LjAwXSAwIGQK
NTQxLjI2IDg5LjYzIG0gNTQxLjI2IDkzLjMwIGwgUwo1NDEuMjYgMzc1LjA3IG0gNTQxLjI2
IDIxNC44OCBsIFMKMC43NSB3CltdIDAgZAo1MjQuNTcgODkuNjMgbSA1NTcuOTQgODkuNjMg
bCBTCjUyNC41NyAzNzUuMDcgbSA1NTcuOTQgMzc1LjA3IGwgUwo1MjQuNTcgODkuNjMgbSA1
NTcuOTQgODkuNjMgbCBTCjUyNC41NyAzNzUuMDcgbSA1NTcuOTQgMzc1LjA3IGwgUwo1MjQu
NTcgODkuNjMgbSA1NTcuOTQgODkuNjMgbCBTCjUyNC41NyAzNzUuMDcgbSA1NTcuOTQgMzc1
LjA3IGwgUwo1MjQuNTcgODkuNjMgbSA1NTcuOTQgODkuNjMgbCBTCjUyNC41NyAzNzUuMDcg
bSA1NTcuOTQgMzc1LjA3IGwgUwo1MjQuNTcgODkuNjMgbSA1NTcuOTQgODkuNjMgbCBTCjUy
NC41NyAzNzUuMDcgbSA1NTcuOTQgMzc1LjA3IGwgUwo1MjQuNTcgODkuNjMgbSA1NTcuOTQg
ODkuNjMgbCBTCjUyNC41NyAzNzUuMDcgbSA1NTcuOTQgMzc1LjA3IGwgUwo1MjQuNTcgODku
NjMgbSA1NTcuOTQgODkuNjMgbCBTCjUyNC41NyAzNzUuMDcgbSA1NTcuOTQgMzc1LjA3IGwg
Uwo1MDcuODkgOTMuMzAgbQo1NzQuNjMgOTMuMzAgbAo1NzQuNjMgMjE0Ljg4IGwKNTA3Ljg5
IDIxNC44OCBsCjUwNy44OSA5My4zMCBsClMKMi4yNSB3CltdIDAgZAo1OTEuMzEgMTI2LjAw
IG0gNjU4LjA2IDEyNi4wMCBsIFMKMC43NSB3ClsgMy4wMCA1LjAwXSAwIGQKNjI0LjY5IDkx
LjA4IG0gNjI0LjY5IDk3LjgzIGwgUwo2MjQuNjkgNDAxLjcxIG0gNjI0LjY5IDM0MS45NiBs
IFMKMC43NSB3CltdIDAgZAo2MDguMDAgOTEuMDggbSA2NDEuMzcgOTEuMDggbCBTCjYwOC4w
MCA0MDEuNzEgbSA2NDEuMzcgNDAxLjcxIGwgUwo2MDguMDAgOTEuMDggbSA2NDEuMzcgOTEu
MDggbCBTCjYwOC4wMCA0MDEuNzEgbSA2NDEuMzcgNDAxLjcxIGwgUwo2MDguMDAgOTEuMDgg
bSA2NDEuMzcgOTEuMDggbCBTCjYwOC4wMCA0MDEuNzEgbSA2NDEuMzcgNDAxLjcxIGwgUwo2
MDguMDAgOTEuMDggbSA2NDEuMzcgOTEuMDggbCBTCjYwOC4wMCA0MDEuNzEgbSA2NDEuMzcg
NDAxLjcxIGwgUwo2MDguMDAgOTEuMDggbSA2NDEuMzcgOTEuMDggbCBTCjYwOC4wMCA0MDEu
NzEgbSA2NDEuMzcgNDAxLjcxIGwgUwo2MDguMDAgOTEuMDggbSA2NDEuMzcgOTEuMDggbCBT
CjYwOC4wMCA0MDEuNzEgbSA2NDEuMzcgNDAxLjcxIGwgUwo2MDguMDAgOTEuMDggbSA2NDEu
MzcgOTEuMDggbCBTCjYwOC4wMCA0MDEuNzEgbSA2NDEuMzcgNDAxLjcxIGwgUwo1OTEuMzEg
OTcuODMgbQo2NTguMDYgOTcuODMgbAo2NTguMDYgMzQxLjk2IGwKNTkxLjMxIDM0MS45NiBs
CjU5MS4zMSA5Ny44MyBsClMKUSBxCjAuMDAwIDAuMDAwIDAuMDAwIFJHCjAuNzUgdwpbXSAw
IGQKMSBKCjEgagoxMC4wMCBNCjEyNC4xMSA3My40NCBtIDYyNC42OSA3My40NCBsIFMKMTI0
LjExIDczLjQ0IG0gMTI0LjExIDY2LjI0IGwgUwoyMDcuNTQgNzMuNDQgbSAyMDcuNTQgNjYu
MjQgbCBTCjI5MC45NyA3My40NCBtIDI5MC45NyA2Ni4yNCBsIFMKMzc0LjQwIDczLjQ0IG0g
Mzc0LjQwIDY2LjI0IGwgUwo0NTcuODMgNzMuNDQgbSA0NTcuODMgNjYuMjQgbCBTCjU0MS4y
NiA3My40NCBtIDU0MS4yNiA2Ni4yNCBsIFMKNjI0LjY5IDczLjQ0IG0gNjI0LjY5IDY2LjI0
IGwgUwpCVAowLjAwMCAwLjAwMCAwLjAwMCByZwovRjIgMSBUZiAxMi4wMCAwLjAwIC0wLjAw
IDEyLjAwIDExNC43OCA0Ny41MiBUbSAoZ2NjKSBUagovRjIgMSBUZiAxMi4wMCAwLjAwIC0w
LjAwIDEyLjAwIDE5Ni4xNSA0Ny41MiBUbSAoeWFydikgVGoKL0YyIDEgVGYgMTIuMDAgMC4w
MCAtMC4wMCAxMi4wMCAyNzMuMTQgNDcuNTIgVG0gKHB5dGhvbikgVGoKL0YyIDEgVGYgMTIu
MDAgMC4wMCAtMC4wMCAxMi4wMCAzNjQuMzEgNDcuNTIgVG0gKHBlcmwpIFRqCi9GMiAxIFRm
IDEyLjAwIDAuMDAgLTAuMDAgMTIuMDAgNDQ3LjgyIDQ3LjUyIFRtIChwaHApIFRqCi9GMiAx
IFRmIDEyLjAwIDAuMDAgLTAuMDAgMTIuMDAgNTI5LjYyIDQ3LjUyIFRtIChydWJ5KSBUagov
RjIgMSBUZiAxMi4wMCAwLjAwIC0wLjAwIDEyLjAwIDYxMS43MSA0Ny41MiBUbSAoanJ1Ynkp
IFRqCkVUCjU5LjA0IDg4LjUzIG0gNTkuMDQgNDY1Ljg3IGwgUwo1OS4wNCA4OC41MyBtIDUx
Ljg0IDg4LjUzIGwgUwo1OS4wNCAxNjQuMDAgbSA1MS44NCAxNjQuMDAgbCBTCjU5LjA0IDIz
OS40NyBtIDUxLjg0IDIzOS40NyBsIFMKNTkuMDQgMzE0LjkzIG0gNTEuODQgMzE0LjkzIGwg
Uwo1OS4wNCAzOTAuNDAgbSA1MS44NCAzOTAuNDAgbCBTCjU5LjA0IDQ2NS44NyBtIDUxLjg0
IDQ2NS44NyBsIFMKQlQKL0YyIDEgVGYgMC4wMCAxMi4wMCAtMTIuMDAgMC4wMCA0MS43NiA4
NS4yMCBUbSAoMCkgVGoKL0YyIDEgVGYgMC4wMCAxMi4wMCAtMTIuMDAgMC4wMCA0MS43NiAx
NTMuOTkgVG0gKDEwMCkgVGoKL0YyIDEgVGYgMC4wMCAxMi4wMCAtMTIuMDAgMC4wMCA0MS43
NiAyMjkuNDYgVG0gKDIwMCkgVGoKL0YyIDEgVGYgMC4wMCAxMi4wMCAtMTIuMDAgMC4wMCA0
MS43NiAzMDQuOTMgVG0gKDMwMCkgVGoKL0YyIDEgVGYgMC4wMCAxMi4wMCAtMTIuMDAgMC4w
MCA0MS43NiAzODAuMzkgVG0gKDQwMCkgVGoKL0YyIDEgVGYgMC4wMCAxMi4wMCAtMTIuMDAg
MC4wMCA0MS43NiA0NTUuODYgVG0gKDUwMCkgVGoKRVQKNTkuMDQgNzMuNDQgbQo2ODkuNzYg
NzMuNDQgbAo2ODkuNzYgNDgwLjk2IGwKNTkuMDQgNDgwLjk2IGwKNTkuMDQgNzMuNDQgbApT
ClEKZW5kc3RyZWFtCmVuZG9iago4IDAgb2JqCjYyODgKZW5kb2JqCjMgMCBvYmoKPDwKL1R5
cGUgL1BhZ2VzCi9LaWRzIFsKNiAwIFIKXQovQ291bnQgMQovTWVkaWFCb3ggWzAgMCA3MjAg
NTQwXQo+PgplbmRvYmoKNCAwIG9iago8PAovUHJvY1NldCBbL1BERiAvVGV4dF0KL0ZvbnQg
PDwgL0YxIDUgMCBSIC9GMiAxMCAwIFIgPj4KL0V4dEdTdGF0ZSA8PCA+Pgo+PgplbmRvYmoK
OSAwIG9iago8PAovVHlwZSAvRW5jb2RpbmcKL0Jhc2VFbmNvZGluZyAvV2luQW5zaUVuY29k
aW5nCi9EaWZmZXJlbmNlcyBbIDQ1L21pbnVzIDk2L3F1b3RlbGVmdAoxNDQvZG90bGVzc2kg
L2dyYXZlIC9hY3V0ZSAvY2lyY3VtZmxleCAvdGlsZGUgL21hY3JvbiAvYnJldmUgL2RvdGFj
Y2VudAovZGllcmVzaXMgLy5ub3RkZWYgL3JpbmcgL2NlZGlsbGEgLy5ub3RkZWYgL2h1bmdh
cnVtbGF1dCAvb2dvbmVrIC9jYXJvbiAvc3BhY2VdCj4+CmVuZG9iagoxMCAwIG9iaiA8PAov
VHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTEKL05hbWUgL0YyCi9CYXNlRm9udCAvSGVsdmV0
aWNhCi9FbmNvZGluZyA5IDAgUgo+PiBlbmRvYmoKeHJlZgowIDExCjAwMDAwMDAwMDAgNjU1
MzUgZiAKMDAwMDAwMDAyMSAwMDAwMCBuIAowMDAwMDAwMTYzIDAwMDAwIG4gCjAwMDAwMDY3
MzYgMDAwMDAgbiAKMDAwMDAwNjgxOSAwMDAwMCBuIAowMDAwMDAwMjEyIDAwMDAwIG4gCjAw
MDAwMDAyOTUgMDAwMDAgbiAKMDAwMDAwMDM3NSAwMDAwMCBuIAowMDAwMDA2NzE2IDAwMDAw
IG4gCjAwMDAwMDY5MTIgMDAwMDAgbiAKMDAwMDAwNzE2OSAwMDAwMCBuIAp0cmFpbGVyCjw8
Ci9TaXplIDExCi9JbmZvIDEgMCBSCi9Sb290IDIgMCBSCj4+CnN0YXJ0eHJlZgo3MjY2CiUl
RU9GCg==
--------------090700090302050407010606--