Page 1 of 1

### Pi Zero vs Cray-2 --- Bambi vs Godzilla who will win?

Posted: Tue May 22, 2018 12:45 am
Here's a nice "Pi Day" (Mar 14) demonstration I came up with this year that nicely ties in the Raspberry Pi, the number Pi, and a bit of history, in a way that shows just how far computers have advanced in only a single generation by comparing a mid nineteen-eighties Crey-2 supercomputer with a Raspberry Pi Zero.

First we examine the specifications for the awesome Cray-2 super computer, billed by NASA in the mid nineteen eighties as "The most powerful computer on earth! (youtube video link)"

Configuration: 14 vertical columns 336 Pluggable Modules
Overall Dimensions: 45 inches (1.14m) x 53 inches (1.35m)
Total Weight: 5500 lbs (2500kg)
Power Consumption: 195kW
Cooling: Liquid inert fluorocarbon with heat exchange to cold water cooling tower
Cost >30 Million USD (in 1985 dollars not counting additional facilities costs)

Here's the Wikipedia link for the Crey-2 with lots of nice photos.

Compare that to the Pi Zero that weighs a few grams, draws about a Watt, and costs 5 dollars.

I chose the Cray-2 because it is perhaps one of the most recognizable iconic supercomputers of that era, and in January 1986 it was used by a really smart fellow named David H. Bailey, to smash the then world record by calulating Pi to a never before seen 29,360,111 digits in 28 hours.

Later that year a Japanese team used a souped up Hitachi HITAC S-810/20 supercomputer to calculate Pi to 33,554,414 digits in only 8 hours.

These Pi calculations give us an easy way to reach across time and benchmark the litle Raspberry Pi Zero against these mega-monster supercomputers from another era, by attempting to duplicate their feat and compare the result.

It's not too complicated, I promise, just 3 simple steps.

First we'll need a good program to do the calculation. This is very important, because software advances are just as important to overall performance as hardware.

So as step (1), we will grab a cutting edge math library to do the calculations by booting up the Pi Zero, opening a terminal and typing:

sudo apt-get install libgmp-dev

This gets us the development libraries needed to compile C code that uses The GNU Multiple Precision Arithmetic Library.

Then as step (2) grab this short c program from this page on the GMP website

Then for step (3) compile it by opening a terminal in the directory you downloaded the gmp-chudnovsky.c file to and compile it with:

gcc -O2 -Wall -o gmp-chudnovsky gmp-chudnovsky.c -lgmp -lm

THAT'S IT! - we are ready to benchmark the Pi Zero against Super Computers from a bygone era by calculating Pi to MILLIONS OF DIGITS.

Fist let's run a really quick test to check if everything is working, by running the following from the same terminal we just used to compile the code:

./gmp-chudnovsky 60 1

This should print out 60 digits of Pi in an unusual exponential form, with the final 'e1' indicating that it should be multiplied by 10.

0.31415926535897932384626433832795028841971693993751058209749446e1

Now for the final test:

time ./gmp-chudnovsky 40000000 1

Your Pi Zero will sit printing out progress dots for about 25 minutes, then pause a few minutes, then spit out 40 MILLION DIGITS OF PI.

So, the final result is that the Pi Zero calculates 40,000,000 digits of Pi in only a half hour, compared to 29,360,111 digits of Pi in 28 hours for the Cray-2 and 33,554,414 million in 8 hours for the Hitachi HITAC S-810/20.

The Pi Zero didn't just beat both these iconic supercomputers it DEMOLISHED them.

Bambi CRUSHES Godzilla !

### Re: Pi Zero vs Cray-2 --- Bambi vs Godzilla who will win?

Posted: Tue May 22, 2018 5:05 am
RichardS wrote:
Tue May 22, 2018 12:45 am
by comparing a mid nineteen-eighties Crey-2 supercomputer with a Raspberry Pi Zero.
Thanks for the great idea. This may be more a demonstration of the importance of mathematics and algorithms: the Chudnovsky algorithm for calculating Pi did not exist until 1989.

Coolnesss factor aside, the Cray 2 has a Linpack score of 1.4 Gflops while the Pi Zero achieves closer to 240 Mflops, which is 5 times slower.

Maybe the Pi is better at calculating Pi and the Cray is better at solving systems of linear algebra problems. In a way, neither is the most relevant measure of computer performance.

### Re: Pi Zero vs Cray-2 --- Bambi vs Godzilla who will win?

Posted: Tue May 22, 2018 7:05 am
ejolson wrote:
Tue May 22, 2018 5:05 am
Coolnesss factor aside, the Cray 2 has a Linpack score of 1.4 Gflops while the Pi Zero achieves closer to 240 Mflops, which is 5 times slower.
Well considering the difference in size, purchase price, power consumption etc - its still impressive!

### Re: Pi Zero vs Cray-2 --- Bambi vs Godzilla who will win?

Posted: Tue May 22, 2018 7:06 am
ejolson wrote:
Tue May 22, 2018 5:05 am
RichardS wrote:
Tue May 22, 2018 12:45 am
by comparing a mid nineteen-eighties Crey-2 supercomputer with a Raspberry Pi Zero.
This may be more a demonstration of the importance of mathematics and algorithms: the Chudnovsky algorithm for calculating Pi did not exist until 1989.

Coolnesss factor aside, the Cray 2 has Linpack score of 1.4 Gflops while the Pi Zero achieves closer to 240 Mflops, which is 5 times slower.

Maybe the Pi is better at calculating Pi and the Cray is better at solving systems of linear algebra problems. In a way, neither is the most relevant measure of computer performance.

Yes, EXACTLY, this is why I pointed out that progress in overall computational performance is not just about hardware, it's also about SOFTWARE which includes, the Chudnovsky brothers genius Pi formula, which not only converges much more quickly than others (14 digits per iteration), but also lends itself to various modular arithmetic optimization tricks that minimize the number of punishing full decimal place accuracy arbitrary precision math calculations.

While we are giving credit where due, we should also note that we owe this nicely optimized GMP Chudnovsky implementation to coding done in 2005 by Hanhong Xue.

The significant advantages of this newer algorithm helped offset the very simple casual way I ran the benchmark. I did not even try simple optimizations like streaming the digits to a higher speed linux sink device like high speed storage, or /dev/null, because I wanted to see all those MILLIONS of digits stream by.

I agree 100% with your assessment of the pitfalls of trying to compare such different architectures, but will respectfully have to disagree with your final "linpack" numbers, which compare highly theoretical Cray-2 numbers with more accurate recent estimations for the Pi Zero. Also, I do not think linpack takes into account the significant parallel processing potential of the Pi's GPU, which can significantly speed up integer and block data transforms but isn't much use in accelerating floating point operations. Plus the Cray-2's floating point performance may not have been quite as high as hyped - here's a link to a report on the real world performance of the Cray-2 at the NASA Ames Research Center. As you can see, they were lucky to hit 100 Mflops on most workloads. Still, it was an awesome machine for it's age, and Dr. Bailey did note in this report that one of the programs it ran BEST was "PITEST".

By the way, since you were kind enough to mention the Chudnovsky algorithm, I should mention that another reason I picked the particular circa 1986 Cray-2 Pi Record I did was because, not only was the Cray-2 a fine representative of the most powerful computers of its age, but in addition Dr. Bailey, the person programing it, like the Chudnovsky brothers, was one of his generations foremost experts on Pi formulas. Dr Bailey would later go on to coauthor a revolutionary Pi formula of his own, the BBP ( Bailey–Borwein–Plouffe) spigot pi formula.

So, I did my best to make a fair comparison, taking into account advances in BOTH hardware and software (including mathematical algorithms), and the Pi Zero just flat out generated WAY more digits in a tiny fraction of the time, which I thought was impressive enough to pass it along.

### Re: Pi Zero vs Cray-2 --- Bambi vs Godzilla who will win?

Posted: Tue May 22, 2018 8:12 am
RichardS wrote:
Tue May 22, 2018 7:06 am
Plus the Cray-2's floating point performance may not have been quite as high as hyped - here's a link to a report on the real world performance of the Cray-2 at the NASA Ames Research Center. As you can see, they were lucky to hit 100 Mflops on most workloads.
Note that a naive implementation of Linpack achieves only 68 Mflops on a Pi Zero. Efficiently using computing hardware leads to much different performance numbers than simply compiling mathematically correct Fortran codes.

My understanding is that the Rmax entry on the Top 500 list is an experiential result obtained from running real code. The closest thing to solving systems of linear equations in the interesting report you link appears to be MATEST which is stated to run at 394.55 Mflops using one out of the four available cores on a Cray 2. This supports 1.4 Gflops as a plausible result for a tuned parallel Linpack. As demonstrated by the Shénwēi TaihuLight which is currently the fastest supercomputer in the world, solving dense systems of linear equations happens to scale surprisingly well to multiple cores. The Chudnovsky algorithm also parallelizes well. Unfortunately, there are many useful calculations which are difficult to parallelize.

### Re: Pi Zero vs Cray-2 --- Bambi vs Godzilla who will win?

Posted: Tue May 22, 2018 3:07 pm
Takes 13 m 38 s on my Pi 3b+ - including digit display time. Program reports "Total time" of 458 s before digit display starts.

Alan.

### Re: Pi Zero vs Cray-2 --- Bambi vs Godzilla who will win?

Posted: Tue May 22, 2018 5:51 pm
jardino wrote:
Tue May 22, 2018 3:07 pm
Takes 13 m 38 s on my Pi 3b+ - including digit display time. Program reports "Total time" of 458 s before digit display starts.

Alan.

Great that you were able to get it working

Yep, your times sound about right. That's what I also get for 40 Million digits when I run it on my Pi 3's. Pi 3's run about 2 and a half times faster than the Pi Zero because they run a higher performance multi-core CPU. Pi 3 would be even faster if the gmp-chudnovsky program was more multi-threaded but it seems to do most of it's heavy lifting calculations by maxing out a single thread. This still gives the mulit-core Pi 3 an advantage, since Linux can run all it''s backgound tasks without interrupting the benchmark thread with a lot of context switching overhead.

You can also generate more digits on the Pi3 since it has 1G RAM instead of the 512Meg on the Pi Zero.

The GNU Multi Precision Arithmetic Library Pi page that I linked above says that it takes about 8 times as many bytes of free ram as the number of digits of Pi that your are generating. This limits the Pi Zero to about 40,000,000 and the Pi 3 to about 80 to 100 million depending on how much other stuff is running and taking up RAM.

If you want to try more digits, just change that first number on the gmp-chudnovsky command line, for example to try 100 million:

time ./gmp-chudnovsky 100000000 1

If your are wondering what that last digit is for, examining the C code seems to indicate:
0 = do only main math calculations and report time results, but do not generate output digits
1= generate output including streaming all the calculated digits of Pi to stdout.
2= do calculations and give more diagnostic info about what the program is doing internally

So most of the time you will just want to leave the final digit option on the command line as a "1".

If you want to make sure your Pi not only was as fast as it should be but ALSO GIVES THE CORRECT DIGITS FOR PI, then try this:

time echo -n 3.\$(./gmp-chudnovsky 40000000 1 | tail -n +14 | tail -c +4 | head -c 40000000) | md5sum -b

This will not generate any output (no progress dots) but should take exactly the same amount of time,
then give this single line of output with the correct md5 hash for the first 40 million digits of Pi which is:

5c3e0f3df7820bb60b5b75cda89828da *-

This is the correct md5sum for 40,000,002 bytes total representing a 3 fallowed by a decimal point and 40 million decimal place digits, all in standard single byte ASCII/UTF8 format.

The reason for all the head/tail chopping going on above, is that we need to strip off all the diagnostic and timing info and reformat the output in standard 3.1415926 format to compare the hash value with known-correct values on the web.

I double-check hash values using a billion decimal place Pi file which I downloaded from MIT

With this file you can generate accurate md5 hash checksums for any number of digits up to a billion, for example for the 40 million example:

head -c 40000002 pi-billion.txt | md5sum -b
5c3e0f3df7820bb60b5b75cda89828da *-

(40000002= 40 million decimal places plus 2 bytes to account for the initial 3 and decimal point in the decimal representation of Pi)

This makes a wonderful system integrity checker when combined with something else stressful like:

openssl speed -multi 4

This openssl speed test really HAMMERS your CPU and will generate a LOT of heat (so don't run it unless you have a GOOD HEATSINK)

When combined with the Pi test above this is a GREAT overall system check and benchmark because openssl really works your CPU, but doesn't use much RAM, where gmp-chudnovsky doesn't hit your CPU very hard, but really stresses the RAM (which you can fine tune very easily by simply adjusting the number of digits you specify on the command line).

I can provide more info and correct test hash values for various numbers of Pi digits if anyone is interested.

### Re: Pi Zero vs Cray-2 --- Bambi vs Godzilla who will win?

Posted: Wed May 23, 2018 12:17 am
Ok, here's a simplified script to allow you to use the gmp-chudnovsky program I showed you how to compile in my first post to do a massive multi-million digit Pi calculation and then check the accuracy of EVERY DIGIT using a md5sum, which is a really great way to check on the system integrity of your Raspberry Pi or other Linux PC.

When you use gmp-chudnovsky to calculate a large number of digits, it will use nearly every free byte of ram it can find, and if there are any bit errors or other issues, it will almost surely cause math error resulting in a wrong digit somewhere.

All we have to do is pipe the Pi digits through the MD5 hash function 'md5sum' and then compare the resulting hash to a known good value

Code: Select all

``````#!/bin/bash
if [ "\$#" -ne 1 ]; then
echo
echo "Usage:"
echo
echo "\$0 MEGS"
echo
echo "Where MEGS is an integer number from 1-1000 indicating to how many"
echo "MILLIONS of decimal places of Pi should calculated and md5 hashed."
echo
echo "For example:"
echo
echo "\$0 10"
echo
echo  "Calculates Pi to 10 Million decimal places, and displays the md5 hash."
echo
echo  "Note:"
echo  "The MEGS parameter counts only decimal place digits, so also counting"
echo  "the initial 3 and decimal point in the decimal representation of pi,"
echo  "the total number of bytes being md5 hashed is two bytes larger."
echo  "(10,000,002 in this example)"
echo
exit
fi

MEGS=\$1
time echo -n 3.\$(./gmp-chudnovsky \${MEGS}000000 1 |tail -n +14|tail -c +4|head -c \${MEGS}000000)|md5sum -b

``````
Copy and paste this script into your favorite text editor and save it as pi-md5.sh in the same folder as your compiled gmp-chudnovsky executable program and set it's permission to be executable.either with the 'properties/permissions' tab of the desktop file manager, or from the console with:

chmod +x pi_md5.sh

That's it !

Now to run a test, just decide how many MILLIONS of digits you want to generate for your test run, and type:

Code: Select all

``````./pi-md5.sh xxxxx
``````
...where xxxxx is the number of MILLIONS of digits of Pi you want to use for the test.

For example, for a quick test using 5 million digits, type :

Code: Select all

``````./pi-md5.sh 5
``````
After a minute, or two, or three (depending on whether you are on a Pi 3, Pi2, or Pi Zero), you should see:

b55c8ee6db077a03f6353c75dff5cba7

This is the correct md5sum for 5 Million decimal places of Pi (5,000,002 characters counting the 3 and decimal point).

Here are the correct Pi md5sum hash values for all digit lengths from 1 Million decimal places to 1000 Million decimal places (1 Billion) corresponding to the script commands ./pi-md5.sh 1 to ./pi-md5.sh 1000:

Code: Select all

``````1     e87782d11eac8d992faca76ceb940433
2     d4e8475b2773ffb4d5e80669a1c187af
3     0bb912d818f1d1e4e3738890ecc7d3d0
4     a28c1618bdd13c276f46a6038d3dcac8
5     b55c8ee6db077a03f6353c75dff5cba7
6     f52a5e32bd23c2845249a62422293d46
7     9297ff49433853045c490ec5a1745f4e
8     e730af03a8df5eedb44b328c4f264f2b
10    bc3234ae2e3f6ec7737f037b375eabec
11    7e0d24a7d781dd91e827be169de04f71
12    62b8f4c15d39881cea9361af7d6a2d1e
13    1253aa158a4f687fc26dea1457ec145a
14    b7cfc80e2d7314324893c6f153d582bd
15    d940d1074d519554627b9ca27cc9dbb8
16    e8fd19e0772e30b7122c09bec682aee0
17    01351e150b03e26738c33f368257d01d
18    d6de964aff29884e5639ac6782a5005f
19    edfae6741fb6d2fa62ab3da2099e6a20
20    e99912b91d326ff6081b42f6ba15e313
21    82daa60eb0ca2df45c1c1dd391f9ea28
22    a9dc2e7dc4bd397b5a336b5968e97aa0
23    fc6d7d95d9255dfdc4c110f20f027758
24    6ebe878e53b6613cf8b6a84e579848d9
25    2db2657f28a2bd854a7157b8d561a9eb
26    427fdde4c4953c1ae42166c90dfed840
27    f588deee6da0b922e0cc80d652e1678e
28    f0cb7de514252ac9d328e874475a3b9f
30    a35816be457bbdcfdcecc1bda9c1ea86
32    e778f61bfb4175db79d96a3bcfb214f6
33    1e7be0b572ffe9993819620c22acabfc
34    6cc3ccb1f4ccf42c5cf9578f4d647a5c
35    b58f4ff79441f6899492eff086d396b2
36    eeb2d635ce7edc9fcaed29493276dcd8
37    3382ced85dd8b89d3a90b53cfd89e5cd
38    027a11a9155213c2bb56def1bd8bf183
39    1f8454fd69d2aef92360ba1b585ebe03
40    5c3e0f3df7820bb60b5b75cda89828da
41    cae4cfdb92e4459406751cfe5ab4d97a
42    f37a804cd3d456c354d9d97be70172fd
43    3f85ff5986ebd69b0458ec08fcf8b686
44    b1bc42000f18afa4c3231ddae5c0f0bc
45    68495ae2be0885f42e47553d9be00699
46    33e72239ca7c9b0b3f7dd7c641e0c56f
48    0569514a8135fc7e2aa5ef068f6acd89
49    d0b76171679fb6020d6680c734f628c8
50    398155369a174df182320e73759c555b
51    43ab7dc05e367b9e9494af22a3d28636
52    17598a42e1b697b6c7ea776e1ab70d34
53    54a15b3a4dd64f366cc87cb19f35d7f4
54    747572d95a7972dfc912e88175fb9b06
55    a6fdb93df9295935010c21a31ddce59a
56    44514cf28a4feb66884401d91c7ba028
58    eee409cf4d729704a8539f4d77c9c8b0
59    9e657a97564e0cafdca05a5f62e5e9c2
60    12c808a191bb589897e636c5a8fdce3f
62    6dbde7025c4793327667984e0068f3bc
63    d5296dbf9c6a008f053cb10b31a2134c
64    564958e6e5ece9502d54597c45fc0cc0
65    5fa1da20134a5fb74fdf3a5c27610c61
66    81ba54320ed8df02d8c62104354ed126
67    3a410cc83c9fedd7f92e1fd25de7ccff
68    39b85116a9457a19c84a0b019947532a
70    64a614c1b3b744e22e91bdb8a197acbe
71    15b51863960b7b1c3358a16f7942257c
72    6fde035fe4247dbe2ae7b28ddf4a70e5
73    8f5ef8e2546f9b0a3261b62a5800b7df
74    5facf9a1c614d9c603bb8c23359ea00d
75    1f9f176a0b32e58028027d0083f348ba
76    ea8c90a6d2b81a1e1149e336ab56b62f
77    bf43194558aa1c888d25150b997d21e2
78    7f9215387f873964578b8489065490e3
79    323ca23327c881f2e9fded8a67fb67a0
80    9fefb6579ac698677acb0a3a56a27aa5
82    845db6e6cd05a52a5cf424c896e7c6b5
83    11f74af0d5b5270c714da43a926756be
84    d038e5985bd979d417288af77b6954eb
85    bff2bc9afe6512846fd9b0a0f643d306
86    946f7ffe1a5316303e8fbdc9fe7f0e83
87    1af5aeef9347df58e5e68ac7f179b060
88    0ea57029467edb7021ef10d27b4062fa
90    06f83e8328aedf81452420e34b5e5506
91    4ddb522c8400deb820a6b18cbf79569a
92    55dc06af16d7c36e1e430f5a96f83cb6
93    d3e43740f6084d1672e2a127e14029eb
94    5356433fde26e995b85c76501594ff7d
95    6c967b6ba5623b52e5a1c6ae9b0dbe01
96    1327dd0f6c6e7b55a65b66106cc5abf2
98    0ac0a3dc200c3c1f4720134d09f78966
99    7b8f7fca9df02ca428be90b0830271d7
100   969bfe295b67da45b68086eb05a8b031
110   e73fd92e5d047c35d04e1e23df607059
120   6ab532abcec464595b2d2e4487ec57ca
130   e464c9ab502c7fbddd7c9a535d2155d3
140   2900ec237512572205a9013c9b6b81b6
150   d62d8fc45f9274cb70dd6460f77a712a
160   ea8026aff3519bd329c1026034a03c83
170   5a417574e1c15ff50e263c6dc1252d95
180   7a1aec60a590dc262fdb97060204efb3
190   89021d164653eb4266e26f9cfb59fb5f
200   805f1aa30d685b3048b5721c346a0b45
210   0490538c89aef8ee9285664d0d29c101
220   901883ea97d9ab9f4ea526b4bc752c2a
230   8786d100fc981461a07a2d0b5dafdeef
240   6d2dde93a8c4d72340348c9e59655339
280   06336321a065e81bc62638f450a4ac77
290   c324f471e1ecdf3f293567716514036c
300   05c6aa7412acf30b38f4530ed2828dc4
310   679901d0717ecf7827ba1e7d0aecbfe0
320   33f40967dff54d549ff0b0def369eddd
330   53dce5149650e81c8f16a071c0ce4c6c
340   9b1381ee74484f7651ec8219e1a1c8dd
360   c963c087214ffd1561cd552b5b963c8b
370   8c85b71da5e0efc6a6e7cb34068c20db
380   c638b9b8822062c203837cbdb2763a5c
390   7651582e72a33ebcec123270e90bcce3
400   8f4d9fd73b9459a96073ea3cb2af9a6b
410   3db37417f5fbdfc39c7f80b21341d47a
420   01bcca2b5c02d25bc7fb843de324918e
430   fcc75fe6b02b31f25b3a9b904980b433
440   127a11ddcfc9ca9890d001605e68b73a
450   204419256f686c9c25a138461627e09d
460   4ca2492a517eda7a313d5ab06704c1f7
470   18053707b03328135b5d45a4e7e89709
480   a737b52a59ac311c02c89c361e0eced8
490   33cd1ee3edaa647c8f9557ef0d2c83f9
500   a169271edc11bafd34308f1c80ae03dc
510   60ee076d0a0c9d5f52362cf56fe8eb03
520   1e3d01697194cd13b3fc0237118a9649
530   09f3dc8fae219dd8d3f8cfbaf02a4fe8
540   6fd30b6d47f73a251a9839f87c89b3a7
550   8b1776ec88e347b37d5d89798f8a10fd
560   913a3124193417dbf4d7696297feaf7d
570   d5fef32f03edf56e8c057409621775da
580   3650a8b86c0d18cf7f6bed08ffc8694b
590   5acc4de7ed969490e4ff2ce757bfde68
610   f44fd5dde9bb8665370438287e87c320
620   b22ac7429b2645a9096f15a0f53507dc
630   81f445e8a460ebdc1be07da033cbf812
640   2cf4df0c841687e93e86b28468ac4827
650   6da7e89bf44b45a11b14b8f7cfb10194
660   545cc22f56e1aa3edb6410ca211d4db6
690   20e1e6099015ca567ccc5844e786aa88
700   93361345d144eb5ef6813fd89a108a7d
710   3ae08f237ff58269d0d5aa07124f2857
720   4337030c542ee7686fb050df0f7078dc
730   0c430998e49fb14d2abdcb8cfe1e0695
740   546e77a76a20db854cdf4609f37ee2a8
750   4e2ea12d0454b8b53063c1fc149daffc
760   2423af8eb3453b6d2b19551f3d2e62bb
770   9157cef72d55459c3e8a7f72ba2ec359
780   7197efda1b0415486acd38dea1eea2c9
790   7f68eb217d824ea4c66944a88a4bf420
810   0a789d9ee3018b79c2f7477690a56c31
820   b51e80b6ae5c7bd4d728dce5f8832269
830   5e5c0a63238eb6b5ea75043398dcb2c3
840   a5389aa22f885f51811bc287529d3b81
850   52aefd813f3cb688e0f478b215801831
860   d4717c29fd02a70b48378ba77101fa8f
870   8fdbb458033a8020992de871c598fc99
880   47234e21dca5458c4b62dd0895587375
890   44feca24e268cd3c4fbf199b6e7da177
900   6c2d9c0969882d9cc9e6c62a9067dee2
910   c338e4e565620844ce2acb66f9265a3f
920   18eef8aae08d5eb8689625ae24aa2f07
930   c6460b927e03b5b70f8e96ba89ebe01e