Imported a somewhat optimized A5.1 implementation for CUDA.

This commit is contained in:
Ingo Albrecht 2009-02-03 11:00:10 +01:00
parent c8747f28d8
commit 26a95cc318
10 changed files with 8224 additions and 0 deletions

46
A5.1/CUDA/Makefile Normal file
View File

@ -0,0 +1,46 @@
################################################################################
#
# Copyright 1993-2006 NVIDIA Corporation. All rights reserved.
#
# NOTICE TO USER:
#
# This source code is subject to NVIDIA ownership rights under U.S. and
# international Copyright laws.
#
# NVIDIA MAKES NO REPRESENTATION ABOUT THE SUITABILITY OF THIS SOURCE
# CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR
# IMPLIED WARRANTY OF ANY KIND. NVIDIA DISCLAIMS ALL WARRANTIES WITH
# REGARD TO THIS SOURCE CODE, INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
# IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
# OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
# OR PERFORMANCE OF THIS SOURCE CODE.
#
# U.S. Government End Users. This source code is a "commercial item" as
# that term is defined at 48 C.F.R. 2.101 (OCT 1995), consisting of
# "commercial computer software" and "commercial computer software
# documentation" as such terms are used in 48 C.F.R. 12.212 (SEPT 1995)
# and is provided to the U.S. Government only as a commercial end item.
# Consistent with 48 C.F.R.12.212 and 48 C.F.R. 227.7202-1 through
# 227.7202-4 (JUNE 1995), all U.S. Government End Users acquire the
# source code with only those rights set forth herein.
#
################################################################################
#
# Build script for project
#
################################################################################
# Add source files here
EXECUTABLE := calculate_chain
# CUDA source files (compiled with cudacc)
CUFILES := calculate_chain.cu
# CUDA dependency files
CU_DEPS := calculate_chain_kernel.cu
################################################################################
# Rules and targets
include ../../common/common.mk

5
A5.1/CUDA/README Normal file
View File

@ -0,0 +1,5 @@
To compile the CUDA kernel, copy (not link) this directory
into your the project directory of your CUDA SDK, cd into
it and "make verbose=1".

View File

@ -0,0 +1,167 @@
/*
* Driver program for a CUDA-based A5/1 rainbow table generator.
*
* Copyright (C) 2009: Ingo Albrecht <prom@berlin.ccc.de>
*/
#ifndef TEST_INTERMEDIATES
/* values below are for normal runs */
/*
* These values are appropriate for a Quadro FX 570M.
*
* Before running this on different hardware, you
* should decrease OPERATIONS_PER_RUN and then
* increase it incrementally until you get
* run lengths approaching 5 seconds.
*
* Thread and block count should be selected
* so that they almost hit the register bound.
*
* If you want to tune the code for your card,
* you should do it incrementally, keeping
* the run length below 5 seconds, or your
* graphics subsystem might go wonky.
*/
// number of threads per block
#define NUM_THREADS 32
// number of blocks to schedule
#define NUM_BLOCKS 32
// how long each run should be in cycles.
// must be a power of two for now.
#define OPERATIONS_PER_RUN 32768
#else
// values below are for intermediate testing
#define NUM_THREADS 10
#define NUM_BLOCKS 1
#define OPERATIONS_PER_RUN 32768
#endif
// total operations per chain (2^21)
#define OPERATIONS_PER_CHAIN 2097152
// number of chains to be computed
#define NUM_CHAINS NUM_THREADS * NUM_BLOCKS
#include <stdio.h>
#include <unistd.h>
#include <cutil.h>
#include "calculate_chain_kernel.cu"
int
main(int argc, char **argv) {
CUT_DEVICE_INIT(argc, argv);
uint32 i;
uint64 start = 0; // XXX put your start vector here
printf("Computing %d chains divided into %d blocks of %d threads, starting at 0x%16.16llx\n",
NUM_CHAINS, NUM_BLOCKS, NUM_THREADS, start);
uint32 num_runs = OPERATIONS_PER_CHAIN / OPERATIONS_PER_RUN;
printf("Will execute %d runs of %d steps each.\n", num_runs, OPERATIONS_PER_RUN);
// create a timer for the whole run
unsigned int total_timer = 0;
CUT_SAFE_CALL(cutCreateTimer(&total_timer));
// compute size of state
uint32 s_results = NUM_CHAINS * sizeof(uint64);
// allocate and initialize host memory
uint64* h_results = (uint64*) calloc(1, s_results);
for(i = 0; i < NUM_CHAINS; i++) {
h_results[i] = start + i;
}
// allocate and initialize device memory
uint64* d_results;
CUDA_SAFE_CALL(cudaMalloc((void**)&d_results, s_results));
CUT_SAFE_CALL(cutStartTimer(total_timer));
CUDA_SAFE_CALL(cudaMemcpy(d_results, h_results, s_results, cudaMemcpyHostToDevice));
double total_run_time = 0.0;
uint32 run;
for(run = 0; run < num_runs; run++) {
unsigned int run_timer = 0;
CUT_SAFE_CALL(cutCreateTimer(&run_timer));
uint32 index = OPERATIONS_PER_CHAIN - 1 - run * OPERATIONS_PER_RUN;
#ifdef TEST_INTERMEDIATES
// print intermediates (for testing against calculate_chains_dump)
for(i = 0; i < NUM_CHAINS; i++) {
printf("results[%d] = 0x%16.16llx\n", i, h_results[i]);
}
#endif
printf("Run %3.3d/%3.3d, starting at index 0x%6.6x... ", run+1, num_runs, index);
fflush(stdout);
usleep(500*1000);
CUT_SAFE_CALL(cutStartTimer(run_timer));
#ifdef TEST_INTERMEDIATES
CUDA_SAFE_CALL(cudaMemcpy(d_results, h_results, s_results, cudaMemcpyHostToDevice));
#endif
dim3 gridDims(NUM_BLOCKS, 1, 1);
dim3 blockDims(NUM_THREADS, 1, 1);
crunch<<<gridDims, blockDims>>>(d_results, index);
CUDA_SAFE_CALL(cudaThreadSynchronize());
#ifdef TEST_INTERMEDIATES
CUDA_SAFE_CALL(cudaMemcpy(h_results, d_results, s_results, cudaMemcpyDeviceToHost));
#endif
CUT_SAFE_CALL(cutStopTimer(run_timer));
float run_time = cutGetTimerValue(run_timer);
printf("%f ms.\n", run_time);
total_run_time += run_time;
fflush(stdout);
CUT_SAFE_CALL(cutDeleteTimer(run_timer));
}
CUDA_SAFE_CALL(cudaMemcpy(h_results, d_results, s_results, cudaMemcpyDeviceToHost));
CUT_SAFE_CALL(cutStopTimer(total_timer));
// free device memory
CUDA_SAFE_CALL(cudaFree((void**)d_results));
// print results
for(i = 0; i < NUM_CHAINS; i++) {
printf("results[%d] = 0x%16.16llx\n", i, h_results[i]);
}
// free host memory
free(h_results);
// report total time
printf("Total time: %f ms, %f spent crunching\n", cutGetTimerValue(total_timer), total_run_time);
// delete the whole-run timer
CUT_SAFE_CALL(cutDeleteTimer(total_timer));
return 0;
}

View File

@ -0,0 +1,154 @@
/*
* Modified by Ingo Albrecht <prom@berlin.ccc.de>.
*
* This is a specially modified version of the table
* generator that always calculates chains 0 through 9.
*
* It emits intermediate values every 2^15 cycles that
* can be used to verify the CUDA implementation.
*/
/*
* Calculation of chains for A5/1 rainbow table cracking.
*
*
* Loosely based on: A pedagogical implementation of A5/1.
*
* Copyright (C) 1998-1999: Marc Briceno, Ian Goldberg, and David Wagner
*
* See accompanying file A5.1.c for original version and full copyright
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <math.h>
/* Masks for the three shift registers */
#define R1MASK 0x07FFFF /* 19 bits, numbered 0..18 */
#define R2MASK 0x3FFFFF /* 22 bits, numbered 0..21 */
#define R3MASK 0x7FFFFF /* 23 bits, numbered 0..22 */
/* Middle bit of each of the three shift registers, for clock control */
#define R1MID 0x000100 /* bit 8 */
#define R2MID 0x000400 /* bit 10 */
#define R3MID 0x000400 /* bit 10 */
/* Feedback taps, for clocking the shift registers. */
#define R1TAPS 0x072000 /* bits 18,17,16,13 */
#define R2TAPS 0x300000 /* bits 21,20 */
#define R3TAPS 0x700080 /* bits 22,21,20,7 */
/* Output taps, for output generation */
#define R1OUT 0x040000 /* bit 18 (the high bit) */
#define R2OUT 0x200000 /* bit 21 (the high bit) */
#define R3OUT 0x400000 /* bit 22 (the high bit) */
typedef unsigned char byte;
#ifdef BITSIZE_32
typedef unsigned long uint32;
typedef unsigned long long uint64;
#else
typedef unsigned int uint32;
typedef unsigned long uint64;
#endif
typedef unsigned int bit;
bit parity32(uint32 x) {
x ^= x>>16;
x ^= x>>8;
x ^= x>>4;
x ^= x>>2;
x ^= x>>1;
return x&1;
}
bit parity64(uint64 x) {
x ^= x>>32;
x ^= x>>16;
x ^= x>>8;
x ^= x>>4;
x ^= x>>2;
x ^= x>>1;
return x&1;
}
uint32 clockone(uint32 reg, uint32 mask, uint32 taps) {
uint32 t = reg & taps;
reg = (reg << 1) & mask;
reg |= parity32(t);
return reg;
}
uint32 R1, R2, R3;
inline bit majority() {
int sum;
sum = ((R1&R1MID) >> 8) + ((R2&R2MID) >> 10) + ((R3&R3MID) >> 10);
if (sum >= 2)
return 1;
else
return 0;
}
inline void clock() {
bit maj = majority();
if (((R1&R1MID)!=0) == maj)
R1 = clockone(R1, R1MASK, R1TAPS);
if (((R2&R2MID)!=0) == maj)
R2 = clockone(R2, R2MASK, R2TAPS);
if (((R3&R3MID)!=0) == maj)
R3 = clockone(R3, R3MASK, R3TAPS);
}
inline bit getbit() {
return ((R1&R1OUT) >> 18) ^ ((R2&R2OUT) >> 21) ^ ((R3&R3OUT) >> 22);
}
inline uint64 calculate_link (uint64 input, uint32 count) {
uint64 result;
int i;
/* Reduction function. */
R1 = ((input >> (22 + 23))^count) & R1MASK;
R2 = ((input >> 23)^count) & R2MASK;
R3 = (input^count) & R3MASK;
result = getbit();
for(i=1;i<64;i++) {
// Yes, virginia, we only need to clock 63 times for 64 bits of output
clock();
result = (result << 1)| getbit();
}
return result;
}
uint64 calculate_chain (uint64 input, uint32 count) {
int i;
int j = 0;
for(i=count-1; i>=0; i--) {
if((i & 0x7FFF) == 0x7FFF) {
printf("Before 0x%6.6x: 0x%16.16llx\n", i, input);
}
input = calculate_link(input, i);
}
return input;
}
int main(int argc, char* argv[]) {
int i;
uint64 current = 0;
for(i = 0; i < 10; i++) {
current = i;
printf("Calculating chain from start value 0x%16.16llx\n", current);
current = calculate_chain(current, pow(2, 21));
printf("End value: 0x%16.16llx\n", current);
}
return 0;
}

View File

@ -0,0 +1,717 @@
Computing 10 chains divided into 1 blocks of 10 threads, starting at 0x0000000000000000
Will execute 64 runs of 32768 steps each.
results[0] = 0x0000000000000000
results[1] = 0x0000000000000001
results[2] = 0x0000000000000002
results[3] = 0x0000000000000003
results[4] = 0x0000000000000004
results[5] = 0x0000000000000005
results[6] = 0x0000000000000006
results[7] = 0x0000000000000007
results[8] = 0x0000000000000008
results[9] = 0x0000000000000009
Run 001/064, starting at index 0x1fffff... 2662.287109 ms.
results[0] = 0xf86a3913f7a6fe1d
results[1] = 0x3b932e8d8e7874f9
results[2] = 0xad4e7a8cda62ff88
results[3] = 0x0941fb54cbcc88b6
results[4] = 0xd533f9846e024afa
results[5] = 0x08ce95182121319e
results[6] = 0x0071d5867bab50a9
results[7] = 0x2176f05038537afe
results[8] = 0x903fa08a52b54fae
results[9] = 0x3ab7957e3bb63f8e
Run 002/064, starting at index 0x1f7fff... 2662.290039 ms.
results[0] = 0x06c8e2628b279454
results[1] = 0xc795d5f7e0b74f43
results[2] = 0x2e368c931b5c0d38
results[3] = 0xaca66326a8e8e646
results[4] = 0x9e559f8fe3d07aac
results[5] = 0x37c633f5becc8da7
results[6] = 0xa2ccd2b60303c2bd
results[7] = 0x44dc4a96f2439c43
results[8] = 0x37a61f187afe477d
results[9] = 0x550220d9cc5fd367
Run 003/064, starting at index 0x1effff... 2662.282959 ms.
results[0] = 0x1edae43c1d2514dc
results[1] = 0x0113e9b9e9a99566
results[2] = 0x598f3761a9327c17
results[3] = 0xd0a9607e97753266
results[4] = 0xee220804b7266874
results[5] = 0x5bb130066a9729eb
results[6] = 0x8a071550a439cd90
results[7] = 0x54d2746e701d961b
results[8] = 0x36435a4743382921
results[9] = 0x7e01f144ddb17925
Run 004/064, starting at index 0x1e7fff... 2662.239990 ms.
results[0] = 0x9d0dc09bae18e7b4
results[1] = 0xa7e3644fb6dda1ee
results[2] = 0xcb3672cb94c29fef
results[3] = 0x21f996340e7b5b56
results[4] = 0xf45f38be00914661
results[5] = 0x82df8577b9a6e849
results[6] = 0x690994664330b069
results[7] = 0x151b0e7753c0ff8f
results[8] = 0xec91747262eaae89
results[9] = 0x053033e52cee9ca5
Run 005/064, starting at index 0x1dffff... 2662.287109 ms.
results[0] = 0xde8e3b8a95849386
results[1] = 0x30066fd8921a09e1
results[2] = 0x531fb03c87f92237
results[3] = 0x6baee0b564b75324
results[4] = 0xd4814e3e32d3899f
results[5] = 0xf4a494f319fa8dd6
results[6] = 0x04d19c41aa6d7a69
results[7] = 0xc5bd07e7c4918d69
results[8] = 0xa88a5d6b61592d84
results[9] = 0x1398cd680b44395d
Run 006/064, starting at index 0x1d7fff... 2662.418945 ms.
results[0] = 0x9a792143c8ddfc38
results[1] = 0x3466a07129bb39d6
results[2] = 0x4506ebfa7a629466
results[3] = 0x5ab8e5158093c74e
results[4] = 0xea3716a4f281d37e
results[5] = 0xd5d538f3bb41cc0d
results[6] = 0xf17a2a7115f0d3b8
results[7] = 0xfd8e2be2063eb97e
results[8] = 0xd26195a2c95057ab
results[9] = 0x893adf018f29be0c
Run 007/064, starting at index 0x1cffff... 2662.280029 ms.
results[0] = 0x4789bda256ee5479
results[1] = 0x369b5987ef460e2d
results[2] = 0x9dd030ad5fe4cfe7
results[3] = 0x8bf145603f5179fe
results[4] = 0xd752f521be6c7148
results[5] = 0x4844b1b92f9eb55e
results[6] = 0x76e4375ced46978a
results[7] = 0xf13503689b962866
results[8] = 0x124cbab3cfb0d1a4
results[9] = 0x3eef0736434f4dc5
Run 008/064, starting at index 0x1c7fff... 2662.277100 ms.
results[0] = 0xe673e34b3ec049b4
results[1] = 0x25e0e80d23bccaa4
results[2] = 0xc9e70df2a90d75f5
results[3] = 0xe3344c1407dd2fd8
results[4] = 0x812785bb44950cb4
results[5] = 0xbe777c056ec9a7fc
results[6] = 0xe14fa85c1ee0a88c
results[7] = 0x580c650090bd3a06
results[8] = 0xdf6b38107ec66e8d
results[9] = 0xacbcf6bd0cdcd884
Run 009/064, starting at index 0x1bffff... 2662.283936 ms.
results[0] = 0x0c04d9a6e5dafb00
results[1] = 0x4026209f57a61698
results[2] = 0x33dd4e53d67c1af4
results[3] = 0x95993eec1a900978
results[4] = 0xd2363b5734b25761
results[5] = 0x77875c8914ad4df3
results[6] = 0x485355bcbb0c35a0
results[7] = 0xc212dc66e6bcd69d
results[8] = 0x733c6d9db011f73f
results[9] = 0xe2e0af7da058c3b4
Run 010/064, starting at index 0x1b7fff... 2662.479004 ms.
results[0] = 0x6d8c5578ca5b0ed9
results[1] = 0x750925714172abc4
results[2] = 0x26365978f129e89f
results[3] = 0x85163a0fbc185558
results[4] = 0x74d54d17e57adea0
results[5] = 0x1195655ab64ea258
results[6] = 0xb5c29f836403b468
results[7] = 0x0806bf8eec1a3a02
results[8] = 0x1987371a68e7d4ed
results[9] = 0x75d955abb1d829a3
Run 011/064, starting at index 0x1affff... 2662.237061 ms.
results[0] = 0x431c105c0e2c573d
results[1] = 0xe7d0c4698a5a4a53
results[2] = 0x0882558280d62656
results[3] = 0x79c6bae1d6ba6c96
results[4] = 0x5aaf411f2b443a76
results[5] = 0xef1bdd0bdcfdc5f3
results[6] = 0xb873fad0089f82ca
results[7] = 0x8b2efd50ca3db141
results[8] = 0x0cd1ace106b05318
results[9] = 0xed931258aa4e0c4c
Run 012/064, starting at index 0x1a7fff... 2662.257080 ms.
results[0] = 0x2ebd47d7dc599d40
results[1] = 0xb4f2447883d50c91
results[2] = 0x221e2d948174c04e
results[3] = 0x5b553053e685c22c
results[4] = 0x91be8c84415b6916
results[5] = 0x73b9f18eecf85f79
results[6] = 0x17924f15ac25f0e8
results[7] = 0x9f77330cd86987e1
results[8] = 0x80bdd941d92cf422
results[9] = 0x27daa54f07138967
Run 013/064, starting at index 0x19ffff... 2662.278076 ms.
results[0] = 0x442722b786ab17a4
results[1] = 0xf9748ead71845e23
results[2] = 0x101166f3f2c2906a
results[3] = 0xa7a77816ccf78911
results[4] = 0x363711026502302d
results[5] = 0x963bd7c815090cda
results[6] = 0x8f1b9da8c8591a2d
results[7] = 0x0455b18b8ed1394e
results[8] = 0x9b2aeb0d8231581a
results[9] = 0x9bd8ebd135f7b8ff
Run 014/064, starting at index 0x197fff... 2662.278076 ms.
results[0] = 0x009efce4b1df9a0d
results[1] = 0x71ba22f94143b717
results[2] = 0xc6188f670c5c8523
results[3] = 0x6da7af35f88493f7
results[4] = 0x0ae72d1d358a576c
results[5] = 0x26ad3f46c6101f50
results[6] = 0x7ce4bdd095504c1e
results[7] = 0xd27b31aa3a127f82
results[8] = 0x08e921ad0bf30d04
results[9] = 0x618af3c1f2091429
Run 015/064, starting at index 0x18ffff... 2662.237061 ms.
results[0] = 0x0d42264a8e054714
results[1] = 0xc924cde7422c9193
results[2] = 0x4bcb1d6343d4b6ff
results[3] = 0x7fe079f84dd935dc
results[4] = 0x2d4c5b6103c76e9c
results[5] = 0x9ab5f689347c758c
results[6] = 0x5df9a6ff135ea9fb
results[7] = 0xa704584001143428
results[8] = 0x0547f3fd0068620f
results[9] = 0x9c8cd0897c5a9ce2
Run 016/064, starting at index 0x187fff... 2662.281982 ms.
results[0] = 0x0f12aa31bc33c77c
results[1] = 0x01c80661532a2195
results[2] = 0x89e32d01099dc139
results[3] = 0x629e44a90ece6fa1
results[4] = 0x4e9e8daae2c481c2
results[5] = 0xf6e2b731b35b43e0
results[6] = 0x5abd0200df85c9b8
results[7] = 0x6c2279057a3441c7
results[8] = 0xd9bcb24dd0208166
results[9] = 0x486dad8085c3d5cb
Run 017/064, starting at index 0x17ffff... 2662.263916 ms.
results[0] = 0xa58c3a57abd05233
results[1] = 0x1f13eabb0b785c7a
results[2] = 0x91e4fcbebe4a3460
results[3] = 0xc7b478524c315ddc
results[4] = 0x5ab937be093de5e6
results[5] = 0x8684bfde1876bdd9
results[6] = 0x8c4db8995cf30a14
results[7] = 0x5dc7ca43a96b53d0
results[8] = 0x803d3fc734edd1a1
results[9] = 0xe2c0044fb89e9f8c
Run 018/064, starting at index 0x177fff... 2662.283936 ms.
results[0] = 0x958746f2e2edfb64
results[1] = 0x7a7bdb3ffacf881d
results[2] = 0xbad21d46523f914d
results[3] = 0xcb0b56c8b2c7d277
results[4] = 0xeca57b21cbc1222b
results[5] = 0x9fa42f8b3ae3970d
results[6] = 0x10beda8721904789
results[7] = 0xae2330cb6eb9cb41
results[8] = 0x8a928736b0282147
results[9] = 0xdd8bc55f2bb2106d
Run 019/064, starting at index 0x16ffff... 2662.238037 ms.
results[0] = 0x9a368197a5b86b38
results[1] = 0xfa0f9ebdf81d47d4
results[2] = 0x68f28ccfdf49ab98
results[3] = 0x942e534b51337153
results[4] = 0x8f350a0811c317b2
results[5] = 0x456a6fa823d49da6
results[6] = 0xcad798cb2dc1d768
results[7] = 0xb3d486a7642f9c69
results[8] = 0x9da2fb9cb1fa8b02
results[9] = 0x0c80520e33439d03
Run 020/064, starting at index 0x167fff... 2662.281982 ms.
results[0] = 0x152c4d609f5f7652
results[1] = 0x2b6a843a2ebdab14
results[2] = 0x124e3145474f8a1a
results[3] = 0x74831c4c8beff73d
results[4] = 0x97e61ba325750343
results[5] = 0x67ef1dee2e864581
results[6] = 0x38eff5a78b6f074f
results[7] = 0xb309a2babdabd03c
results[8] = 0x9798775c080fe984
results[9] = 0xbf3f192de8930950
Run 021/064, starting at index 0x15ffff... 2662.287109 ms.
results[0] = 0xd751e0b173fbd1e0
results[1] = 0x9ab3111d647091b1
results[2] = 0x287672d6d49178d0
results[3] = 0xc4bfc15df2424d39
results[4] = 0x49c366461f6ddf47
results[5] = 0xa16b415b2e8228fa
results[6] = 0xe5e599509ddd17a9
results[7] = 0xd6fddb3cb1693741
results[8] = 0xc868157f69cf3ba0
results[9] = 0x13b01276863200be
Run 022/064, starting at index 0x157fff... 2662.288086 ms.
results[0] = 0xaa14b720785a72f2
results[1] = 0xbd0342a6a6d5495e
results[2] = 0x61818dedd3e9cdf4
results[3] = 0x062c16a328c45496
results[4] = 0x0741e9ce45d555c2
results[5] = 0x4803648d3f5e9dc1
results[6] = 0x3a7d5e031ca3db91
results[7] = 0x70c4ee533f39d296
results[8] = 0xc3f61ca8ae1fdd60
results[9] = 0x3965db9b065aa9a1
Run 023/064, starting at index 0x14ffff... 2662.468994 ms.
results[0] = 0xbabea967f2238696
results[1] = 0xae76eb1bd7625d09
results[2] = 0x0fc43f9cef954b89
results[3] = 0x7790428b51155a78
results[4] = 0x0884067f31947a06
results[5] = 0x09eceb25c4d3b26e
results[6] = 0x2067cbb814a09808
results[7] = 0xf985180006624c77
results[8] = 0x54b66353e6411084
results[9] = 0x309ba3b26a28603f
Run 024/064, starting at index 0x147fff... 2662.260986 ms.
results[0] = 0x4b020676a2952c07
results[1] = 0x283e96831534763c
results[2] = 0x7bb39b603114ea5b
results[3] = 0x7631b00003302ccf
results[4] = 0xffc9917c676709c7
results[5] = 0x98563f1a8257ed99
results[6] = 0xd0928d28a4f44c54
results[7] = 0xb9a9efd5c22bc6de
results[8] = 0xd34d795295043ec7
results[9] = 0x993fd5f8f89e6e46
Run 025/064, starting at index 0x13ffff... 2662.419922 ms.
results[0] = 0xa0bd574ce6a4c71a
results[1] = 0x15f6ddb6d7af0e23
results[2] = 0x38b3c5e438083ead
results[3] = 0x294e60a96e5b8682
results[4] = 0xb5401abe8cfe3d1b
results[5] = 0xabfa2d21ee9149d7
results[6] = 0xb0f04c0101c6d649
results[7] = 0xebbcacf720df312a
results[8] = 0xe99a010201a7fb2a
results[9] = 0x3d896f5c0663794b
Run 026/064, starting at index 0x137fff... 2662.267090 ms.
results[0] = 0x3215358436ec9e99
results[1] = 0x71f12fd7d2c51d40
results[2] = 0xf0b2de9146b0fbdd
results[3] = 0x1127ca103b8437cf
results[4] = 0xbe591f8e5672e493
results[5] = 0xb5c0da59634e53b2
results[6] = 0x413313cf45802088
results[7] = 0xe696976f81d91020
results[8] = 0x526326165d24d052
results[9] = 0xedc4c5960d1b9740
Run 027/064, starting at index 0x12ffff... 2662.288086 ms.
results[0] = 0xdb74d36c2cebaa7d
results[1] = 0x7eb90ba1dc2f2d9a
results[2] = 0xb35dfb423d70e76f
results[3] = 0xf727c54fda50fdd8
results[4] = 0x28414a89f572cad5
results[5] = 0x560e86d786ae7dfd
results[6] = 0xcadf6b4201127812
results[7] = 0x335ad260941ebf06
results[8] = 0x8bae4958dcf7065e
results[9] = 0xb17f729890190924
Run 028/064, starting at index 0x127fff... 2662.475098 ms.
results[0] = 0xad230dd4433eb3c3
results[1] = 0xa02808cf11c37991
results[2] = 0x879ac083c7a3cd39
results[3] = 0x30cc19e3baf047dd
results[4] = 0x5ece631956ef02d4
results[5] = 0xb942a83d8fa065b8
results[6] = 0x9a7410426a6bf18c
results[7] = 0xf88d12d1d4fb4c55
results[8] = 0x235d05530634bb61
results[9] = 0xd325062b37d20453
Run 029/064, starting at index 0x11ffff... 2662.294922 ms.
results[0] = 0x2d30c2b772f07cf0
results[1] = 0x468661c0d8183091
results[2] = 0x654ee9e44da4a62d
results[3] = 0x1e4158ef14faacda
results[4] = 0x613e2ced3718deb6
results[5] = 0xebd086ef7ce2dc86
results[6] = 0x05fe150301395cf7
results[7] = 0x99435225b5541a88
results[8] = 0x842e49b596323bdb
results[9] = 0xbbaaf3d7a867b640
Run 030/064, starting at index 0x117fff... 2662.240967 ms.
results[0] = 0x5c97568216a22d02
results[1] = 0x14bc8421553ac318
results[2] = 0xf840f89db83f784a
results[3] = 0xe57ac8cd31b1d3a7
results[4] = 0x4650d66d9e2d8879
results[5] = 0x3abe2fc6e4c5c73a
results[6] = 0x4261ecef0bf4edb8
results[7] = 0x25fcb5a7a8c22443
results[8] = 0x6fa81edb6ca7dd26
results[9] = 0x0c919103ee8908a5
Run 031/064, starting at index 0x10ffff... 2662.279053 ms.
results[0] = 0x5ee59393ff0d1f24
results[1] = 0x92ceeec6e42e9397
results[2] = 0x9e57d0bf16e88244
results[3] = 0x90fbaf6931902914
results[4] = 0x6a584e0c7e911599
results[5] = 0xaa3652b2ce38c209
results[6] = 0x593d8d600860c57c
results[7] = 0xd680f97fc1559840
results[8] = 0x796f69974e245ae4
results[9] = 0xdc6aea77946490df
Run 032/064, starting at index 0x107fff... 2662.278076 ms.
results[0] = 0xce8eb17338956d0b
results[1] = 0x484f0c10f4eaec49
results[2] = 0xd98aa866b0e8a5f0
results[3] = 0xdac6f3d9788853a4
results[4] = 0x12aba364208f2bbf
results[5] = 0xf40dc5fec3961769
results[6] = 0x1ef8ca7d7dee4661
results[7] = 0x5637d9bcb5798054
results[8] = 0xd95f07de3fb9a196
results[9] = 0x196c7a3eb65a6482
Run 033/064, starting at index 0x0fffff... 2662.279053 ms.
results[0] = 0x4f4b501eb70a2d56
results[1] = 0x266ab5d62bac21eb
results[2] = 0xf4f365c88d874e6d
results[3] = 0xb8f4ecbc1e30fba4
results[4] = 0x6fa654fa8349caa5
results[5] = 0x90be139af90a7c7f
results[6] = 0x63d58d1348fe7cb9
results[7] = 0xaca293cc0374a4bd
results[8] = 0xb009676f5c977200
results[9] = 0x4e9eaff71b48ad8b
Run 034/064, starting at index 0x0f7fff... 2662.236084 ms.
results[0] = 0x8158c2aabc055783
results[1] = 0x243ef3a2a06ceb50
results[2] = 0xe6ca244277a1aeb8
results[3] = 0xc06b54774988d4ec
results[4] = 0x84e15ac76fc73ae7
results[5] = 0x97555fa7d3bd2da4
results[6] = 0x92df803a0cd5d7e2
results[7] = 0x83e4626481f8b5b2
results[8] = 0xc1c0402c5f3f96db
results[9] = 0xffca8ee3247ea439
Run 035/064, starting at index 0x0effff... 2662.288086 ms.
results[0] = 0x414b0e9f2866f8a5
results[1] = 0x54b825a8d17b04c0
results[2] = 0x07a3f89d49baddb5
results[3] = 0xc2f42437c763783f
results[4] = 0x23ef2d25214e703b
results[5] = 0xcb28727140e5263d
results[6] = 0x17e6d53bf2fd8cfa
results[7] = 0xd7f2fd8a213be599
results[8] = 0x1c5034df6445ed5e
results[9] = 0x4a6650254f5f47f3
Run 036/064, starting at index 0x0e7fff... 2662.294922 ms.
results[0] = 0x7a2e5e3f1cf35b7f
results[1] = 0x3fde742c7fef8823
results[2] = 0x9f4acf84cd57f9ef
results[3] = 0x6fee4eb0d109ab48
results[4] = 0xf3b3ca3f2dd5d4cc
results[5] = 0x99a989a8fe494396
results[6] = 0x5db7886f83bfa1d6
results[7] = 0x294b460e1349c17e
results[8] = 0xdc316ec62aeed3b0
results[9] = 0xdcfd395fd2d46033
Run 037/064, starting at index 0x0dffff... 2662.285889 ms.
results[0] = 0xac0ccb6f06d75169
results[1] = 0x012e908519257924
results[2] = 0x740fe275ac878254
results[3] = 0x68dbd5f5509a31c4
results[4] = 0xe695c67f98abcb3c
results[5] = 0xa8ff6ffe3fa46787
results[6] = 0x83087aad942a917c
results[7] = 0x10cf2bbc195d461b
results[8] = 0x21ae9cb12af383ec
results[9] = 0x99939e0f7e6149fe
Run 038/064, starting at index 0x0d7fff... 2662.237061 ms.
results[0] = 0xab1f220a15a81ca1
results[1] = 0x3f900a4f4fb0d4f3
results[2] = 0x650c56f7ebde254e
results[3] = 0x3aa2dcfe96e57eb6
results[4] = 0xaf55ddf3f47a8620
results[5] = 0xa9403c1e335cf40c
results[6] = 0xf34a7c7c5ac44109
results[7] = 0x1c358e2bf242b65d
results[8] = 0xbbcd547fdef56104
results[9] = 0x1c488ae1d1ad732f
Run 039/064, starting at index 0x0cffff... 2662.289062 ms.
results[0] = 0xa7376383d7ea1c53
results[1] = 0x922ea52e8d702443
results[2] = 0x9bcc28578870b80e
results[3] = 0x719b02f71c458022
results[4] = 0x99e380ba05f007b3
results[5] = 0x0122066cccf800b7
results[6] = 0xe3311e362e2ff65c
results[7] = 0xdcf4c25f341d02d3
results[8] = 0xdd665962c6b4b05c
results[9] = 0x82007a5123e56f6d
Run 040/064, starting at index 0x0c7fff... 2662.245117 ms.
results[0] = 0x930aab10528e011a
results[1] = 0xcab4ab331175291d
results[2] = 0x6a548c9df034c95a
results[3] = 0x503e4d0d8db6ab48
results[4] = 0xb6aee29527590315
results[5] = 0x0753e778f036c74d
results[6] = 0xda34b33e0502470c
results[7] = 0x67f6ac59b70822d1
results[8] = 0xeb2819fca0d0b12a
results[9] = 0x3ff4576486969bac
Run 041/064, starting at index 0x0bffff... 2662.297119 ms.
results[0] = 0xfeb930d5de2a9301
results[1] = 0x7c52692499aa9d9e
results[2] = 0xdf25a8b3997999cb
results[3] = 0x6ecbe9d3fdc65366
results[4] = 0xccc92936d9211774
results[5] = 0x374aec65737a4b52
results[6] = 0x8abee7b9e1658b43
results[7] = 0x854b61c7193a1427
results[8] = 0xe9ce7a2bfe13de36
results[9] = 0x08dae5640dc70f8e
Run 042/064, starting at index 0x0b7fff... 2662.283936 ms.
results[0] = 0xef4836464ed8ffcf
results[1] = 0xb54d7122c71f1ce5
results[2] = 0x6503ce9e282bfe49
results[3] = 0xeaa981a1b1de3f45
results[4] = 0xf749b6b700d4df15
results[5] = 0xe2543a962e7cda60
results[6] = 0x07e4b4901eec6163
results[7] = 0xe42a64b937a7594a
results[8] = 0xb7758ddb5231fff5
results[9] = 0xc577d889f3fd3c5f
Run 043/064, starting at index 0x0affff... 2662.272949 ms.
results[0] = 0x088460b3fc8ffdc8
results[1] = 0x66ee48ffc8ab48cf
results[2] = 0xddc9b9198b008093
results[3] = 0x62c7e089708c1835
results[4] = 0xad2266e01e60c036
results[5] = 0x91e283710b651ceb
results[6] = 0x7d9f5985852f5c2c
results[7] = 0xcef62b2eb9424ee5
results[8] = 0x8693f31f6d1e22b9
results[9] = 0xd3eae85053a474e4
Run 044/064, starting at index 0x0a7fff... 2662.268066 ms.
results[0] = 0x9416e5b668a1bc79
results[1] = 0x3c257f6c56dd59e1
results[2] = 0xfbd461fcc443e864
results[3] = 0xe9ee16991dd52b5c
results[4] = 0x3742a2c573292a68
results[5] = 0x1f2617ec0ec361a2
results[6] = 0xb0a3637cda32d818
results[7] = 0xf3fc170b6f3a8aa2
results[8] = 0x4ba3e092428a8f55
results[9] = 0x5e48da793238f3a5
Run 045/064, starting at index 0x09ffff... 2662.284912 ms.
results[0] = 0x6eb302deaa1289b6
results[1] = 0x11fa39d2e4d5bb0d
results[2] = 0xe790e0e71bbbb8ed
results[3] = 0xc8ba72dd58d3b344
results[4] = 0x3bf99c1db1920acb
results[5] = 0x4548e08578918080
results[6] = 0xfb2120e3313aeb3c
results[7] = 0xe49ec1266dd9bea0
results[8] = 0xbad525f3cecf83fa
results[9] = 0x3c9f6bda4828d0a0
Run 046/064, starting at index 0x097fff... 2662.472900 ms.
results[0] = 0x55201f5cb02341b7
results[1] = 0x199446b47eca05e4
results[2] = 0x6e5b36817ec1cb7f
results[3] = 0x55643a74e927b308
results[4] = 0xe353dea2c655d168
results[5] = 0x44a5c2fbd691e6a3
results[6] = 0x9e46715bf3bbfea7
results[7] = 0xa8a0173532fc7db7
results[8] = 0xbf84caad86c9da1c
results[9] = 0xb0921e0d9c513786
Run 047/064, starting at index 0x08ffff... 2662.277100 ms.
results[0] = 0x877f7f2b828e36bd
results[1] = 0xfe25e99c8408b1f2
results[2] = 0x3756231209b0b506
results[3] = 0x2bc6c92d902f8606
results[4] = 0xed0d8199420aa2dd
results[5] = 0x8dacc43ffd445b68
results[6] = 0x196ed232fbf03a6c
results[7] = 0x142e9c377f296d4c
results[8] = 0xfebb793e55799d80
results[9] = 0x77ec08388a99c3db
Run 048/064, starting at index 0x087fff... 2662.237061 ms.
results[0] = 0x011f7de977460441
results[1] = 0x441e1d85acef45c3
results[2] = 0xf0b6e4e19565e0f3
results[3] = 0x0bc80944f617fa7f
results[4] = 0xefb2c502890c5130
results[5] = 0x82de41ea486db991
results[6] = 0xf0d78812e966b54c
results[7] = 0x0907d6d1c25bc8d1
results[8] = 0x62326c17f06945c9
results[9] = 0x139bc23aaa774dd3
Run 049/064, starting at index 0x07ffff... 2662.271973 ms.
results[0] = 0x1578cd47a06e9675
results[1] = 0xcb8b058681f8521c
results[2] = 0x3988b98c1ea1116d
results[3] = 0xcb6a3840170792ab
results[4] = 0x7d3b2dd56405cfb2
results[5] = 0x1224dd8871bd0b36
results[6] = 0xd4ed9d2b84c70289
results[7] = 0x4f984f8417b9e9db
results[8] = 0xda07f9a0ce4dfe1c
results[9] = 0xeb0748caa39f477e
Run 050/064, starting at index 0x077fff... 2662.288086 ms.
results[0] = 0xa813ea9f8e8a583f
results[1] = 0x18c3fec356c29461
results[2] = 0xb32075991342b37b
results[3] = 0xb0df12c1eeeb987f
results[4] = 0x6f44cac155b7db6c
results[5] = 0xf9c5849824ce889c
results[6] = 0x79829012d4e7ea68
results[7] = 0xd90faea06a21ca10
results[8] = 0xb09881de63c5f422
results[9] = 0x0ac83cc9cbbe4131
Run 051/064, starting at index 0x06ffff... 2662.285889 ms.
results[0] = 0x69f6b3be7fa98cc7
results[1] = 0xe0b22f3f10c89d24
results[2] = 0x7194c0ad02e4099b
results[3] = 0x2750bad0213f846c
results[4] = 0x95dc27b2ab007a4b
results[5] = 0x92c0329da2787cfa
results[6] = 0xac99450e7c89d616
results[7] = 0x82bd03d6977bd670
results[8] = 0xd1cf937ac4ecb69a
results[9] = 0x3ec5eec4f08de300
Run 052/064, starting at index 0x067fff... 2662.285889 ms.
results[0] = 0x8aa69f6fce2e97f4
results[1] = 0x56147e351eba5c16
results[2] = 0x2e7138de6aff08fa
results[3] = 0xca627fe5f8dadf05
results[4] = 0x2030909b05587d84
results[5] = 0x3949479a596f36d9
results[6] = 0x34d37d44c67188c6
results[7] = 0x74a0e1a0a19cf825
results[8] = 0x36572b778abdfcb0
results[9] = 0x0caf3e33fdea55a9
Run 053/064, starting at index 0x05ffff... 2662.241943 ms.
results[0] = 0x848af474c7f1bfb7
results[1] = 0x28b34b78ef8c06b8
results[2] = 0x6db53cb6d7d4520a
results[3] = 0x86b8e3054ff06d7d
results[4] = 0x6b0787c6f73312bc
results[5] = 0x11d7570f0b6f7a9f
results[6] = 0xbece8197c19f847e
results[7] = 0xfa96f3d6589e376b
results[8] = 0x1e22877f28e0c16e
results[9] = 0x62d826dec0217a3f
Run 054/064, starting at index 0x057fff... 2662.292969 ms.
results[0] = 0xfb479eff3d98bffc
results[1] = 0x8828a821fd98fe08
results[2] = 0xad55cc4007163324
results[3] = 0xda3a33dfbeafa504
results[4] = 0x8d8aee604767cf44
results[5] = 0xf1a5da4a161350cf
results[6] = 0x646012def196d0d9
results[7] = 0x5b7c1769427643b3
results[8] = 0xb390bed32f6aa879
results[9] = 0xfba9fe789321059b
Run 055/064, starting at index 0x04ffff... 2662.281982 ms.
results[0] = 0x9b397e51c8083aa4
results[1] = 0xdf1469b465f983e0
results[2] = 0x8088b59faa3aa8ba
results[3] = 0x9b8157f00fed8f9a
results[4] = 0xa71b223c90979b1a
results[5] = 0xb29d02c5fc213ec9
results[6] = 0x883b73c818fc651a
results[7] = 0x9c6ae6fbcc9387a6
results[8] = 0x6df3d508f57c5228
results[9] = 0x60582c02f1745b1e
Run 056/064, starting at index 0x047fff... 2662.282959 ms.
results[0] = 0x95c58974aa102d3c
results[1] = 0xdaea3be25fd46e51
results[2] = 0x76ab896adfe4cc18
results[3] = 0xbb0a17f45403ef1d
results[4] = 0x5018dce8604ba2b7
results[5] = 0x8e91e195edfa64a0
results[6] = 0x4eb0aa5fc3db4c1f
results[7] = 0xb11fbccfe3bc8efd
results[8] = 0x973ac71e92d1fc65
results[9] = 0xf7916af0ee9cec05
Run 057/064, starting at index 0x03ffff... 2662.238037 ms.
results[0] = 0xabb8a84fbc0a4212
results[1] = 0xfbe65c1e91d58a20
results[2] = 0x94116806368c9327
results[3] = 0xf887708590624c87
results[4] = 0xf1db03f9cb5b9231
results[5] = 0x5979e977435822b2
results[6] = 0x03bd9a865e630a8f
results[7] = 0x5acddf735df7d501
results[8] = 0xc0b4c6232c898a2b
results[9] = 0x5eb1fbe551f52c5d
Run 058/064, starting at index 0x037fff... 2662.236084 ms.
results[0] = 0xbc0a0514be09405f
results[1] = 0xa055cdd9814fdc92
results[2] = 0x71dca901aae86df7
results[3] = 0xfdd3e2a3b3952dbb
results[4] = 0x58a7f350420221a9
results[5] = 0x7be3af4bc9b4d7ab
results[6] = 0x22fc3cd7de26dd0f
results[7] = 0xdeea274b5b76fa2c
results[8] = 0x85499beb34bb32b1
results[9] = 0x5980d282431987db
Run 059/064, starting at index 0x02ffff... 2662.285889 ms.
results[0] = 0xef5fedd9f75764e9
results[1] = 0xbc4a64b9d5839355
results[2] = 0xe0f45a28639df0b9
results[3] = 0x10f4ee62a79e13da
results[4] = 0x5701d9dcaa8007aa
results[5] = 0x816d3ddcd4ec223a
results[6] = 0x9316a519b3182765
results[7] = 0x7f6b6af222d70cf2
results[8] = 0x8b3cdbca2af87fbc
results[9] = 0x549eda30518c1835
Run 060/064, starting at index 0x027fff... 2662.284912 ms.
results[0] = 0xcbc201b7b21197fd
results[1] = 0xb0fc06822d7716d1
results[2] = 0x65908f94d9209467
results[3] = 0x5c35f425c909fc03
results[4] = 0x01e833a48598d934
results[5] = 0x9d8d02fdc8718234
results[6] = 0x331b31b733ea7c41
results[7] = 0x9f621b8bf8d58ffe
results[8] = 0x610fe7ce5b7a1808
results[9] = 0xa98271a10ec7cbd4
Run 061/064, starting at index 0x01ffff... 2662.258057 ms.
results[0] = 0xc220feb527c8a4c2
results[1] = 0x4d17033ab28c56fb
results[2] = 0x8e0626c6ecfef53b
results[3] = 0xe9eefb03fd9ca7d0
results[4] = 0x10896a774d304b04
results[5] = 0xf195c0c98bae98e6
results[6] = 0x14827e0542db9e05
results[7] = 0xbf03f81d89483091
results[8] = 0x5b0fb98f940c6c0e
results[9] = 0x24f84f1ed182cef3
Run 062/064, starting at index 0x017fff... 2662.270020 ms.
results[0] = 0x6a8de46a0f034d0c
results[1] = 0x79395dd5911ed402
results[2] = 0x70f6e5fd45d594fb
results[3] = 0x17b91f12d11da6be
results[4] = 0x8e6c473c9d77a33e
results[5] = 0xdc1fa8c93d28bb0f
results[6] = 0xdde91c128133dc21
results[7] = 0x8c3517e924639409
results[8] = 0x057d6e8119b4b20a
results[9] = 0xb193debe9e2f8a34
Run 063/064, starting at index 0x00ffff... 2662.395996 ms.
results[0] = 0x7bbbf41154a3a0dd
results[1] = 0xb92608177e4841c8
results[2] = 0xab96059ef3d86887
results[3] = 0xabbfd04efafb471c
results[4] = 0x98e1a89a2e71e96a
results[5] = 0x21ee4cefb852c9c7
results[6] = 0x790249ccbb376f5e
results[7] = 0xc4f2f004196ce26d
results[8] = 0xe38e2c5620ba48b6
results[9] = 0x2e569f7f8bae5a05
Run 064/064, starting at index 0x007fff... 2662.293945 ms.
results[0] = 0x6d14a53d7fe0574c
results[1] = 0x635809b0850c5594
results[2] = 0x55085ccd8357a140
results[3] = 0x808608202d55b473
results[4] = 0x905ddf13110ca25a
results[5] = 0xcbbe903d8847444e
results[6] = 0xb32dcd0ee320992f
results[7] = 0x38087d640fea5c81
results[8] = 0xdbd57f6ee98bb3ad
results[9] = 0xd688814759e2afec
Total time: 202394.093750 ms, 170386.655762 spent crunching

View File

@ -0,0 +1,660 @@
Calculating chain from start value 0x0000000000000000
Before 0x1fffff: 0x0000000000000000
Before 0x1f7fff: 0xf86a3913f7a6fe1d
Before 0x1effff: 0x06c8e2628b279454
Before 0x1e7fff: 0x1edae43c1d2514dc
Before 0x1dffff: 0x9d0dc09bae18e7b4
Before 0x1d7fff: 0xde8e3b8a95849386
Before 0x1cffff: 0x9a792143c8ddfc38
Before 0x1c7fff: 0x4789bda256ee5479
Before 0x1bffff: 0xe673e34b3ec049b4
Before 0x1b7fff: 0x0c04d9a6e5dafb00
Before 0x1affff: 0x6d8c5578ca5b0ed9
Before 0x1a7fff: 0x431c105c0e2c573d
Before 0x19ffff: 0x2ebd47d7dc599d40
Before 0x197fff: 0x442722b786ab17a4
Before 0x18ffff: 0x009efce4b1df9a0d
Before 0x187fff: 0x0d42264a8e054714
Before 0x17ffff: 0x0f12aa31bc33c77c
Before 0x177fff: 0xa58c3a57abd05233
Before 0x16ffff: 0x958746f2e2edfb64
Before 0x167fff: 0x9a368197a5b86b38
Before 0x15ffff: 0x152c4d609f5f7652
Before 0x157fff: 0xd751e0b173fbd1e0
Before 0x14ffff: 0xaa14b720785a72f2
Before 0x147fff: 0xbabea967f2238696
Before 0x13ffff: 0x4b020676a2952c07
Before 0x137fff: 0xa0bd574ce6a4c71a
Before 0x12ffff: 0x3215358436ec9e99
Before 0x127fff: 0xdb74d36c2cebaa7d
Before 0x11ffff: 0xad230dd4433eb3c3
Before 0x117fff: 0x2d30c2b772f07cf0
Before 0x10ffff: 0x5c97568216a22d02
Before 0x107fff: 0x5ee59393ff0d1f24
Before 0x0fffff: 0xce8eb17338956d0b
Before 0x0f7fff: 0x4f4b501eb70a2d56
Before 0x0effff: 0x8158c2aabc055783
Before 0x0e7fff: 0x414b0e9f2866f8a5
Before 0x0dffff: 0x7a2e5e3f1cf35b7f
Before 0x0d7fff: 0xac0ccb6f06d75169
Before 0x0cffff: 0xab1f220a15a81ca1
Before 0x0c7fff: 0xa7376383d7ea1c53
Before 0x0bffff: 0x930aab10528e011a
Before 0x0b7fff: 0xfeb930d5de2a9301
Before 0x0affff: 0xef4836464ed8ffcf
Before 0x0a7fff: 0x088460b3fc8ffdc8
Before 0x09ffff: 0x9416e5b668a1bc79
Before 0x097fff: 0x6eb302deaa1289b6
Before 0x08ffff: 0x55201f5cb02341b7
Before 0x087fff: 0x877f7f2b828e36bd
Before 0x07ffff: 0x011f7de977460441
Before 0x077fff: 0x1578cd47a06e9675
Before 0x06ffff: 0xa813ea9f8e8a583f
Before 0x067fff: 0x69f6b3be7fa98cc7
Before 0x05ffff: 0x8aa69f6fce2e97f4
Before 0x057fff: 0x848af474c7f1bfb7
Before 0x04ffff: 0xfb479eff3d98bffc
Before 0x047fff: 0x9b397e51c8083aa4
Before 0x03ffff: 0x95c58974aa102d3c
Before 0x037fff: 0xabb8a84fbc0a4212
Before 0x02ffff: 0xbc0a0514be09405f
Before 0x027fff: 0xef5fedd9f75764e9
Before 0x01ffff: 0xcbc201b7b21197fd
Before 0x017fff: 0xc220feb527c8a4c2
Before 0x00ffff: 0x6a8de46a0f034d0c
Before 0x007fff: 0x7bbbf41154a3a0dd
End value: 0x6d14a53d7fe0574c
Calculating chain from start value 0x0000000000000001
Before 0x1fffff: 0x0000000000000001
Before 0x1f7fff: 0x3b932e8d8e7874f9
Before 0x1effff: 0xc795d5f7e0b74f43
Before 0x1e7fff: 0x0113e9b9e9a99566
Before 0x1dffff: 0xa7e3644fb6dda1ee
Before 0x1d7fff: 0x30066fd8921a09e1
Before 0x1cffff: 0x3466a07129bb39d6
Before 0x1c7fff: 0x369b5987ef460e2d
Before 0x1bffff: 0x25e0e80d23bccaa4
Before 0x1b7fff: 0x4026209f57a61698
Before 0x1affff: 0x750925714172abc4
Before 0x1a7fff: 0xe7d0c4698a5a4a53
Before 0x19ffff: 0xb4f2447883d50c91
Before 0x197fff: 0xf9748ead71845e23
Before 0x18ffff: 0x71ba22f94143b717
Before 0x187fff: 0xc924cde7422c9193
Before 0x17ffff: 0x01c80661532a2195
Before 0x177fff: 0x1f13eabb0b785c7a
Before 0x16ffff: 0x7a7bdb3ffacf881d
Before 0x167fff: 0xfa0f9ebdf81d47d4
Before 0x15ffff: 0x2b6a843a2ebdab14
Before 0x157fff: 0x9ab3111d647091b1
Before 0x14ffff: 0xbd0342a6a6d5495e
Before 0x147fff: 0xae76eb1bd7625d09
Before 0x13ffff: 0x283e96831534763c
Before 0x137fff: 0x15f6ddb6d7af0e23
Before 0x12ffff: 0x71f12fd7d2c51d40
Before 0x127fff: 0x7eb90ba1dc2f2d9a
Before 0x11ffff: 0xa02808cf11c37991
Before 0x117fff: 0x468661c0d8183091
Before 0x10ffff: 0x14bc8421553ac318
Before 0x107fff: 0x92ceeec6e42e9397
Before 0x0fffff: 0x484f0c10f4eaec49
Before 0x0f7fff: 0x266ab5d62bac21eb
Before 0x0effff: 0x243ef3a2a06ceb50
Before 0x0e7fff: 0x54b825a8d17b04c0
Before 0x0dffff: 0x3fde742c7fef8823
Before 0x0d7fff: 0x012e908519257924
Before 0x0cffff: 0x3f900a4f4fb0d4f3
Before 0x0c7fff: 0x922ea52e8d702443
Before 0x0bffff: 0xcab4ab331175291d
Before 0x0b7fff: 0x7c52692499aa9d9e
Before 0x0affff: 0xb54d7122c71f1ce5
Before 0x0a7fff: 0x66ee48ffc8ab48cf
Before 0x09ffff: 0x3c257f6c56dd59e1
Before 0x097fff: 0x11fa39d2e4d5bb0d
Before 0x08ffff: 0x199446b47eca05e4
Before 0x087fff: 0xfe25e99c8408b1f2
Before 0x07ffff: 0x441e1d85acef45c3
Before 0x077fff: 0xcb8b058681f8521c
Before 0x06ffff: 0x18c3fec356c29461
Before 0x067fff: 0xe0b22f3f10c89d24
Before 0x05ffff: 0x56147e351eba5c16
Before 0x057fff: 0x28b34b78ef8c06b8
Before 0x04ffff: 0x8828a821fd98fe08
Before 0x047fff: 0xdf1469b465f983e0
Before 0x03ffff: 0xdaea3be25fd46e51
Before 0x037fff: 0xfbe65c1e91d58a20
Before 0x02ffff: 0xa055cdd9814fdc92
Before 0x027fff: 0xbc4a64b9d5839355
Before 0x01ffff: 0xb0fc06822d7716d1
Before 0x017fff: 0x4d17033ab28c56fb
Before 0x00ffff: 0x79395dd5911ed402
Before 0x007fff: 0xb92608177e4841c8
End value: 0x635809b0850c5594
Calculating chain from start value 0x0000000000000002
Before 0x1fffff: 0x0000000000000002
Before 0x1f7fff: 0xad4e7a8cda62ff88
Before 0x1effff: 0x2e368c931b5c0d38
Before 0x1e7fff: 0x598f3761a9327c17
Before 0x1dffff: 0xcb3672cb94c29fef
Before 0x1d7fff: 0x531fb03c87f92237
Before 0x1cffff: 0x4506ebfa7a629466
Before 0x1c7fff: 0x9dd030ad5fe4cfe7
Before 0x1bffff: 0xc9e70df2a90d75f5
Before 0x1b7fff: 0x33dd4e53d67c1af4
Before 0x1affff: 0x26365978f129e89f
Before 0x1a7fff: 0x0882558280d62656
Before 0x19ffff: 0x221e2d948174c04e
Before 0x197fff: 0x101166f3f2c2906a
Before 0x18ffff: 0xc6188f670c5c8523
Before 0x187fff: 0x4bcb1d6343d4b6ff
Before 0x17ffff: 0x89e32d01099dc139
Before 0x177fff: 0x91e4fcbebe4a3460
Before 0x16ffff: 0xbad21d46523f914d
Before 0x167fff: 0x68f28ccfdf49ab98
Before 0x15ffff: 0x124e3145474f8a1a
Before 0x157fff: 0x287672d6d49178d0
Before 0x14ffff: 0x61818dedd3e9cdf4
Before 0x147fff: 0x0fc43f9cef954b89
Before 0x13ffff: 0x7bb39b603114ea5b
Before 0x137fff: 0x38b3c5e438083ead
Before 0x12ffff: 0xf0b2de9146b0fbdd
Before 0x127fff: 0xb35dfb423d70e76f
Before 0x11ffff: 0x879ac083c7a3cd39
Before 0x117fff: 0x654ee9e44da4a62d
Before 0x10ffff: 0xf840f89db83f784a
Before 0x107fff: 0x9e57d0bf16e88244
Before 0x0fffff: 0xd98aa866b0e8a5f0
Before 0x0f7fff: 0xf4f365c88d874e6d
Before 0x0effff: 0xe6ca244277a1aeb8
Before 0x0e7fff: 0x07a3f89d49baddb5
Before 0x0dffff: 0x9f4acf84cd57f9ef
Before 0x0d7fff: 0x740fe275ac878254
Before 0x0cffff: 0x650c56f7ebde254e
Before 0x0c7fff: 0x9bcc28578870b80e
Before 0x0bffff: 0x6a548c9df034c95a
Before 0x0b7fff: 0xdf25a8b3997999cb
Before 0x0affff: 0x6503ce9e282bfe49
Before 0x0a7fff: 0xddc9b9198b008093
Before 0x09ffff: 0xfbd461fcc443e864
Before 0x097fff: 0xe790e0e71bbbb8ed
Before 0x08ffff: 0x6e5b36817ec1cb7f
Before 0x087fff: 0x3756231209b0b506
Before 0x07ffff: 0xf0b6e4e19565e0f3
Before 0x077fff: 0x3988b98c1ea1116d
Before 0x06ffff: 0xb32075991342b37b
Before 0x067fff: 0x7194c0ad02e4099b
Before 0x05ffff: 0x2e7138de6aff08fa
Before 0x057fff: 0x6db53cb6d7d4520a
Before 0x04ffff: 0xad55cc4007163324
Before 0x047fff: 0x8088b59faa3aa8ba
Before 0x03ffff: 0x76ab896adfe4cc18
Before 0x037fff: 0x94116806368c9327
Before 0x02ffff: 0x71dca901aae86df7
Before 0x027fff: 0xe0f45a28639df0b9
Before 0x01ffff: 0x65908f94d9209467
Before 0x017fff: 0x8e0626c6ecfef53b
Before 0x00ffff: 0x70f6e5fd45d594fb
Before 0x007fff: 0xab96059ef3d86887
End value: 0x55085ccd8357a140
Calculating chain from start value 0x0000000000000003
Before 0x1fffff: 0x0000000000000003
Before 0x1f7fff: 0x0941fb54cbcc88b6
Before 0x1effff: 0xaca66326a8e8e646
Before 0x1e7fff: 0xd0a9607e97753266
Before 0x1dffff: 0x21f996340e7b5b56
Before 0x1d7fff: 0x6baee0b564b75324
Before 0x1cffff: 0x5ab8e5158093c74e
Before 0x1c7fff: 0x8bf145603f5179fe
Before 0x1bffff: 0xe3344c1407dd2fd8
Before 0x1b7fff: 0x95993eec1a900978
Before 0x1affff: 0x85163a0fbc185558
Before 0x1a7fff: 0x79c6bae1d6ba6c96
Before 0x19ffff: 0x5b553053e685c22c
Before 0x197fff: 0xa7a77816ccf78911
Before 0x18ffff: 0x6da7af35f88493f7
Before 0x187fff: 0x7fe079f84dd935dc
Before 0x17ffff: 0x629e44a90ece6fa1
Before 0x177fff: 0xc7b478524c315ddc
Before 0x16ffff: 0xcb0b56c8b2c7d277
Before 0x167fff: 0x942e534b51337153
Before 0x15ffff: 0x74831c4c8beff73d
Before 0x157fff: 0xc4bfc15df2424d39
Before 0x14ffff: 0x062c16a328c45496
Before 0x147fff: 0x7790428b51155a78
Before 0x13ffff: 0x7631b00003302ccf
Before 0x137fff: 0x294e60a96e5b8682
Before 0x12ffff: 0x1127ca103b8437cf
Before 0x127fff: 0xf727c54fda50fdd8
Before 0x11ffff: 0x30cc19e3baf047dd
Before 0x117fff: 0x1e4158ef14faacda
Before 0x10ffff: 0xe57ac8cd31b1d3a7
Before 0x107fff: 0x90fbaf6931902914
Before 0x0fffff: 0xdac6f3d9788853a4
Before 0x0f7fff: 0xb8f4ecbc1e30fba4
Before 0x0effff: 0xc06b54774988d4ec
Before 0x0e7fff: 0xc2f42437c763783f
Before 0x0dffff: 0x6fee4eb0d109ab48
Before 0x0d7fff: 0x68dbd5f5509a31c4
Before 0x0cffff: 0x3aa2dcfe96e57eb6
Before 0x0c7fff: 0x719b02f71c458022
Before 0x0bffff: 0x503e4d0d8db6ab48
Before 0x0b7fff: 0x6ecbe9d3fdc65366
Before 0x0affff: 0xeaa981a1b1de3f45
Before 0x0a7fff: 0x62c7e089708c1835
Before 0x09ffff: 0xe9ee16991dd52b5c
Before 0x097fff: 0xc8ba72dd58d3b344
Before 0x08ffff: 0x55643a74e927b308
Before 0x087fff: 0x2bc6c92d902f8606
Before 0x07ffff: 0x0bc80944f617fa7f
Before 0x077fff: 0xcb6a3840170792ab
Before 0x06ffff: 0xb0df12c1eeeb987f
Before 0x067fff: 0x2750bad0213f846c
Before 0x05ffff: 0xca627fe5f8dadf05
Before 0x057fff: 0x86b8e3054ff06d7d
Before 0x04ffff: 0xda3a33dfbeafa504
Before 0x047fff: 0x9b8157f00fed8f9a
Before 0x03ffff: 0xbb0a17f45403ef1d
Before 0x037fff: 0xf887708590624c87
Before 0x02ffff: 0xfdd3e2a3b3952dbb
Before 0x027fff: 0x10f4ee62a79e13da
Before 0x01ffff: 0x5c35f425c909fc03
Before 0x017fff: 0xe9eefb03fd9ca7d0
Before 0x00ffff: 0x17b91f12d11da6be
Before 0x007fff: 0xabbfd04efafb471c
End value: 0x808608202d55b473
Calculating chain from start value 0x0000000000000004
Before 0x1fffff: 0x0000000000000004
Before 0x1f7fff: 0xd533f9846e024afa
Before 0x1effff: 0x9e559f8fe3d07aac
Before 0x1e7fff: 0xee220804b7266874
Before 0x1dffff: 0xf45f38be00914661
Before 0x1d7fff: 0xd4814e3e32d3899f
Before 0x1cffff: 0xea3716a4f281d37e
Before 0x1c7fff: 0xd752f521be6c7148
Before 0x1bffff: 0x812785bb44950cb4
Before 0x1b7fff: 0xd2363b5734b25761
Before 0x1affff: 0x74d54d17e57adea0
Before 0x1a7fff: 0x5aaf411f2b443a76
Before 0x19ffff: 0x91be8c84415b6916
Before 0x197fff: 0x363711026502302d
Before 0x18ffff: 0x0ae72d1d358a576c
Before 0x187fff: 0x2d4c5b6103c76e9c
Before 0x17ffff: 0x4e9e8daae2c481c2
Before 0x177fff: 0x5ab937be093de5e6
Before 0x16ffff: 0xeca57b21cbc1222b
Before 0x167fff: 0x8f350a0811c317b2
Before 0x15ffff: 0x97e61ba325750343
Before 0x157fff: 0x49c366461f6ddf47
Before 0x14ffff: 0x0741e9ce45d555c2
Before 0x147fff: 0x0884067f31947a06
Before 0x13ffff: 0xffc9917c676709c7
Before 0x137fff: 0xb5401abe8cfe3d1b
Before 0x12ffff: 0xbe591f8e5672e493
Before 0x127fff: 0x28414a89f572cad5
Before 0x11ffff: 0x5ece631956ef02d4
Before 0x117fff: 0x613e2ced3718deb6
Before 0x10ffff: 0x4650d66d9e2d8879
Before 0x107fff: 0x6a584e0c7e911599
Before 0x0fffff: 0x12aba364208f2bbf
Before 0x0f7fff: 0x6fa654fa8349caa5
Before 0x0effff: 0x84e15ac76fc73ae7
Before 0x0e7fff: 0x23ef2d25214e703b
Before 0x0dffff: 0xf3b3ca3f2dd5d4cc
Before 0x0d7fff: 0xe695c67f98abcb3c
Before 0x0cffff: 0xaf55ddf3f47a8620
Before 0x0c7fff: 0x99e380ba05f007b3
Before 0x0bffff: 0xb6aee29527590315
Before 0x0b7fff: 0xccc92936d9211774
Before 0x0affff: 0xf749b6b700d4df15
Before 0x0a7fff: 0xad2266e01e60c036
Before 0x09ffff: 0x3742a2c573292a68
Before 0x097fff: 0x3bf99c1db1920acb
Before 0x08ffff: 0xe353dea2c655d168
Before 0x087fff: 0xed0d8199420aa2dd
Before 0x07ffff: 0xefb2c502890c5130
Before 0x077fff: 0x7d3b2dd56405cfb2
Before 0x06ffff: 0x6f44cac155b7db6c
Before 0x067fff: 0x95dc27b2ab007a4b
Before 0x05ffff: 0x2030909b05587d84
Before 0x057fff: 0x6b0787c6f73312bc
Before 0x04ffff: 0x8d8aee604767cf44
Before 0x047fff: 0xa71b223c90979b1a
Before 0x03ffff: 0x5018dce8604ba2b7
Before 0x037fff: 0xf1db03f9cb5b9231
Before 0x02ffff: 0x58a7f350420221a9
Before 0x027fff: 0x5701d9dcaa8007aa
Before 0x01ffff: 0x01e833a48598d934
Before 0x017fff: 0x10896a774d304b04
Before 0x00ffff: 0x8e6c473c9d77a33e
Before 0x007fff: 0x98e1a89a2e71e96a
End value: 0x905ddf13110ca25a
Calculating chain from start value 0x0000000000000005
Before 0x1fffff: 0x0000000000000005
Before 0x1f7fff: 0x08ce95182121319e
Before 0x1effff: 0x37c633f5becc8da7
Before 0x1e7fff: 0x5bb130066a9729eb
Before 0x1dffff: 0x82df8577b9a6e849
Before 0x1d7fff: 0xf4a494f319fa8dd6
Before 0x1cffff: 0xd5d538f3bb41cc0d
Before 0x1c7fff: 0x4844b1b92f9eb55e
Before 0x1bffff: 0xbe777c056ec9a7fc
Before 0x1b7fff: 0x77875c8914ad4df3
Before 0x1affff: 0x1195655ab64ea258
Before 0x1a7fff: 0xef1bdd0bdcfdc5f3
Before 0x19ffff: 0x73b9f18eecf85f79
Before 0x197fff: 0x963bd7c815090cda
Before 0x18ffff: 0x26ad3f46c6101f50
Before 0x187fff: 0x9ab5f689347c758c
Before 0x17ffff: 0xf6e2b731b35b43e0
Before 0x177fff: 0x8684bfde1876bdd9
Before 0x16ffff: 0x9fa42f8b3ae3970d
Before 0x167fff: 0x456a6fa823d49da6
Before 0x15ffff: 0x67ef1dee2e864581
Before 0x157fff: 0xa16b415b2e8228fa
Before 0x14ffff: 0x4803648d3f5e9dc1
Before 0x147fff: 0x09eceb25c4d3b26e
Before 0x13ffff: 0x98563f1a8257ed99
Before 0x137fff: 0xabfa2d21ee9149d7
Before 0x12ffff: 0xb5c0da59634e53b2
Before 0x127fff: 0x560e86d786ae7dfd
Before 0x11ffff: 0xb942a83d8fa065b8
Before 0x117fff: 0xebd086ef7ce2dc86
Before 0x10ffff: 0x3abe2fc6e4c5c73a
Before 0x107fff: 0xaa3652b2ce38c209
Before 0x0fffff: 0xf40dc5fec3961769
Before 0x0f7fff: 0x90be139af90a7c7f
Before 0x0effff: 0x97555fa7d3bd2da4
Before 0x0e7fff: 0xcb28727140e5263d
Before 0x0dffff: 0x99a989a8fe494396
Before 0x0d7fff: 0xa8ff6ffe3fa46787
Before 0x0cffff: 0xa9403c1e335cf40c
Before 0x0c7fff: 0x0122066cccf800b7
Before 0x0bffff: 0x0753e778f036c74d
Before 0x0b7fff: 0x374aec65737a4b52
Before 0x0affff: 0xe2543a962e7cda60
Before 0x0a7fff: 0x91e283710b651ceb
Before 0x09ffff: 0x1f2617ec0ec361a2
Before 0x097fff: 0x4548e08578918080
Before 0x08ffff: 0x44a5c2fbd691e6a3
Before 0x087fff: 0x8dacc43ffd445b68
Before 0x07ffff: 0x82de41ea486db991
Before 0x077fff: 0x1224dd8871bd0b36
Before 0x06ffff: 0xf9c5849824ce889c
Before 0x067fff: 0x92c0329da2787cfa
Before 0x05ffff: 0x3949479a596f36d9
Before 0x057fff: 0x11d7570f0b6f7a9f
Before 0x04ffff: 0xf1a5da4a161350cf
Before 0x047fff: 0xb29d02c5fc213ec9
Before 0x03ffff: 0x8e91e195edfa64a0
Before 0x037fff: 0x5979e977435822b2
Before 0x02ffff: 0x7be3af4bc9b4d7ab
Before 0x027fff: 0x816d3ddcd4ec223a
Before 0x01ffff: 0x9d8d02fdc8718234
Before 0x017fff: 0xf195c0c98bae98e6
Before 0x00ffff: 0xdc1fa8c93d28bb0f
Before 0x007fff: 0x21ee4cefb852c9c7
End value: 0xcbbe903d8847444e
Calculating chain from start value 0x0000000000000006
Before 0x1fffff: 0x0000000000000006
Before 0x1f7fff: 0x0071d5867bab50a9
Before 0x1effff: 0xa2ccd2b60303c2bd
Before 0x1e7fff: 0x8a071550a439cd90
Before 0x1dffff: 0x690994664330b069
Before 0x1d7fff: 0x04d19c41aa6d7a69
Before 0x1cffff: 0xf17a2a7115f0d3b8
Before 0x1c7fff: 0x76e4375ced46978a
Before 0x1bffff: 0xe14fa85c1ee0a88c
Before 0x1b7fff: 0x485355bcbb0c35a0
Before 0x1affff: 0xb5c29f836403b468
Before 0x1a7fff: 0xb873fad0089f82ca
Before 0x19ffff: 0x17924f15ac25f0e8
Before 0x197fff: 0x8f1b9da8c8591a2d
Before 0x18ffff: 0x7ce4bdd095504c1e
Before 0x187fff: 0x5df9a6ff135ea9fb
Before 0x17ffff: 0x5abd0200df85c9b8
Before 0x177fff: 0x8c4db8995cf30a14
Before 0x16ffff: 0x10beda8721904789
Before 0x167fff: 0xcad798cb2dc1d768
Before 0x15ffff: 0x38eff5a78b6f074f
Before 0x157fff: 0xe5e599509ddd17a9
Before 0x14ffff: 0x3a7d5e031ca3db91
Before 0x147fff: 0x2067cbb814a09808
Before 0x13ffff: 0xd0928d28a4f44c54
Before 0x137fff: 0xb0f04c0101c6d649
Before 0x12ffff: 0x413313cf45802088
Before 0x127fff: 0xcadf6b4201127812
Before 0x11ffff: 0x9a7410426a6bf18c
Before 0x117fff: 0x05fe150301395cf7
Before 0x10ffff: 0x4261ecef0bf4edb8
Before 0x107fff: 0x593d8d600860c57c
Before 0x0fffff: 0x1ef8ca7d7dee4661
Before 0x0f7fff: 0x63d58d1348fe7cb9
Before 0x0effff: 0x92df803a0cd5d7e2
Before 0x0e7fff: 0x17e6d53bf2fd8cfa
Before 0x0dffff: 0x5db7886f83bfa1d6
Before 0x0d7fff: 0x83087aad942a917c
Before 0x0cffff: 0xf34a7c7c5ac44109
Before 0x0c7fff: 0xe3311e362e2ff65c
Before 0x0bffff: 0xda34b33e0502470c
Before 0x0b7fff: 0x8abee7b9e1658b43
Before 0x0affff: 0x07e4b4901eec6163
Before 0x0a7fff: 0x7d9f5985852f5c2c
Before 0x09ffff: 0xb0a3637cda32d818
Before 0x097fff: 0xfb2120e3313aeb3c
Before 0x08ffff: 0x9e46715bf3bbfea7
Before 0x087fff: 0x196ed232fbf03a6c
Before 0x07ffff: 0xf0d78812e966b54c
Before 0x077fff: 0xd4ed9d2b84c70289
Before 0x06ffff: 0x79829012d4e7ea68
Before 0x067fff: 0xac99450e7c89d616
Before 0x05ffff: 0x34d37d44c67188c6
Before 0x057fff: 0xbece8197c19f847e
Before 0x04ffff: 0x646012def196d0d9
Before 0x047fff: 0x883b73c818fc651a
Before 0x03ffff: 0x4eb0aa5fc3db4c1f
Before 0x037fff: 0x03bd9a865e630a8f
Before 0x02ffff: 0x22fc3cd7de26dd0f
Before 0x027fff: 0x9316a519b3182765
Before 0x01ffff: 0x331b31b733ea7c41
Before 0x017fff: 0x14827e0542db9e05
Before 0x00ffff: 0xdde91c128133dc21
Before 0x007fff: 0x790249ccbb376f5e
End value: 0xb32dcd0ee320992f
Calculating chain from start value 0x0000000000000007
Before 0x1fffff: 0x0000000000000007
Before 0x1f7fff: 0x2176f05038537afe
Before 0x1effff: 0x44dc4a96f2439c43
Before 0x1e7fff: 0x54d2746e701d961b
Before 0x1dffff: 0x151b0e7753c0ff8f
Before 0x1d7fff: 0xc5bd07e7c4918d69
Before 0x1cffff: 0xfd8e2be2063eb97e
Before 0x1c7fff: 0xf13503689b962866
Before 0x1bffff: 0x580c650090bd3a06
Before 0x1b7fff: 0xc212dc66e6bcd69d
Before 0x1affff: 0x0806bf8eec1a3a02
Before 0x1a7fff: 0x8b2efd50ca3db141
Before 0x19ffff: 0x9f77330cd86987e1
Before 0x197fff: 0x0455b18b8ed1394e
Before 0x18ffff: 0xd27b31aa3a127f82
Before 0x187fff: 0xa704584001143428
Before 0x17ffff: 0x6c2279057a3441c7
Before 0x177fff: 0x5dc7ca43a96b53d0
Before 0x16ffff: 0xae2330cb6eb9cb41
Before 0x167fff: 0xb3d486a7642f9c69
Before 0x15ffff: 0xb309a2babdabd03c
Before 0x157fff: 0xd6fddb3cb1693741
Before 0x14ffff: 0x70c4ee533f39d296
Before 0x147fff: 0xf985180006624c77
Before 0x13ffff: 0xb9a9efd5c22bc6de
Before 0x137fff: 0xebbcacf720df312a
Before 0x12ffff: 0xe696976f81d91020
Before 0x127fff: 0x335ad260941ebf06
Before 0x11ffff: 0xf88d12d1d4fb4c55
Before 0x117fff: 0x99435225b5541a88
Before 0x10ffff: 0x25fcb5a7a8c22443
Before 0x107fff: 0xd680f97fc1559840
Before 0x0fffff: 0x5637d9bcb5798054
Before 0x0f7fff: 0xaca293cc0374a4bd
Before 0x0effff: 0x83e4626481f8b5b2
Before 0x0e7fff: 0xd7f2fd8a213be599
Before 0x0dffff: 0x294b460e1349c17e
Before 0x0d7fff: 0x10cf2bbc195d461b
Before 0x0cffff: 0x1c358e2bf242b65d
Before 0x0c7fff: 0xdcf4c25f341d02d3
Before 0x0bffff: 0x67f6ac59b70822d1
Before 0x0b7fff: 0x854b61c7193a1427
Before 0x0affff: 0xe42a64b937a7594a
Before 0x0a7fff: 0xcef62b2eb9424ee5
Before 0x09ffff: 0xf3fc170b6f3a8aa2
Before 0x097fff: 0xe49ec1266dd9bea0
Before 0x08ffff: 0xa8a0173532fc7db7
Before 0x087fff: 0x142e9c377f296d4c
Before 0x07ffff: 0x0907d6d1c25bc8d1
Before 0x077fff: 0x4f984f8417b9e9db
Before 0x06ffff: 0xd90faea06a21ca10
Before 0x067fff: 0x82bd03d6977bd670
Before 0x05ffff: 0x74a0e1a0a19cf825
Before 0x057fff: 0xfa96f3d6589e376b
Before 0x04ffff: 0x5b7c1769427643b3
Before 0x047fff: 0x9c6ae6fbcc9387a6
Before 0x03ffff: 0xb11fbccfe3bc8efd
Before 0x037fff: 0x5acddf735df7d501
Before 0x02ffff: 0xdeea274b5b76fa2c
Before 0x027fff: 0x7f6b6af222d70cf2
Before 0x01ffff: 0x9f621b8bf8d58ffe
Before 0x017fff: 0xbf03f81d89483091
Before 0x00ffff: 0x8c3517e924639409
Before 0x007fff: 0xc4f2f004196ce26d
End value: 0x38087d640fea5c81
Calculating chain from start value 0x0000000000000008
Before 0x1fffff: 0x0000000000000008
Before 0x1f7fff: 0x903fa08a52b54fae
Before 0x1effff: 0x37a61f187afe477d
Before 0x1e7fff: 0x36435a4743382921
Before 0x1dffff: 0xec91747262eaae89
Before 0x1d7fff: 0xa88a5d6b61592d84
Before 0x1cffff: 0xd26195a2c95057ab
Before 0x1c7fff: 0x124cbab3cfb0d1a4
Before 0x1bffff: 0xdf6b38107ec66e8d
Before 0x1b7fff: 0x733c6d9db011f73f
Before 0x1affff: 0x1987371a68e7d4ed
Before 0x1a7fff: 0x0cd1ace106b05318
Before 0x19ffff: 0x80bdd941d92cf422
Before 0x197fff: 0x9b2aeb0d8231581a
Before 0x18ffff: 0x08e921ad0bf30d04
Before 0x187fff: 0x0547f3fd0068620f
Before 0x17ffff: 0xd9bcb24dd0208166
Before 0x177fff: 0x803d3fc734edd1a1
Before 0x16ffff: 0x8a928736b0282147
Before 0x167fff: 0x9da2fb9cb1fa8b02
Before 0x15ffff: 0x9798775c080fe984
Before 0x157fff: 0xc868157f69cf3ba0
Before 0x14ffff: 0xc3f61ca8ae1fdd60
Before 0x147fff: 0x54b66353e6411084
Before 0x13ffff: 0xd34d795295043ec7
Before 0x137fff: 0xe99a010201a7fb2a
Before 0x12ffff: 0x526326165d24d052
Before 0x127fff: 0x8bae4958dcf7065e
Before 0x11ffff: 0x235d05530634bb61
Before 0x117fff: 0x842e49b596323bdb
Before 0x10ffff: 0x6fa81edb6ca7dd26
Before 0x107fff: 0x796f69974e245ae4
Before 0x0fffff: 0xd95f07de3fb9a196
Before 0x0f7fff: 0xb009676f5c977200
Before 0x0effff: 0xc1c0402c5f3f96db
Before 0x0e7fff: 0x1c5034df6445ed5e
Before 0x0dffff: 0xdc316ec62aeed3b0
Before 0x0d7fff: 0x21ae9cb12af383ec
Before 0x0cffff: 0xbbcd547fdef56104
Before 0x0c7fff: 0xdd665962c6b4b05c
Before 0x0bffff: 0xeb2819fca0d0b12a
Before 0x0b7fff: 0xe9ce7a2bfe13de36
Before 0x0affff: 0xb7758ddb5231fff5
Before 0x0a7fff: 0x8693f31f6d1e22b9
Before 0x09ffff: 0x4ba3e092428a8f55
Before 0x097fff: 0xbad525f3cecf83fa
Before 0x08ffff: 0xbf84caad86c9da1c
Before 0x087fff: 0xfebb793e55799d80
Before 0x07ffff: 0x62326c17f06945c9
Before 0x077fff: 0xda07f9a0ce4dfe1c
Before 0x06ffff: 0xb09881de63c5f422
Before 0x067fff: 0xd1cf937ac4ecb69a
Before 0x05ffff: 0x36572b778abdfcb0
Before 0x057fff: 0x1e22877f28e0c16e
Before 0x04ffff: 0xb390bed32f6aa879
Before 0x047fff: 0x6df3d508f57c5228
Before 0x03ffff: 0x973ac71e92d1fc65
Before 0x037fff: 0xc0b4c6232c898a2b
Before 0x02ffff: 0x85499beb34bb32b1
Before 0x027fff: 0x8b3cdbca2af87fbc
Before 0x01ffff: 0x610fe7ce5b7a1808
Before 0x017fff: 0x5b0fb98f940c6c0e
Before 0x00ffff: 0x057d6e8119b4b20a
Before 0x007fff: 0xe38e2c5620ba48b6
End value: 0xdbd57f6ee98bb3ad
Calculating chain from start value 0x0000000000000009
Before 0x1fffff: 0x0000000000000009
Before 0x1f7fff: 0x3ab7957e3bb63f8e
Before 0x1effff: 0x550220d9cc5fd367
Before 0x1e7fff: 0x7e01f144ddb17925
Before 0x1dffff: 0x053033e52cee9ca5
Before 0x1d7fff: 0x1398cd680b44395d
Before 0x1cffff: 0x893adf018f29be0c
Before 0x1c7fff: 0x3eef0736434f4dc5
Before 0x1bffff: 0xacbcf6bd0cdcd884
Before 0x1b7fff: 0xe2e0af7da058c3b4
Before 0x1affff: 0x75d955abb1d829a3
Before 0x1a7fff: 0xed931258aa4e0c4c
Before 0x19ffff: 0x27daa54f07138967
Before 0x197fff: 0x9bd8ebd135f7b8ff
Before 0x18ffff: 0x618af3c1f2091429
Before 0x187fff: 0x9c8cd0897c5a9ce2
Before 0x17ffff: 0x486dad8085c3d5cb
Before 0x177fff: 0xe2c0044fb89e9f8c
Before 0x16ffff: 0xdd8bc55f2bb2106d
Before 0x167fff: 0x0c80520e33439d03
Before 0x15ffff: 0xbf3f192de8930950
Before 0x157fff: 0x13b01276863200be
Before 0x14ffff: 0x3965db9b065aa9a1
Before 0x147fff: 0x309ba3b26a28603f
Before 0x13ffff: 0x993fd5f8f89e6e46
Before 0x137fff: 0x3d896f5c0663794b
Before 0x12ffff: 0xedc4c5960d1b9740
Before 0x127fff: 0xb17f729890190924
Before 0x11ffff: 0xd325062b37d20453
Before 0x117fff: 0xbbaaf3d7a867b640
Before 0x10ffff: 0x0c919103ee8908a5
Before 0x107fff: 0xdc6aea77946490df
Before 0x0fffff: 0x196c7a3eb65a6482
Before 0x0f7fff: 0x4e9eaff71b48ad8b
Before 0x0effff: 0xffca8ee3247ea439
Before 0x0e7fff: 0x4a6650254f5f47f3
Before 0x0dffff: 0xdcfd395fd2d46033
Before 0x0d7fff: 0x99939e0f7e6149fe
Before 0x0cffff: 0x1c488ae1d1ad732f
Before 0x0c7fff: 0x82007a5123e56f6d
Before 0x0bffff: 0x3ff4576486969bac
Before 0x0b7fff: 0x08dae5640dc70f8e
Before 0x0affff: 0xc577d889f3fd3c5f
Before 0x0a7fff: 0xd3eae85053a474e4
Before 0x09ffff: 0x5e48da793238f3a5
Before 0x097fff: 0x3c9f6bda4828d0a0
Before 0x08ffff: 0xb0921e0d9c513786
Before 0x087fff: 0x77ec08388a99c3db
Before 0x07ffff: 0x139bc23aaa774dd3
Before 0x077fff: 0xeb0748caa39f477e
Before 0x06ffff: 0x0ac83cc9cbbe4131
Before 0x067fff: 0x3ec5eec4f08de300
Before 0x05ffff: 0x0caf3e33fdea55a9
Before 0x057fff: 0x62d826dec0217a3f
Before 0x04ffff: 0xfba9fe789321059b
Before 0x047fff: 0x60582c02f1745b1e
Before 0x03ffff: 0xf7916af0ee9cec05
Before 0x037fff: 0x5eb1fbe551f52c5d
Before 0x02ffff: 0x5980d282431987db
Before 0x027fff: 0x549eda30518c1835
Before 0x01ffff: 0xa98271a10ec7cbd4
Before 0x017fff: 0x24f84f1ed182cef3
Before 0x00ffff: 0xb193debe9e2f8a34
Before 0x007fff: 0x2e569f7f8bae5a05
End value: 0xd688814759e2afec

