--- /dev/null
+<?php
+error_reporting(E_ALL | E_STRICT);
+
+define('__STEP_32' , 3);
+define('__FACTOR_32', 16);
+define('__FORMAT_READ_32', 'I2');
+
+define('__STEP_64' , 7);
+define('__FACTOR_64', 32);
+define('__FORMAT_READ_64', 'N2');
+
+// Default is 32-bit
+$__factor = constant('__FACTOR_32');
+$__format = constant('__FORMAT_READ_32');
+$__step = constant('__STEP_32');
+
+if ((isset($_SERVER['argv'][1])) && ($_SERVER['argv'][1] == '-64')) {
+ // Use 64-bit
+ $__factor = constant('__FACTOR_64');
+ $__format = constant('__FORMAT_READ_64');
+ $__step = constant('__STEP_64');
+} // END - if
+
+$buffer = file_get_contents('test.data.bin' . ($__factor * 2)) or die('Please run write.php first!' . PHP_EOL);
+
+assert(filesize('test.data.bin' . ($__factor * 2)) == strlen($buffer));
+assert((strlen($buffer) % 8) == 0);
+
+print 'Hash(' . strlen($buffer) . ')=' . md5($buffer) . PHP_EOL;
+
+$decoded = '';
+$i = 0;
+for ($pos = 0; $pos < strlen($buffer); $pos += 8) {
+ $part = substr($buffer, $pos, 8);
+ assert(strlen($part) == 8);
+ //print 'part='.md5($part).PHP_EOL;
+ $unpacked = unpack($__format, $part);
+ //print 'unpacked='.print_r($unpacked,true);
+ $unpacked = $unpacked[1] << $__factor | $unpacked[2];
+
+ //print 'unpacked=' . $unpacked . PHP_EOL;
+ for ($i = 0; $i < $__step; $i++) {
+ $factor = pow(256, ($__step - 1 - $i));
+ //print __LINE__.':i=' . $i . ',factor=' . $factor . ',unpacked=' . $unpacked . PHP_EOL;
+ $chr = ($unpacked / $factor);
+ //print __LINE__.':i=' . $i . ',chr=' . $chr . PHP_EOL;
+
+ if ($chr > 0) {
+ $a = explode('.', $chr);
+ $chr = $a[0];
+ //print __LINE__.':i=' . $i . ',chr=' . $chr . ',unpacked=' . $unpacked . PHP_EOL;
+ $unpacked -= ($chr * $factor);
+ //print __LINE__.':i=' . $i . ',chr=' . $chr . ',unpacked=' . $unpacked . PHP_EOL;
+ } else {
+ $chr = $unpacked;
+ $unpacked = 0;
+ }
+
+ //print 'chr=' . $chr . PHP_EOL;
+ $decoded .= chr($chr);
+ } // END - for
+} // END - for
+
+$decoded = gzuncompress($decoded);
+
+print 'Writing ' . strlen($decoded) . ' bytes to output ...' . PHP_EOL;
+file_put_contents('test.data.out' . ($__factor * 2), $decoded);
+
+// [EOF]
+?>