Skip to content
Snippets Groups Projects
Commit aa83345a authored by dam1n19's avatar dam1n19
Browse files

ATO2-24: Added Testbench for ID Validator. Further Verification needs adding...

ATO2-24: Added Testbench for ID Validator. Further Verification needs adding to check ID missmatch conditions
parent 3756b55a
Branches
No related tags found
No related merge requests found
Showing
with 6419 additions and 5126 deletions
No preview for this file type
...@@ -40,7 +40,6 @@ module sha256_id_validator ( ...@@ -40,7 +40,6 @@ module sha256_id_validator (
output logic [1:0] status_err, output logic [1:0] status_err,
output logic [9:0] status_packet_count, output logic [9:0] status_packet_count,
input logic status_clear input logic status_clear
); );
logic [1:0] state, next_state; logic [1:0] state, next_state;
...@@ -63,10 +62,22 @@ module sha256_id_validator ( ...@@ -63,10 +62,22 @@ module sha256_id_validator (
// bit 1 high - ID Buffer Error - Buffer has skipped and ID // bit 1 high - ID Buffer Error - Buffer has skipped and ID
// bit 0 high - Hash ID Error - Packet has been dropped // bit 0 high - Hash ID Error - Packet has been dropped
logic id_in_buf_msb;
logic hash_in_id_msb;
logic id_buf_msb;
logic hash_buf_id_msb;
assign id_in_buf_msb = id_in_buf[5];
assign hash_in_id_msb = hash_in_id[5];
assign id_buf_msb = id_buf[5];
assign hash_buf_id_msb = hash_buf_id[5];
// State Machine Sequential Logic // State Machine Sequential Logic
always_ff @(posedge clk, negedge nrst) begin always_ff @(posedge clk, negedge nrst) begin
if ((!nrst) | sync_rst) begin if ((!nrst) | sync_rst) begin
state <= 1'd0; state <= 2'd0;
hash_out <= 256'd0; hash_out <= 256'd0;
hash_out_err <= 1'b0; hash_out_err <= 1'b0;
hash_out_last <= 1'b0; hash_out_last <= 1'b0;
...@@ -76,6 +87,8 @@ module sha256_id_validator ( ...@@ -76,6 +87,8 @@ module sha256_id_validator (
hash_buf <= 256'd0; hash_buf <= 256'd0;
hash_buf_id <= 6'd0; hash_buf_id <= 6'd0;
id_buf <= 6'd0; id_buf <= 6'd0;
status_err <= 2'b0;
status_packet_count <= 10'd0;
end else if (en == 1'b1) begin end else if (en == 1'b1) begin
state <= next_state; state <= next_state;
hash_out <= next_hash_out; hash_out <= next_hash_out;
...@@ -86,7 +99,8 @@ module sha256_id_validator ( ...@@ -86,7 +99,8 @@ module sha256_id_validator (
id_in_buf_ready <= next_id_in_buf_ready; id_in_buf_ready <= next_id_in_buf_ready;
hash_buf <= next_hash_buf; hash_buf <= next_hash_buf;
hash_buf_id <= next_hash_buf_id; hash_buf_id <= next_hash_buf_id;
id_buf <= id_buf; id_buf <= next_id_buf;
status_packet_count <= next_status_packet_count;
end else begin end else begin
hash_out_valid <= 1'b0; hash_out_valid <= 1'b0;
hash_in_ready <= 1'b0; hash_in_ready <= 1'b0;
...@@ -106,6 +120,8 @@ module sha256_id_validator ( ...@@ -106,6 +120,8 @@ module sha256_id_validator (
next_hash_buf = hash_buf; next_hash_buf = hash_buf;
next_hash_buf_id = hash_buf_id; next_hash_buf_id = hash_buf_id;
next_id_buf = id_buf; next_id_buf = id_buf;
next_status_err = status_err;
next_status_packet_count = status_packet_count;
// Override // Override
case (state) case (state)
...@@ -116,16 +132,22 @@ module sha256_id_validator ( ...@@ -116,16 +132,22 @@ module sha256_id_validator (
end end
2'd1: begin // Set Packet ID from Seed or Increment Value 2'd1: begin // Set Packet ID from Seed or Increment Value
// Handle Status Signals
if (status_clear) begin if (status_clear) begin
next_status_out_err = 2'b0; next_status_err = 2'b0;
end end
// Check Whether Outputs Have Valid data waiting
if (hash_out_valid && !hash_out_ready) begin if (hash_out_valid && !hash_out_ready) begin
// If data out handshake has not been seen, drop ready // If data out handshake has not been seen, drop ready
next_hash_in_ready = 1'b0; next_hash_in_ready = 1'b0;
next_id_in_buf_ready = 1'b0; next_id_in_buf_ready = 1'b0;
end else begin end else begin
// Default Values
next_hash_out_valid = 1'b0;
next_hash_in_ready = 1'b1;
next_id_in_buf_ready = 1'b1;
// Check Hash Input Handshaked // Check Hash Input Handshaked
if (hash_in_ready && hash_in_ready) begin if (hash_in_ready && hash_in_valid) begin
next_hash_in_ready = 1'b0; next_hash_in_ready = 1'b0;
next_hash_buf = hash_in; next_hash_buf = hash_in;
next_hash_buf_id = hash_in_id; next_hash_buf_id = hash_in_id;
...@@ -135,16 +157,71 @@ module sha256_id_validator ( ...@@ -135,16 +157,71 @@ module sha256_id_validator (
// Check ID Buffer Input Handshaked // Check ID Buffer Input Handshaked
if (id_in_buf_ready && id_in_buf_valid) begin if (id_in_buf_ready && id_in_buf_valid) begin
next_id_in_buf_ready = 1'b0; next_id_in_buf_ready = 1'b0;
next_id_buf = id_buf; next_id_buf = id_in_buf;
// Wait for Hash Input State // Wait for Hash Input State
next_state = 2'd3; next_state = 2'd3;
end end
// Check if Both Input Handshaked // Check if Both Input Handshaked
if (hash_in_ready && hash_in_ready) && (id_in_buf_ready && id_in_buf_valid) begin if ((hash_in_ready && hash_in_valid) && (id_in_buf_ready && id_in_buf_valid)) begin
// Do ID's match? // Do ID's match?
next_status_packet_count = status_packet_count + 1;
next_hash_out = hash_in; next_hash_out = hash_in;
next_hash_out_valid = 1'b1;
next_hash_out_last = 1'b1;
if (!hash_out_valid && hash_out_ready) begin
// In case where no valid data and ready is waiting for valid data
// - (will be asserted next cc), guaranteed handshake next cycle
next_id_in_buf_ready = 1'b1;
next_hash_in_ready = 1'b1;
end else begin
next_id_in_buf_ready = 1'b0;
next_hash_in_ready = 1'b0;
end
// ID's don't match
if ((id_in_buf > hash_in_id)||(~id_in_buf_msb & hash_in_id_msb)) begin
// If ID Buffer ID > Hash ID - ID Buffer Error
// Pop an additional hash
// Ensure another ID in Buf isn't popped
next_id_in_buf_ready = 1'b0;
next_state = 2'd3;
next_hash_out_err = 1'b1;
next_status_err = next_status_err | 2'b10;
end else if ((id_in_buf < hash_in_id)||(id_in_buf_msb & ~hash_in_id_msb)) begin
// If ID Buffer ID < Hash ID - Lost Packet Error
// Pop an additional value from the ID Buffer FIFO
// Ensure another Hash isn't popped
next_hash_in_ready = 1'b0;
next_state = 2'd2;
next_hash_out_err = 1'b1;
next_status_err = next_status_err | 2'b01;
end else begin
next_hash_out_err = 1'b0;
next_state = 2'd1;
end
end
end
end
2'd2: begin // Wait for ID Buffer Handshake
// Handle Status Signal
if (status_clear) begin
next_status_err = 2'b0;
end
if (hash_out_valid && !hash_out_ready) begin
// If data out handshake has not been seen, drop ready
next_id_in_buf_ready = 1'b0;
end else begin
// Default Values
next_id_in_buf_ready = 1'b1;
next_hash_out_valid = 1'b0; next_hash_out_valid = 1'b0;
if (!cfg_out_valid && cfg_out_ready) begin // Has ID Buf Input Handshaked?
if (id_in_buf_ready && id_in_buf_valid) begin
// Put Hash On Output
next_status_packet_count = status_packet_count + 1;
next_hash_out = hash_buf;
next_hash_out_last = 1'b1;
next_hash_out_valid = 1'b1;
if (!hash_out_valid && hash_out_ready) begin
// In case where no valid data and ready is waiting for valid data // In case where no valid data and ready is waiting for valid data
// - (will be asserted next cc), guaranteed handshake next cycle // - (will be asserted next cc), guaranteed handshake next cycle
next_id_in_buf_ready = 1'b1; next_id_in_buf_ready = 1'b1;
...@@ -154,18 +231,22 @@ module sha256_id_validator ( ...@@ -154,18 +231,22 @@ module sha256_id_validator (
next_hash_in_ready = 1'b0; next_hash_in_ready = 1'b0;
end end
// ID's don't match // ID's don't match
if ((id_in_buf > hash_in_id)||(~id_in_buf[5] & hash_in_id[5])) begin if ((id_in_buf > hash_buf_id)||(~id_in_buf_msb & hash_buf_id_msb)) begin
// If ID Buffer ID > Hash ID - ID Buffer Error // If ID Buffer ID > Hash ID - ID Buffer Error
// Pop an additional hash // Pop an additional hash
// Ensure another ID in Buf isn't popped
next_id_in_buf_ready = 1'b0;
next_state = 2'd3; next_state = 2'd3;
next_hash_out_err = 1'b1; next_hash_out_err = 1'b1;
next_status_err[1] = 1'b1; next_status_err = next_status_err | 2'b10;
end else if ((id_in_buf < hash_in_id)||(id_in_buf[5] & ~hash_in_id[5])) begin end else if ((id_in_buf < hash_buf_id)||(id_in_buf_msb & ~hash_buf_id_msb)) begin
// If ID Buffer ID < Hash ID - Lost Packet Error // If ID Buffer ID < Hash ID - Lost Packet Error
// Pop an additional value from the Buffer FIFO // Pop an additional value from the ID Buffer FIFO
// Ensure another Hash isn't popped
next_hash_in_ready = 1'b0;
next_state = 2'd2; next_state = 2'd2;
next_hash_out_err = 1'b1; next_hash_out_err = 1'b1;
next_status_err[0] = 1'b1; next_status_err = next_status_err | 2'b01;
end else begin end else begin
next_hash_out_err = 1'b0; next_hash_out_err = 1'b0;
next_state = 2'd1; next_state = 2'd1;
...@@ -174,6 +255,59 @@ module sha256_id_validator ( ...@@ -174,6 +255,59 @@ module sha256_id_validator (
end end
end end
2'd3: begin // Wait for Hash ID Handshake
if (status_clear) begin
next_status_err = 2'b0;
end
if (hash_out_valid && !hash_out_ready) begin
// If data out handshake has not been seen, drop ready
next_hash_in_ready = 1'b0;
end else begin
// Default Values
next_hash_in_ready = 1'b1;
next_hash_out_valid = 1'b0;
// Has ID Buf Input Handshaked?
if (hash_in_ready && hash_in_valid) begin
// Put Hash On Output
next_status_packet_count = status_packet_count + 1;
next_hash_out = hash_in;
next_hash_out_last = 1'b1;
next_hash_out_valid = 1'b1;
if (!hash_out_valid && hash_out_ready) begin
// In case where no valid data and ready is waiting for valid data
// - (will be asserted next cc), guaranteed handshake next cycle
next_id_in_buf_ready = 1'b1;
next_hash_in_ready = 1'b1;
end else begin
next_id_in_buf_ready = 1'b0;
next_hash_in_ready = 1'b0;
end
// ID's don't match
if ((id_buf > hash_in_id)||(~id_buf_msb & hash_in_id_msb)) begin
// If ID Buffer ID > Hash ID - ID Buffer Error
// Pop an additional hash
// Ensure another ID in Buf isn't popped
next_id_in_buf_ready = 1'b0;
next_state = 2'd3;
next_hash_out_err = 1'b1;
next_status_err = next_status_err | 2'b10;
end else if ((id_buf < hash_in_id)||(id_buf_msb & ~hash_in_id_msb)) begin
// If ID Buffer ID < Hash ID - Lost Packet Error
// Pop an additional value from the ID Buffer FIFO
// Ensure another Hash isn't popped
next_hash_in_ready = 1'b0;
next_state = 2'd2;
next_hash_out_err = 1'b1;
next_status_err = next_status_err | 2'b01;
end else begin
// ID's Match
next_state = 2'd1;
next_hash_out_err = 1'b0;
end
end
end
end
default: begin default: begin
next_state = 2'd0; next_state = 2'd0;
end end
......
//-----------------------------------------------------------------------------
// SoC Labs Basic SHA-2 ID Validator Testbench
// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
//
// Contributors
//
// David Mapstone (d.a.mapstone@soton.ac.uk)
//
// Copyright 2022, SoC Labs (www.soclabs.org)
//-----------------------------------------------------------------------------
`timescale 1ns/1ns
`include "sha256_id_validator.sv"
module tb_sha256_id_validator;
logic clk;
logic nrst;
logic en;
logic sync_rst;
// ID Buffer IN
logic [5:0] id_in_buf;
logic id_in_buf_last;
logic id_in_buf_valid;
logic id_in_buf_ready;
// Hash IN
logic [255:0] hash_in;
logic [5:0] hash_in_id;
logic hash_in_last;
logic hash_in_valid;
logic hash_in_ready;
// Hash Out
logic [255:0] hash_out;
logic hash_out_err;
logic hash_out_last;
logic hash_out_valid;
logic hash_out_ready;
// Status Out - Gets updated after every hash
logic [1:0] status_err;
logic [9:0] status_packet_count;
logic status_clear;
sha256_id_validator uut (
.clk (clk),
.nrst (nrst),
.en (en),
.sync_rst (sync_rst),
// ID Buffer IN
.id_in_buf (id_in_buf),
.id_in_buf_last (id_in_buf_last),
.id_in_buf_valid (id_in_buf_valid),
.id_in_buf_ready (id_in_buf_ready),
// Hash IN
.hash_in (hash_in),
.hash_in_id (hash_in_id),
.hash_in_last (hash_in_last),
.hash_in_valid (hash_in_valid),
.hash_in_ready (hash_in_ready),
// Hash Out
.hash_out (hash_out),
.hash_out_err (hash_out_err),
.hash_out_last (hash_out_last),
.hash_out_valid (hash_out_valid),
.hash_out_ready (hash_out_ready),
// Status Out - Gets updated after every hash
.status_err (status_err),
.status_packet_count (status_packet_count),
.status_clear (status_clear)
);
logic id_in_buf_drive_en;
logic hash_in_drive_en;
logic hash_out_drive_ready;
// TODO: logic status_out_handle;
// TODO: Test varying ID Values - not always same ID's
logic [5:0] id_in_buf_queue [$];
logic id_in_buf_last_queue [$];
int id_in_buf_gap_queue [$];
logic id_in_buf_wait_queue;
logic [255:0] hash_in_queue [$];
logic [5:0] hash_in_id_queue [$];
logic hash_in_last_queue [$];
int hash_in_gap_queue [$];
logic hash_in_wait_queue;
logic [255:0] hash_out_queue [$];
logic hash_out_err_queue [$];
logic hash_out_last_queue [$];
int hash_out_stall_queue [$];
logic hash_out_wait_queue;
// TODO: Handle Status Checking
// Handle Valid and Data for id_in_buf
always_ff @(posedge clk, negedge nrst) begin: id_in_buf_valid_drive
if (!nrst) begin
id_in_buf <= 512'd0;
id_in_buf_valid <= 1'b0;
id_in_buf_last <= 1'b0;
id_in_buf_gap <= 0;
id_in_buf_wait_queue <= 1'b1;
end else if (id_in_buf_drive_en) begin
if (id_in_buf_gap > 1) begin
id_in_buf_gap <= id_in_buf_gap - 1;
id_in_buf_valid <= 1'b0;
end else begin
id_in_buf_valid <= 1'b1;
end
if (((id_in_buf_valid == 1'b1) && (id_in_buf_ready == 1'b1)) ||
(id_in_buf_wait_queue == 1'b1)) begin
// Data transfer just completed or transfers already up to date
if ((id_in_buf_queue.size() > 0) && (id_in_buf_last_queue.size() > 0) && (id_in_buf_gap_queue.size() > 0)) begin
id_in_buf <= id_in_buf_queue.pop_front();
id_in_buf_last <= id_in_buf_last_queue.pop_front();
if (id_in_buf_gap_queue[0] == 0) begin
id_in_buf_valid <= 1'b1;
end else begin
id_in_buf_valid <= 1'b0;
end
id_in_buf_gap <= id_in_buf_gap_queue.pop_front();
id_in_buf_wait_queue <= 1'b0;
end else begin
// No data currently avaiable in queue to write but transfers up to date
id_in_buf_wait_queue <= 1'b1;
id_in_buf_valid <= 1'b0;
end
end
end
end
// Handle Valid and Data for hash_in
always_ff @(posedge clk, negedge nrst) begin: hash_in_valid_drive
if (!nrst) begin
hash_in <= 256'd0;
hash_in_id <= 6'd0;
hash_in_valid <= 1'b0;
hash_in_last <= 1'b0;
hash_in_gap <= 0;
hash_in_wait_queue <= 1'b1;
end else if (hash_in_drive_en) begin
if (hash_in_gap > 1) begin
hash_in_gap <= hash_in_gap -1;
hash_in_valid <= 1'b0;
end else begin
hash_in_valid <= 1'b1;
end
if (((hash_in_valid == 1'b1) && (hash_in_ready == 1'b1)) ||
(hash_in_wait_queue == 1'b1)) begin
// hash_in transfer just completed or transfers already up to date
if ((hash_in_queue.size() > 0) && (hash_in_id_queue.size() > 0 ) && (hash_in_last_queue.size() > 0) && (hash_in_gap_queue.size() > 0)) begin
hash_in <= hash_in_queue.pop_front();
hash_in_id <= hash_in_id_queue.pop_front();
hash_in_last <= hash_in_last_queue.pop_front();
if (hash_in_gap_queue[0] == 0) begin
hash_in_valid <= 1'b1;
end else begin
hash_in_valid <= 1'b0;
end
hash_in_gap <= hash_in_gap_queue.pop_front();
hash_in_wait_queue <= 1'b0;
end else begin
// No data currently avaiable in queue to write but transfers up to date
hash_in_wait_queue <= 1'b1;
hash_in_valid <= 1'b0;
end
end
end
end
logic [255:0] hash_out_check;
logic hash_out_err_check;
logic hash_out_last_check;
int id_in_buf_gap;
int hash_in_gap;
int hash_out_stall;
int packet_num;
// Handle Output Ready Signal Verification
always @(posedge clk) begin
// Check Override Control on Ready
if (hash_out_drive_ready) begin
// Count down to zero before enabling Ready
if (hash_out_stall > 1) begin
hash_out_stall <= hash_out_stall - 1;
hash_out_ready <= 1'b0;
end else begin
// Wait for handshake before updating stall value
if ((hash_out_valid == 1'b1) && (hash_out_ready == 1'b1)) begin
if (hash_out_stall_queue.size() > 0) begin
if (hash_out_stall_queue[0] == 0) begin
hash_out_ready <= 1'b1;
end else begin
hash_out_ready <= 1'b0;
end
hash_out_stall <= hash_out_stall_queue.pop_front();
end
// Keep Ready Asserted until handshake seen
end else begin
hash_out_ready <= 1'b1;
end
end
end else begin
hash_out_ready <= 1'b0;
end
end
// Handle Output Data Verification
always @(posedge clk) begin
// Check Data on Handshake
if ((hash_out_valid == 1'b1) && (hash_out_ready == 1'b1)) begin
// Check Size
assert (hash_out == hash_out_check) else begin
$error("hash_out missmatch! packet %d | recieve: %x != check: %x", packet_num, hash_out, hash_out_check);
$finish;
end
if ($test$plusargs ("DEBUG")) $display("hash_out match! packet %d | recieve: %x == check: %x", packet_num, hash_out, hash_out_check);
// Check ID
assert (hash_out_err == hash_out_err_check) else begin
$error("hash_out_err missmatch! packet %d | recieve: %b != check: %b", packet_num, hash_out_err, hash_out_err_check);
$finish;
end
if ($test$plusargs ("DEBUG")) $display("hash_out_err match! packet %d | recieve: %b == check: %b", packet_num, hash_out_err, hash_out_err_check);
// Check Last Flag
assert (hash_out_last == hash_out_last_check) else begin
$error("hash_out_last missmatch! packet %d | recieve: %x != check: %x", packet_num, hash_out_last, hash_out_last_check);
$finish;
end
if ($test$plusargs ("DEBUG")) $display("hash_out_last match! packet %d | recieve: %x == check: %x", packet_num, hash_out_last, hash_out_last_check);
// Pop new values
if ((hash_out_queue.size() > 0) && (hash_out_err_queue.size() > 0) && (hash_out_last_queue.size() > 0)) begin
hash_out_check <= hash_out_queue.pop_front();
hash_out_err_check <= hash_out_err_queue.pop_front();
hash_out_last_check <= hash_out_last_queue.pop_front();
if (hash_out_last_check == 1'b1) begin
packet_num <= packet_num + 1;
end
end else begin
$display("Test Passes");
$finish;
end
end
end
// File Reading Variables
int fd; // File descriptor Handle
logic [5:0] temp_id_in_buf; // Temporary Input Data Storage
logic temp_id_in_buf_last; // Temporary Input Data Last
int temp_id_in_buf_gap; // Temporary Input Gap
logic [255:0] temp_hash_in; // Temporary Hash Value
logic [5:0] temp_hash_in_id; // Temporary Hash ID
logic temp_hash_in_last; // Temporary Hash last;
int temp_hash_in_gap; // Temporary Hash gap;
logic [255:0] temp_hash_out; // Temporary Hash Value
logic temp_hash_out_err; // Temporary Hash Error
logic temp_hash_out_last; // Temporary Hash last;
int temp_hash_out_stall; // Temporary Hash stall;
initial begin
$dumpfile("sha256_id_validator.vcd");
$dumpvars(0, tb_sha256_id_validator);
id_in_buf_drive_en = 0;
hash_in_drive_en = 0;
hash_out_drive_ready = 0;
// Read input data into Queuein
fd = $fopen("../stimulus/testbench/input_id_stim.csv", "r");
while ($fscanf (fd, "%d,%b,%d", temp_id_in_buf, temp_id_in_buf_last, temp_id_in_buf_gap) == 3) begin
id_in_buf_queue.push_back(temp_id_in_buf);
id_in_buf_last_queue.push_back(temp_id_in_buf_last);
id_in_buf_gap_queue.push_back(temp_id_in_buf_gap);
end
$fclose(fd);
// Read input cfg into Queue
fd = $fopen("../stimulus/testbench/input_hash_in_stim.csv", "r");
while ($fscanf (fd, "%x,%d,%b,%d", temp_hash_in, temp_hash_in_id, temp_hash_in_last, temp_hash_in_gap) == 4) begin
hash_in_queue.push_back(temp_hash_in);
hash_in_id_queue.push_back(temp_hash_in_id);
hash_in_last_queue.push_back(temp_hash_in_last);
hash_in_gap_queue.push_back(temp_hash_in_gap);
end
$fclose(fd);
// Read output data into Queue
fd = $fopen("../stimulus/testbench/output_hash_out_ref.csv", "r");
while ($fscanf (fd, "%x,%b,%b,%d", temp_hash_out, temp_hash_out_err, temp_hash_out_last, temp_hash_out_stall) == 4) begin
hash_out_queue.push_back(temp_hash_out);
hash_out_err_queue.push_back(temp_hash_out_err);
hash_out_last_queue.push_back(temp_hash_out_last);
hash_out_stall_queue.push_back(temp_hash_out_stall);
end
$fclose(fd);
// Initialise First Checking Values
hash_out_check = hash_out_queue.pop_front();
hash_out_err_check = hash_out_err_queue.pop_front();
hash_out_last_check = hash_out_last_queue.pop_front();
hash_out_stall = hash_out_stall_queue.pop_front();
// Defaultly enable Message Builder
en = 1;
// Defaultly set Sync Reset Low
sync_rst = 0;
#20 nrst = 1;
#20 nrst = 0;
#20 nrst = 1;
#20 hash_in_drive_en = 1;
// Write some data into the config register
# 30 id_in_buf_drive_en = 1;
# 30 hash_out_drive_ready = 1;
end
initial begin
forever begin
#10 clk = 0;
#10 clk = 1;
end
end
endmodule
\ No newline at end of file
...@@ -49,7 +49,10 @@ def main(): ...@@ -49,7 +49,10 @@ def main():
# Hash Output List Initialisation # Hash Output List Initialisation
hash_list = [] hash_list = []
hash_id_list = [] hash_id_list = []
hash_gap_list = []
hash_stall_list = [] hash_stall_list = []
hash_err_list = []
# ID Lists # ID Lists
id_gap_list = [] id_gap_list = []
expected_id_list = [] expected_id_list = []
...@@ -63,6 +66,7 @@ def main(): ...@@ -63,6 +66,7 @@ def main():
if gap_limit > 0: if gap_limit > 0:
id_gap_list.append(random.randrange(0,gap_limit)) id_gap_list.append(random.randrange(0,gap_limit))
in_cfg_words_gap_list.append(random.randrange(0,gap_limit)) in_cfg_words_gap_list.append(random.randrange(0,gap_limit))
hash_gap_list.append(random.randrange(0,gap_limit))
else: else:
id_gap_list.append(0) id_gap_list.append(0)
in_cfg_words_gap_list.append(0) in_cfg_words_gap_list.append(0)
...@@ -91,6 +95,7 @@ def main(): ...@@ -91,6 +95,7 @@ def main():
expected_id_list.append(id_value) expected_id_list.append(id_value)
sync_cfg_id_list.append(id_value) sync_cfg_id_list.append(id_value)
hash_id_list.append(id_value)
old_id_value = id_value old_id_value = id_value
...@@ -163,8 +168,11 @@ def main(): ...@@ -163,8 +168,11 @@ def main():
hash_val = binascii.hexlify(hashlib.sha256(h).digest()).decode() hash_val = binascii.hexlify(hashlib.sha256(h).digest()).decode()
hash_list.append(hash_val) hash_list.append(hash_val)
# TODO: Calculate whether Hash is errored
hash_err_list.append("0")
# Write out Input ID Seed to Text File # Write out Input ID Seed to Text File
input_header = ["id_seed", "use_seed", "last", "gap_value"] input_header = ["id_value", "last", "gap_value"]
with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_id_stim.csv", "w", encoding="UTF8", newline='') as f: with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_id_stim.csv", "w", encoding="UTF8", newline='') as f:
writer = csv.writer(f) writer = csv.writer(f)
for idx, word in enumerate(expected_id_list): for idx, word in enumerate(expected_id_list):
...@@ -226,6 +234,22 @@ def main(): ...@@ -226,6 +234,22 @@ def main():
for idx, word in enumerate(hash_list): for idx, word in enumerate(hash_list):
writer.writerow([word, expected_id_list[idx], "1", hash_stall_list[idx]]) writer.writerow([word, expected_id_list[idx], "1", hash_stall_list[idx]])
# Write out Validator Hash Input to text file
output_header = ["hash_in", "hash_in_id", "hash_last", "gap_value"]
with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_hash_in_stim.csv", "w", encoding="UTF8", newline='') as f:
writer = csv.writer(f)
for idx, word in enumerate(hash_list):
writer.writerow([word, hash_id_list[idx], "1", hash_gap_list[idx]])
# Write out hash out (include error) value to text file
output_header = ["hash", "hash_err", "hash_last", "stall_value"]
with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "output_hash_out_ref.csv", "w", encoding="UTF8", newline='') as f:
writer = csv.writer(f)
for idx, word in enumerate(hash_list):
writer.writerow([word, hash_err_list[idx], "1", hash_stall_list[idx]])
def chunkstring(string, length): def chunkstring(string, length):
array_len = math.ceil(len(string)/length) array_len = math.ceil(len(string)/length)
array = [] array = []
......
718,0,1,2 718,0,1,2
3d08,0,1,1 3600,0,1,1
3800,0,1,0 240,0,1,0
dc0,0,1,0 3378,0,1,2
640,0,1,2 20f0,0,1,1
1278,0,1,2 31c8,0,1,1
1dc0,0,1,1 2c28,0,1,0
c80,0,1,1 39b8,0,1,0
a50,0,1,2 3970,0,1,2
1c8,0,1,0 750,0,1,1
1258,0,1,1 810,0,1,2
458,0,1,2 1960,0,1,1
20b0,0,1,2 1918,0,1,1
3a8,0,1,1 1ff8,0,1,2
1968,0,1,2 3840,0,1,2
1228,0,1,1 3bf0,0,1,0
1910,0,1,2 3fa8,0,1,1
1c80,0,1,1 e78,0,1,2
1858,0,1,1 2b20,0,1,0
21f8,0,1,0 1800,0,1,1
258,0,1,1 3c30,0,1,1
2a20,0,1,2 3900,0,1,2
2328,0,1,1 2f60,0,1,0
9f8,0,1,1 34d0,0,1,2
3e08,0,1,2 920,0,1,2
38,0,1,2 2880,0,1,2
3508,0,1,1 5f8,0,1,2
1930,0,1,2
1c80,0,1,1
678,0,1,0
3a48,0,1,1
e98,0,1,2
29a8,0,1,2
1c90,0,1,0
3138,0,1,2
1a70,0,1,1
1be8,0,1,2
1858,0,1,0
5f8,0,1,1
1108,0,1,1 1108,0,1,1
11e8,0,1,2 11e8,0,1,2
23f8,0,1,2 410,0,1,2
928,0,1,1 31a0,0,1,2
3500,0,1,0 2400,0,1,1
30c0,0,1,0 1e00,0,1,1
3650,0,1,1 1b90,0,1,0
3318,0,1,2 2918,0,1,1
14b0,0,1,1 3d20,0,1,0
1930,0,1,0 31d0,0,1,2
1730,0,1,0 1600,0,1,2
2278,0,1,2 270,0,1,0
18,0,1,1 3ca0,0,1,1
30c8,0,1,1 560,0,1,1
2238,0,1,0 1658,0,1,2
420,0,1,2 3070,0,1,2
1a10,0,1,2 1f58,0,1,1
2a0,0,1,2 2aa8,0,1,2
768,0,1,0 1388,0,1,0
2e28,0,1,0 480,0,1,2
2c30,0,1,0 3c30,0,1,2
22f8,0,1,2 1d38,0,1,1
2178,0,1,1 430,0,1,2
11c0,0,1,1 3f58,0,1,2
1d30,0,1,0 3c98,0,1,0
c40,0,1,2 20,0,1,1
2308,0,1,0 2148,0,1,1
2690,0,1,1 3b40,0,1,0
3ca8,0,1,2 2ca0,0,1,0
24a0,0,1,0 3638,0,1,0
3ab8,0,1,2 3518,0,1,2
2980,0,1,1 3790,0,1,2
2730,0,1,1 e48,0,1,2
3858,0,1,0 3d50,0,1,1
950,0,1,2 1990,0,1,0
2938,0,1,1 1d30,0,1,1
1eb0,0,1,1 1af0,0,1,0
3af0,0,1,1 1ce0,0,1,2
1e20,0,1,0 1e38,0,1,0
21e8,0,1,2 1c08,0,1,0
b60,0,1,1 568,0,1,2
df8,0,1,1 2400,0,1,2
a60,0,1,2 2f98,0,1,2
1470,0,1,1 1818,0,1,0
1ae0,0,1,1 3020,0,1,1
10d8,0,1,0 3be8,0,1,1
3b8,0,1,1 730,0,1,2
d68,0,1,0 e8,0,1,1
27c0,0,1,0 2810,0,1,2
3be0,0,1,1 2450,0,1,2
900,0,1,0 3b70,0,1,2
3b50,0,1,2 1b58,0,1,0
10d8,0,1,2 1e80,0,1,2
3ca0,0,1,0 3c08,0,1,2
3b28,0,1,2 248,0,1,2
1fc8,0,1,1 3ab0,0,1,1
3c18,0,1,2 16e0,0,1,2
2490,0,1,2 1690,0,1,1
26d8,0,1,1 9c8,0,1,1
3658,0,1,1 708,0,1,1
c90,0,1,0 21c0,0,1,1
490,0,1,0
2e20,0,1,2
28f0,0,1,2
31c0,0,1,0
1c90,0,1,1
1ee8,0,1,2
3840,0,1,0
308,0,1,0
4000,0,1,2
158,0,1,1
1420,0,1,1
540,0,1,2
718,0,0,1,2 718,0,0,1,2
3d08,0,1,1,1 3600,0,1,1,1
3800,0,2,1,0 240,0,2,1,0
dc0,0,3,1,0 3378,0,3,1,2
640,0,4,1,2 20f0,0,4,1,1
1278,0,5,1,2 31c8,0,5,1,1
1dc0,0,6,1,1 2c28,0,6,1,0
c80,0,7,1,1 39b8,0,7,1,0
a50,0,8,1,2 3970,0,8,1,2
1c8,0,9,1,0 750,0,9,1,1
1258,0,10,1,1 810,0,10,1,2
458,0,11,1,2 1960,0,11,1,1
20b0,0,12,1,2 1918,0,12,1,1
3a8,0,13,1,1 1ff8,0,13,1,2
1968,0,14,1,2 3840,0,14,1,2
1228,0,15,1,1 3bf0,0,15,1,0
1910,0,16,1,2 3fa8,0,16,1,1
1c80,0,17,1,1 e78,0,17,1,2
1858,0,18,1,1 2b20,0,18,1,0
21f8,0,19,1,0 1800,0,19,1,1
258,0,20,1,1 3c30,0,20,1,1
2a20,0,21,1,2 3900,0,21,1,2
2328,0,22,1,1 2f60,0,22,1,0
9f8,0,23,1,1 34d0,0,23,1,2
3e08,0,24,1,2 920,0,24,1,2
38,0,25,1,2 2880,0,25,1,2
3508,0,26,1,1 5f8,0,26,1,2
1930,0,27,1,2 1108,0,27,1,1
1c80,0,28,1,1 11e8,0,28,1,2
678,0,29,1,0 410,0,29,1,2
3a48,0,30,1,1 31a0,0,30,1,2
e98,0,31,1,2 2400,0,31,1,1
29a8,0,32,1,2 1e00,0,32,1,1
1c90,0,33,1,0 1b90,0,33,1,0
3138,0,34,1,2 2918,0,34,1,1
1a70,0,35,1,1 3d20,0,35,1,0
1be8,0,36,1,2 31d0,0,36,1,2
1858,0,37,1,0 1600,0,37,1,2
5f8,0,38,1,1 270,0,38,1,0
1108,0,39,1,1 3ca0,0,39,1,1
11e8,0,40,1,2 560,0,40,1,1
23f8,0,41,1,2 1658,0,41,1,2
928,0,42,1,1 3070,0,42,1,2
3500,0,43,1,0 1f58,0,43,1,1
30c0,0,44,1,0 2aa8,0,44,1,2
3650,0,45,1,1 1388,0,45,1,0
3318,0,46,1,2 480,0,46,1,2
14b0,0,47,1,1 3c30,0,47,1,2
1930,0,48,1,0 1d38,0,48,1,1
1730,0,49,1,0 430,0,49,1,2
2278,0,50,1,2 3f58,0,50,1,2
18,0,51,1,1 3c98,0,51,1,0
30c8,0,52,1,1 20,0,52,1,1
2238,0,53,1,0 2148,0,53,1,1
420,0,54,1,2 3b40,0,54,1,0
1a10,0,55,1,2 2ca0,0,55,1,0
2a0,0,56,1,2 3638,0,56,1,0
768,0,57,1,0 3518,0,57,1,2
2e28,0,58,1,0 3790,0,58,1,2
2c30,0,59,1,0 e48,0,59,1,2
22f8,0,60,1,2 3d50,0,60,1,1
2178,0,61,1,1 1990,0,61,1,0
11c0,0,62,1,1 1d30,0,62,1,1
1d30,0,63,1,0 1af0,0,63,1,0
c40,0,0,1,2 1ce0,0,0,1,2
2308,0,1,1,0 1e38,0,1,1,0
2690,0,2,1,1 1c08,0,2,1,0
3ca8,0,3,1,2 568,0,3,1,2
24a0,0,4,1,0 2400,0,4,1,2
3ab8,0,5,1,2 2f98,0,5,1,2
2980,0,6,1,1 1818,0,6,1,0
2730,0,7,1,1 3020,0,7,1,1
3858,0,8,1,0 3be8,0,8,1,1
950,0,9,1,2 730,0,9,1,2
2938,0,10,1,1 e8,0,10,1,1
1eb0,0,11,1,1 2810,0,11,1,2
3af0,0,12,1,1 2450,0,12,1,2
1e20,0,13,1,0 3b70,0,13,1,2
21e8,0,14,1,2 1b58,0,14,1,0
b60,0,15,1,1 1e80,0,15,1,2
df8,0,16,1,1 3c08,0,16,1,2
a60,0,17,1,2 248,0,17,1,2
1470,0,18,1,1 3ab0,0,18,1,1
1ae0,0,19,1,1 16e0,0,19,1,2
10d8,0,20,1,0 1690,0,20,1,1
3b8,0,21,1,1 9c8,0,21,1,1
d68,0,22,1,0 708,0,22,1,1
27c0,0,23,1,0 21c0,0,23,1,1
3be0,0,24,1,1 490,0,24,1,0
900,0,25,1,0 2e20,0,25,1,2
3b50,0,26,1,2 28f0,0,26,1,2
10d8,0,27,1,2 31c0,0,27,1,0
3ca0,0,28,1,0 1c90,0,28,1,1
3b28,0,29,1,2 1ee8,0,29,1,2
1fc8,0,30,1,1 3840,0,30,1,0
3c18,0,31,1,2 308,0,31,1,0
2490,0,32,1,2 4000,0,32,1,2
26d8,0,33,1,1 158,0,33,1,1
3658,0,34,1,1 1420,0,34,1,1
c90,0,35,1,0 540,0,35,1,2
Source diff could not be displayed: it is too large. Options to address this: view the blob.
eec110c2f50fb5d45bfd9bc9e7ba1afcc0be8b4ef9f8c434e57950152e278363,0,1,0
ea0641772039fe9b95a0b5237f28dc81a4fd96bffde74a8b42ebebf6e52b1be5,1,1,1
a5a302d7f36bc34a4a81600c0db066af0871f7dd980bfec3f0599f92a7c03a16,2,1,1
30448d3b32222b18d8a621cd730a3875f613ed5025cce80d0e5fbf4f5d9a4da0,3,1,1
416c8c5bd405cf15136ac37d61b48652c5b6336ea75e37b7e480f55d85f614e7,4,1,1
f51709f89fbd47d8121a7efcd4961b3b839583cb6c437adc2c02f4c580b96b90,5,1,1
235b7e477412c98f09f5e583d1ebfd9abca6d4a53fa7bf42dedf6fb7f6731ddb,6,1,0
25ca9d14e097a61f9ec826bd68a85450ad206785960f6b4f2ec9cbf9fcb12679,7,1,0
226c04e3f1d118a3ba8ec62411ded505ae02ac014f0a4f4ff11582540cd0a1a5,8,1,0
2e5d0956c008eba4c0d95bfb12230011c563ff7c7ae93bdb91539bc24095c8aa,9,1,1
9b8ca48622af00b735142251542f4776016aed0743298dfc22e21cc6dfee935d,10,1,1
b47df1397135edd7e9a37efc0e66b33ad4f44991e4c41faf8fc769ee27e46e10,11,1,2
c5e839cf980b4153cd866a05676dd4669b59fb6845917bad63c448461d349361,12,1,2
3726fa457a02cc8ae61facf332f9f88b5422249a1317562a3365fb192a2a5d26,13,1,1
8f858e3e8fceed1a475f959b718b03335c6fa410f2da0db648d897808543fff4,14,1,1
b8aba3075880b3de65992ed30f3424722c878e757643eb2bf157d5a2fd8cf867,15,1,2
a17c2c985c93f84649f20da400a3adffcab99a190072e04349f0191502225dc3,16,1,0
f34f6e8be183302ca1e52c5401d53efc4c1ca636bd43197a44ca4adcd4f88e26,17,1,2
505d0fa167887f17609b1d01253a414245505781ff3cebaec236553742388bd7,18,1,0
4f0249d3c732a01cc1631c81d65c339c38b5002ccc22f03353ab4d22e591b7ff,19,1,1
0096519325bfed8166ae6995b17086a0ee95421b4ab187c38f1dad77ddfcb739,20,1,2
1175e013e009bbd08675b79553c5782c8e7f1d2d27b694c5729e1a28b78da2da,21,1,0
fccbb6ce114d48f9c9f06e7c431c6a0136b30602498916d750a178935e79d61e,22,1,2
21e3a3b251fe38fc656d19656f189b7f92d68408db1dea2a7f0ed10a5af79a3c,23,1,1
fba6e4bd2614fa7368b874f05b7eaa3983a0247e3ddf363e641b0c1e7f329d31,24,1,2
5cbf7420809df3477ed8f9cc4785fcf647098636e1327d8e0b974cf480a72814,25,1,1
088b8f12891abcf8a5a95315dd9055bd0f275a0ed4828e4438c739dd942ddf20,26,1,0
cdbe7c3bfc8459eb7d30cd03a693904d6f77d02a41910fe4bcce07ac54128b3d,27,1,2
8fb91ad478af62f3315016314c0ca35cc79138ee0a77be4ca60932bfc8c925eb,28,1,2
0b274213f4c3fa6879c190b4022cfb8a7b61a1821e7770dcb96d079d6900c190,29,1,2
3225121691563be77c03e6f80052b5ef2e9f45b01e7b7ea0b9c18dd3d2156fa4,30,1,1
9a717cbcd994870f301125b40952ad92d06404e13dc6ab05e6998beb68e81d94,31,1,1
bb3145f6f7732829731d2dc4cf72c7b960ca7a110577e29760ba492118f04197,32,1,2
14b5358e208e7fdfa3d1522bc4173df035379446542e86138293db4e82602d9d,33,1,2
151ec5f5b12173ed817a9a2569b6ab65d98a5bcbf14a4a5e8cdb0598a2e8c42d,34,1,2
b9a209b5688d888e371e41c1e4310eec94682b344d1e1bd3d1ed69b480c6df49,35,1,2
cede4ccb8c17c180a9615e6bcf0a84888648890a2b008f1e8fefed3934f56146,36,1,0
52574a6a451a78095aaf7657e28d85e91875d543484cec1fc2c4686c96277424,37,1,1
61597d0bd7392d3b1d0cec1d87d547f935f8fac0b87ecf0279cecc3ffaca277a,38,1,2
c5796a7f97136fed9ff7850987a5e06d88c41945ee2a39755789a60b5783956d,39,1,0
c756b219994b0ab825bc9f19216b40dc0ca68fa7d45e42471b2f58b0bb13cbd1,40,1,0
2d889b58d39fd6c5741bf96d9e829cc3abf415e504207bd589bc95a15dfefedb,41,1,2
8f93f1374818f9ec1fb75285c147df03eaba6710e2de487a9d60cd06e9ede16c,42,1,1
23bfec2dc84deb417436d36a003fa4b74bce05a4de0ff2d8d947de17044aa1bb,43,1,0
85a35bc5615e768450d3197669d66cead92754c788705bed1cf839d683d2cd8e,44,1,0
d4f56f70e84ac6df99ec6dd05bedf48bdf2ea7b448e96bbd471be746b610112b,45,1,0
550874fbd172baea4b3d4fa027f5a131da8f5b5f80cd7c2207e58296c380c285,46,1,1
19d2dc98f1b828215a37efb710ff390e2ba7f54206a060396917952fb7281b19,47,1,2
70219a29c0b25405bd19107b7c9b8d2b77ee537f5c634605555954431621fc10,48,1,1
330125bae65293015753251bff7460ccb5e6813530949be4db95ded212dcd980,49,1,1
d8d6954dc6dd9154f187be48f217ba75ce93d837df4e2586e8de3d2cd047e169,50,1,1
d9962c694dd9f5018617964fa006bc93f1199f45b8b951180e46446870770f90,51,1,0
bae982d752422d9f188d780776928d974b109646a947624d8917f59a73aa6f09,52,1,0
bf05032b37b56bc238347b4a65817b792c5f4991e0d132f15ab23935d43a7881,53,1,0
77965c8ece35f59501323ec5e935a482b3b71cb7c1af2c7ed836fd9822e513fd,54,1,2
c61ff8f76eda6212af00547c7485abff2bd1544ec0a6c85d82bb2bc92d464f93,55,1,1
915e12e3a79207faccfa37ee76efee9eb5bc0c31b436a9de875e063455ea43a6,56,1,2
dcdb48521bb0a4ae461a54f65ec03c98525a55936bba5c4fe00abf5d3b62a243,57,1,1
19181b00f06b95195211ebc251fb3422a10214ca4773277f6221b86a0de8df0c,58,1,0
b0fd6ff6fab50431c5c1f027a225de2ff18e19f23e4485ea1868ebc948f6fbeb,59,1,2
2939e6d605431c805b77509aa76716d4dac2a35924b411744e6810b7857e1c7e,60,1,0
73cab7675763b47464a0fb753352f87c96b61ac69fc9787e070401552d732c42,61,1,0
081c8f75e80c94450ae9e76aff7d699fac7da05f681a74d01fc3f1cc486c232d,62,1,2
40b043dd22d54140ff067d684218085b96c345b1717d9c5ce681eb145d66df3b,63,1,0
4333fb854640f23edc254f8a4872bf4b753f174b928c973243f9df4a8ded7bc2,0,1,1
e519055faa0caeaa35a1931507d549f3f15c7d3f388b6c81fec4e7830672aa1a,1,1,1
6066f348538e17d3b10189a085e808d09ba5acf5ea6b878e60e6ae2abb23e35d,2,1,2
c65b2a292feb7628887bd2428f68b8883b5e1d1c4f49be7430c8918d557fa28c,3,1,2
7884f810020ac01f58906c9913c383fbbab32a78a294c2ba87eaca05e1047f8d,4,1,2
6eef02ff31b69d6e59fbf28029e7ebe26cf5742a3d903e95b1b39b84aa364f0b,5,1,1
3f744fa627653cb6d5ba84ef1d862ffb2e965c281323d9bca251ad17fa5cfaea,6,1,0
a3cd7d65430d7e7a461bac5729c5a8fe5356a3a532b0a23ce021bc5a99631033,7,1,1
76d6e4e07617746d9d96d5b1ac8bbf51f9585fdba518eea48aa86711d82b7ea2,8,1,0
a5a185ca09d97c2110b045624530619174d16e46e4c789a0ff73f6a2b05327a0,9,1,1
f4a98a0f68d216a6f19b669bf3ab9df89771b045bcfc21e6a209ed895912622c,10,1,2
f64f5c87aecaf189f690d7843b63b2a9baccab34aca3d170f364333864643c11,11,1,0
dc41ad69380db8d91d616f6231f7a9ff43f1a810db5cd03288bb4f212e717620,12,1,2
714b99aa39d3d7565dc3196ab4518366316c8cd8eecaddb6b937872566dec04c,13,1,1
219fdf8802d10defb2fbce610b422b1b3a1ca3a76280983a90c204df084b05c6,14,1,1
96086d904bf2aea68f103ba747481e17bfa2a4672cc8b2af5bc2b1ddf88dcf85,15,1,1
ae8121676f22cf3d2063803e070064be5b048900cb2743230e3e84dec9d4401f,16,1,1
5ab5505a24689094eda1e2f24f585789db75231390a72aec6839da444a745a17,17,1,2
7f3fa072f6b8a829f853643890837df3111f7b0e16a3a09a0e37c756aa6d7f8a,18,1,1
5851cf47747ed60bebe2f042669a48f0542b42bbb452a289e846e97e9857f8ef,19,1,2
29b56d181b18b125b37019954a705c8a5388d9dda45b6c56518c475197e6d5e4,20,1,2
f39aa274cf4f796c687e7073c9e675e32d326ee7832eae1ad25865c744edfc65,21,1,0
06406560b42ccbff9bc454f50cc60037c947ae860d42408cf0581e2a3f2de833,22,1,0
dbd828f9d47b01cdb443f01bd2281be924e50f2a19a1e7782f1b879a7b0b0ebb,23,1,1
b3a9b6985202ee65358ae852bd502615e4419d1ec5b2fbdcbab27878837b7567,24,1,0
b3a2215fc64fa7f365ed69745ca359822a59cb6c22fc0b8f3ab19d904516fe3a,25,1,2
b86ab8d16f01b5f95d5316a8de49c5934c6a352376ebd94ec4f74e2ae1e9a4a4,26,1,2
564b1d89f0504870e60cee4f14d70f952f5ff9a4951f0dfcd406f0c0e07eefe9,27,1,0
7f5fdcac4f49485ecdbbf36d2feab7a881398c6d76103ee0defe2e5aa23836dc,28,1,2
462767579c7d5dd8680ff5cdee8d3d7c74c89e20af152b82970312847ebb741d,29,1,2
6de6df3d211e2b8fa8d5b3b416b045d8db9cff270b184f2c45bd6351c5f2f816,30,1,1
f8958f78a145bbad418e14edc86d32e1d6f4203412226b5e8a1f6b943ce61880,31,1,2
7bd43a01b8633a5e03a1e4a261237de99b977a79336d1d172fec9784328cfc41,32,1,1
c46e622ea817d282f39ca2fa959424f3588951f9dbe2da13f88a3dfcbdc8247f,33,1,0
8191622e042d6342fa2e3046a97cb1109c2d70c091194b82f9f1562d2ca56b04,34,1,2
41f59cbb31513f04a67eafef6a7893f8c13f7df87d8b043a23541c1abb30942d,35,1,0
0,1,2 0,1,2
1,1,1 1,1,1
2,1,1 2,1,2
3,1,0 3,1,2
4,1,1 4,1,0
5,1,1 5,1,0
6,1,1 6,1,0
7,1,0 7,1,1
8,1,2 8,1,2
9,1,1 9,1,2
10,1,1 10,1,1
11,1,2 11,1,2
12,1,1 12,1,2
13,1,2 13,1,2
14,1,2 14,1,1
15,1,1 15,1,2
16,1,1 16,1,1
17,1,2 17,1,2
18,1,2 18,1,1
19,1,0 19,1,0
20,1,1 20,1,0
21,1,2 21,1,2
22,1,0 22,1,2
23,1,1 23,1,0
24,1,1 24,1,1
25,1,1 25,1,2
26,1,0 26,1,0
27,1,0 27,1,2
28,1,0 28,1,2
29,1,2 29,1,1
30,1,1 30,1,1
31,1,1 31,1,0
32,1,0 32,1,0
33,1,2 33,1,0
34,1,2 34,1,0
35,1,2 35,1,2
36,1,0 36,1,0
37,1,2 37,1,1
38,1,0 38,1,1
39,1,2 39,1,0
40,1,2 40,1,0
41,1,1 41,1,2
42,1,0 42,1,0
43,1,1 43,1,0
44,1,2 44,1,0
45,1,0 45,1,0
46,1,1 46,1,0
47,1,2 47,1,1
48,1,2 48,1,2
49,1,0 49,1,1
50,1,0 50,1,2
51,1,0 51,1,1
52,1,0 52,1,1
53,1,1 53,1,1
54,1,0 54,1,2
55,1,0 55,1,1
56,1,1 56,1,1
57,1,1 57,1,1
58,1,1 58,1,1
59,1,2 59,1,0
60,1,2 60,1,1
61,1,0 61,1,1
62,1,1 62,1,2
63,1,2 63,1,1
0,1,2 0,1,1
1,1,0 1,1,1
2,1,0 2,1,1
3,1,2 3,1,2
4,1,2 4,1,1
5,1,0 5,1,0
6,1,2 6,1,2
7,1,0 7,1,1
8,1,0 8,1,2
9,1,0 9,1,1
10,1,0 10,1,2
11,1,0 11,1,2
12,1,2 12,1,0
13,1,0 13,1,2
14,1,2 14,1,1
15,1,0 15,1,0
16,1,2 16,1,1
17,1,0 17,1,1
18,1,2 18,1,0
19,1,2 19,1,0
20,1,2 20,1,2
21,1,0 21,1,2
22,1,0 22,1,1
23,1,2 23,1,2
24,1,1 24,1,2
25,1,1 25,1,1
26,1,2 26,1,1
27,1,2 27,1,0
28,1,0 28,1,1
29,1,2 29,1,0
30,1,1 30,1,2
31,1,0 31,1,2
32,1,0 32,1,2
33,1,2 33,1,0
34,1,2 34,1,1
35,1,1 35,1,0
Source diff could not be displayed: it is too large. Options to address this: view the blob.
718,0,0,1,0 718,0,0,1,2
3d08,0,1,1,2 3600,0,1,1,1
3800,0,2,1,2 240,0,2,1,2
dc0,0,3,1,2 3378,0,3,1,2
640,0,4,1,1 20f0,0,4,1,0
1278,0,5,1,2 31c8,0,5,1,2
1dc0,0,6,1,0 2c28,0,6,1,2
c80,0,7,1,2 39b8,0,7,1,0
a50,0,8,1,2 3970,0,8,1,2
1c8,0,9,1,2 750,0,9,1,0
1258,0,10,1,0 810,0,10,1,0
458,0,11,1,1 1960,0,11,1,0
20b0,0,12,1,1 1918,0,12,1,0
3a8,0,13,1,0 1ff8,0,13,1,1
1968,0,14,1,1 3840,0,14,1,1
1228,0,15,1,1 3bf0,0,15,1,1
1910,0,16,1,2 3fa8,0,16,1,0
1c80,0,17,1,1 e78,0,17,1,1
1858,0,18,1,0 2b20,0,18,1,0
21f8,0,19,1,2 1800,0,19,1,0
258,0,20,1,1 3c30,0,20,1,0
2a20,0,21,1,0 3900,0,21,1,2
2328,0,22,1,2 2f60,0,22,1,0
9f8,0,23,1,0 34d0,0,23,1,1
3e08,0,24,1,2 920,0,24,1,0
38,0,25,1,0 2880,0,25,1,1
3508,0,26,1,0 5f8,0,26,1,1
1930,0,27,1,0 1108,0,27,1,2
1c80,0,28,1,2 11e8,0,28,1,2
678,0,29,1,1 410,0,29,1,1
3a48,0,30,1,2 31a0,0,30,1,1
e98,0,31,1,2 2400,0,31,1,2
29a8,0,32,1,1 1e00,0,32,1,1
1c90,0,33,1,2 1b90,0,33,1,0
3138,0,34,1,1 2918,0,34,1,2
1a70,0,35,1,2 3d20,0,35,1,1
1be8,0,36,1,0 31d0,0,36,1,0
1858,0,37,1,1 1600,0,37,1,2
5f8,0,38,1,2 270,0,38,1,2
1108,0,39,1,1 3ca0,0,39,1,1
11e8,0,40,1,2 560,0,40,1,0
23f8,0,41,1,1 1658,0,41,1,2
928,0,42,1,0 3070,0,42,1,0
3500,0,43,1,0 1f58,0,43,1,0
30c0,0,44,1,0 2aa8,0,44,1,1
3650,0,45,1,1 1388,0,45,1,2
3318,0,46,1,2 480,0,46,1,0
14b0,0,47,1,2 3c30,0,47,1,0
1930,0,48,1,1 1d38,0,48,1,2
1730,0,49,1,0 430,0,49,1,1
2278,0,50,1,1 3f58,0,50,1,2
18,0,51,1,0 3c98,0,51,1,2
30c8,0,52,1,2 20,0,52,1,2
2238,0,53,1,0 2148,0,53,1,0
420,0,54,1,1 3b40,0,54,1,0
1a10,0,55,1,2 2ca0,0,55,1,1
2a0,0,56,1,2 3638,0,56,1,1
768,0,57,1,2 3518,0,57,1,1
2e28,0,58,1,1 3790,0,58,1,1
2c30,0,59,1,0 e48,0,59,1,0
22f8,0,60,1,1 3d50,0,60,1,2
2178,0,61,1,0 1990,0,61,1,1
11c0,0,62,1,1 1d30,0,62,1,0
1d30,0,63,1,2 1af0,0,63,1,2
c40,0,0,1,0 1ce0,0,0,1,1
2308,0,1,1,1 1e38,0,1,1,0
2690,0,2,1,2 1c08,0,2,1,0
3ca8,0,3,1,0 568,0,3,1,0
24a0,0,4,1,0 2400,0,4,1,1
3ab8,0,5,1,1 2f98,0,5,1,2
2980,0,6,1,2 1818,0,6,1,2
2730,0,7,1,0 3020,0,7,1,2
3858,0,8,1,0 3be8,0,8,1,1
950,0,9,1,0 730,0,9,1,1
2938,0,10,1,0 e8,0,10,1,2
1eb0,0,11,1,1 2810,0,11,1,0
3af0,0,12,1,1 2450,0,12,1,2
1e20,0,13,1,0 3b70,0,13,1,1
21e8,0,14,1,1 1b58,0,14,1,1
b60,0,15,1,0 1e80,0,15,1,1
df8,0,16,1,2 3c08,0,16,1,2
a60,0,17,1,2 248,0,17,1,0
1470,0,18,1,2 3ab0,0,18,1,1
1ae0,0,19,1,1 16e0,0,19,1,0
10d8,0,20,1,2 1690,0,20,1,1
3b8,0,21,1,2 9c8,0,21,1,2
d68,0,22,1,0 708,0,22,1,2
27c0,0,23,1,1 21c0,0,23,1,1
3be0,0,24,1,1 490,0,24,1,0
900,0,25,1,0 2e20,0,25,1,1
3b50,0,26,1,0 28f0,0,26,1,0
10d8,0,27,1,2 31c0,0,27,1,0
3ca0,0,28,1,2 1c90,0,28,1,0
3b28,0,29,1,2 1ee8,0,29,1,0
1fc8,0,30,1,1 3840,0,30,1,0
3c18,0,31,1,1 308,0,31,1,1
2490,0,32,1,2 4000,0,32,1,1
26d8,0,33,1,2 158,0,33,1,1
3658,0,34,1,2 1420,0,34,1,1
c90,0,35,1,2 540,0,35,1,0
eec110c2f50fb5d45bfd9bc9e7ba1afcc0be8b4ef9f8c434e57950152e278363,0,1,0
ea0641772039fe9b95a0b5237f28dc81a4fd96bffde74a8b42ebebf6e52b1be5,0,1,2
a5a302d7f36bc34a4a81600c0db066af0871f7dd980bfec3f0599f92a7c03a16,0,1,0
30448d3b32222b18d8a621cd730a3875f613ed5025cce80d0e5fbf4f5d9a4da0,0,1,2
416c8c5bd405cf15136ac37d61b48652c5b6336ea75e37b7e480f55d85f614e7,0,1,1
f51709f89fbd47d8121a7efcd4961b3b839583cb6c437adc2c02f4c580b96b90,0,1,2
235b7e477412c98f09f5e583d1ebfd9abca6d4a53fa7bf42dedf6fb7f6731ddb,0,1,1
25ca9d14e097a61f9ec826bd68a85450ad206785960f6b4f2ec9cbf9fcb12679,0,1,1
226c04e3f1d118a3ba8ec62411ded505ae02ac014f0a4f4ff11582540cd0a1a5,0,1,0
2e5d0956c008eba4c0d95bfb12230011c563ff7c7ae93bdb91539bc24095c8aa,0,1,2
9b8ca48622af00b735142251542f4776016aed0743298dfc22e21cc6dfee935d,0,1,0
b47df1397135edd7e9a37efc0e66b33ad4f44991e4c41faf8fc769ee27e46e10,0,1,1
c5e839cf980b4153cd866a05676dd4669b59fb6845917bad63c448461d349361,0,1,0
3726fa457a02cc8ae61facf332f9f88b5422249a1317562a3365fb192a2a5d26,0,1,1
8f858e3e8fceed1a475f959b718b03335c6fa410f2da0db648d897808543fff4,0,1,0
b8aba3075880b3de65992ed30f3424722c878e757643eb2bf157d5a2fd8cf867,0,1,1
a17c2c985c93f84649f20da400a3adffcab99a190072e04349f0191502225dc3,0,1,2
f34f6e8be183302ca1e52c5401d53efc4c1ca636bd43197a44ca4adcd4f88e26,0,1,2
505d0fa167887f17609b1d01253a414245505781ff3cebaec236553742388bd7,0,1,0
4f0249d3c732a01cc1631c81d65c339c38b5002ccc22f03353ab4d22e591b7ff,0,1,2
0096519325bfed8166ae6995b17086a0ee95421b4ab187c38f1dad77ddfcb739,0,1,1
1175e013e009bbd08675b79553c5782c8e7f1d2d27b694c5729e1a28b78da2da,0,1,1
fccbb6ce114d48f9c9f06e7c431c6a0136b30602498916d750a178935e79d61e,0,1,2
21e3a3b251fe38fc656d19656f189b7f92d68408db1dea2a7f0ed10a5af79a3c,0,1,2
fba6e4bd2614fa7368b874f05b7eaa3983a0247e3ddf363e641b0c1e7f329d31,0,1,0
5cbf7420809df3477ed8f9cc4785fcf647098636e1327d8e0b974cf480a72814,0,1,0
088b8f12891abcf8a5a95315dd9055bd0f275a0ed4828e4438c739dd942ddf20,0,1,1
cdbe7c3bfc8459eb7d30cd03a693904d6f77d02a41910fe4bcce07ac54128b3d,0,1,1
8fb91ad478af62f3315016314c0ca35cc79138ee0a77be4ca60932bfc8c925eb,0,1,2
0b274213f4c3fa6879c190b4022cfb8a7b61a1821e7770dcb96d079d6900c190,0,1,1
3225121691563be77c03e6f80052b5ef2e9f45b01e7b7ea0b9c18dd3d2156fa4,0,1,2
9a717cbcd994870f301125b40952ad92d06404e13dc6ab05e6998beb68e81d94,0,1,2
bb3145f6f7732829731d2dc4cf72c7b960ca7a110577e29760ba492118f04197,0,1,0
14b5358e208e7fdfa3d1522bc4173df035379446542e86138293db4e82602d9d,0,1,1
151ec5f5b12173ed817a9a2569b6ab65d98a5bcbf14a4a5e8cdb0598a2e8c42d,0,1,0
b9a209b5688d888e371e41c1e4310eec94682b344d1e1bd3d1ed69b480c6df49,0,1,0
cede4ccb8c17c180a9615e6bcf0a84888648890a2b008f1e8fefed3934f56146,0,1,2
52574a6a451a78095aaf7657e28d85e91875d543484cec1fc2c4686c96277424,0,1,0
61597d0bd7392d3b1d0cec1d87d547f935f8fac0b87ecf0279cecc3ffaca277a,0,1,0
c5796a7f97136fed9ff7850987a5e06d88c41945ee2a39755789a60b5783956d,0,1,1
c756b219994b0ab825bc9f19216b40dc0ca68fa7d45e42471b2f58b0bb13cbd1,0,1,2
2d889b58d39fd6c5741bf96d9e829cc3abf415e504207bd589bc95a15dfefedb,0,1,0
8f93f1374818f9ec1fb75285c147df03eaba6710e2de487a9d60cd06e9ede16c,0,1,2
23bfec2dc84deb417436d36a003fa4b74bce05a4de0ff2d8d947de17044aa1bb,0,1,0
85a35bc5615e768450d3197669d66cead92754c788705bed1cf839d683d2cd8e,0,1,1
d4f56f70e84ac6df99ec6dd05bedf48bdf2ea7b448e96bbd471be746b610112b,0,1,0
550874fbd172baea4b3d4fa027f5a131da8f5b5f80cd7c2207e58296c380c285,0,1,1
19d2dc98f1b828215a37efb710ff390e2ba7f54206a060396917952fb7281b19,0,1,1
70219a29c0b25405bd19107b7c9b8d2b77ee537f5c634605555954431621fc10,0,1,0
330125bae65293015753251bff7460ccb5e6813530949be4db95ded212dcd980,0,1,2
d8d6954dc6dd9154f187be48f217ba75ce93d837df4e2586e8de3d2cd047e169,0,1,2
d9962c694dd9f5018617964fa006bc93f1199f45b8b951180e46446870770f90,0,1,1
bae982d752422d9f188d780776928d974b109646a947624d8917f59a73aa6f09,0,1,2
bf05032b37b56bc238347b4a65817b792c5f4991e0d132f15ab23935d43a7881,0,1,2
77965c8ece35f59501323ec5e935a482b3b71cb7c1af2c7ed836fd9822e513fd,0,1,2
c61ff8f76eda6212af00547c7485abff2bd1544ec0a6c85d82bb2bc92d464f93,0,1,2
915e12e3a79207faccfa37ee76efee9eb5bc0c31b436a9de875e063455ea43a6,0,1,1
dcdb48521bb0a4ae461a54f65ec03c98525a55936bba5c4fe00abf5d3b62a243,0,1,2
19181b00f06b95195211ebc251fb3422a10214ca4773277f6221b86a0de8df0c,0,1,2
b0fd6ff6fab50431c5c1f027a225de2ff18e19f23e4485ea1868ebc948f6fbeb,0,1,1
2939e6d605431c805b77509aa76716d4dac2a35924b411744e6810b7857e1c7e,0,1,0
73cab7675763b47464a0fb753352f87c96b61ac69fc9787e070401552d732c42,0,1,1
081c8f75e80c94450ae9e76aff7d699fac7da05f681a74d01fc3f1cc486c232d,0,1,1
40b043dd22d54140ff067d684218085b96c345b1717d9c5ce681eb145d66df3b,0,1,1
4333fb854640f23edc254f8a4872bf4b753f174b928c973243f9df4a8ded7bc2,0,1,2
e519055faa0caeaa35a1931507d549f3f15c7d3f388b6c81fec4e7830672aa1a,0,1,1
6066f348538e17d3b10189a085e808d09ba5acf5ea6b878e60e6ae2abb23e35d,0,1,1
c65b2a292feb7628887bd2428f68b8883b5e1d1c4f49be7430c8918d557fa28c,0,1,1
7884f810020ac01f58906c9913c383fbbab32a78a294c2ba87eaca05e1047f8d,0,1,0
6eef02ff31b69d6e59fbf28029e7ebe26cf5742a3d903e95b1b39b84aa364f0b,0,1,0
3f744fa627653cb6d5ba84ef1d862ffb2e965c281323d9bca251ad17fa5cfaea,0,1,1
a3cd7d65430d7e7a461bac5729c5a8fe5356a3a532b0a23ce021bc5a99631033,0,1,1
76d6e4e07617746d9d96d5b1ac8bbf51f9585fdba518eea48aa86711d82b7ea2,0,1,1
a5a185ca09d97c2110b045624530619174d16e46e4c789a0ff73f6a2b05327a0,0,1,0
f4a98a0f68d216a6f19b669bf3ab9df89771b045bcfc21e6a209ed895912622c,0,1,1
f64f5c87aecaf189f690d7843b63b2a9baccab34aca3d170f364333864643c11,0,1,0
dc41ad69380db8d91d616f6231f7a9ff43f1a810db5cd03288bb4f212e717620,0,1,2
714b99aa39d3d7565dc3196ab4518366316c8cd8eecaddb6b937872566dec04c,0,1,2
219fdf8802d10defb2fbce610b422b1b3a1ca3a76280983a90c204df084b05c6,0,1,0
96086d904bf2aea68f103ba747481e17bfa2a4672cc8b2af5bc2b1ddf88dcf85,0,1,0
ae8121676f22cf3d2063803e070064be5b048900cb2743230e3e84dec9d4401f,0,1,0
5ab5505a24689094eda1e2f24f585789db75231390a72aec6839da444a745a17,0,1,2
7f3fa072f6b8a829f853643890837df3111f7b0e16a3a09a0e37c756aa6d7f8a,0,1,2
5851cf47747ed60bebe2f042669a48f0542b42bbb452a289e846e97e9857f8ef,0,1,2
29b56d181b18b125b37019954a705c8a5388d9dda45b6c56518c475197e6d5e4,0,1,1
f39aa274cf4f796c687e7073c9e675e32d326ee7832eae1ad25865c744edfc65,0,1,0
06406560b42ccbff9bc454f50cc60037c947ae860d42408cf0581e2a3f2de833,0,1,0
dbd828f9d47b01cdb443f01bd2281be924e50f2a19a1e7782f1b879a7b0b0ebb,0,1,1
b3a9b6985202ee65358ae852bd502615e4419d1ec5b2fbdcbab27878837b7567,0,1,2
b3a2215fc64fa7f365ed69745ca359822a59cb6c22fc0b8f3ab19d904516fe3a,0,1,2
b86ab8d16f01b5f95d5316a8de49c5934c6a352376ebd94ec4f74e2ae1e9a4a4,0,1,2
564b1d89f0504870e60cee4f14d70f952f5ff9a4951f0dfcd406f0c0e07eefe9,0,1,1
7f5fdcac4f49485ecdbbf36d2feab7a881398c6d76103ee0defe2e5aa23836dc,0,1,0
462767579c7d5dd8680ff5cdee8d3d7c74c89e20af152b82970312847ebb741d,0,1,2
6de6df3d211e2b8fa8d5b3b416b045d8db9cff270b184f2c45bd6351c5f2f816,0,1,1
f8958f78a145bbad418e14edc86d32e1d6f4203412226b5e8a1f6b943ce61880,0,1,0
7bd43a01b8633a5e03a1e4a261237de99b977a79336d1d172fec9784328cfc41,0,1,1
c46e622ea817d282f39ca2fa959424f3588951f9dbe2da13f88a3dfcbdc8247f,0,1,1
8191622e042d6342fa2e3046a97cb1109c2d70c091194b82f9f1562d2ca56b04,0,1,0
41f59cbb31513f04a67eafef6a7893f8c13f7df87d8b043a23541c1abb30942d,0,1,2
eec110c2f50fb5d45bfd9bc9e7ba1afcc0be8b4ef9f8c434e57950152e278363,0,1,0 eec110c2f50fb5d45bfd9bc9e7ba1afcc0be8b4ef9f8c434e57950152e278363,0,1,0
f909a5ffce3c39bfb3104d9278f76b909dfbeb7c72f318dc8523ab11b6017090,1,1,1 ea0641772039fe9b95a0b5237f28dc81a4fd96bffde74a8b42ebebf6e52b1be5,1,1,2
bca58d138346c71535f7105fe4ecd57c0bcea4af11a5c7624b4fd62c31851cd3,2,1,1 a5a302d7f36bc34a4a81600c0db066af0871f7dd980bfec3f0599f92a7c03a16,2,1,0
2cf2aaad835c4e557fa24897f6b87667a3c178051b3ca8eae67fa91346a86d24,3,1,2 30448d3b32222b18d8a621cd730a3875f613ed5025cce80d0e5fbf4f5d9a4da0,3,1,2
35a06199ff501ac21d4233bf7a6d25a3e09603cf0f16bfb73752bf9684bf9b2f,4,1,2 416c8c5bd405cf15136ac37d61b48652c5b6336ea75e37b7e480f55d85f614e7,4,1,1
88b6ec38427d9b17552a64632400e0d6f880c8590c92f76ac794a578e1757ffc,5,1,2 f51709f89fbd47d8121a7efcd4961b3b839583cb6c437adc2c02f4c580b96b90,5,1,2
a56b6d54666f68725f9c061a45c4bfb59528158a93ba81599958b8d789af6040,6,1,1 235b7e477412c98f09f5e583d1ebfd9abca6d4a53fa7bf42dedf6fb7f6731ddb,6,1,1
52952e0cc3f1d7cef48e3f32f7eccd9e355dd5371a63ce8c8cf0ac8c8968d6ac,7,1,2 25ca9d14e097a61f9ec826bd68a85450ad206785960f6b4f2ec9cbf9fcb12679,7,1,1
c50f6cb58fb23704559d33a87a623dd02bc397c95c2d5878c0f23aca52a746a9,8,1,0 226c04e3f1d118a3ba8ec62411ded505ae02ac014f0a4f4ff11582540cd0a1a5,8,1,0
dc6851fdd9c67feaa69b5a3b2b31e37e153c27b426316793aa085895bf8771c0,9,1,0 2e5d0956c008eba4c0d95bfb12230011c563ff7c7ae93bdb91539bc24095c8aa,9,1,2
71239b5cfbc19e1cf609fbe3beeef85e15661bae9ebd212781ae45d4cfdc9024,10,1,2 9b8ca48622af00b735142251542f4776016aed0743298dfc22e21cc6dfee935d,10,1,0
8b68f60808e8ef66934656e0f02d898dd9db7bf6c9a32cf9c3e0ef4a1e24ddda,11,1,2 b47df1397135edd7e9a37efc0e66b33ad4f44991e4c41faf8fc769ee27e46e10,11,1,1
7a8e26790d709976def2b47b89f4ec788ebfe0fbabdcb59c00b339e9441ab9a8,12,1,2 c5e839cf980b4153cd866a05676dd4669b59fb6845917bad63c448461d349361,12,1,0
b195f54e833faf94dfd1088b448e27602c6f7f2ceea6b930037e3ae21d8900d4,13,1,0 3726fa457a02cc8ae61facf332f9f88b5422249a1317562a3365fb192a2a5d26,13,1,1
ae1301202c1c94d77badc2283b7e0006fbe7847784a9b0f9db7956ab56f807cd,14,1,1 8f858e3e8fceed1a475f959b718b03335c6fa410f2da0db648d897808543fff4,14,1,0
29ce1d81699fad1cbd46893a8890f8d4794c943cd3dc2fe4cbaba1735df2e063,15,1,0 b8aba3075880b3de65992ed30f3424722c878e757643eb2bf157d5a2fd8cf867,15,1,1
b0e6d839a2ed92539ea11e52ae0a12f99589888101787b0580f3001ac92febcd,16,1,0 a17c2c985c93f84649f20da400a3adffcab99a190072e04349f0191502225dc3,16,1,2
ec283a687a761e9c369fa56fd11aeda350e90a8598b6589def0f94d4928f4bf9,17,1,2 f34f6e8be183302ca1e52c5401d53efc4c1ca636bd43197a44ca4adcd4f88e26,17,1,2
cff2268d89ccf74500abbd3573c04c5f3aec12713ad8736bee5adba4bc3fb24a,18,1,1 505d0fa167887f17609b1d01253a414245505781ff3cebaec236553742388bd7,18,1,0
653f3415aee10f739ae4231b17063acd35549c6a5702055b9edf0ccd052cea48,19,1,1 4f0249d3c732a01cc1631c81d65c339c38b5002ccc22f03353ab4d22e591b7ff,19,1,2
ac2241b42ab756522c3967d97fcdf3b55d0856c27cb3ef33ee86964a7cadf4f5,20,1,2 0096519325bfed8166ae6995b17086a0ee95421b4ab187c38f1dad77ddfcb739,20,1,1
5becbd245aaf6b2f5331b324bf24f6c09e7184a048de5b3e5f414147a15fe906,21,1,1 1175e013e009bbd08675b79553c5782c8e7f1d2d27b694c5729e1a28b78da2da,21,1,1
e48a649307aec2d630cf7f16d05b1a9eb44c93510b08a2bc2a4edb0733876662,22,1,1 fccbb6ce114d48f9c9f06e7c431c6a0136b30602498916d750a178935e79d61e,22,1,2
0ed53354625d13aa87f94be3a79bd0f7cbccc9a343b0e471bc5b01f2525c7e8c,23,1,2 21e3a3b251fe38fc656d19656f189b7f92d68408db1dea2a7f0ed10a5af79a3c,23,1,2
7733a1b48bf7ad529bdeb0fec7f6e26359c8642d8d1426b2790ab1546b42932a,24,1,2 fba6e4bd2614fa7368b874f05b7eaa3983a0247e3ddf363e641b0c1e7f329d31,24,1,0
2b8a039c232a83b457d343638869c7e54765ca33a4167683e7e5925b7e6ab605,25,1,1 5cbf7420809df3477ed8f9cc4785fcf647098636e1327d8e0b974cf480a72814,25,1,0
2161868f3d67221c316f0f81809aee51b8985d29ac309af647f89d041eb5b1f8,26,1,0 088b8f12891abcf8a5a95315dd9055bd0f275a0ed4828e4438c739dd942ddf20,26,1,1
e16735d170f450944771f9aee4f7de2341ced9dc42f928b97d0d488d7eec407e,27,1,1 cdbe7c3bfc8459eb7d30cd03a693904d6f77d02a41910fe4bcce07ac54128b3d,27,1,1
18aaf3d16fb9068f086eae37f4a99023afb9baeafcf71b7149463267cb38ea70,28,1,1 8fb91ad478af62f3315016314c0ca35cc79138ee0a77be4ca60932bfc8c925eb,28,1,2
607f502961bf7128dd0582b9a571efa0cea3e963ac67a9e3b456f52bb53a3cb9,29,1,0 0b274213f4c3fa6879c190b4022cfb8a7b61a1821e7770dcb96d079d6900c190,29,1,1
8606079991b7a8abe0cd38e5769df5383235396f40c3358edab721d98003303c,30,1,2 3225121691563be77c03e6f80052b5ef2e9f45b01e7b7ea0b9c18dd3d2156fa4,30,1,2
d00b4ab93cae7da54b7abf7279db292a21d52044adb0ac6827be60659fc7cd0d,31,1,0 9a717cbcd994870f301125b40952ad92d06404e13dc6ab05e6998beb68e81d94,31,1,2
08a55e5e5fa0661ee79d3ecd316fd7cc99dc7d8ed1c93facebde6ee1cf1076cd,32,1,0 bb3145f6f7732829731d2dc4cf72c7b960ca7a110577e29760ba492118f04197,32,1,0
eb267ad1eeae88c9d7f7002fb2ecfa91ef34a3e821aa973cb96351260e5758a0,33,1,1 14b5358e208e7fdfa3d1522bc4173df035379446542e86138293db4e82602d9d,33,1,1
03b9498cc22138daa719d5f4df3411328fba475d9b4ed555abc2f4d1421ef908,34,1,1 151ec5f5b12173ed817a9a2569b6ab65d98a5bcbf14a4a5e8cdb0598a2e8c42d,34,1,0
70b5c750751a06fcd4a37fd218e6ec1bc9b333cc88b470834b5817d40503ec6e,35,1,1 b9a209b5688d888e371e41c1e4310eec94682b344d1e1bd3d1ed69b480c6df49,35,1,0
6aa4e39368f7503a0ebbed7ed2d6ca319e4bc6d12850670521cc5ea39d3e9892,36,1,2 cede4ccb8c17c180a9615e6bcf0a84888648890a2b008f1e8fefed3934f56146,36,1,2
9631860b028e749a622e45e75dcb0aba513e5132c84866c405817370cbc98e83,37,1,2 52574a6a451a78095aaf7657e28d85e91875d543484cec1fc2c4686c96277424,37,1,0
088b8f12891abcf8a5a95315dd9055bd0f275a0ed4828e4438c739dd942ddf20,38,1,1 61597d0bd7392d3b1d0cec1d87d547f935f8fac0b87ecf0279cecc3ffaca277a,38,1,0
cdbe7c3bfc8459eb7d30cd03a693904d6f77d02a41910fe4bcce07ac54128b3d,39,1,2 c5796a7f97136fed9ff7850987a5e06d88c41945ee2a39755789a60b5783956d,39,1,1
8fb91ad478af62f3315016314c0ca35cc79138ee0a77be4ca60932bfc8c925eb,40,1,2 c756b219994b0ab825bc9f19216b40dc0ca68fa7d45e42471b2f58b0bb13cbd1,40,1,2
5c994145e0457e4b27e17a1a4b91c3201febe4884427a6f97f565bb10cef1664,41,1,2 2d889b58d39fd6c5741bf96d9e829cc3abf415e504207bd589bc95a15dfefedb,41,1,0
00ed78a5e4367b0c00dede8fdd45b5f5560b82f42df04d2e731cd53b11ae0696,42,1,1 8f93f1374818f9ec1fb75285c147df03eaba6710e2de487a9d60cd06e9ede16c,42,1,2
9848aceeb1374534725a30e69cb10cf85b6de125ffb1ab0bde623c074d5f4be4,43,1,2 23bfec2dc84deb417436d36a003fa4b74bce05a4de0ff2d8d947de17044aa1bb,43,1,0
e21d8b52aabe226501a62b3541c59c7387cbdd72896c4972dd207f2230bb40b0,44,1,2 85a35bc5615e768450d3197669d66cead92754c788705bed1cf839d683d2cd8e,44,1,1
4baf6fbc8dabc8f590d528a92a174c6ee601697321ce63ef6707c24e32a5aa26,45,1,2 d4f56f70e84ac6df99ec6dd05bedf48bdf2ea7b448e96bbd471be746b610112b,45,1,0
19d91162f3c3f8bebc7093934a0feb2d0f4d49d68026f76d3e1852e74985e572,46,1,1 550874fbd172baea4b3d4fa027f5a131da8f5b5f80cd7c2207e58296c380c285,46,1,1
d33034f6a11eb63a0442e86222a2378661e4303e88fde85d6111f2fc51a29564,47,1,2 19d2dc98f1b828215a37efb710ff390e2ba7f54206a060396917952fb7281b19,47,1,1
72902677753a71ee277fc2d38421063afe18d4326758edf5681861cce8ef3d61,48,1,1 70219a29c0b25405bd19107b7c9b8d2b77ee537f5c634605555954431621fc10,48,1,0
ef5383ba7f7d24472a20c86b417329c4000970718e2663b98eb8b234b8ad1c82,49,1,1 330125bae65293015753251bff7460ccb5e6813530949be4db95ded212dcd980,49,1,2
18e2a439b5f6230f88763fb27473ed47e2ff2defe58532e73b59f5a4d90021fd,50,1,0 d8d6954dc6dd9154f187be48f217ba75ce93d837df4e2586e8de3d2cd047e169,50,1,2
45aee4075e3bbd4cab4af22210214a42e563999ce20ffa9f0017d2b87fdefc99,51,1,0 d9962c694dd9f5018617964fa006bc93f1199f45b8b951180e46446870770f90,51,1,1
efc8893b0c467f8db7690c1808f4e5401d1523a444da95ef387b98cad9131668,52,1,0 bae982d752422d9f188d780776928d974b109646a947624d8917f59a73aa6f09,52,1,2
21b572cbf923782a7eef9993d2034c1f2bff4629ce4b7064dc792f4f46701bff,53,1,1 bf05032b37b56bc238347b4a65817b792c5f4991e0d132f15ab23935d43a7881,53,1,2
c02db01c7f040be32a7bbf69f4b52290237631eb527b41e222379f58236f295f,54,1,0 77965c8ece35f59501323ec5e935a482b3b71cb7c1af2c7ed836fd9822e513fd,54,1,2
40ea2fdfc79e1f1eb0d850308f2d5bae5cfdff4384d64e4e168e29d6c6dcb7ed,55,1,1 c61ff8f76eda6212af00547c7485abff2bd1544ec0a6c85d82bb2bc92d464f93,55,1,2
b4f43d72c79515268f144661fb32993138d174ff8d54892b45a6c7dc6e0a4226,56,1,1 915e12e3a79207faccfa37ee76efee9eb5bc0c31b436a9de875e063455ea43a6,56,1,1
bb47abbc0284f7f6b19b1f5fa8e9af87d2cf24770bb895d34727abcff90d85e6,57,1,0 dcdb48521bb0a4ae461a54f65ec03c98525a55936bba5c4fe00abf5d3b62a243,57,1,2
e2d713a01cc9cba5bf722757a7cb6153ce6375baac52ee12e3e46a3b00915c4b,58,1,0 19181b00f06b95195211ebc251fb3422a10214ca4773277f6221b86a0de8df0c,58,1,2
25a4bdea8d4d42776a1d83da854dbd0430a34d6a4dcbee8eaf81279b15e12291,59,1,1 b0fd6ff6fab50431c5c1f027a225de2ff18e19f23e4485ea1868ebc948f6fbeb,59,1,1
324ca091ea1357a2bed7c1697827f6602275eae504a10126deb0cdc92546d5fb,60,1,1 2939e6d605431c805b77509aa76716d4dac2a35924b411744e6810b7857e1c7e,60,1,0
fb8cbfdaba8d8de6c9446aef9fdb768c3a78d026bb798574bdac2a80a5dc5733,61,1,2 73cab7675763b47464a0fb753352f87c96b61ac69fc9787e070401552d732c42,61,1,1
4f9330b4a6897a4f6ad632da8d7117005fa1181ea456493d0c7101b0ae28de90,62,1,0 081c8f75e80c94450ae9e76aff7d699fac7da05f681a74d01fc3f1cc486c232d,62,1,1
b9561e05ff078b70b559e17de698900540df5bb55ec46d632462f3cda6823bb2,63,1,1 40b043dd22d54140ff067d684218085b96c345b1717d9c5ce681eb145d66df3b,63,1,1
1f7a113217ad1525cd04c2200135e45bed9b34f1375f7086ed780d9dba6cc595,0,1,2 4333fb854640f23edc254f8a4872bf4b753f174b928c973243f9df4a8ded7bc2,0,1,2
e32d56c58727fc1f9848c38083255e21091a72c72f9c71653358d796cf17f272,1,1,2 e519055faa0caeaa35a1931507d549f3f15c7d3f388b6c81fec4e7830672aa1a,1,1,1
17e04c4bc48de0879c9e18c2d75b34222e4b77363fbd338d010f169351f41c9f,2,1,2 6066f348538e17d3b10189a085e808d09ba5acf5ea6b878e60e6ae2abb23e35d,2,1,1
f80f806ece842e8db7866342077e4372c9151ad0630f9257a935bb9d71ab66dd,3,1,2 c65b2a292feb7628887bd2428f68b8883b5e1d1c4f49be7430c8918d557fa28c,3,1,1
11e9d8792583ad9beec9022050915ea0ec7797947571e28a9ae25f4c22babf68,4,1,2 7884f810020ac01f58906c9913c383fbbab32a78a294c2ba87eaca05e1047f8d,4,1,0
5627bd2c93cdd1b6ff225b20cca0d5cdb74a43488e7df89b936e98d71fc66294,5,1,0 6eef02ff31b69d6e59fbf28029e7ebe26cf5742a3d903e95b1b39b84aa364f0b,5,1,0
26c1e8256e3def246128afd91d8cdff4b83d4257ba7db6ec7cb23b722de2c9d6,6,1,2 3f744fa627653cb6d5ba84ef1d862ffb2e965c281323d9bca251ad17fa5cfaea,6,1,1
530176ac9cf80fa181b52f160f2e45090e22edfe73fcf81d43cdbbf0f9778fec,7,1,1 a3cd7d65430d7e7a461bac5729c5a8fe5356a3a532b0a23ce021bc5a99631033,7,1,1
46f1e1aa0db4789221b5c99923be986ff36689ac15aaa27b85ba24b28f6fe199,8,1,1 76d6e4e07617746d9d96d5b1ac8bbf51f9585fdba518eea48aa86711d82b7ea2,8,1,1
114dbe06457718d6a076ac635c4e8d55dffdd3f15f8ceb048198182d8efd7c1c,9,1,0 a5a185ca09d97c2110b045624530619174d16e46e4c789a0ff73f6a2b05327a0,9,1,0
2f7beaa38367ab067f43d964a4cde00ac8f7661aa9e1cd46111344e6a784c951,10,1,2 f4a98a0f68d216a6f19b669bf3ab9df89771b045bcfc21e6a209ed895912622c,10,1,1
5ac5b0506e8e691723efba9dc9c9a15b652831863fe2bba24268233a05eafeec,11,1,2 f64f5c87aecaf189f690d7843b63b2a9baccab34aca3d170f364333864643c11,11,1,0
4dda7384be203140dbc49a076a7e6b76d9112675a3029df640448f2179e953be,12,1,2 dc41ad69380db8d91d616f6231f7a9ff43f1a810db5cd03288bb4f212e717620,12,1,2
76aa5fc37a6628340dfb7f8b9a4c9d138d02155c1ea8abbd6225e23c927df840,13,1,2 714b99aa39d3d7565dc3196ab4518366316c8cd8eecaddb6b937872566dec04c,13,1,2
d04380cc3dd2c3eb4ab705151f5d12eebf86585a9b867ef846fd5a1f1e6161f8,14,1,2 219fdf8802d10defb2fbce610b422b1b3a1ca3a76280983a90c204df084b05c6,14,1,0
34df27f9c8f4f4db2175a33ffd0eb44788134fab1b002757192f84fa94454f57,15,1,0 96086d904bf2aea68f103ba747481e17bfa2a4672cc8b2af5bc2b1ddf88dcf85,15,1,0
1c13f34d3c4d4d3bbdca8e243905d5c9de5e4c1d98b272b222391cf1f13b7184,16,1,0 ae8121676f22cf3d2063803e070064be5b048900cb2743230e3e84dec9d4401f,16,1,0
05e17ba0f827c14cd1120bc42f68673a73d187e62039cd3148e5ed015c162632,17,1,1 5ab5505a24689094eda1e2f24f585789db75231390a72aec6839da444a745a17,17,1,2
c8a91589b448de06d3275b582f9e0d9716236f265b339f1705850cf157c410f9,18,1,0 7f3fa072f6b8a829f853643890837df3111f7b0e16a3a09a0e37c756aa6d7f8a,18,1,2
eab88e86d7f334c2c02d7400189f6e080354d4cecaf507d0461e1e4d036bc0eb,19,1,0 5851cf47747ed60bebe2f042669a48f0542b42bbb452a289e846e97e9857f8ef,19,1,2
01d6756968fccc11ca43f9b36a50fc303ffb4cd6811bcdf13d09d6e1fce1eed3,20,1,1 29b56d181b18b125b37019954a705c8a5388d9dda45b6c56518c475197e6d5e4,20,1,1
86256b8c5af7fb0832807a7737daa800b1e9a542ac4bbf3fa60087b652adc16b,21,1,1 f39aa274cf4f796c687e7073c9e675e32d326ee7832eae1ad25865c744edfc65,21,1,0
a2991c5df59cc7df0c47401fe9c0928b67bea9f5c04dc5479a63bbb309f7af23,22,1,2 06406560b42ccbff9bc454f50cc60037c947ae860d42408cf0581e2a3f2de833,22,1,0
90c5583036dfdc73b2fa0933b1168fa7ce4a14dffcfbce4f085d84f159c784b8,23,1,2 dbd828f9d47b01cdb443f01bd2281be924e50f2a19a1e7782f1b879a7b0b0ebb,23,1,1
a6441fdc2e4b68955189f1a5d72e50f080db4841a089568c6c1347d7b05a1ce7,24,1,1 b3a9b6985202ee65358ae852bd502615e4419d1ec5b2fbdcbab27878837b7567,24,1,2
d3e6cf58710e9e5bcffe67fd728d4e3f4055af46c92ec150af93788a2b56824c,25,1,1 b3a2215fc64fa7f365ed69745ca359822a59cb6c22fc0b8f3ab19d904516fe3a,25,1,2
d843400cce5fc05e84045b39a62c8ad7944a04bb36df2448af8791c203b6f690,26,1,2 b86ab8d16f01b5f95d5316a8de49c5934c6a352376ebd94ec4f74e2ae1e9a4a4,26,1,2
bf0e629445d89620ee41b1818aec01e6174a97ca3f9bde96c2acb6498e5efb0d,27,1,0 564b1d89f0504870e60cee4f14d70f952f5ff9a4951f0dfcd406f0c0e07eefe9,27,1,1
a047c8aded8a034624c6f3f1246de829941019b6f28557417f70217dacb34da2,28,1,1 7f5fdcac4f49485ecdbbf36d2feab7a881398c6d76103ee0defe2e5aa23836dc,28,1,0
d9159efafd5d3af1ceaf724733480f914b241a5d260a47877ddc101a05c1fe67,29,1,1 462767579c7d5dd8680ff5cdee8d3d7c74c89e20af152b82970312847ebb741d,29,1,2
08d7e6831bb79c67d8378a1afedd5e6082cca5f60243387279815436cad13f76,30,1,1 6de6df3d211e2b8fa8d5b3b416b045d8db9cff270b184f2c45bd6351c5f2f816,30,1,1
456bf5ab78d630f088fc7da2320c8b4aa4d29ce1edab299b2cf662d367bbb229,31,1,0 f8958f78a145bbad418e14edc86d32e1d6f4203412226b5e8a1f6b943ce61880,31,1,0
8a8550534e652ed1557847431efbdd442075375bfc4a79ff9548c5d99c03a415,32,1,2 7bd43a01b8633a5e03a1e4a261237de99b977a79336d1d172fec9784328cfc41,32,1,1
3c4adb4817f08f234dfa1eb3a803ca29af2e9c86d6cd18cf347275e67589d531,33,1,1 c46e622ea817d282f39ca2fa959424f3588951f9dbe2da13f88a3dfcbdc8247f,33,1,1
cb94c03bfdd01224bd08519962c2fbf958a582a50dab4d3d537e301c101deb2f,34,1,0 8191622e042d6342fa2e3046a97cb1109c2d70c091194b82f9f1562d2ca56b04,34,1,0
6f5cc260c8f8a527aead7ede796c8abb5880f5f717ca18c6d6b853672dd46e2c,35,1,2 41f59cbb31513f04a67eafef6a7893f8c13f7df87d8b043a23541c1abb30942d,35,1,2
0,1,1 0,1,1
1,1,1 1,1,1
2,1,1 2,1,2
3,1,1 3,1,2
4,1,0 4,1,2
5,1,1 5,1,2
6,1,0 6,1,2
7,1,0 7,1,0
8,1,0 8,1,0
9,1,2 9,1,2
10,1,0 10,1,0
11,1,1 11,1,0
12,1,0 12,1,0
13,1,0 13,1,0
14,1,1 14,1,0
15,1,2 15,1,2
16,1,0 16,1,0
17,1,0 17,1,0
18,1,2 18,1,0
19,1,2 19,1,0
20,1,0 20,1,0
21,1,0 21,1,0
22,1,2 22,1,2
23,1,1 23,1,1
24,1,2 24,1,2
25,1,2 25,1,0
26,1,2 26,1,1
27,1,1 27,1,0
28,1,1 28,1,1
29,1,1 29,1,0
30,1,0 30,1,1
31,1,0 31,1,0
32,1,0 32,1,1
33,1,2 33,1,2
34,1,1 34,1,0
35,1,0 35,1,1
36,1,2 36,1,1
37,1,0 37,1,0
38,1,1 38,1,2
39,1,0 39,1,2
40,1,1 40,1,2
41,1,0 41,1,1
42,1,2 42,1,1
43,1,2 43,1,2
44,1,0 44,1,2
45,1,0 45,1,0
46,1,1 46,1,1
47,1,1 47,1,2
48,1,0 48,1,2
49,1,0 49,1,0
50,1,1 50,1,0
51,1,1 51,1,2
52,1,0 52,1,2
53,1,1 53,1,1
54,1,2 54,1,2
55,1,1 55,1,0
56,1,1 56,1,0
57,1,2 57,1,1
58,1,1 58,1,1
59,1,0 59,1,0
60,1,2 60,1,1
61,1,2 61,1,2
62,1,0 62,1,2
63,1,1 63,1,1
0,1,2 0,1,1
1,1,1 1,1,2
2,1,2 2,1,2
3,1,1 3,1,2
4,1,1 4,1,2
5,1,0 5,1,2
6,1,2 6,1,2
7,1,2 7,1,0
8,1,0 8,1,0
9,1,0 9,1,0
10,1,0 10,1,1
11,1,1 11,1,2
12,1,0 12,1,2
13,1,0 13,1,1
14,1,2 14,1,0
15,1,2 15,1,1
16,1,2 16,1,0
17,1,1 17,1,1
18,1,1 18,1,2
19,1,1 19,1,1
20,1,0 20,1,1
21,1,1 21,1,0
22,1,0 22,1,2
23,1,0 23,1,1
24,1,0 24,1,1
25,1,0 25,1,2
26,1,1 26,1,0
27,1,2 27,1,0
28,1,1 28,1,0
29,1,2 29,1,1
30,1,1 30,1,1
31,1,1 31,1,0
32,1,1 32,1,0
33,1,0 33,1,2
34,1,2 34,1,0
35,1,1 35,1,1
Source diff could not be displayed: it is too large. Options to address this: view the blob.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment