Files
FPGA-Neural/sim/neuron_parallel.vcd
T
micheleandClaude Sonnet 5 a918c3f1e9 feat: configurable activation functions + runtime-configurable network topology
Two related Phase 5 additions, both threaded the same way (a new
runtime field defaulting to the pre-existing behavior, settable
per-layer via the descriptor table or per-run via SET_BASE):

Configurable activation functions:
- neuron_parallel.v gains a 2-bit `activation` port (ACT_NONE =
  linear + two-sided INT8 saturate, ACT_RELU = the original
  hardwired behavior, kept as the default so every pre-existing
  caller/testbench is unaffected), threaded through neuron_memory.v.
- spi_engine.v: SET_BASE sel=6 (single-layer path); the descriptor
  table gains a 7th byte (multi-layer path).
- Verified in neuron_parallel_tb.v (negative pass-through + negative
  saturation to -128) and end-to-end in
  spi_neuron_top_runnetwork_tb.v (a real negative accumulator that
  ACT_RELU would clamp to 0 comes through unclamped under ACT_NONE,
  over real SPI/RAM).

Runtime network width (one bitstream, any topology up to its
build-time max, entirely host-configured over SPI):
- neuron_parallel.v gains n_inputs_real, bounding its MAC group loop
  (n_inputs_real/PARALLEL groups instead of the fixed build-time
  count). neuron_memory.v gains n_inputs_real/n_neurons_real,
  bounding its X/W RAM-read loop and its neuron loop. All default to
  the build-time max, so unconnected callers are unaffected.
  n_inputs_real must stay a multiple of PARALLEL (same constraint
  N_INPUTS itself is held to at elaboration time, now the caller's
  runtime responsibility).
- spi_engine.v: SET_BASE sel=7/8 (single-layer path); the descriptor
  table grows to 11 bytes/layer (+n_inputs_real +n_neurons_real,
  multi-layer path) -- layer_sequencer.v also now copies only
  n_neurons_real bytes into the ping-pong buffer, not the full
  build width.
- This is real early termination, not bookkeeping: no RAM
  zero-padding needed for the unused tail, and it measurably
  completes faster. neuron_parallel_tb.v TEST 7: 3 cycles vs 6 for a
  reduced-vs-full run, with garbage loaded into the skipped lanes to
  prove they're never read. neuron_memory_tb.v TEST 5: through the
  real PSRAM stack, 209 cycles vs 788. layer_sequencer_tb.v proves a
  reduced n_neurons_real shortens the ping-pong copy-out itself
  (bytes beyond the real count stay untouched, not just differing).

docs/FPGA-NeuralNetwork-Engine.md: §8.1 opcode/SET_BASE table, new
"Runtime network width" subsection, Phase 5 checklist, Current
Status table, and the "Core architectural principle" statement
updated to reflect that topology (not just trained parameters) is
now host-configured at runtime up to a build-time ceiling.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WQV3vS9TXaGDJ5cRfnfidt
2026-09-02 20:18:24 +02:00

1442 lines
27 KiB
Plaintext

$date
Wed Sep 2 20:14:10 2026
$end
$version
Icarus Verilog
$end
$timescale
1ps
$end
$scope module tb $end
$var wire 8 ! y [7:0] $end
$var wire 1 " done $end
$var wire 1 # busy $end
$var parameter 32 $ ACC_WIDTH $end
$var parameter 2 % ACT_NONE $end
$var parameter 2 & ACT_RELU $end
$var parameter 32 ' DATA_WIDTH $end
$var parameter 32 ( N_INPUTS $end
$var parameter 32 ) PARALLEL $end
$var reg 2 * activation [1:0] $end
$var reg 8 + bias [7:0] $end
$var reg 1 , clk $end
$var reg 16 - n_inputs_real [15:0] $end
$var reg 1 . rst $end
$var reg 1 / start $end
$var reg 256 0 w_bus [255:0] $end
$var reg 256 1 x_bus [255:0] $end
$var integer 32 2 cycles_full [31:0] $end
$var integer 32 3 cycles_reduced [31:0] $end
$var integer 32 4 errors [31:0] $end
$var integer 32 5 i [31:0] $end
$var integer 32 6 t_done [31:0] $end
$var integer 32 7 t_start [31:0] $end
$scope module dut $end
$var wire 2 8 activation [1:0] $end
$var wire 8 9 bias [7:0] $end
$var wire 1 , clk $end
$var wire 16 : n_inputs_real [15:0] $end
$var wire 1 . rst $end
$var wire 1 / start $end
$var wire 256 ; w_bus [255:0] $end
$var wire 256 < x_bus [255:0] $end
$var wire 64 = x_group [63:0] $end
$var wire 64 > w_group [63:0] $end
$var wire 16 ? groups_real [15:0] $end
$var wire 32 @ final_acc [31:0] $end
$var wire 32 A bias_ext [31:0] $end
$var wire 32 B acc_next [31:0] $end
$var parameter 32 C ACC_WIDTH $end
$var parameter 2 D ACT_NONE $end
$var parameter 2 E ACT_RELU $end
$var parameter 32 F DATA_WIDTH $end
$var parameter 32 G GROUPS $end
$var parameter 32 H GROUP_INDEX_WIDTH $end
$var parameter 32 I N_INPUTS $end
$var parameter 32 J PARALLEL $end
$var reg 32 K acc [31:0] $end
$var reg 1 # busy $end
$var reg 1 " done $end
$var reg 2 L group_index [1:0] $end
$var reg 8 M y [7:0] $end
$scope module u_mac8 $end
$var wire 32 N acc_in [31:0] $end
$var wire 64 O w_bus [63:0] $end
$var wire 64 P x_bus [63:0] $end
$var wire 32 Q acc_out [31:0] $end
$var parameter 32 R ACC_WIDTH $end
$var parameter 32 S DATA_WIDTH $end
$var parameter 32 T PARALLEL $end
$var parameter 32 U TREE_LEVELS $end
$scope begin GEN_MAC[0] $end
$var parameter 2 V i $end
$scope module u_mac $end
$var wire 32 W acc_in [31:0] $end
$var wire 8 X w [7:0] $end
$var wire 8 Y x [7:0] $end
$var wire 32 Z product_ext [31:0] $end
$var wire 16 [ product [15:0] $end
$var wire 32 \ acc_out [31:0] $end
$var parameter 32 ] ACC_WIDTH $end
$var parameter 32 ^ DATA_WIDTH $end
$var parameter 64 _ PROD_WIDTH $end
$upscope $end
$upscope $end
$scope begin GEN_MAC[1] $end
$var parameter 2 ` i $end
$scope module u_mac $end
$var wire 32 a acc_in [31:0] $end
$var wire 8 b w [7:0] $end
$var wire 8 c x [7:0] $end
$var wire 32 d product_ext [31:0] $end
$var wire 16 e product [15:0] $end
$var wire 32 f acc_out [31:0] $end
$var parameter 32 g ACC_WIDTH $end
$var parameter 32 h DATA_WIDTH $end
$var parameter 64 i PROD_WIDTH $end
$upscope $end
$upscope $end
$scope begin GEN_MAC[2] $end
$var parameter 3 j i $end
$scope module u_mac $end
$var wire 32 k acc_in [31:0] $end
$var wire 8 l w [7:0] $end
$var wire 8 m x [7:0] $end
$var wire 32 n product_ext [31:0] $end
$var wire 16 o product [15:0] $end
$var wire 32 p acc_out [31:0] $end
$var parameter 32 q ACC_WIDTH $end
$var parameter 32 r DATA_WIDTH $end
$var parameter 64 s PROD_WIDTH $end
$upscope $end
$upscope $end
$scope begin GEN_MAC[3] $end
$var parameter 3 t i $end
$scope module u_mac $end
$var wire 32 u acc_in [31:0] $end
$var wire 8 v w [7:0] $end
$var wire 8 w x [7:0] $end
$var wire 32 x product_ext [31:0] $end
$var wire 16 y product [15:0] $end
$var wire 32 z acc_out [31:0] $end
$var parameter 32 { ACC_WIDTH $end
$var parameter 32 | DATA_WIDTH $end
$var parameter 64 } PROD_WIDTH $end
$upscope $end
$upscope $end
$scope begin GEN_MAC[4] $end
$var parameter 4 ~ i $end
$scope module u_mac $end
$var wire 32 !" acc_in [31:0] $end
$var wire 8 "" w [7:0] $end
$var wire 8 #" x [7:0] $end
$var wire 32 $" product_ext [31:0] $end
$var wire 16 %" product [15:0] $end
$var wire 32 &" acc_out [31:0] $end
$var parameter 32 '" ACC_WIDTH $end
$var parameter 32 (" DATA_WIDTH $end
$var parameter 64 )" PROD_WIDTH $end
$upscope $end
$upscope $end
$scope begin GEN_MAC[5] $end
$var parameter 4 *" i $end
$scope module u_mac $end
$var wire 32 +" acc_in [31:0] $end
$var wire 8 ," w [7:0] $end
$var wire 8 -" x [7:0] $end
$var wire 32 ." product_ext [31:0] $end
$var wire 16 /" product [15:0] $end
$var wire 32 0" acc_out [31:0] $end
$var parameter 32 1" ACC_WIDTH $end
$var parameter 32 2" DATA_WIDTH $end
$var parameter 64 3" PROD_WIDTH $end
$upscope $end
$upscope $end
$scope begin GEN_MAC[6] $end
$var parameter 4 4" i $end
$scope module u_mac $end
$var wire 32 5" acc_in [31:0] $end
$var wire 8 6" w [7:0] $end
$var wire 8 7" x [7:0] $end
$var wire 32 8" product_ext [31:0] $end
$var wire 16 9" product [15:0] $end
$var wire 32 :" acc_out [31:0] $end
$var parameter 32 ;" ACC_WIDTH $end
$var parameter 32 <" DATA_WIDTH $end
$var parameter 64 =" PROD_WIDTH $end
$upscope $end
$upscope $end
$scope begin GEN_MAC[7] $end
$var parameter 4 >" i $end
$scope module u_mac $end
$var wire 32 ?" acc_in [31:0] $end
$var wire 8 @" w [7:0] $end
$var wire 8 A" x [7:0] $end
$var wire 32 B" product_ext [31:0] $end
$var wire 16 C" product [15:0] $end
$var wire 32 D" acc_out [31:0] $end
$var parameter 32 E" ACC_WIDTH $end
$var parameter 32 F" DATA_WIDTH $end
$var parameter 64 G" PROD_WIDTH $end
$upscope $end
$upscope $end
$scope begin GEN_TREE_INPUT[0] $end
$var parameter 2 H" i $end
$upscope $end
$scope begin GEN_TREE_INPUT[1] $end
$var parameter 2 I" i $end
$upscope $end
$scope begin GEN_TREE_INPUT[2] $end
$var parameter 3 J" i $end
$upscope $end
$scope begin GEN_TREE_INPUT[3] $end
$var parameter 3 K" i $end
$upscope $end
$scope begin GEN_TREE_INPUT[4] $end
$var parameter 4 L" i $end
$upscope $end
$scope begin GEN_TREE_INPUT[5] $end
$var parameter 4 M" i $end
$upscope $end
$scope begin GEN_TREE_INPUT[6] $end
$var parameter 4 N" i $end
$upscope $end
$scope begin GEN_TREE_INPUT[7] $end
$var parameter 4 O" i $end
$upscope $end
$scope begin GEN_TREE_LEVEL[0] $end
$var parameter 2 P" level $end
$scope begin GEN_TREE_NODE[0] $end
$var parameter 2 Q" node $end
$upscope $end
$scope begin GEN_TREE_NODE[1] $end
$var parameter 2 R" node $end
$upscope $end
$scope begin GEN_TREE_NODE[2] $end
$var parameter 3 S" node $end
$upscope $end
$scope begin GEN_TREE_NODE[3] $end
$var parameter 3 T" node $end
$upscope $end
$upscope $end
$scope begin GEN_TREE_LEVEL[1] $end
$var parameter 2 U" level $end
$scope begin GEN_TREE_NODE[0] $end
$var parameter 2 V" node $end
$upscope $end
$scope begin GEN_TREE_NODE[1] $end
$var parameter 2 W" node $end
$upscope $end
$upscope $end
$scope begin GEN_TREE_LEVEL[2] $end
$var parameter 3 X" level $end
$scope begin GEN_TREE_NODE[0] $end
$var parameter 2 Y" node $end
$upscope $end
$upscope $end
$upscope $end
$upscope $end
$scope task run_neuron $end
$upscope $end
$scope task test_1 $end
$upscope $end
$scope task test_2 $end
$upscope $end
$scope task test_3 $end
$upscope $end
$scope task test_4 $end
$upscope $end
$scope task test_5 $end
$upscope $end
$scope task test_6 $end
$upscope $end
$scope task test_7 $end
$var reg 1 Z" pass_7 $end
$upscope $end
$upscope $end
$enddefinitions $end
$comment Show the parameter values. $end
$dumpall
b0 Y"
b10 X"
b1 W"
b0 V"
b1 U"
b11 T"
b10 S"
b1 R"
b0 Q"
b0 P"
b111 O"
b110 N"
b101 M"
b100 L"
b11 K"
b10 J"
b1 I"
b0 H"
b10000 G"
b1000 F"
b100000 E"
b111 >"
b10000 ="
b1000 <"
b100000 ;"
b110 4"
b10000 3"
b1000 2"
b100000 1"
b101 *"
b10000 )"
b1000 ("
b100000 '"
b100 ~
b10000 }
b1000 |
b100000 {
b11 t
b10000 s
b1000 r
b100000 q
b10 j
b10000 i
b1000 h
b100000 g
b1 `
b10000 _
b1000 ^
b100000 ]
b0 V
b11 U
b1000 T
b1000 S
b100000 R
b1000 J
b100000 I
b10 H
b100 G
b1000 F
b1 E
b0 D
b100000 C
b1000 )
b100000 (
b1000 '
b1 &
b0 %
b100000 $
$end
#0
$dumpvars
xZ"
bx D"
bx C"
bx B"
bx A"
bx @"
b0 ?"
bx :"
bx 9"
bx 8"
bx 7"
bx 6"
b0 5"
bx 0"
bx /"
bx ."
bx -"
bx ,"
b0 +"
bx &"
bx %"
bx $"
bx #"
bx ""
b0 !"
bx z
bx y
bx x
bx w
bx v
b0 u
bx p
bx o
bx n
bx m
bx l
b0 k
bx f
bx e
bx d
bx c
bx b
b0 a
bx \
bx [
bx Z
bx Y
bx X
b0 W
bx Q
bx P
bx O
bx N
bx M
bx L
bx K
bx B
b0 A
bx @
b100 ?
bx >
bx =
b0 <
b0 ;
b100000 :
b0 9
b1 8
bx 7
bx 6
bx 5
b0 4
bx 3
bx 2
b0 1
b0 0
0/
1.
b100000 -
0,
b0 +
b1 *
x#
x"
bx !
$end
#5000
b0 @
b0 B
b0 Q
b0 \
b0 f
b0 p
b0 z
b0 &"
b0 0"
b0 :"
b0 D"
b0 Z
b0 d
b0 n
b0 x
b0 $"
b0 ."
b0 8"
b0 B"
b0 [
b0 Y
b0 e
b0 c
b0 o
b0 m
b0 y
b0 w
b0 %"
b0 #"
b0 /"
b0 -"
b0 9"
b0 7"
b0 C"
b0 A"
b0 X
b0 b
b0 l
b0 v
b0 ""
b0 ,"
b0 6"
b0 @"
b0 =
b0 P
b0 >
b0 O
0"
0#
b0 !
b0 M
b0 K
b0 N
b0 L
1,
#10000
0,
#15000
b10 p
b10 n
b11111111111111111111111111111100 f
b11111111111111111111111111111100 d
b100 B
b100 Q
b110 \
b110 Z
b10 o
b1 l
b10 m
b1111111111111100 e
b11111111 b
b100 c
b110 [
b10 X
b11 Y
b101 @
b1 A
b11111111100000010 >
b11111111100000010 O
b11111111100000010 0
b11111111100000010 ;
b100000010000000011 =
b100000010000000011 P
b100000010000000011 1
b100000010000000011 <
b1 +
b1 9
0.
1,
#20000
0,
#25000
1#
1/
1,
#30000
0,
#35000
b0 \
b0 Z
b0 f
b0 d
b0 p
b0 n
b0 Y
b0 c
b0 m
b0 [
b0 X
b0 e
b0 b
b0 o
b0 l
b0 =
b0 P
b0 >
b0 O
b1 L
b101 @
b100 B
b100 Q
b100 K
b100 N
0/
1,
#40000
0,
#45000
b10 L
1,
#50000
0,
#55000
b11 L
1,
#60000
0,
#65000
1"
0#
b101 !
b101 M
b110 @
b101 B
b101 Q
b101 K
b101 N
1,
#70000
0,
#75000
0"
b11111111111111111111111111111111 D"
b11111111111111111111111111111111 B"
b11111111111111111111111111111111 :"
b11111111111111111111111111111111 8"
b11111111111111111111111111111111 0"
b11111111111111111111111111111111 ."
b11111111111111111111111111111111 &"
b11111111111111111111111111111111 $"
b11111111111111111111111111111111 z
b11111111111111111111111111111111 x
b11111111111111111111111111111111 p
b11111111111111111111111111111111 n
b11111111111111111111111111111111 f
b11111111111111111111111111111111 d
b11111111111111111111111111111101 B
b11111111111111111111111111111101 Q
b11111111111111111111111111111111 \
b11111111111111111111111111111111 Z
b1111111111111111 C"
b11111111 @"
b1 A"
b1111111111111111 9"
b11111111 6"
b1 7"
b1111111111111111 /"
b11111111 ,"
b1 -"
b1111111111111111 %"
b11111111 ""
b1 #"
b1111111111111111 y
b11111111 v
b1 w
b1111111111111111 o
b11111111 l
b1 m
b1111111111111111 e
b11111111 b
b1 c
b1111111111111111 [
b11111111 X
b1 Y
b11111111111111111111111111111101 @
b0 A
b1111111111111111111111111111111111111111111111111111111111111111 >
b1111111111111111111111111111111111111111111111111111111111111111 O
b100000001000000010000000100000001000000010000000100000001 =
b100000001000000010000000100000001000000010000000100000001 P
b100000 5
b0 +
b0 9
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 0
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ;
b100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001 1
b100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001 <
1,
#80000
0,
#85000
1#
b11111111111111111111111111111000 @
b11111111111111111111111111111000 B
b11111111111111111111111111111000 Q
b0 K
b0 N
b0 L
1/
1,
#90000
0,
#95000
b1 L
b11111111111111111111111111110000 @
b11111111111111111111111111110000 B
b11111111111111111111111111110000 Q
b11111111111111111111111111111000 K
b11111111111111111111111111111000 N
0/
1,
#100000
0,
#105000
b10 L
b11111111111111111111111111101000 @
b11111111111111111111111111101000 B
b11111111111111111111111111101000 Q
b11111111111111111111111111110000 K
b11111111111111111111111111110000 N
1,
#110000
0,
#115000
b11 L
b11111111111111111111111111100000 @
b11111111111111111111111111100000 B
b11111111111111111111111111100000 Q
b11111111111111111111111111101000 K
b11111111111111111111111111101000 N
1,
#120000
0,
#125000
1"
0#
b0 !
b0 M
b11111111111111111111111111011000 @
b11111111111111111111111111011000 B
b11111111111111111111111111011000 Q
b11111111111111111111111111100000 K
b11111111111111111111111111100000 N
1,
#130000
0,
#135000
0"
b11001000 \
b11001000 Z
b11001000 f
b11001000 d
b11001000 p
b11001000 n
b11001000 z
b11001000 x
b11001000 &"
b11001000 $"
b11001000 0"
b11001000 ."
b11001000 :"
b11001000 8"
b11000100000 @
b11000100000 B
b11000100000 Q
b11001000 D"
b11001000 B"
b10 X
b10 b
b10 l
b10 v
b10 ""
b10 ,"
b10 6"
b10 @"
b11001000 [
b1100100 Y
b11001000 e
b1100100 c
b11001000 o
b1100100 m
b11001000 y
b1100100 w
b11001000 %"
b1100100 #"
b11001000 /"
b1100100 -"
b11001000 9"
b1100100 7"
b11001000 C"
b1100100 A"
b100000 5
b1000000010000000100000001000000010000000100000001000000010 >
b1000000010000000100000001000000010000000100000001000000010 O
b1000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010 0
b1000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010 ;
b110010001100100011001000110010001100100011001000110010001100100 =
b110010001100100011001000110010001100100011001000110010001100100 P
b110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100 1
b110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100 <
1,
#140000
0,
#145000
1#
b11001000000 @
b11001000000 B
b11001000000 Q
b0 K
b0 N
b0 L
1/
1,
#150000
0,
#155000
b1 L
b110010000000 @
b110010000000 B
b110010000000 Q
b11001000000 K
b11001000000 N
0/
1,
#160000
0,
#165000
b10 L
b1001011000000 @
b1001011000000 B
b1001011000000 Q
b110010000000 K
b110010000000 N
1,
#170000
0,
#175000
b11 L
b1100100000000 @
b1100100000000 B
b1100100000000 Q
b1001011000000 K
b1001011000000 N
1,
#180000
0,
#185000
1"
0#
b1111111 !
b1111111 M
b1111101000000 @
b1111101000000 B
b1111101000000 Q
b1100100000000 K
b1100100000000 N
1,
#190000
0,
#195000
0"
b10 \
b10 Z
b11111111111111111111111111111111 f
b11111111111111111111111111111111 d
b10 p
b10 n
b11111111111111111111111111111111 z
b11111111111111111111111111111111 x
b10 &"
b10 $"
b11111111111111111111111111111111 0"
b11111111111111111111111111111111 ."
b10 :"
b10 8"
b1100100000100 B
b1100100000100 Q
b11111111111111111111111111111111 D"
b11111111111111111111111111111111 B"
b1100011110100 @
b11111111111111111111111111110000 A
b1 X
b1 b
b1 l
b1 v
b1 ""
b1 ,"
b1 6"
b1 @"
b10 [
b10 Y
b1111111111111111 e
b11111111 c
b10 o
b10 m
b1111111111111111 y
b11111111 w
b10 %"
b10 #"
b1111111111111111 /"
b11111111 -"
b10 9"
b10 7"
b1111111111111111 C"
b11111111 A"
b100000 5
b11110000 +
b11110000 9
b100000001000000010000000100000001000000010000000100000001 >
b100000001000000010000000100000001000000010000000100000001 O
b100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001 0
b100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001 ;
b1111111100000010111111110000001011111111000000101111111100000010 =
b1111111100000010111111110000001011111111000000101111111100000010 P
b1111111100000010111111110000001011111111000000101111111100000010111111110000001011111111000000101111111100000010111111110000001011111111000000101111111100000010111111110000001011111111000000101111111100000010111111110000001011111111000000101111111100000010 1
b1111111100000010111111110000001011111111000000101111111100000010111111110000001011111111000000101111111100000010111111110000001011111111000000101111111100000010111111110000001011111111000000101111111100000010111111110000001011111111000000101111111100000010 <
1,
#200000
0,
#205000
1#
b11111111111111111111111111110100 @
b100 B
b100 Q
b0 K
b0 N
b0 L
1/
1,
#210000
0,
#215000
b1 L
b11111111111111111111111111111000 @
b1000 B
b1000 Q
b100 K
b100 N
0/
1,
#220000
0,
#225000
b10 L
b11111111111111111111111111111100 @
b1100 B
b1100 Q
b1000 K
b1000 N
1,
#230000
0,
#235000
b11 L
b0 @
b10000 B
b10000 Q
b1100 K
b1100 N
1,
#240000
0,
#245000
1"
0#
b0 !
b0 M
b11111111111111111111111111110100 @
b100 B
b100 Q
b0 K
b0 N
1,
#250000
0,
#255000
0"
b0 \
b0 Z
b0 f
b0 d
b0 p
b0 n
b0 z
b0 x
b0 &"
b0 $"
b0 0"
b0 ."
b0 :"
b0 8"
b0 B
b0 Q
b0 D"
b0 B"
b11111111111111111111111111111101 @
b11111111111111111111111111111101 A
b0 X
b0 b
b0 l
b0 v
b0 ""
b0 ,"
b0 6"
b0 @"
b0 [
b0 Y
b0 e
b0 c
b0 o
b0 m
b0 y
b0 w
b0 %"
b0 #"
b0 /"
b0 -"
b0 9"
b0 7"
b0 C"
b0 A"
b100 5
b0 *
b0 8
b11111101 +
b11111101 9
b0 >
b0 O
b11111111111111111111111111111111 0
b11111111111111111111111111111111 ;
b0 =
b0 P
b1000000010000000100000001 1
b1000000010000000100000001 <
1,
#260000
0,
#265000
b11111111111111111111111111111111 \
b11111111111111111111111111111111 Z
b11111111111111111111111111111111 f
b11111111111111111111111111111111 d
b11111111111111111111111111111111 p
b11111111111111111111111111111111 n
b11111111111111111111111111111001 @
b11111111111111111111111111111100 B
b11111111111111111111111111111100 Q
b11111111111111111111111111111111 z
b11111111111111111111111111111111 x
b1111111111111111 [
b1 Y
b1111111111111111 e
b1 c
b1111111111111111 o
b1 m
b1111111111111111 y
b1 w
b11111111 X
b11111111 b
b11111111 l
b11111111 v
b1000000010000000100000001 =
b1000000010000000100000001 P
b11111111111111111111111111111111 >
b11111111111111111111111111111111 O
1#
b0 L
1/
1,
#270000
0,
#275000
b0 \
b0 Z
b0 f
b0 d
b0 p
b0 n
b0 z
b0 x
b0 Y
b0 c
b0 m
b0 w
b0 [
b0 X
b0 e
b0 b
b0 o
b0 l
b0 y
b0 v
b0 =
b0 P
b0 >
b0 O
b1 L
b11111111111111111111111111111001 @
b11111111111111111111111111111100 B
b11111111111111111111111111111100 Q
b11111111111111111111111111111100 K
b11111111111111111111111111111100 N
0/
1,
#280000
0,
#285000
b10 L
1,
#290000
0,
#295000
b11 L
1,
#300000
0,
#305000
1"
0#
b11111001 !
b11111001 M
b11111111111111111111111111110110 @
b11111111111111111111111111111001 B
b11111111111111111111111111111001 Q
b11111111111111111111111111111001 K
b11111111111111111111111111111001 N
1,
#310000
0,
#315000
0"
b11111111111111111111111100111000 D"
b11111111111111111111111100111000 B"
b11111111111111111111111100111000 :"
b11111111111111111111111100111000 8"
b11111111111111111111111100111000 0"
b11111111111111111111111100111000 ."
b11111111111111111111111100111000 &"
b11111111111111111111111100111000 $"
b11111111111111111111111100111000 z
b11111111111111111111111100111000 x
b11111111111111111111111100111000 p
b11111111111111111111111100111000 n
b11111111111111111111111100111000 f
b11111111111111111111111100111000 d
b11111111111111111111100110111001 B
b11111111111111111111100110111001 Q
b11111111111111111111111100111000 \
b11111111111111111111111100111000 Z
b1111111100111000 C"
b11111110 @"
b1100100 A"
b1111111100111000 9"
b11111110 6"
b1100100 7"
b1111111100111000 /"
b11111110 ,"
b1100100 -"
b1111111100111000 %"
b11111110 ""
b1100100 #"
b1111111100111000 y
b11111110 v
b1100100 w
b1111111100111000 o
b11111110 l
b1100100 m
b1111111100111000 e
b11111110 b
b1100100 c
b1111111100111000 [
b11111110 X
b1100100 Y
b11111111111111111111100110111001 @
b0 A
b1111111011111110111111101111111011111110111111101111111011111110 >
b1111111011111110111111101111111011111110111111101111111011111110 O
b110010001100100011001000110010001100100011001000110010001100100 =
b110010001100100011001000110010001100100011001000110010001100100 P
b100000 5
b0 +
b0 9
b1111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110 0
b1111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110 ;
b110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100 1
b110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100011001000110010001100100 <
b0 *
b0 8
1,
#320000
0,
#325000
1#
b11111111111111111111100111000000 @
b11111111111111111111100111000000 B
b11111111111111111111100111000000 Q
b0 K
b0 N
b0 L
1/
1,
#330000
0,
#335000
b1 L
b11111111111111111111001110000000 @
b11111111111111111111001110000000 B
b11111111111111111111001110000000 Q
b11111111111111111111100111000000 K
b11111111111111111111100111000000 N
0/
1,
#340000
0,
#345000
b10 L
b11111111111111111110110101000000 @
b11111111111111111110110101000000 B
b11111111111111111110110101000000 Q
b11111111111111111111001110000000 K
b11111111111111111111001110000000 N
1,
#350000
0,
#355000
b11 L
b11111111111111111110011100000000 @
b11111111111111111110011100000000 B
b11111111111111111110011100000000 Q
b11111111111111111110110101000000 K
b11111111111111111110110101000000 N
1,
#360000
0,
#365000
1"
0#
b10000000 !
b10000000 M
b11111111111111111110000011000000 @
b11111111111111111110000011000000 B
b11111111111111111110000011000000 Q
b11111111111111111110011100000000 K
b11111111111111111110011100000000 N
1,
#370000
0,
#375000
0"
b1 \
b1 Z
b1 f
b1 d
b1 p
b1 n
b1 z
b1 x
b1 &"
b1 $"
b1 0"
b1 ."
b1 :"
b1 8"
b11111111111111111110011100001000 @
b11111111111111111110011100001000 B
b11111111111111111110011100001000 Q
b1 D"
b1 B"
b1 X
b1 b
b1 l
b1 v
b1 ""
b1 ,"
b1 6"
b1 @"
b1 [
b1 Y
b1 e
b1 c
b1 o
b1 m
b1 y
b1 w
b1 %"
b1 #"
b1 /"
b1 -"
b1 9"
b1 7"
b1 C"
b1 A"
b101110111 7
b100000 5
b100000001000000010000000100000001000000010000000100000001 >
b100000001000000010000000100000001000000010000000100000001 O
b100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001 0
b100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001 ;
b100000001000000010000000100000001000000010000000100000001 =
b100000001000000010000000100000001000000010000000100000001 P
b100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001 1
b100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001 <
1Z"
b1 *
b1 8
1,
#380000
0,
#385000
1#
b1000 @
b1000 B
b1000 Q
b0 K
b0 N
b0 L
1/
1,
#390000
0,
#395000
b1 L
b10000 @
b10000 B
b10000 Q
b1000 K
b1000 N
0/
1,
#400000
0,
#405000
b10 L
b11000 @
b11000 B
b11000 Q
b10000 K
b10000 N
1,
#410000
0,
#415000
b11 L
b100000 @
b100000 B
b100000 Q
b11000 K
b11000 N
1,
#420000
0,
#425000
1"
0#
b100000 !
b100000 M
b101000 @
b101000 B
b101000 Q
b100000 K
b100000 N
1,
#430000
0,
#435000
0"
b10011001001001 \
b10011001001001 Z
b10011001001001 f
b10011001001001 d
b10011001001001 p
b10011001001001 n
b10011001001001 z
b10011001001001 x
b10011001001001 &"
b10011001001001 $"
b10011001001001 0"
b10011001001001 ."
b10011001001001 :"
b10011001001001 8"
b10011001001101000 @
b10011001001101000 B
b10011001001101000 Q
b10011001001001 D"
b10011001001001 B"
b1100011 X
b1100011 b
b1100011 l
b1100011 v
b1100011 ""
b1100011 ,"
b1100011 6"
b1100011 @"
b10011001001001 [
b1100011 Y
b10011001001001 e
b1100011 c
b10011001001001 o
b1100011 m
b10011001001001 y
b1100011 w
b10011001001001 %"
b1100011 #"
b10011001001001 /"
b1100011 -"
b10011001001001 9"
b1100011 7"
b10011001001001 C"
b1100011 A"
b110110011 7
b1 ?
b1000 -
b1000 :
b100000 5
b110001101100011011000110110001101100011011000110110001101100011 >
b110001101100011011000110110001101100011011000110110001101100011 O
b110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110000000100000001000000010000000100000001000000010000000100000001 0
b110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110000000100000001000000010000000100000001000000010000000100000001 ;
b110001101100011011000110110001101100011011000110110001101100011 =
b110001101100011011000110110001101100011011000110110001101100011 P
b110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110000000100000001000000010000000100000001000000010000000100000001 1
b110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110110001101100011011000110000000100000001000000010000000100000001000000010000000100000001 <
b110 2
b110110011 6
1,
#440000
0,
#445000
b1 \
b1 Z
b1 f
b1 d
b1 p
b1 n
b1 z
b1 x
b1 &"
b1 $"
b1 0"
b1 ."
b1 :"
b1 8"
b1 D"
b1 B"
b1 Y
b1 c
b1 m
b1 w
b1 #"
b1 -"
b1 7"
b1 A"
b1 [
b1 X
b1 e
b1 b
b1 o
b1 l
b1 y
b1 v
b1 %"
b1 ""
b1 /"
b1 ,"
b1 9"
b1 6"
b1 C"
b1 @"
b100000001000000010000000100000001000000010000000100000001 =
b100000001000000010000000100000001000000010000000100000001 P
b100000001000000010000000100000001000000010000000100000001 >
b100000001000000010000000100000001000000010000000100000001 O
1#
b1000 @
b1000 B
b1000 Q
b0 K
b0 N
b0 L
1/
1,
#450000
0,
#455000
1"
0#
b1000 !
b1000 M
b10000 @
b10000 B
b10000 Q
b1000 K
b1000 N
0/
1,
#460000
0,
#465000
0"
b100 ?
b100000 -
b100000 :
b11 3
b111010001 6
1,