View File

@ -0,0 +1,130 @@
/*
* Calculation of chains for A5/1 rainbow table cracking.
*
*
* Loosely based on: A pedagogical implementation of A5/1.
*
* Copyright (C) 1998-1999: Marc Briceno, Ian Goldberg, and David Wagner
*
* See accompanying file A5.1.c for original version and full copyright
*
*
* Modified and optimized for running on CUDA.
*
* Copyright (C) 2009: Ingo Albrecht <prom@berlin.ccc.de>
*
*/
// XXX: Undefine for 64bit platform. You will also have to fix up printfs.
#define BITSIZE_32
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <math.h>
/* Masks for the three shift registers */
#define R1MASK 0x07FFFF /* 19 bits, numbered 0..18 */
#define R2MASK 0x3FFFFF /* 22 bits, numbered 0..21 */
#define R3MASK 0x7FFFFF /* 23 bits, numbered 0..22 */
/* Middle bit of each of the three shift registers, for clock control */
#define R1MID 0x000100 /* bit 8 */
#define R2MID 0x000400 /* bit 10 */
#define R3MID 0x000400 /* bit 10 */
/* Feedback taps, for clocking the shift registers. */
#define R1TAPS 0x072000 /* bits 18,17,16,13 */
#define R2TAPS 0x300000 /* bits 21,20 */
#define R3TAPS 0x700080 /* bits 22,21,20,7 */
/* Output taps, for output generation */
#define R1OUT 0x040000 /* bit 18 (the high bit) */
#define R2OUT 0x200000 /* bit 21 (the high bit) */
#define R3OUT 0x400000 /* bit 22 (the high bit) */
typedef unsigned char byte;
#ifdef BITSIZE_32
typedef unsigned long uint32;
typedef unsigned long long uint64;
#else
typedef unsigned int uint32;
typedef unsigned long uint64;
#endif
typedef unsigned int bit;
__device__ bit parity32(uint32 x) {
x ^= x>>16;
x ^= x>>8;
x ^= x>>4;
x ^= x>>2;
x ^= x>>1;
return x&1;
}
__device__ uint32 clockone(uint32 reg, uint32 mask, uint32 taps) {
uint32 t = reg & taps;
reg = (reg << 1) & mask;
reg |= parity32(t);
return reg;
}
__device__ bit majority(uint32 R1, uint32 R2, uint32 R3) {
int sum;
sum = ((R1&R1MID) >> 8) + ((R2&R2MID) >> 10) + ((R3&R3MID) >> 10);
if (sum >= 2)
return 1;
else
return 0;
}
__device__ bit getbit(uint32 R1, uint32 R2, uint32 R3) {
return ((R1&R1OUT) >> 18) ^ ((R2&R2OUT) >> 21) ^ ((R3&R3OUT) >> 22);
}
__device__ uint64 calculate_link (uint64 input, uint32 count) {
uint64 result;
int i;
/* Reduction function. */
uint32 R1 = ((input >> (22 + 23))^count) & R1MASK;
uint32 R2 = ((input >> 23)^count) & R2MASK;
uint32 R3 = (input^count) & R3MASK;
result = getbit(R1, R2, R3);
for(i=1;i<64;i++) {
// Yes, virginia, we only need to clock 63 times for 64 bits of output
// clock()
bit maj = majority(R1, R2, R3);
uint32 T1 = clockone(R1, R1MASK, R1TAPS);
uint32 T2 = clockone(R2, R2MASK, R2TAPS);
uint32 T3 = clockone(R3, R3MASK, R3TAPS);
if (((R1&R1MID)!=0) == maj)
R1 = T1;
if (((R2&R2MID)!=0) == maj)
R2 = T2;
if (((R3&R3MID)!=0) == maj)
R3 = T3;
result = (result << 1)| getbit(R1, R2, R3);
}
return result;
}
__global__ void crunch(uint64* results, uint32 index) {
uint32 tid = blockIdx.x * blockDim.x + threadIdx.x;
uint64 state = results[tid];
uint32 i;
for(i = 0; i < OPERATIONS_PER_RUN; i++) {
state = calculate_link(state, index - i);
}
results[tid] = state;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff