summaryrefslogtreecommitdiffstats
path: root/zpu/hdl/zpu4/src
diff options
context:
space:
mode:
authoroharboe <oharboe>2008-01-02 21:52:27 +0000
committeroharboe <oharboe>2008-01-02 21:52:27 +0000
commitf2b214b0dff95d6bb79cbb5b6ff5ba9d90f655c9 (patch)
tree2f53ff8c86e2708f838d26e3edede86c111b309e /zpu/hdl/zpu4/src
downloadzpu-f2b214b0dff95d6bb79cbb5b6ff5ba9d90f655c9.zip
zpu-f2b214b0dff95d6bb79cbb5b6ff5ba9d90f655c9.tar.gz
Initial import from www.ecosforge.net
Diffstat (limited to 'zpu/hdl/zpu4/src')
-rw-r--r--zpu/hdl/zpu4/src/.cvsignore5
-rw-r--r--zpu/hdl/zpu4/src/bram.vhd3807
-rw-r--r--zpu/hdl/zpu4/src/bram_dmips.vhd3717
-rw-r--r--zpu/hdl/zpu4/src/build.xml114
-rw-r--r--zpu/hdl/zpu4/src/clocks.vhd246
-rw-r--r--zpu/hdl/zpu4/src/dmipssmalltrace.do26
-rw-r--r--zpu/hdl/zpu4/src/dmipstrace.do25
-rw-r--r--zpu/hdl/zpu4/src/dmipstraceintstack.do25
-rw-r--r--zpu/hdl/zpu4/src/dram_dmips.vhd3702
-rw-r--r--zpu/hdl/zpu4/src/dram_hello.vhd3214
-rw-r--r--zpu/hdl/zpu4/src/fastdmips.do19
-rw-r--r--zpu/hdl/zpu4/src/fastdmipsintstack.do19
-rw-r--r--zpu/hdl/zpu4/src/fastdmipssmall.do21
-rw-r--r--zpu/hdl/zpu4/src/fastsimzpu.do19
-rw-r--r--zpu/hdl/zpu4/src/ic300.bitgen27
-rw-r--r--zpu/hdl/zpu4/src/ic300.lso1
-rw-r--r--zpu/hdl/zpu4/src/ic300.ucf146
-rw-r--r--zpu/hdl/zpu4/src/ic300.vhd144
-rw-r--r--zpu/hdl/zpu4/src/ic300_config.vhd26
-rw-r--r--zpu/hdl/zpu4/src/ic300pkg.vhd88
-rw-r--r--zpu/hdl/zpu4/src/io.vhd92
-rw-r--r--zpu/hdl/zpu4/src/log.txt380
-rw-r--r--zpu/hdl/zpu4/src/niltrace.vhd26
-rw-r--r--zpu/hdl/zpu4/src/sim_fpga_top.vhd190
-rw-r--r--zpu/hdl/zpu4/src/simzpu.do23
-rw-r--r--zpu/hdl/zpu4/src/simzpu_intstack.do23
-rw-r--r--zpu/hdl/zpu4/src/status.txt109
-rw-r--r--zpu/hdl/zpu4/src/testlut.vhd114
-rw-r--r--zpu/hdl/zpu4/src/timer.vhd61
-rw-r--r--zpu/hdl/zpu4/src/trace.vhd84
-rw-r--r--zpu/hdl/zpu4/src/txt_util.vhd587
-rw-r--r--zpu/hdl/zpu4/src/xmake.filelist12
-rw-r--r--zpu/hdl/zpu4/src/xmake.filelist.bramsmall5
-rw-r--r--zpu/hdl/zpu4/src/xmake.xst53
-rw-r--r--zpu/hdl/zpu4/src/zpu_config.vhd16
-rw-r--r--zpu/hdl/zpu4/src/zpu_config_fastsim.vhd15
-rw-r--r--zpu/hdl/zpu4/src/zpu_config_trace.vhd15
-rw-r--r--zpu/hdl/zpu4/src/zpu_core.vhd900
-rw-r--r--zpu/hdl/zpu4/src/zpu_core_small.vhd433
-rw-r--r--zpu/hdl/zpu4/src/zpuio.vhd256
-rw-r--r--zpu/hdl/zpu4/src/zpuio_bram.vhd229
-rw-r--r--zpu/hdl/zpu4/src/zpupkg.vhd168
42 files changed, 19182 insertions, 0 deletions
diff --git a/zpu/hdl/zpu4/src/.cvsignore b/zpu/hdl/zpu4/src/.cvsignore
new file mode 100644
index 0000000..41c40a0
--- /dev/null
+++ b/zpu/hdl/zpu4/src/.cvsignore
@@ -0,0 +1,5 @@
+work
+vsim.wlf
+xilinx_device_details.xml
+tcl_stacktrace.txt
+vish_stacktrace.vstf
diff --git a/zpu/hdl/zpu4/src/bram.vhd b/zpu/hdl/zpu4/src/bram.vhd
new file mode 100644
index 0000000..435f3f4
--- /dev/null
+++ b/zpu/hdl/zpu4/src/bram.vhd
@@ -0,0 +1,3807 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+entity dram is
+port (clk : in std_logic;
+ areset : in std_logic;
+ mem_writeEnable : in std_logic;
+ mem_readEnable : in std_logic;
+ mem_addr : in std_logic_vector(maxAddrBit downto 0);
+ mem_write : in std_logic_vector(wordSize-1 downto 0);
+ mem_read : out std_logic_vector(wordSize-1 downto 0);
+ mem_busy : out std_logic;
+ mem_writeMask : in std_logic_vector(wordBytes-1 downto 0));
+end dram;
+
+architecture dram_arch of dram is
+
+type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+0 => x"800b0b0b",
+1 => x"0b0b8070",
+2 => x"0b0b80e5",
+3 => x"d00c3a0b",
+4 => x"0b0bbed7",
+5 => x"04000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"0bbfa72d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b2a83",
+20 => x"ffff0652",
+21 => x"0b0b0400",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b2b0906",
+29 => x"7383ffff",
+30 => x"0b0b0b0b",
+31 => x"83a70400",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"530b0b51",
+38 => x"04000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"0b0b5104",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"530b0b51",
+55 => x"04000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"0b0b5104",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"00000000",
+65 => x"00000000",
+66 => x"00000000",
+67 => x"00000000",
+68 => x"00000000",
+69 => x"00000000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"0b0b0b88",
+73 => x"c6040000",
+74 => x"00000000",
+75 => x"00000000",
+76 => x"00000000",
+77 => x"00000000",
+78 => x"00000000",
+79 => x"00000000",
+80 => x"720a722b",
+81 => x"0a530b0b",
+82 => x"51040000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a7",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"0607530b",
+101 => x"0b510400",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"7171530b",
+105 => x"0b510406",
+106 => x"73830609",
+107 => x"81058205",
+108 => x"832b0b2b",
+109 => x"0772fc06",
+110 => x"0c515104",
+111 => x"00000000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"0b0b5104",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"530b0b51",
+125 => x"04000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"520b0b04",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"0505530b",
+138 => x"0b510400",
+139 => x"00000000",
+140 => x"00000000",
+141 => x"00000000",
+142 => x"00000000",
+143 => x"00000000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07530b0b",
+147 => x"51040000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"0b0b0400",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b80e5",
+162 => x"bc738306",
+163 => x"10100508",
+164 => x"060b0b0b",
+165 => x"88ac0400",
+166 => x"00000000",
+167 => x"00000000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0ba3",
+171 => x"fa2d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c510400",
+175 => x"00000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0ba4",
+179 => x"ca2d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c510400",
+183 => x"00000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70540b0b",
+188 => x"71067309",
+189 => x"727405ff",
+190 => x"05060751",
+191 => x"51510400",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"0570540b",
+196 => x"0b710673",
+197 => x"09727405",
+198 => x"ff050607",
+199 => x"51515104",
+200 => x"05ff0504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"80e5cc0c",
+210 => x"51040000",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"71810552",
+217 => x"0b0b0400",
+218 => x"00000000",
+219 => x"00000000",
+220 => x"00000000",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"0b0b0400",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"717105ff",
+249 => x"0571530b",
+250 => x"0b510400",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"84803f80",
+257 => x"cef23f04",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10101053",
+266 => x"0b0b5104",
+267 => x"7381ff06",
+268 => x"73830609",
+269 => x"81058305",
+270 => x"1010102b",
+271 => x"0772fc06",
+272 => x"0c515104",
+273 => x"3c047272",
+274 => x"80728106",
+275 => x"ff050972",
+276 => x"06057110",
+277 => x"520b0b72",
+278 => x"0a100a53",
+279 => x"0b0b72e9",
+280 => x"38515153",
+281 => x"0b0b5104",
+282 => x"70700b0b",
+283 => x"80f5c008",
+284 => x"520b0b84",
+285 => x"0b720508",
+286 => x"70810651",
+287 => x"510b0b70",
+288 => x"f2387108",
+289 => x"81ff0680",
+290 => x"0c505004",
+291 => x"70700b0b",
+292 => x"80f5c008",
+293 => x"520b0b84",
+294 => x"0b720508",
+295 => x"700a100a",
+296 => x"70810651",
+297 => x"51510b0b",
+298 => x"70ed3873",
+299 => x"720c5050",
+300 => x"0480e5cc",
+301 => x"08802ea8",
+302 => x"38838080",
+303 => x"0b0b0b80",
+304 => x"f5c00c82",
+305 => x"a0800b0b",
+306 => x"0b80f5c4",
+307 => x"0c829080",
+308 => x"0b80f5d4",
+309 => x"0c0b0b80",
+310 => x"f5c80b80",
+311 => x"f5d80c04",
+312 => x"f8808080",
+313 => x"a40b0b0b",
+314 => x"80f5c00c",
+315 => x"f8808082",
+316 => x"800b0b0b",
+317 => x"80f5c40c",
+318 => x"f8808084",
+319 => x"800b80f5",
+320 => x"d40cf880",
+321 => x"8080940b",
+322 => x"80f5d80c",
+323 => x"f8808080",
+324 => x"9c0b80f5",
+325 => x"d00cf880",
+326 => x"8080a00b",
+327 => x"80f5dc0c",
+328 => x"04f23d0d",
+329 => x"600b0b80",
+330 => x"f5c40856",
+331 => x"5d82750c",
+332 => x"8059805a",
+333 => x"800b8f3d",
+334 => x"71101017",
+335 => x"70085957",
+336 => x"5d5b8076",
+337 => x"81ff067c",
+338 => x"832b5658",
+339 => x"520b0b0b",
+340 => x"76530b0b",
+341 => x"7b5198c6",
+342 => x"3f7d7f7a",
+343 => x"72077c72",
+344 => x"07717160",
+345 => x"8105415f",
+346 => x"5d5b5957",
+347 => x"557a8724",
+348 => x"80c1380b",
+349 => x"0b80f5c4",
+350 => x"087b1010",
+351 => x"71057008",
+352 => x"58515580",
+353 => x"7681ff06",
+354 => x"7c832b56",
+355 => x"58520b0b",
+356 => x"0b76530b",
+357 => x"0b7b5198",
+358 => x"853f7d7f",
+359 => x"7a72077c",
+360 => x"72077171",
+361 => x"60810541",
+362 => x"5f5d5b59",
+363 => x"5755877b",
+364 => x"25c13876",
+365 => x"7d0c7784",
+366 => x"1e0c7c80",
+367 => x"0c903d0d",
+368 => x"04707080",
+369 => x"f5cc3351",
+370 => x"0b0b70b2",
+371 => x"3880e5d8",
+372 => x"08700852",
+373 => x"0b0b520b",
+374 => x"0b0b7080",
+375 => x"2e9a3884",
+376 => x"720580e5",
+377 => x"d80c702d",
+378 => x"80e5d808",
+379 => x"7008520b",
+380 => x"0b520b0b",
+381 => x"0b70e838",
+382 => x"810b80f5",
+383 => x"cc345050",
+384 => x"0404700b",
+385 => x"0b80f5bc",
+386 => x"08802e8e",
+387 => x"380b0b0b",
+388 => x"0b800b80",
+389 => x"2e098106",
+390 => x"83385004",
+391 => x"0b0b80f5",
+392 => x"bc510b0b",
+393 => x"0bf3d93f",
+394 => x"50040470",
+395 => x"70028f05",
+396 => x"33520b0b",
+397 => x"0b0b718a",
+398 => x"2e893871",
+399 => x"51fccd3f",
+400 => x"5050048d",
+401 => x"51fcc53f",
+402 => x"7151fcc0",
+403 => x"3f505004",
+404 => x"cd3d0db6",
+405 => x"3d707084",
+406 => x"05520b0b",
+407 => x"088cab5d",
+408 => x"56a63d5f",
+409 => x"5d807570",
+410 => x"81055733",
+411 => x"765c5559",
+412 => x"0b730b79",
+413 => x"2e80ca38",
+414 => x"8f3d5c73",
+415 => x"a52e0981",
+416 => x"0680cf38",
+417 => x"79708105",
+418 => x"5b33540b",
+419 => x"0b7380e4",
+420 => x"2e81c838",
+421 => x"7380e424",
+422 => x"80d13873",
+423 => x"80e32ea8",
+424 => x"3880520b",
+425 => x"0ba5517a",
+426 => x"2d80520b",
+427 => x"0b73517a",
+428 => x"2d821959",
+429 => x"79708105",
+430 => x"5b33540b",
+431 => x"0b73ffbb",
+432 => x"3878800c",
+433 => x"b53d0d04",
+434 => x"7c841e83",
+435 => x"72053356",
+436 => x"5e578052",
+437 => x"0b0b7351",
+438 => x"7a2d8119",
+439 => x"7a708105",
+440 => x"5c335559",
+441 => x"0b73ff93",
+442 => x"38d73973",
+443 => x"80f32e09",
+444 => x"8106ffad",
+445 => x"387c841e",
+446 => x"7108595e",
+447 => x"56807733",
+448 => x"56560b74",
+449 => x"0b762e8d",
+450 => x"38811670",
+451 => x"1870335a",
+452 => x"555677f5",
+453 => x"38ff1655",
+454 => x"807625ff",
+455 => x"97387670",
+456 => x"81055833",
+457 => x"5880520b",
+458 => x"0b77517a",
+459 => x"2d811975",
+460 => x"ff175757",
+461 => x"59807625",
+462 => x"fefa3876",
+463 => x"70810558",
+464 => x"33588052",
+465 => x"0b0b7751",
+466 => x"7a2d8119",
+467 => x"75ff1757",
+468 => x"57590b75",
+469 => x"8024c738",
+470 => x"feda397c",
+471 => x"841e7108",
+472 => x"70719f2c",
+473 => x"59530b0b",
+474 => x"595e5680",
+475 => x"7524818d",
+476 => x"38757e7d",
+477 => x"58595580",
+478 => x"57740b77",
+479 => x"2e098106",
+480 => x"bc38b07c",
+481 => x"3402b905",
+482 => x"567b0b76",
+483 => x"2e9938ff",
+484 => x"16560b0b",
+485 => x"75337870",
+486 => x"81055a34",
+487 => x"8117577b",
+488 => x"762e0981",
+489 => x"06e93880",
+490 => x"7834767e",
+491 => x"ff720557",
+492 => x"58560b0b",
+493 => x"758024fe",
+494 => x"e538fdf8",
+495 => x"398a7536",
+496 => x"0b0b80d7",
+497 => x"b005540b",
+498 => x"0b733376",
+499 => x"70810558",
+500 => x"348a7535",
+501 => x"550b0b74",
+502 => x"802effad",
+503 => x"388a7536",
+504 => x"0b0b80d7",
+505 => x"b005540b",
+506 => x"0b733376",
+507 => x"70810558",
+508 => x"348a7535",
+509 => x"550b0b74",
+510 => x"c438ff8d",
+511 => x"3974520b",
+512 => x"0b76530b",
+513 => x"0bb53dff",
+514 => x"b8055192",
+515 => x"dc3fa43d",
+516 => x"0856fedd",
+517 => x"397080c1",
+518 => x"0b81c48c",
+519 => x"34800b81",
+520 => x"c5e40c70",
+521 => x"800c5004",
+522 => x"7070800b",
+523 => x"81c48c33",
+524 => x"520b0b52",
+525 => x"0b0b0b70",
+526 => x"80c12e98",
+527 => x"387181c5",
+528 => x"e4080781",
+529 => x"c5e40c80",
+530 => x"c20b81c4",
+531 => x"90347080",
+532 => x"0c505004",
+533 => x"810b81c5",
+534 => x"e4080781",
+535 => x"c5e40c80",
+536 => x"c20b81c4",
+537 => x"90347080",
+538 => x"0c505004",
+539 => x"70707070",
+540 => x"7570088a",
+541 => x"05530b0b",
+542 => x"530b0b81",
+543 => x"c48c3351",
+544 => x"0b0b7080",
+545 => x"c12e8c38",
+546 => x"73f13870",
+547 => x"800c5050",
+548 => x"505004ff",
+549 => x"72057081",
+550 => x"c4880831",
+551 => x"740c800c",
+552 => x"50505050",
+553 => x"04fc3d0d",
+554 => x"81c49408",
+555 => x"550b0b74",
+556 => x"802e8e38",
+557 => x"76750871",
+558 => x"0c81c494",
+559 => x"0856540b",
+560 => x"0b8c1553",
+561 => x"0b0b81c4",
+562 => x"8808520b",
+563 => x"0b8a518e",
+564 => x"e93f7380",
+565 => x"0c863d0d",
+566 => x"04fb3d0d",
+567 => x"77700856",
+568 => x"56b0530b",
+569 => x"0b81c494",
+570 => x"08520b0b",
+571 => x"7451a1ff",
+572 => x"3f850b8c",
+573 => x"170c850b",
+574 => x"8c160c75",
+575 => x"08750c81",
+576 => x"c4940854",
+577 => x"0b0b7380",
+578 => x"2e8c3873",
+579 => x"08750c81",
+580 => x"c4940854",
+581 => x"0b0b8c14",
+582 => x"530b0b81",
+583 => x"c4880852",
+584 => x"0b0b8a51",
+585 => x"8e943f84",
+586 => x"1508b738",
+587 => x"860b8c16",
+588 => x"0c881552",
+589 => x"0b0b8816",
+590 => x"08518d96",
+591 => x"3f81c494",
+592 => x"08700876",
+593 => x"0c540b0b",
+594 => x"8c157054",
+595 => x"0b0b540b",
+596 => x"0b8a520b",
+597 => x"0b730851",
+598 => x"8de03f73",
+599 => x"800c873d",
+600 => x"0d047508",
+601 => x"540b0bb0",
+602 => x"530b0b73",
+603 => x"520b0b75",
+604 => x"51a0fc3f",
+605 => x"73800c87",
+606 => x"3d0d04e1",
+607 => x"3d0db051",
+608 => x"93833f80",
+609 => x"0881c484",
+610 => x"0cb05192",
+611 => x"f83f8008",
+612 => x"81c4940c",
+613 => x"81c48408",
+614 => x"80080c80",
+615 => x"0b800884",
+616 => x"050c820b",
+617 => x"80088805",
+618 => x"0ca80b80",
+619 => x"088c050c",
+620 => x"9f530b0b",
+621 => x"0b0b80d7",
+622 => x"bc520b0b",
+623 => x"80089005",
+624 => x"51a0ac3f",
+625 => x"993d5c9f",
+626 => x"530b0b0b",
+627 => x"0b80d7dc",
+628 => x"520b0b7b",
+629 => x"51a0983f",
+630 => x"8a0b8182",
+631 => x"cc0c0b0b",
+632 => x"80e28051",
+633 => x"f8ea3f0b",
+634 => x"0b80d7fc",
+635 => x"51f8e13f",
+636 => x"0b0b80e2",
+637 => x"8051f8d8",
+638 => x"3f80e5e0",
+639 => x"08802e8a",
+640 => x"a1380b0b",
+641 => x"80d8ac51",
+642 => x"f8c63f0b",
+643 => x"0b80e280",
+644 => x"51f8bd3f",
+645 => x"80e5dc08",
+646 => x"520b0b0b",
+647 => x"0b80d8d8",
+648 => x"51f8ad3f",
+649 => x"8051b488",
+650 => x"3f800880",
+651 => x"f5ec0c81",
+652 => x"0b923d5c",
+653 => x"58800b80",
+654 => x"e5dc0825",
+655 => x"8383388e",
+656 => x"3d5d80c1",
+657 => x"0b81c48c",
+658 => x"34810b81",
+659 => x"c5e40c80",
+660 => x"c20b81c4",
+661 => x"9034825e",
+662 => x"835a9f53",
+663 => x"0b0b0b0b",
+664 => x"80d98852",
+665 => x"0b0b7a51",
+666 => x"9f853f81",
+667 => x"5f807b53",
+668 => x"0b0b7c52",
+669 => x"0b0b558c",
+670 => x"f43f8008",
+671 => x"752e0981",
+672 => x"06833881",
+673 => x"550b0b74",
+674 => x"81c5e40c",
+675 => x"7d705755",
+676 => x"0b0b7483",
+677 => x"25a63874",
+678 => x"101015fd",
+679 => x"0540a13d",
+680 => x"ffbc0553",
+681 => x"0b0b8352",
+682 => x"0b0b7551",
+683 => x"8b8c3f81",
+684 => x"1e705f70",
+685 => x"5755830b",
+686 => x"7524dc38",
+687 => x"7f540b0b",
+688 => x"74530b0b",
+689 => x"80f5f052",
+690 => x"0b0b81c4",
+691 => x"9c518af6",
+692 => x"3f81c494",
+693 => x"08700857",
+694 => x"57b0530b",
+695 => x"0b76520b",
+696 => x"0b75519e",
+697 => x"8a3f850b",
+698 => x"8c180c85",
+699 => x"0b8c170c",
+700 => x"7608760c",
+701 => x"81c49408",
+702 => x"550b0b74",
+703 => x"802e8a38",
+704 => x"7408760c",
+705 => x"81c49408",
+706 => x"558c1553",
+707 => x"0b0b81c4",
+708 => x"8808520b",
+709 => x"0b8a518a",
+710 => x"a13f8416",
+711 => x"08888c38",
+712 => x"860b8c17",
+713 => x"0c881652",
+714 => x"0b0b8817",
+715 => x"085189a2",
+716 => x"3f81c494",
+717 => x"08700877",
+718 => x"0c578c16",
+719 => x"70540b0b",
+720 => x"558a520b",
+721 => x"0b740851",
+722 => x"89f03f80",
+723 => x"c10b81c4",
+724 => x"90335656",
+725 => x"0b0b7575",
+726 => x"26a83880",
+727 => x"c3520b0b",
+728 => x"75518adb",
+729 => x"3f80087f",
+730 => x"2e87ff38",
+731 => x"81167081",
+732 => x"ff0681c4",
+733 => x"9033520b",
+734 => x"0b57550b",
+735 => x"0b747627",
+736 => x"da38797e",
+737 => x"29607072",
+738 => x"35704172",
+739 => x"72317087",
+740 => x"2972315e",
+741 => x"530b0b8a",
+742 => x"0581c48c",
+743 => x"3381c488",
+744 => x"085a520b",
+745 => x"0b520b0b",
+746 => x"58550b76",
+747 => x"80c12e87",
+748 => x"f03878f6",
+749 => x"38811858",
+750 => x"80e5dc08",
+751 => x"7825fd82",
+752 => x"388051b0",
+753 => x"eb3f8008",
+754 => x"81c4800c",
+755 => x"0b0b80d9",
+756 => x"a851f4fc",
+757 => x"3f0b0b80",
+758 => x"e28051f4",
+759 => x"f33f0b0b",
+760 => x"80d9b851",
+761 => x"f4ea3f0b",
+762 => x"0b80e280",
+763 => x"51f4e13f",
+764 => x"81c48808",
+765 => x"520b0b0b",
+766 => x"0b80d9f0",
+767 => x"51f4d13f",
+768 => x"85520b0b",
+769 => x"0b0b80da",
+770 => x"8c51f4c4",
+771 => x"3f81c5e4",
+772 => x"08520b0b",
+773 => x"0b0b80da",
+774 => x"a851f4b4",
+775 => x"3f81520b",
+776 => x"0b0b0b80",
+777 => x"da8c51f4",
+778 => x"a73f81c4",
+779 => x"8c33520b",
+780 => x"0b0b0b80",
+781 => x"dac451f4",
+782 => x"973f80c1",
+783 => x"520b0b0b",
+784 => x"0b80dae0",
+785 => x"51f4893f",
+786 => x"81c49033",
+787 => x"520b0b0b",
+788 => x"0b80dafc",
+789 => x"51f3f93f",
+790 => x"80c2520b",
+791 => x"0b0b0b80",
+792 => x"dae051f3",
+793 => x"eb3f81c4",
+794 => x"bc08520b",
+795 => x"0b0b0b80",
+796 => x"db9851f3",
+797 => x"db3f8752",
+798 => x"0b0b0b0b",
+799 => x"80da8c51",
+800 => x"f3ce3f81",
+801 => x"82cc0852",
+802 => x"0b0b0b0b",
+803 => x"80dbb451",
+804 => x"f3be3f0b",
+805 => x"0b80dbd0",
+806 => x"51f3b53f",
+807 => x"0b0b80db",
+808 => x"fc51f3ac",
+809 => x"3f81c494",
+810 => x"08700853",
+811 => x"0b0b560b",
+812 => x"0b80dc88",
+813 => x"51f3993f",
+814 => x"0b0b80dc",
+815 => x"a451f390",
+816 => x"3f81c494",
+817 => x"08847105",
+818 => x"08530b0b",
+819 => x"5d0b0b80",
+820 => x"dcd851f2",
+821 => x"fb3f8052",
+822 => x"0b0b0b0b",
+823 => x"80da8c51",
+824 => x"f2ee3f81",
+825 => x"c4940888",
+826 => x"71050853",
+827 => x"0b0b580b",
+828 => x"0b80dcf4",
+829 => x"51f2d93f",
+830 => x"82520b0b",
+831 => x"0b0b80da",
+832 => x"8c51f2cc",
+833 => x"3f81c494",
+834 => x"088c7105",
+835 => x"08530b0b",
+836 => x"590b0b80",
+837 => x"dd9051f2",
+838 => x"b73f9152",
+839 => x"0b0b0b0b",
+840 => x"80da8c51",
+841 => x"f2aa3f81",
+842 => x"c4940890",
+843 => x"05520b0b",
+844 => x"0b0b80dd",
+845 => x"ac51f298",
+846 => x"3f0b0b80",
+847 => x"ddc851f2",
+848 => x"8f3f0b0b",
+849 => x"80de8051",
+850 => x"f2863f81",
+851 => x"c4840870",
+852 => x"08530b0b",
+853 => x"570b0b80",
+854 => x"dc8851f1",
+855 => x"f33f0b0b",
+856 => x"80de9451",
+857 => x"f1ea3f81",
+858 => x"c4840884",
+859 => x"71050853",
+860 => x"0b0b550b",
+861 => x"0b80dcd8",
+862 => x"51f1d53f",
+863 => x"80520b0b",
+864 => x"0b0b80da",
+865 => x"8c51f1c8",
+866 => x"3f81c484",
+867 => x"08887105",
+868 => x"08530b0b",
+869 => x"560b0b80",
+870 => x"dcf451f1",
+871 => x"b33f8152",
+872 => x"0b0b0b0b",
+873 => x"80da8c51",
+874 => x"f1a63f81",
+875 => x"c484088c",
+876 => x"71050853",
+877 => x"0b0b5d0b",
+878 => x"0b80dd90",
+879 => x"51f1913f",
+880 => x"92520b0b",
+881 => x"0b0b80da",
+882 => x"8c51f184",
+883 => x"3f81c484",
+884 => x"08900552",
+885 => x"0b0b0b0b",
+886 => x"80ddac51",
+887 => x"f0f23f0b",
+888 => x"0b80ddc8",
+889 => x"51f0e93f",
+890 => x"7d520b0b",
+891 => x"0b0b80de",
+892 => x"d451f0dc",
+893 => x"3f85520b",
+894 => x"0b0b0b80",
+895 => x"da8c51f0",
+896 => x"cf3f7952",
+897 => x"0b0b0b0b",
+898 => x"80def051",
+899 => x"f0c23f8d",
+900 => x"520b0b0b",
+901 => x"0b80da8c",
+902 => x"51f0b53f",
+903 => x"7f520b0b",
+904 => x"0b0b80df",
+905 => x"8c51f0a8",
+906 => x"3f87520b",
+907 => x"0b0b0b80",
+908 => x"da8c51f0",
+909 => x"9b3f7e52",
+910 => x"0b0b0b0b",
+911 => x"80dfa851",
+912 => x"f08e3f81",
+913 => x"520b0b0b",
+914 => x"0b80da8c",
+915 => x"51f0813f",
+916 => x"7b520b0b",
+917 => x"0b0b80df",
+918 => x"c451eff4",
+919 => x"3f0b0b80",
+920 => x"dfe051ef",
+921 => x"eb3f7a52",
+922 => x"0b0b0b0b",
+923 => x"80e09851",
+924 => x"efde3f0b",
+925 => x"0b80e0b4",
+926 => x"51efd53f",
+927 => x"0b0b80e2",
+928 => x"8051efcc",
+929 => x"3f81c480",
+930 => x"0880f5ec",
+931 => x"08317080",
+932 => x"f5e80c52",
+933 => x"0b0b0b0b",
+934 => x"80e0ec51",
+935 => x"efb23f80",
+936 => x"f5e80856",
+937 => x"810b7625",
+938 => x"819d3880",
+939 => x"e5dc0870",
+940 => x"77bd84c0",
+941 => x"293580f5",
+942 => x"e00c7671",
+943 => x"3580f5e4",
+944 => x"0c768ddd",
+945 => x"297187e8",
+946 => x"293581c4",
+947 => x"980c5b0b",
+948 => x"0b80e0fc",
+949 => x"51eef93f",
+950 => x"80f5e008",
+951 => x"520b0b0b",
+952 => x"0b80e1ac",
+953 => x"51eee93f",
+954 => x"0b0b80e1",
+955 => x"b451eee0",
+956 => x"3f80f5e4",
+957 => x"08520b0b",
+958 => x"0b0b80e1",
+959 => x"ac51eed0",
+960 => x"3f81c498",
+961 => x"08520b0b",
+962 => x"0b0b80e1",
+963 => x"e451eec0",
+964 => x"3f0b0b80",
+965 => x"e28051ee",
+966 => x"b73f800b",
+967 => x"800ca13d",
+968 => x"0d040b0b",
+969 => x"80e28451",
+970 => x"f5de3976",
+971 => x"0856b053",
+972 => x"0b0b7552",
+973 => x"0b0b7651",
+974 => x"95b53f80",
+975 => x"c10b81c4",
+976 => x"90335656",
+977 => x"f88e390b",
+978 => x"0b80e2b4",
+979 => x"51ee813f",
+980 => x"0b0b80e2",
+981 => x"ec51edf8",
+982 => x"3f0b0b80",
+983 => x"e28051ed",
+984 => x"ef3f800b",
+985 => x"800ca13d",
+986 => x"0d04a13d",
+987 => x"ffb80552",
+988 => x"0b0b8051",
+989 => x"80dc3f9f",
+990 => x"530b0b0b",
+991 => x"0b80e38c",
+992 => x"520b0b7a",
+993 => x"5194e83f",
+994 => x"777881c4",
+995 => x"880c8117",
+996 => x"7081ff06",
+997 => x"81c49033",
+998 => x"520b0b58",
+999 => x"565af7db",
+1000 => x"39ff1570",
+1001 => x"77317e0c",
+1002 => x"59800b81",
+1003 => x"19595980",
+1004 => x"e5dc0878",
+1005 => x"25f58b38",
+1006 => x"f8873970",
+1007 => x"70738232",
+1008 => x"70307072",
+1009 => x"07802580",
+1010 => x"0c520b0b",
+1011 => x"520b0b50",
+1012 => x"50047070",
+1013 => x"70747671",
+1014 => x"530b0b54",
+1015 => x"0b0b520b",
+1016 => x"0b0b0b71",
+1017 => x"822e8338",
+1018 => x"83517181",
+1019 => x"2e9a3881",
+1020 => x"72269f38",
+1021 => x"71822eb8",
+1022 => x"3871842e",
+1023 => x"a9387073",
+1024 => x"0c70800c",
+1025 => x"50505004",
+1026 => x"80e40b81",
+1027 => x"c4880825",
+1028 => x"8b388073",
+1029 => x"0c70800c",
+1030 => x"50505004",
+1031 => x"83730c70",
+1032 => x"800c5050",
+1033 => x"50048273",
+1034 => x"0c70800c",
+1035 => x"50505004",
+1036 => x"81730c70",
+1037 => x"800c5050",
+1038 => x"50047074",
+1039 => x"74148205",
+1040 => x"710c800c",
+1041 => x"5004f73d",
+1042 => x"0d7b7d7f",
+1043 => x"61857205",
+1044 => x"70822b75",
+1045 => x"71057074",
+1046 => x"71708405",
+1047 => x"530b0b0c",
+1048 => x"5a5a5d5b",
+1049 => x"760c7980",
+1050 => x"f8180c79",
+1051 => x"86720552",
+1052 => x"0b0b5758",
+1053 => x"5a5a7676",
+1054 => x"249e3876",
+1055 => x"b329822b",
+1056 => x"79710551",
+1057 => x"530b0b76",
+1058 => x"73708405",
+1059 => x"550c8114",
+1060 => x"540b0b75",
+1061 => x"7425f038",
+1062 => x"7681cc29",
+1063 => x"19fc7105",
+1064 => x"088105fc",
+1065 => x"72050c7a",
+1066 => x"1970089f",
+1067 => x"a073050c",
+1068 => x"5856850b",
+1069 => x"81c4880c",
+1070 => x"75800c8b",
+1071 => x"3d0d0470",
+1072 => x"70700293",
+1073 => x"05335180",
+1074 => x"02840597",
+1075 => x"0533540b",
+1076 => x"0b520b0b",
+1077 => x"70732e88",
+1078 => x"3871800c",
+1079 => x"50505004",
+1080 => x"7081c48c",
+1081 => x"34810b80",
+1082 => x"0c505050",
+1083 => x"04f83d0d",
+1084 => x"7a7c5956",
+1085 => x"820b8319",
+1086 => x"55550b0b",
+1087 => x"74167033",
+1088 => x"75335b51",
+1089 => x"530b0b72",
+1090 => x"792e80cf",
+1091 => x"3880c10b",
+1092 => x"81168116",
+1093 => x"56565782",
+1094 => x"7525df38",
+1095 => x"ffa91770",
+1096 => x"81ff0655",
+1097 => x"590b7382",
+1098 => x"26833887",
+1099 => x"5581530b",
+1100 => x"0b7680d2",
+1101 => x"2e9e3877",
+1102 => x"520b0b75",
+1103 => x"5193b53f",
+1104 => x"80530b0b",
+1105 => x"72800825",
+1106 => x"8b388715",
+1107 => x"81c4880c",
+1108 => x"81530b0b",
+1109 => x"72800c8a",
+1110 => x"3d0d0472",
+1111 => x"81c48c34",
+1112 => x"827525ff",
+1113 => x"9538ffb4",
+1114 => x"39f93d0d",
+1115 => x"797b7d54",
+1116 => x"0b0b5872",
+1117 => x"59773079",
+1118 => x"70307072",
+1119 => x"079f2a73",
+1120 => x"71315a52",
+1121 => x"0b0b5977",
+1122 => x"0b795673",
+1123 => x"0c530b0b",
+1124 => x"73847305",
+1125 => x"0c540b0b",
+1126 => x"800c893d",
+1127 => x"0d04f93d",
+1128 => x"0d797b7d",
+1129 => x"7f56540b",
+1130 => x"0b520b0b",
+1131 => x"540b0b72",
+1132 => x"802ea638",
+1133 => x"70577158",
+1134 => x"a0733152",
+1135 => x"0b0b800b",
+1136 => x"7225a638",
+1137 => x"7770742b",
+1138 => x"5770732a",
+1139 => x"78752b07",
+1140 => x"56510b74",
+1141 => x"76530b0b",
+1142 => x"510b0b70",
+1143 => x"740c7184",
+1144 => x"150c7380",
+1145 => x"0c893d0d",
+1146 => x"04805677",
+1147 => x"72302b55",
+1148 => x"0b0b7476",
+1149 => x"530b0b51",
+1150 => x"e039fb3d",
+1151 => x"0d777955",
+1152 => x"5580560b",
+1153 => x"0b757524",
+1154 => x"b5388074",
+1155 => x"24a53880",
+1156 => x"530b0b73",
+1157 => x"520b0b74",
+1158 => x"5180f33f",
+1159 => x"8008540b",
+1160 => x"0b75802e",
+1161 => x"87388008",
+1162 => x"30540b0b",
+1163 => x"73800c87",
+1164 => x"3d0d0473",
+1165 => x"30768132",
+1166 => x"57540b0b",
+1167 => x"d2397430",
+1168 => x"55815673",
+1169 => x"8025c838",
+1170 => x"ea39fa3d",
+1171 => x"0d787a57",
+1172 => x"5580570b",
+1173 => x"0b767524",
+1174 => x"ae38759f",
+1175 => x"2c540b0b",
+1176 => x"81530b0b",
+1177 => x"75743274",
+1178 => x"31520b0b",
+1179 => x"74519f3f",
+1180 => x"8008540b",
+1181 => x"0b76802e",
+1182 => x"87388008",
+1183 => x"30540b0b",
+1184 => x"73800c88",
+1185 => x"3d0d0474",
+1186 => x"30558157",
+1187 => x"cd39fc3d",
+1188 => x"0d767853",
+1189 => x"0b0b540b",
+1190 => x"0b81530b",
+1191 => x"0b807473",
+1192 => x"26520b0b",
+1193 => x"5572802e",
+1194 => x"9e387080",
+1195 => x"2eb73880",
+1196 => x"7224b238",
+1197 => x"71107310",
+1198 => x"75722653",
+1199 => x"0b0b540b",
+1200 => x"0b520b0b",
+1201 => x"72e43873",
+1202 => x"51788338",
+1203 => x"74510b0b",
+1204 => x"70800c86",
+1205 => x"3d0d0472",
+1206 => x"0a100a72",
+1207 => x"0a100a53",
+1208 => x"0b0b530b",
+1209 => x"0b72802e",
+1210 => x"de387174",
+1211 => x"26e93873",
+1212 => x"72317574",
+1213 => x"07740a10",
+1214 => x"0a740a10",
+1215 => x"0a555556",
+1216 => x"540b0be1",
+1217 => x"39707073",
+1218 => x"520b0b80",
+1219 => x"eea80851",
+1220 => x"953f5050",
+1221 => x"04707073",
+1222 => x"520b0b80",
+1223 => x"eea80851",
+1224 => x"92dc3f50",
+1225 => x"5004f43d",
+1226 => x"0d7e608b",
+1227 => x"710570f8",
+1228 => x"065b5555",
+1229 => x"5d729626",
+1230 => x"83389058",
+1231 => x"800b7824",
+1232 => x"74792607",
+1233 => x"5580540b",
+1234 => x"0b74742e",
+1235 => x"09810680",
+1236 => x"d5387c51",
+1237 => x"8edf3f77",
+1238 => x"83f72680",
+1239 => x"d0387783",
+1240 => x"2a701010",
+1241 => x"1080e6a0",
+1242 => x"058c7105",
+1243 => x"08585854",
+1244 => x"0b0b7577",
+1245 => x"2e828a38",
+1246 => x"841608fc",
+1247 => x"068c1708",
+1248 => x"88180871",
+1249 => x"8c72050c",
+1250 => x"8872050c",
+1251 => x"5b760584",
+1252 => x"71050881",
+1253 => x"07847205",
+1254 => x"0c530b0b",
+1255 => x"7c518e96",
+1256 => x"3f881654",
+1257 => x"0b0b7380",
+1258 => x"0c8e3d0d",
+1259 => x"0477892a",
+1260 => x"78832a58",
+1261 => x"540b0b73",
+1262 => x"802ebf38",
+1263 => x"77862ab8",
+1264 => x"05578474",
+1265 => x"27b43880",
+1266 => x"db145794",
+1267 => x"7427ab38",
+1268 => x"778c2a80",
+1269 => x"ee055780",
+1270 => x"d474279e",
+1271 => x"38778f2a",
+1272 => x"80f70557",
+1273 => x"82d47427",
+1274 => x"91387792",
+1275 => x"2a80fc05",
+1276 => x"578ad474",
+1277 => x"27843880",
+1278 => x"fe570b0b",
+1279 => x"76101010",
+1280 => x"80e6a005",
+1281 => x"8c710508",
+1282 => x"56530b0b",
+1283 => x"74732ea6",
+1284 => x"38841508",
+1285 => x"fc067079",
+1286 => x"3155560b",
+1287 => x"738f2489",
+1288 => x"d2387380",
+1289 => x"2589d438",
+1290 => x"8c150855",
+1291 => x"0b0b7473",
+1292 => x"2e098106",
+1293 => x"dc388117",
+1294 => x"5980e6b0",
+1295 => x"08560b0b",
+1296 => x"7580e6a8",
+1297 => x"2e82f938",
+1298 => x"841608fc",
+1299 => x"06707931",
+1300 => x"55550b73",
+1301 => x"8f2480c2",
+1302 => x"3880e6a8",
+1303 => x"0b80e6b4",
+1304 => x"0c80e6a8",
+1305 => x"0b80e6b0",
+1306 => x"0c807424",
+1307 => x"80e83874",
+1308 => x"16847105",
+1309 => x"08810784",
+1310 => x"72050c53",
+1311 => x"0b0bfe9c",
+1312 => x"3988168c",
+1313 => x"71050857",
+1314 => x"590b750b",
+1315 => x"792e0981",
+1316 => x"06fde538",
+1317 => x"821459ff",
+1318 => x"a0397716",
+1319 => x"78810784",
+1320 => x"180c7080",
+1321 => x"e6b40c70",
+1322 => x"80e6b00c",
+1323 => x"80e6a80b",
+1324 => x"8c72050c",
+1325 => x"8c710508",
+1326 => x"8872050c",
+1327 => x"74810784",
+1328 => x"72050c74",
+1329 => x"0574710c",
+1330 => x"5b7c518b",
+1331 => x"e93f8816",
+1332 => x"540b0bfd",
+1333 => x"d13983ff",
+1334 => x"752783c1",
+1335 => x"3874892a",
+1336 => x"75832a54",
+1337 => x"0b0b540b",
+1338 => x"0b73802e",
+1339 => x"80cb3874",
+1340 => x"862ab805",
+1341 => x"530b0b84",
+1342 => x"7427be38",
+1343 => x"80db1453",
+1344 => x"0b0b9474",
+1345 => x"27b33874",
+1346 => x"8c2a80ee",
+1347 => x"05530b0b",
+1348 => x"80d47427",
+1349 => x"a438748f",
+1350 => x"2a80f705",
+1351 => x"530b0b82",
+1352 => x"d4742795",
+1353 => x"3874922a",
+1354 => x"80fc0553",
+1355 => x"0b0b8ad4",
+1356 => x"74278638",
+1357 => x"80fe530b",
+1358 => x"0b721010",
+1359 => x"1080e6a0",
+1360 => x"05887105",
+1361 => x"0855570b",
+1362 => x"730b772e",
+1363 => x"86cd3884",
+1364 => x"1408fc06",
+1365 => x"5b740b7b",
+1366 => x"278f3888",
+1367 => x"1408540b",
+1368 => x"0b73772e",
+1369 => x"098106e7",
+1370 => x"388c1408",
+1371 => x"80e6a00b",
+1372 => x"84050871",
+1373 => x"8c190c75",
+1374 => x"88190c77",
+1375 => x"8873050c",
+1376 => x"5c57758c",
+1377 => x"150c7853",
+1378 => x"0b0b8079",
+1379 => x"2483be38",
+1380 => x"72822c81",
+1381 => x"712b5656",
+1382 => x"0b747b26",
+1383 => x"80d1387a",
+1384 => x"7506570b",
+1385 => x"0b7682bc",
+1386 => x"3878fc06",
+1387 => x"84055974",
+1388 => x"10707c06",
+1389 => x"55550b73",
+1390 => x"82aa3884",
+1391 => x"1959f039",
+1392 => x"80e6a00b",
+1393 => x"84050879",
+1394 => x"540b0b5b",
+1395 => x"788025c0",
+1396 => x"3882fa39",
+1397 => x"74097b06",
+1398 => x"7080e6a0",
+1399 => x"0b84050c",
+1400 => x"5b741055",
+1401 => x"0b0b747b",
+1402 => x"26853874",
+1403 => x"85f33880",
+1404 => x"e6a00b88",
+1405 => x"05087084",
+1406 => x"720508fc",
+1407 => x"06707b31",
+1408 => x"7b72268f",
+1409 => x"7225075d",
+1410 => x"575c5c55",
+1411 => x"78802e80",
+1412 => x"e3387915",
+1413 => x"80e69808",
+1414 => x"19907105",
+1415 => x"59540b0b",
+1416 => x"5680e694",
+1417 => x"08ff2e89",
+1418 => x"38a08f73",
+1419 => x"05e08006",
+1420 => x"570b0b76",
+1421 => x"520b0b7c",
+1422 => x"5188fc3f",
+1423 => x"8008540b",
+1424 => x"0b8008ff",
+1425 => x"2e903880",
+1426 => x"08762782",
+1427 => x"c2387480",
+1428 => x"e6a02e82",
+1429 => x"ba3880e6",
+1430 => x"a00b8805",
+1431 => x"08558415",
+1432 => x"08fc0670",
+1433 => x"79317972",
+1434 => x"268f7225",
+1435 => x"075d555a",
+1436 => x"7a849b38",
+1437 => x"77810784",
+1438 => x"160c7715",
+1439 => x"7080e6a0",
+1440 => x"0b88050c",
+1441 => x"74810784",
+1442 => x"72050c56",
+1443 => x"7c5188a6",
+1444 => x"3f881554",
+1445 => x"0b0b7380",
+1446 => x"0c8e3d0d",
+1447 => x"0474832a",
+1448 => x"70540b0b",
+1449 => x"540b0b80",
+1450 => x"742481a9",
+1451 => x"3872822c",
+1452 => x"81712b80",
+1453 => x"e6a40807",
+1454 => x"7080e6a0",
+1455 => x"0b84050c",
+1456 => x"75101010",
+1457 => x"80e6a005",
+1458 => x"88710508",
+1459 => x"718c1b0c",
+1460 => x"70881b0c",
+1461 => x"79887305",
+1462 => x"0c57555c",
+1463 => x"55758c15",
+1464 => x"0cfda339",
+1465 => x"78791010",
+1466 => x"1080e6a0",
+1467 => x"0570565b",
+1468 => x"5c8c1408",
+1469 => x"560b0b75",
+1470 => x"742ea738",
+1471 => x"841608fc",
+1472 => x"06707931",
+1473 => x"58530b0b",
+1474 => x"768f2484",
+1475 => x"98387680",
+1476 => x"2584de38",
+1477 => x"8c160856",
+1478 => x"0b0b7574",
+1479 => x"2e098106",
+1480 => x"db388814",
+1481 => x"811a7083",
+1482 => x"06555a54",
+1483 => x"0b0b72c1",
+1484 => x"387b8306",
+1485 => x"560b0b75",
+1486 => x"802efd98",
+1487 => x"38ff1cf8",
+1488 => x"1b5b5c88",
+1489 => x"1a087a2e",
+1490 => x"e838fd95",
+1491 => x"39831953",
+1492 => x"0b0bfcbc",
+1493 => x"39831470",
+1494 => x"822c8171",
+1495 => x"2b80e6a4",
+1496 => x"08077080",
+1497 => x"e6a00b84",
+1498 => x"050c7610",
+1499 => x"101080e6",
+1500 => x"a0058871",
+1501 => x"0508718c",
+1502 => x"1c0c7088",
+1503 => x"1c0c7a88",
+1504 => x"73050c58",
+1505 => x"530b0b5d",
+1506 => x"56530b0b",
+1507 => x"fecf3980",
+1508 => x"e5e40817",
+1509 => x"59800876",
+1510 => x"2e819438",
+1511 => x"80e69408",
+1512 => x"ff2e84b7",
+1513 => x"38737631",
+1514 => x"1980e5e4",
+1515 => x"0c738706",
+1516 => x"7056530b",
+1517 => x"0b72802e",
+1518 => x"88388873",
+1519 => x"31701555",
+1520 => x"5576149f",
+1521 => x"ff06a080",
+1522 => x"71311670",
+1523 => x"540b0b7e",
+1524 => x"530b0b51",
+1525 => x"530b0b85",
+1526 => x"de3f8008",
+1527 => x"568008ff",
+1528 => x"2e81a238",
+1529 => x"80e5e408",
+1530 => x"73057080",
+1531 => x"e5e40c74",
+1532 => x"7580e6a0",
+1533 => x"0b88050c",
+1534 => x"77763115",
+1535 => x"81075556",
+1536 => x"597a80e6",
+1537 => x"a02e83e0",
+1538 => x"38798f26",
+1539 => x"838d3881",
+1540 => x"0b84150c",
+1541 => x"841508fc",
+1542 => x"06707931",
+1543 => x"7972268f",
+1544 => x"7225075d",
+1545 => x"555a7a80",
+1546 => x"2efcc938",
+1547 => x"80e03980",
+1548 => x"089fff06",
+1549 => x"550b0b74",
+1550 => x"fee23878",
+1551 => x"80e5e40c",
+1552 => x"80e6a00b",
+1553 => x"8805087a",
+1554 => x"18810784",
+1555 => x"72050c55",
+1556 => x"80e69008",
+1557 => x"79278638",
+1558 => x"7880e690",
+1559 => x"0c80e68c",
+1560 => x"087927fb",
+1561 => x"f9387880",
+1562 => x"e68c0c84",
+1563 => x"1508fc06",
+1564 => x"70793179",
+1565 => x"72268f72",
+1566 => x"25075d55",
+1567 => x"5a7a802e",
+1568 => x"fbf2388a",
+1569 => x"39807457",
+1570 => x"530b0bfe",
+1571 => x"d7397c51",
+1572 => x"84a43f80",
+1573 => x"0b800c8e",
+1574 => x"3d0d0480",
+1575 => x"7324a538",
+1576 => x"72822c81",
+1577 => x"712b80e6",
+1578 => x"a4080770",
+1579 => x"80e6a00b",
+1580 => x"84050c5c",
+1581 => x"5a768c17",
+1582 => x"0c738817",
+1583 => x"0c758818",
+1584 => x"0cf9bf39",
+1585 => x"83730570",
+1586 => x"822c8171",
+1587 => x"2b80e6a4",
+1588 => x"08077080",
+1589 => x"e6a00b84",
+1590 => x"050c5d5b",
+1591 => x"530b0bd5",
+1592 => x"397a7506",
+1593 => x"5c0b0b7b",
+1594 => x"fbfa3884",
+1595 => x"19751056",
+1596 => x"59ef39ff",
+1597 => x"17810559",
+1598 => x"f6bf398c",
+1599 => x"15088816",
+1600 => x"08718c72",
+1601 => x"050c8872",
+1602 => x"050c5975",
+1603 => x"15847105",
+1604 => x"08810784",
+1605 => x"72050c58",
+1606 => x"7c51839a",
+1607 => x"3f881554",
+1608 => x"0b0bfaf2",
+1609 => x"39771678",
+1610 => x"81078418",
+1611 => x"0c8c1708",
+1612 => x"88180871",
+1613 => x"8c72050c",
+1614 => x"8872050c",
+1615 => x"5c7080e6",
+1616 => x"b40c7080",
+1617 => x"e6b00c80",
+1618 => x"e6a80b8c",
+1619 => x"72050c8c",
+1620 => x"71050888",
+1621 => x"72050c77",
+1622 => x"81078472",
+1623 => x"050c7705",
+1624 => x"77710c55",
+1625 => x"7c5182ce",
+1626 => x"3f881654",
+1627 => x"0b0bf4b6",
+1628 => x"39721684",
+1629 => x"71050881",
+1630 => x"07847205",
+1631 => x"0c588c16",
+1632 => x"08881708",
+1633 => x"718c7205",
+1634 => x"0c887205",
+1635 => x"0c577c51",
+1636 => x"82a43f88",
+1637 => x"16540b0b",
+1638 => x"f48c3972",
+1639 => x"84150cf4",
+1640 => x"1af80670",
+1641 => x"841d0881",
+1642 => x"0607841d",
+1643 => x"0c701c55",
+1644 => x"56850b84",
+1645 => x"150c850b",
+1646 => x"88150c8f",
+1647 => x"7627fd90",
+1648 => x"38881b52",
+1649 => x"0b0b7c51",
+1650 => x"85b43f80",
+1651 => x"e6a00b88",
+1652 => x"050880e5",
+1653 => x"e4085a55",
+1654 => x"fcf63978",
+1655 => x"80e5e40c",
+1656 => x"7380e694",
+1657 => x"0cfbc639",
+1658 => x"7284150c",
+1659 => x"fce239fb",
+1660 => x"3d0d7770",
+1661 => x"7a7c5855",
+1662 => x"530b0b56",
+1663 => x"8f752781",
+1664 => x"85387276",
+1665 => x"07830651",
+1666 => x"0b0b7080",
+1667 => x"f9387573",
+1668 => x"520b0b54",
+1669 => x"0b0b7070",
+1670 => x"8405520b",
+1671 => x"0b087470",
+1672 => x"8405560c",
+1673 => x"73717084",
+1674 => x"05530b0b",
+1675 => x"08717084",
+1676 => x"05530b0b",
+1677 => x"0c717084",
+1678 => x"05530b0b",
+1679 => x"08717084",
+1680 => x"05530b0b",
+1681 => x"0c717084",
+1682 => x"05530b0b",
+1683 => x"08717084",
+1684 => x"05530b0b",
+1685 => x"0cf01656",
+1686 => x"540b0b74",
+1687 => x"8f26ffb6",
+1688 => x"38837527",
+1689 => x"99387070",
+1690 => x"8405520b",
+1691 => x"0b087470",
+1692 => x"8405560c",
+1693 => x"fc15550b",
+1694 => x"0b748326",
+1695 => x"e9387371",
+1696 => x"540b0b52",
+1697 => x"0b0bff15",
+1698 => x"510b0b70",
+1699 => x"ff2e9f38",
+1700 => x"72708105",
+1701 => x"540b0b33",
+1702 => x"72708105",
+1703 => x"540b0b34",
+1704 => x"ff710551",
+1705 => x"0b0b70ff",
+1706 => x"2e098106",
+1707 => x"e3387580",
+1708 => x"0c873d0d",
+1709 => x"04040470",
+1710 => x"70707080",
+1711 => x"0b81c5e8",
+1712 => x"0c765188",
+1713 => x"d93f8008",
+1714 => x"530b0b80",
+1715 => x"08ff2e89",
+1716 => x"3872800c",
+1717 => x"50505050",
+1718 => x"0481c5e8",
+1719 => x"08540b0b",
+1720 => x"73802eed",
+1721 => x"38757471",
+1722 => x"0c520b0b",
+1723 => x"72800c50",
+1724 => x"50505004",
+1725 => x"fb3d0d77",
+1726 => x"79707207",
+1727 => x"8306530b",
+1728 => x"0b540b0b",
+1729 => x"520b0b70",
+1730 => x"9b387173",
+1731 => x"7308540b",
+1732 => x"0b56540b",
+1733 => x"0b717308",
+1734 => x"2e80d838",
+1735 => x"7375540b",
+1736 => x"0b520b0b",
+1737 => x"0b0b7133",
+1738 => x"7081ff06",
+1739 => x"520b0b54",
+1740 => x"0b0b7080",
+1741 => x"2ea53872",
+1742 => x"3355700b",
+1743 => x"752e0981",
+1744 => x"069c3881",
+1745 => x"72058114",
+1746 => x"71337081",
+1747 => x"ff06540b",
+1748 => x"0b56540b",
+1749 => x"0b520b0b",
+1750 => x"70dd3872",
+1751 => x"33557381",
+1752 => x"ff067581",
+1753 => x"ff067171",
+1754 => x"31800c55",
+1755 => x"520b0b87",
+1756 => x"3d0d0471",
+1757 => x"09f7fbfd",
+1758 => x"ff730506",
+1759 => x"f8848281",
+1760 => x"8006520b",
+1761 => x"0b0b0b71",
+1762 => x"9f388414",
+1763 => x"84167108",
+1764 => x"540b0b56",
+1765 => x"540b0b71",
+1766 => x"75082ed7",
+1767 => x"38737554",
+1768 => x"0b0b520b",
+1769 => x"0bfefd39",
+1770 => x"800b800c",
+1771 => x"873d0d04",
+1772 => x"fb3d0d77",
+1773 => x"70520b0b",
+1774 => x"56fdfa3f",
+1775 => x"80e6a00b",
+1776 => x"88050884",
+1777 => x"710508fc",
+1778 => x"06707b31",
+1779 => x"9fef05e0",
+1780 => x"8006e080",
+1781 => x"05520b0b",
+1782 => x"5555a080",
+1783 => x"75249838",
+1784 => x"80520b0b",
+1785 => x"7551fdcf",
+1786 => x"3f80e6a8",
+1787 => x"0814530b",
+1788 => x"0b728008",
+1789 => x"2e913875",
+1790 => x"51fdbb3f",
+1791 => x"80530b0b",
+1792 => x"72800c87",
+1793 => x"3d0d0474",
+1794 => x"30520b0b",
+1795 => x"7551fda7",
+1796 => x"3f8008ff",
+1797 => x"2eab3880",
+1798 => x"e6a00b88",
+1799 => x"05087476",
+1800 => x"31810784",
+1801 => x"72050c53",
+1802 => x"0b0b80e5",
+1803 => x"e4087531",
+1804 => x"80e5e40c",
+1805 => x"7551fcfe",
+1806 => x"3f810b80",
+1807 => x"0c873d0d",
+1808 => x"0480520b",
+1809 => x"0b7551fc",
+1810 => x"ee3f80e6",
+1811 => x"a00b8805",
+1812 => x"08800871",
+1813 => x"31540b0b",
+1814 => x"540b0b8f",
+1815 => x"7325ff97",
+1816 => x"38800880",
+1817 => x"e6940831",
+1818 => x"80e5e40c",
+1819 => x"72810784",
+1820 => x"150c7551",
+1821 => x"fcc03f80",
+1822 => x"530b0bff",
+1823 => x"8339f73d",
+1824 => x"0d7b7d54",
+1825 => x"0b0b5a72",
+1826 => x"802e82ab",
+1827 => x"387951fc",
+1828 => x"a43ff873",
+1829 => x"05847105",
+1830 => x"0870fe06",
+1831 => x"70730584",
+1832 => x"710508fc",
+1833 => x"065c5758",
+1834 => x"540b0b57",
+1835 => x"80e6a808",
+1836 => x"742e838b",
+1837 => x"38778415",
+1838 => x"0c807381",
+1839 => x"0656590b",
+1840 => x"740b792e",
+1841 => x"81f53877",
+1842 => x"14847105",
+1843 => x"08810656",
+1844 => x"530b0b74",
+1845 => x"a3387716",
+1846 => x"56788287",
+1847 => x"38881408",
+1848 => x"550b0b74",
+1849 => x"80e6a82e",
+1850 => x"83a7388c",
+1851 => x"1408708c",
+1852 => x"170c7588",
+1853 => x"72050c58",
+1854 => x"75810784",
+1855 => x"180c7517",
+1856 => x"76710c54",
+1857 => x"0b0b7881",
+1858 => x"a93883ff",
+1859 => x"762781e5",
+1860 => x"3875892a",
+1861 => x"76832a54",
+1862 => x"0b0b540b",
+1863 => x"0b73802e",
+1864 => x"80cb3875",
+1865 => x"862ab805",
+1866 => x"530b0b84",
+1867 => x"7427be38",
+1868 => x"80db1453",
+1869 => x"0b0b9474",
+1870 => x"27b33875",
+1871 => x"8c2a80ee",
+1872 => x"05530b0b",
+1873 => x"80d47427",
+1874 => x"a438758f",
+1875 => x"2a80f705",
+1876 => x"530b0b82",
+1877 => x"d4742795",
+1878 => x"3875922a",
+1879 => x"80fc0553",
+1880 => x"0b0b8ad4",
+1881 => x"74278638",
+1882 => x"80fe530b",
+1883 => x"0b721010",
+1884 => x"1080e6a0",
+1885 => x"05887105",
+1886 => x"0855550b",
+1887 => x"730b752e",
+1888 => x"82da3884",
+1889 => x"1408fc06",
+1890 => x"59750b79",
+1891 => x"278f3888",
+1892 => x"1408540b",
+1893 => x"0b73752e",
+1894 => x"098106e7",
+1895 => x"388c1408",
+1896 => x"708c190c",
+1897 => x"7488190c",
+1898 => x"77887205",
+1899 => x"0c55768c",
+1900 => x"150c7951",
+1901 => x"fa803f8b",
+1902 => x"3d0d0476",
+1903 => x"08777131",
+1904 => x"58760588",
+1905 => x"18085656",
+1906 => x"0b7480e6",
+1907 => x"a82e80ea",
+1908 => x"388c1708",
+1909 => x"708c170c",
+1910 => x"75887205",
+1911 => x"0c530b0b",
+1912 => x"fde53988",
+1913 => x"14088c15",
+1914 => x"08708c73",
+1915 => x"050c5988",
+1916 => x"190cfe84",
+1917 => x"3975832a",
+1918 => x"70540b0b",
+1919 => x"540b0b80",
+1920 => x"742481a2",
+1921 => x"3872822c",
+1922 => x"81712b80",
+1923 => x"e6a40807",
+1924 => x"80e6a00b",
+1925 => x"84050c74",
+1926 => x"10101080",
+1927 => x"e6a00588",
+1928 => x"71050871",
+1929 => x"8c1b0c70",
+1930 => x"881b0c79",
+1931 => x"8873050c",
+1932 => x"565a5576",
+1933 => x"8c150cfe",
+1934 => x"f9398159",
+1935 => x"fd893977",
+1936 => x"16738106",
+1937 => x"540b0b55",
+1938 => x"729a3876",
+1939 => x"08777131",
+1940 => x"5875058c",
+1941 => x"18088819",
+1942 => x"08718c72",
+1943 => x"050c8872",
+1944 => x"050c5555",
+1945 => x"0b0b7481",
+1946 => x"0784180c",
+1947 => x"7680e6a0",
+1948 => x"0b88050c",
+1949 => x"80e69c08",
+1950 => x"7526feb6",
+1951 => x"3880e698",
+1952 => x"08520b0b",
+1953 => x"7951faa8",
+1954 => x"3f7951f8",
+1955 => x"a93ffea7",
+1956 => x"3981778c",
+1957 => x"170c7788",
+1958 => x"170c758c",
+1959 => x"190c7588",
+1960 => x"190c59fc",
+1961 => x"d3398314",
+1962 => x"70822c81",
+1963 => x"712b80e6",
+1964 => x"a4080780",
+1965 => x"e6a00b84",
+1966 => x"050c7510",
+1967 => x"101080e6",
+1968 => x"a0058871",
+1969 => x"0508718c",
+1970 => x"1c0c7088",
+1971 => x"1c0c7a88",
+1972 => x"73050c57",
+1973 => x"5b56530b",
+1974 => x"0bfed839",
+1975 => x"807324a3",
+1976 => x"3872822c",
+1977 => x"81712b80",
+1978 => x"e6a40807",
+1979 => x"80e6a00b",
+1980 => x"84050c58",
+1981 => x"748c180c",
+1982 => x"7388180c",
+1983 => x"7688160c",
+1984 => x"fdac3983",
+1985 => x"73057082",
+1986 => x"2c81712b",
+1987 => x"80e6a408",
+1988 => x"0780e6a0",
+1989 => x"0b84050c",
+1990 => x"59530b0b",
+1991 => x"d7397070",
+1992 => x"7081c5ec",
+1993 => x"08510b0b",
+1994 => x"708a3881",
+1995 => x"c5f47081",
+1996 => x"c5ec0c51",
+1997 => x"740b7105",
+1998 => x"520b0bff",
+1999 => x"530b0b71",
+2000 => x"87fb8080",
+2001 => x"268a3871",
+2002 => x"81c5ec0c",
+2003 => x"70530b0b",
+2004 => x"72800c50",
+2005 => x"50500470",
+2006 => x"70707080",
+2007 => x"0b80e5d0",
+2008 => x"08540b0b",
+2009 => x"540b0b72",
+2010 => x"812e9d38",
+2011 => x"7381c5f0",
+2012 => x"0ccabe3f",
+2013 => x"c98a3f80",
+2014 => x"f5a8520b",
+2015 => x"0b8151d3",
+2016 => x"fa3f8008",
+2017 => x"518a8f3f",
+2018 => x"7281c5f0",
+2019 => x"0ccaa23f",
+2020 => x"c8ee3f80",
+2021 => x"f5a8520b",
+2022 => x"0b8151d3",
+2023 => x"de3f8008",
+2024 => x"5189f33f",
+2025 => x"00ff3900",
+2026 => x"ff39f53d",
+2027 => x"0d7e6081",
+2028 => x"c5f00870",
+2029 => x"5b585b5b",
+2030 => x"7580c538",
+2031 => x"777a25a2",
+2032 => x"38771b70",
+2033 => x"337081ff",
+2034 => x"06585859",
+2035 => x"758a2e99",
+2036 => x"387681ff",
+2037 => x"0651c9b4",
+2038 => x"3f811858",
+2039 => x"790b7824",
+2040 => x"e0387980",
+2041 => x"0c8d3d0d",
+2042 => x"048d51c9",
+2043 => x"9f3f7833",
+2044 => x"7081ff06",
+2045 => x"520b0b57",
+2046 => x"c9923f81",
+2047 => x"1858dd39",
+2048 => x"79557a54",
+2049 => x"0b0b7d53",
+2050 => x"0b0b8552",
+2051 => x"0b0b8d3d",
+2052 => x"fc0551c8",
+2053 => x"af3f8008",
+2054 => x"5688f43f",
+2055 => x"7b80080c",
+2056 => x"75800c8d",
+2057 => x"3d0d04f6",
+2058 => x"3d0d7d7f",
+2059 => x"81c5f008",
+2060 => x"705a585a",
+2061 => x"5a7580ca",
+2062 => x"38767925",
+2063 => x"b638761a",
+2064 => x"58c8a53f",
+2065 => x"80087834",
+2066 => x"800b8008",
+2067 => x"81ff0657",
+2068 => x"580b758a",
+2069 => x"2ea83875",
+2070 => x"8d327030",
+2071 => x"7080257a",
+2072 => x"07515156",
+2073 => x"0b0b7580",
+2074 => x"c0388117",
+2075 => x"57780b77",
+2076 => x"24cc3876",
+2077 => x"560b0b75",
+2078 => x"800c8c3d",
+2079 => x"0d048158",
+2080 => x"d6397855",
+2081 => x"79540b0b",
+2082 => x"7c530b0b",
+2083 => x"84520b0b",
+2084 => x"8c3dfc05",
+2085 => x"51c7ad3f",
+2086 => x"80085687",
+2087 => x"f23f7a80",
+2088 => x"080c7580",
+2089 => x"0c8c3d0d",
+2090 => x"04811756",
+2091 => x"c839f93d",
+2092 => x"0d795781",
+2093 => x"c5f00880",
+2094 => x"2eb23876",
+2095 => x"518ac03f",
+2096 => x"7b567a55",
+2097 => x"80088105",
+2098 => x"540b0b76",
+2099 => x"530b0b82",
+2100 => x"520b0b89",
+2101 => x"3dfc0551",
+2102 => x"c6ea3f80",
+2103 => x"085787af",
+2104 => x"3f778008",
+2105 => x"0c76800c",
+2106 => x"893d0d04",
+2107 => x"87a13f85",
+2108 => x"0b80080c",
+2109 => x"ff0b800c",
+2110 => x"893d0d04",
+2111 => x"fb3d0d81",
+2112 => x"c5f00870",
+2113 => x"56540b0b",
+2114 => x"73883874",
+2115 => x"800c873d",
+2116 => x"0d047753",
+2117 => x"0b0b8352",
+2118 => x"0b0b873d",
+2119 => x"fc0551c6",
+2120 => x"a33f8008",
+2121 => x"540b0b86",
+2122 => x"e63f7580",
+2123 => x"080c7380",
+2124 => x"0c873d0d",
+2125 => x"04ff0b80",
+2126 => x"0c04fb3d",
+2127 => x"0d775581",
+2128 => x"c5f00880",
+2129 => x"2eae3874",
+2130 => x"5189b43f",
+2131 => x"80088105",
+2132 => x"540b0b74",
+2133 => x"530b0b87",
+2134 => x"520b0b87",
+2135 => x"3dfc0551",
+2136 => x"c5e23f80",
+2137 => x"085586a7",
+2138 => x"3f758008",
+2139 => x"0c74800c",
+2140 => x"873d0d04",
+2141 => x"86993f85",
+2142 => x"0b80080c",
+2143 => x"ff0b800c",
+2144 => x"873d0d04",
+2145 => x"fa3d0d81",
+2146 => x"c5f00880",
+2147 => x"2ea8387a",
+2148 => x"5579540b",
+2149 => x"0b78530b",
+2150 => x"0b86520b",
+2151 => x"0b883dfc",
+2152 => x"0551c5a0",
+2153 => x"3f800856",
+2154 => x"85e53f76",
+2155 => x"80080c75",
+2156 => x"800c883d",
+2157 => x"0d0485d7",
+2158 => x"3f9d0b80",
+2159 => x"080cff0b",
+2160 => x"800c883d",
+2161 => x"0d04f73d",
+2162 => x"0d7b7d5b",
+2163 => x"59bc530b",
+2164 => x"0b80520b",
+2165 => x"0b795186",
+2166 => x"fd3f8070",
+2167 => x"56579856",
+2168 => x"74197033",
+2169 => x"70782b79",
+2170 => x"078118f8",
+2171 => x"1a5a5859",
+2172 => x"55588475",
+2173 => x"24ea3876",
+2174 => x"7a238419",
+2175 => x"58807056",
+2176 => x"57985674",
+2177 => x"18703370",
+2178 => x"782b7907",
+2179 => x"8118f81a",
+2180 => x"5a585951",
+2181 => x"540b0b84",
+2182 => x"7524e838",
+2183 => x"76821b23",
+2184 => x"88195880",
+2185 => x"70565798",
+2186 => x"56741870",
+2187 => x"3370782b",
+2188 => x"79078118",
+2189 => x"f81a5a58",
+2190 => x"5951540b",
+2191 => x"0b847524",
+2192 => x"e8387684",
+2193 => x"1b0c8c19",
+2194 => x"58807056",
+2195 => x"57985674",
+2196 => x"18703370",
+2197 => x"782b7907",
+2198 => x"8118f81a",
+2199 => x"5a585951",
+2200 => x"540b0b84",
+2201 => x"7524e838",
+2202 => x"76881b23",
+2203 => x"90195880",
+2204 => x"70565798",
+2205 => x"56741870",
+2206 => x"3370782b",
+2207 => x"79078118",
+2208 => x"f81a5a58",
+2209 => x"5951540b",
+2210 => x"0b847524",
+2211 => x"e838768a",
+2212 => x"1b239419",
+2213 => x"58807056",
+2214 => x"57985674",
+2215 => x"18703370",
+2216 => x"782b7907",
+2217 => x"8118f81a",
+2218 => x"5a585951",
+2219 => x"540b0b84",
+2220 => x"7524e838",
+2221 => x"768c1b23",
+2222 => x"98195880",
+2223 => x"70565798",
+2224 => x"56741870",
+2225 => x"3370782b",
+2226 => x"79078118",
+2227 => x"f81a5a58",
+2228 => x"5951540b",
+2229 => x"0b847524",
+2230 => x"e838768e",
+2231 => x"1b239c19",
+2232 => x"58807056",
+2233 => x"57b85674",
+2234 => x"18703370",
+2235 => x"782b7907",
+2236 => x"8118f81a",
+2237 => x"5a58595a",
+2238 => x"540b0b88",
+2239 => x"7524e838",
+2240 => x"76901b0c",
+2241 => x"8b3d0d04",
+2242 => x"e93d0d6a",
+2243 => x"81c5f008",
+2244 => x"57570b75",
+2245 => x"933880c0",
+2246 => x"800b8418",
+2247 => x"0c75ac18",
+2248 => x"0c75800c",
+2249 => x"993d0d04",
+2250 => x"893d7055",
+2251 => x"6a540b0b",
+2252 => x"558a520b",
+2253 => x"0b993dff",
+2254 => x"bc0551c2",
+2255 => x"873f8008",
+2256 => x"77530b0b",
+2257 => x"75520b0b",
+2258 => x"56fcfb3f",
+2259 => x"82c13f77",
+2260 => x"80080c75",
+2261 => x"800c993d",
+2262 => x"0d04e93d",
+2263 => x"0d695781",
+2264 => x"c5f00880",
+2265 => x"2ebd3876",
+2266 => x"5185943f",
+2267 => x"893d7056",
+2268 => x"80088105",
+2269 => x"5577540b",
+2270 => x"0b568f52",
+2271 => x"0b0b993d",
+2272 => x"ffbc0551",
+2273 => x"c1be3f80",
+2274 => x"086b530b",
+2275 => x"0b76520b",
+2276 => x"0b57fcb2",
+2277 => x"3f81f83f",
+2278 => x"7780080c",
+2279 => x"76800c99",
+2280 => x"3d0d0481",
+2281 => x"ea3f850b",
+2282 => x"80080cff",
+2283 => x"0b800c99",
+2284 => x"3d0d04fc",
+2285 => x"3d0d8154",
+2286 => x"0b0b81c5",
+2287 => x"f0088838",
+2288 => x"73800c86",
+2289 => x"3d0d0476",
+2290 => x"530b0b97",
+2291 => x"b9520b0b",
+2292 => x"863dfc05",
+2293 => x"51c0ed3f",
+2294 => x"8008540b",
+2295 => x"0b81b03f",
+2296 => x"7480080c",
+2297 => x"73800c86",
+2298 => x"3d0d04f4",
+2299 => x"3d0d7e80",
+2300 => x"f5d40870",
+2301 => x"0881ff06",
+2302 => x"913df805",
+2303 => x"540b0b51",
+2304 => x"5959c29d",
+2305 => x"3f775780",
+2306 => x"540b0b76",
+2307 => x"557b7d58",
+2308 => x"520b0b0b",
+2309 => x"76530b0b",
+2310 => x"8e3df005",
+2311 => x"5184dc3f",
+2312 => x"797b5879",
+2313 => x"0c76841a",
+2314 => x"0c78800c",
+2315 => x"8e3d0d04",
+2316 => x"f43d0d7e",
+2317 => x"80f5d408",
+2318 => x"70087081",
+2319 => x"ff06923d",
+2320 => x"f8055551",
+2321 => x"5a5759c1",
+2322 => x"d83f7757",
+2323 => x"800b8b3d",
+2324 => x"59540b0b",
+2325 => x"76557b7d",
+2326 => x"58520b0b",
+2327 => x"0b76530b",
+2328 => x"0b775184",
+2329 => x"963f8056",
+2330 => x"bd84c076",
+2331 => x"5555797b",
+2332 => x"58520b0b",
+2333 => x"0b76530b",
+2334 => x"0b775183",
+2335 => x"fe3f7a57",
+2336 => x"78802e84",
+2337 => x"3876790c",
+2338 => x"76800c8e",
+2339 => x"3d0d0480",
+2340 => x"eea80880",
+2341 => x"0c04f73d",
+2342 => x"0d7b80ee",
+2343 => x"a80882c8",
+2344 => x"7105085a",
+2345 => x"540b0b5a",
+2346 => x"77802e80",
+2347 => x"eb388188",
+2348 => x"18841908",
+2349 => x"ff058171",
+2350 => x"2b595559",
+2351 => x"80742481",
+2352 => x"80388074",
+2353 => x"2480c138",
+2354 => x"73822b78",
+2355 => x"71058805",
+2356 => x"56568180",
+2357 => x"19087706",
+2358 => x"530b0b72",
+2359 => x"802e80c3",
+2360 => x"38781670",
+2361 => x"08530b0b",
+2362 => x"530b0b79",
+2363 => x"51740853",
+2364 => x"0b0b722d",
+2365 => x"ff14fc17",
+2366 => x"fc177981",
+2367 => x"2c5a5757",
+2368 => x"540b0b73",
+2369 => x"8025cb38",
+2370 => x"7708580b",
+2371 => x"0b77ff9e",
+2372 => x"3880eea8",
+2373 => x"08530b0b",
+2374 => x"bc730508",
+2375 => x"a9387951",
+2376 => x"f5823f74",
+2377 => x"08530b0b",
+2378 => x"722dff14",
+2379 => x"fc17fc17",
+2380 => x"79812c5a",
+2381 => x"5757540b",
+2382 => x"0b738025",
+2383 => x"ff9438c8",
+2384 => x"398057fe",
+2385 => x"fd397251",
+2386 => x"bc730508",
+2387 => x"540b0b73",
+2388 => x"2d7951f4",
+2389 => x"cf3ffb3d",
+2390 => x"0d777a71",
+2391 => x"028c05a3",
+2392 => x"05335854",
+2393 => x"0b0b540b",
+2394 => x"0b568373",
+2395 => x"2780e738",
+2396 => x"75830651",
+2397 => x"0b0b7080",
+2398 => x"dd387488",
+2399 => x"2b750770",
+2400 => x"71902b07",
+2401 => x"55518f73",
+2402 => x"27b33873",
+2403 => x"72708405",
+2404 => x"540b0b0c",
+2405 => x"71747170",
+2406 => x"8405530b",
+2407 => x"0b0c7471",
+2408 => x"70840553",
+2409 => x"0b0b0c74",
+2410 => x"71708405",
+2411 => x"530b0b0c",
+2412 => x"f014540b",
+2413 => x"0b520b0b",
+2414 => x"728f26cf",
+2415 => x"38837327",
+2416 => x"95387372",
+2417 => x"70840554",
+2418 => x"0b0b0cfc",
+2419 => x"7305530b",
+2420 => x"0b728326",
+2421 => x"ed38ff73",
+2422 => x"05510b0b",
+2423 => x"70ff2e98",
+2424 => x"38747270",
+2425 => x"8105540b",
+2426 => x"0b34ff71",
+2427 => x"05510b0b",
+2428 => x"70ff2e09",
+2429 => x"8106ea38",
+2430 => x"75800c87",
+2431 => x"3d0d0470",
+2432 => x"70707075",
+2433 => x"70718306",
+2434 => x"530b0b55",
+2435 => x"520b0b70",
+2436 => x"80c53871",
+2437 => x"70087009",
+2438 => x"f7fbfdff",
+2439 => x"720506f8",
+2440 => x"84828180",
+2441 => x"06540b0b",
+2442 => x"520b0b53",
+2443 => x"0b0b71a3",
+2444 => x"38847305",
+2445 => x"70087009",
+2446 => x"f7fbfdff",
+2447 => x"720506f8",
+2448 => x"84828180",
+2449 => x"06540b0b",
+2450 => x"520b0b53",
+2451 => x"0b0b7180",
+2452 => x"2edf3872",
+2453 => x"520b0b0b",
+2454 => x"0b713353",
+2455 => x"0b0b7280",
+2456 => x"2e8f3881",
+2457 => x"72057033",
+2458 => x"540b0b52",
+2459 => x"0b0b72f3",
+2460 => x"38717431",
+2461 => x"800c5050",
+2462 => x"505004e4",
+2463 => x"3d0d6ea1",
+2464 => x"3d08a33d",
+2465 => x"0859575f",
+2466 => x"80764d77",
+2467 => x"4ea33d08",
+2468 => x"a53d0857",
+2469 => x"4b0b754c",
+2470 => x"5e0b0b7d",
+2471 => x"6c2487b2",
+2472 => x"38806a24",
+2473 => x"87cd3869",
+2474 => x"6b58566b",
+2475 => x"6d5d460b",
+2476 => x"7b477544",
+2477 => x"76450b0b",
+2478 => x"64646868",
+2479 => x"5c5c5656",
+2480 => x"0b7481f5",
+2481 => x"38787627",
+2482 => x"82dd3875",
+2483 => x"81ff2683",
+2484 => x"2b5583ff",
+2485 => x"ff76278c",
+2486 => x"389055fe",
+2487 => x"800a7627",
+2488 => x"83389855",
+2489 => x"750b752a",
+2490 => x"80e3bc05",
+2491 => x"7033a077",
+2492 => x"31713157",
+2493 => x"55577480",
+2494 => x"2e953875",
+2495 => x"752ba076",
+2496 => x"317a772b",
+2497 => x"7c722a07",
+2498 => x"7c782b5d",
+2499 => x"5b59560b",
+2500 => x"0b75902a",
+2501 => x"7683ffff",
+2502 => x"0671540b",
+2503 => x"0b7a530b",
+2504 => x"0b595788",
+2505 => x"bf3f8008",
+2506 => x"5b88a53f",
+2507 => x"80088008",
+2508 => x"79297c90",
+2509 => x"2b7c902a",
+2510 => x"07565659",
+2511 => x"73752794",
+2512 => x"388008ff",
+2513 => x"05761555",
+2514 => x"59757426",
+2515 => x"87387474",
+2516 => x"2687f438",
+2517 => x"76520b0b",
+2518 => x"73753151",
+2519 => x"88863f80",
+2520 => x"085587ec",
+2521 => x"3f800880",
+2522 => x"0879297b",
+2523 => x"83ffff06",
+2524 => x"77902b07",
+2525 => x"56595773",
+2526 => x"78279638",
+2527 => x"8008ff05",
+2528 => x"76155557",
+2529 => x"75742689",
+2530 => x"38777426",
+2531 => x"77713158",
+2532 => x"5678902b",
+2533 => x"77075880",
+2534 => x"5b0b0b7a",
+2535 => x"4077417f",
+2536 => x"0b615654",
+2537 => x"0b0b7d80",
+2538 => x"dd38737f",
+2539 => x"0c747f84",
+2540 => x"050c7e80",
+2541 => x"0c9e3d0d",
+2542 => x"0480705c",
+2543 => x"58747926",
+2544 => x"d8387481",
+2545 => x"ff26832b",
+2546 => x"577483ff",
+2547 => x"ff2682bd",
+2548 => x"3874772a",
+2549 => x"80e3bc05",
+2550 => x"7033a079",
+2551 => x"31713159",
+2552 => x"5c5d7682",
+2553 => x"cf387654",
+2554 => x"0b0b7479",
+2555 => x"27853881",
+2556 => x"540b0b79",
+2557 => x"76277407",
+2558 => x"59815878",
+2559 => x"ff993876",
+2560 => x"58805bff",
+2561 => x"94397352",
+2562 => x"0b0b7453",
+2563 => x"0b0b9e3d",
+2564 => x"e80551d2",
+2565 => x"d43f6769",
+2566 => x"567f0c74",
+2567 => x"7f84050c",
+2568 => x"7e800c9e",
+2569 => x"3d0d0475",
+2570 => x"802e81d2",
+2571 => x"387581ff",
+2572 => x"26832b55",
+2573 => x"83ffff76",
+2574 => x"278c3890",
+2575 => x"55fe800a",
+2576 => x"76278338",
+2577 => x"9855750b",
+2578 => x"752a80e3",
+2579 => x"bc057033",
+2580 => x"a0773171",
+2581 => x"31575e54",
+2582 => x"0b0b7484",
+2583 => x"b8387876",
+2584 => x"31540b0b",
+2585 => x"8176902a",
+2586 => x"7783ffff",
+2587 => x"065f5d5b",
+2588 => x"0b7b520b",
+2589 => x"0b735185",
+2590 => x"eb3f8008",
+2591 => x"5785d13f",
+2592 => x"80088008",
+2593 => x"7e297890",
+2594 => x"2b7c902a",
+2595 => x"07565659",
+2596 => x"73752794",
+2597 => x"388008ff",
+2598 => x"05761555",
+2599 => x"59757426",
+2600 => x"87387474",
+2601 => x"26859738",
+2602 => x"7b520b0b",
+2603 => x"73753151",
+2604 => x"85b23f80",
+2605 => x"08558598",
+2606 => x"3f800880",
+2607 => x"087e297b",
+2608 => x"83ffff06",
+2609 => x"77902b07",
+2610 => x"56595773",
+2611 => x"78279638",
+2612 => x"8008ff05",
+2613 => x"76155557",
+2614 => x"75742689",
+2615 => x"38777426",
+2616 => x"77713158",
+2617 => x"5a78902b",
+2618 => x"77077b41",
+2619 => x"410b7f0b",
+2620 => x"6156540b",
+2621 => x"0b7d802e",
+2622 => x"fdb038fe",
+2623 => x"89397552",
+2624 => x"0b0b8151",
+2625 => x"84ca3f80",
+2626 => x"0856fea1",
+2627 => x"399057fe",
+2628 => x"800a7527",
+2629 => x"fdbb3898",
+2630 => x"75712a80",
+2631 => x"e3bc0570",
+2632 => x"33a07331",
+2633 => x"7131530b",
+2634 => x"0b5d5e57",
+2635 => x"0b0b7680",
+2636 => x"2efdb338",
+2637 => x"a0773175",
+2638 => x"782b7772",
+2639 => x"2a077779",
+2640 => x"2b7b7a2b",
+2641 => x"7d742a07",
+2642 => x"7d7b2b73",
+2643 => x"902a7483",
+2644 => x"ffff0671",
+2645 => x"597f772a",
+2646 => x"585e5c41",
+2647 => x"5f585c54",
+2648 => x"0b0b8480",
+2649 => x"3f800854",
+2650 => x"0b0b83e4",
+2651 => x"3f800880",
+2652 => x"08792975",
+2653 => x"902b7e90",
+2654 => x"2a075656",
+2655 => x"59737527",
+2656 => x"99388008",
+2657 => x"ff057b15",
+2658 => x"55597a74",
+2659 => x"268c3873",
+2660 => x"75278738",
+2661 => x"ff197b15",
+2662 => x"55597652",
+2663 => x"0b0b7375",
+2664 => x"315183c0",
+2665 => x"3f800855",
+2666 => x"83a63f80",
+2667 => x"08800879",
+2668 => x"297d83ff",
+2669 => x"ff067790",
+2670 => x"2b075659",
+2671 => x"57737827",
+2672 => x"99388008",
+2673 => x"ff057b15",
+2674 => x"55577a74",
+2675 => x"268c3873",
+2676 => x"78278738",
+2677 => x"ff177b15",
+2678 => x"55570b73",
+2679 => x"78317990",
+2680 => x"2b780770",
+2681 => x"83ffff06",
+2682 => x"71902a79",
+2683 => x"83ffff06",
+2684 => x"7a902a73",
+2685 => x"72297373",
+2686 => x"29747329",
+2687 => x"76742973",
+2688 => x"902a0572",
+2689 => x"05575543",
+2690 => x"5f5b585a",
+2691 => x"57595a74",
+2692 => x"7c278638",
+2693 => x"84808017",
+2694 => x"5774902a",
+2695 => x"177983ff",
+2696 => x"ff067684",
+2697 => x"80802905",
+2698 => x"57570b0b",
+2699 => x"767a269a",
+2700 => x"38767a32",
+2701 => x"70307072",
+2702 => x"07802556",
+2703 => x"5a5b7c76",
+2704 => x"27fad438",
+2705 => x"73802efa",
+2706 => x"ce38ff18",
+2707 => x"58805bfa",
+2708 => x"c839ff76",
+2709 => x"530b0b77",
+2710 => x"540b0b9f",
+2711 => x"3de80552",
+2712 => x"0b0b5ece",
+2713 => x"843f6769",
+2714 => x"574c0b75",
+2715 => x"4d698025",
+2716 => x"f8b5387d",
+2717 => x"096a6c5c",
+2718 => x"530b0b7a",
+2719 => x"540b0b9f",
+2720 => x"3de80552",
+2721 => x"0b0b5ecd",
+2722 => x"e03f6769",
+2723 => x"714c704d",
+2724 => x"5856f897",
+2725 => x"39a07531",
+2726 => x"76762b7a",
+2727 => x"772b7c73",
+2728 => x"2a077c78",
+2729 => x"2b72902a",
+2730 => x"7383ffff",
+2731 => x"0671587e",
+2732 => x"762a5742",
+2733 => x"405d5d57",
+2734 => x"5881a93f",
+2735 => x"80085781",
+2736 => x"8f3f8008",
+2737 => x"80087e29",
+2738 => x"78902b7d",
+2739 => x"902a0756",
+2740 => x"56597375",
+2741 => x"27993880",
+2742 => x"08ff0576",
+2743 => x"15555975",
+2744 => x"74268c38",
+2745 => x"73752787",
+2746 => x"38ff1976",
+2747 => x"1555597b",
+2748 => x"520b0b73",
+2749 => x"75315180",
+2750 => x"eb3f8008",
+2751 => x"5580d13f",
+2752 => x"80088008",
+2753 => x"7e297c83",
+2754 => x"ffff0670",
+2755 => x"78902b07",
+2756 => x"51565858",
+2757 => x"73772799",
+2758 => x"388008ff",
+2759 => x"05761555",
+2760 => x"58757426",
+2761 => x"8c387377",
+2762 => x"278738ff",
+2763 => x"18761555",
+2764 => x"5878902b",
+2765 => x"78077478",
+2766 => x"31555bfa",
+2767 => x"b339ff19",
+2768 => x"76155559",
+2769 => x"fae239ff",
+2770 => x"19761555",
+2771 => x"59f88539",
+2772 => x"70707080",
+2773 => x"530b0b75",
+2774 => x"520b0b74",
+2775 => x"51ceaf3f",
+2776 => x"50505004",
+2777 => x"70707081",
+2778 => x"530b0b75",
+2779 => x"520b0b74",
+2780 => x"51ce9b3f",
+2781 => x"50505004",
+2782 => x"707080f5",
+2783 => x"b00bfc05",
+2784 => x"7008520b",
+2785 => x"0b520b0b",
+2786 => x"0b70ff2e",
+2787 => x"9738702d",
+2788 => x"fc720570",
+2789 => x"08520b0b",
+2790 => x"520b0b0b",
+2791 => x"70ff2e09",
+2792 => x"8106eb38",
+2793 => x"50500404",
+2794 => x"ffb4963f",
+2795 => x"04000000",
+2796 => x"30313233",
+2797 => x"34353637",
+2798 => x"38390000",
+2799 => x"44485259",
+2800 => x"53544f4e",
+2801 => x"45205052",
+2802 => x"4f475241",
+2803 => x"4d2c2053",
+2804 => x"4f4d4520",
+2805 => x"53545249",
+2806 => x"4e470000",
+2807 => x"44485259",
+2808 => x"53544f4e",
+2809 => x"45205052",
+2810 => x"4f475241",
+2811 => x"4d2c2031",
+2812 => x"27535420",
+2813 => x"53545249",
+2814 => x"4e470000",
+2815 => x"44687279",
+2816 => x"73746f6e",
+2817 => x"65204265",
+2818 => x"6e63686d",
+2819 => x"61726b2c",
+2820 => x"20566572",
+2821 => x"73696f6e",
+2822 => x"20322e31",
+2823 => x"20284c61",
+2824 => x"6e677561",
+2825 => x"67653a20",
+2826 => x"43290a00",
+2827 => x"50726f67",
+2828 => x"72616d20",
+2829 => x"636f6d70",
+2830 => x"696c6564",
+2831 => x"20776974",
+2832 => x"68202772",
+2833 => x"65676973",
+2834 => x"74657227",
+2835 => x"20617474",
+2836 => x"72696275",
+2837 => x"74650a00",
+2838 => x"45786563",
+2839 => x"7574696f",
+2840 => x"6e207374",
+2841 => x"61727473",
+2842 => x"2c202564",
+2843 => x"2072756e",
+2844 => x"73207468",
+2845 => x"726f7567",
+2846 => x"68204468",
+2847 => x"72797374",
+2848 => x"6f6e650a",
+2849 => x"00000000",
+2850 => x"44485259",
+2851 => x"53544f4e",
+2852 => x"45205052",
+2853 => x"4f475241",
+2854 => x"4d2c2032",
+2855 => x"274e4420",
+2856 => x"53545249",
+2857 => x"4e470000",
+2858 => x"45786563",
+2859 => x"7574696f",
+2860 => x"6e20656e",
+2861 => x"64730a00",
+2862 => x"46696e61",
+2863 => x"6c207661",
+2864 => x"6c756573",
+2865 => x"206f6620",
+2866 => x"74686520",
+2867 => x"76617269",
+2868 => x"61626c65",
+2869 => x"73207573",
+2870 => x"65642069",
+2871 => x"6e207468",
+2872 => x"65206265",
+2873 => x"6e63686d",
+2874 => x"61726b3a",
+2875 => x"0a000000",
+2876 => x"496e745f",
+2877 => x"476c6f62",
+2878 => x"3a202020",
+2879 => x"20202020",
+2880 => x"20202020",
+2881 => x"2025640a",
+2882 => x"00000000",
+2883 => x"20202020",
+2884 => x"20202020",
+2885 => x"73686f75",
+2886 => x"6c642062",
+2887 => x"653a2020",
+2888 => x"2025640a",
+2889 => x"00000000",
+2890 => x"426f6f6c",
+2891 => x"5f476c6f",
+2892 => x"623a2020",
+2893 => x"20202020",
+2894 => x"20202020",
+2895 => x"2025640a",
+2896 => x"00000000",
+2897 => x"43685f31",
+2898 => x"5f476c6f",
+2899 => x"623a2020",
+2900 => x"20202020",
+2901 => x"20202020",
+2902 => x"2025630a",
+2903 => x"00000000",
+2904 => x"20202020",
+2905 => x"20202020",
+2906 => x"73686f75",
+2907 => x"6c642062",
+2908 => x"653a2020",
+2909 => x"2025630a",
+2910 => x"00000000",
+2911 => x"43685f32",
+2912 => x"5f476c6f",
+2913 => x"623a2020",
+2914 => x"20202020",
+2915 => x"20202020",
+2916 => x"2025630a",
+2917 => x"00000000",
+2918 => x"4172725f",
+2919 => x"315f476c",
+2920 => x"6f625b38",
+2921 => x"5d3a2020",
+2922 => x"20202020",
+2923 => x"2025640a",
+2924 => x"00000000",
+2925 => x"4172725f",
+2926 => x"325f476c",
+2927 => x"6f625b38",
+2928 => x"5d5b375d",
+2929 => x"3a202020",
+2930 => x"2025640a",
+2931 => x"00000000",
+2932 => x"20202020",
+2933 => x"20202020",
+2934 => x"73686f75",
+2935 => x"6c642062",
+2936 => x"653a2020",
+2937 => x"204e756d",
+2938 => x"6265725f",
+2939 => x"4f665f52",
+2940 => x"756e7320",
+2941 => x"2b203130",
+2942 => x"0a000000",
+2943 => x"5074725f",
+2944 => x"476c6f62",
+2945 => x"2d3e0a00",
+2946 => x"20205074",
+2947 => x"725f436f",
+2948 => x"6d703a20",
+2949 => x"20202020",
+2950 => x"20202020",
+2951 => x"2025640a",
+2952 => x"00000000",
+2953 => x"20202020",
+2954 => x"20202020",
+2955 => x"73686f75",
+2956 => x"6c642062",
+2957 => x"653a2020",
+2958 => x"2028696d",
+2959 => x"706c656d",
+2960 => x"656e7461",
+2961 => x"74696f6e",
+2962 => x"2d646570",
+2963 => x"656e6465",
+2964 => x"6e74290a",
+2965 => x"00000000",
+2966 => x"20204469",
+2967 => x"7363723a",
+2968 => x"20202020",
+2969 => x"20202020",
+2970 => x"20202020",
+2971 => x"2025640a",
+2972 => x"00000000",
+2973 => x"2020456e",
+2974 => x"756d5f43",
+2975 => x"6f6d703a",
+2976 => x"20202020",
+2977 => x"20202020",
+2978 => x"2025640a",
+2979 => x"00000000",
+2980 => x"2020496e",
+2981 => x"745f436f",
+2982 => x"6d703a20",
+2983 => x"20202020",
+2984 => x"20202020",
+2985 => x"2025640a",
+2986 => x"00000000",
+2987 => x"20205374",
+2988 => x"725f436f",
+2989 => x"6d703a20",
+2990 => x"20202020",
+2991 => x"20202020",
+2992 => x"2025730a",
+2993 => x"00000000",
+2994 => x"20202020",
+2995 => x"20202020",
+2996 => x"73686f75",
+2997 => x"6c642062",
+2998 => x"653a2020",
+2999 => x"20444852",
+3000 => x"5953544f",
+3001 => x"4e452050",
+3002 => x"524f4752",
+3003 => x"414d2c20",
+3004 => x"534f4d45",
+3005 => x"20535452",
+3006 => x"494e470a",
+3007 => x"00000000",
+3008 => x"4e657874",
+3009 => x"5f507472",
+3010 => x"5f476c6f",
+3011 => x"622d3e0a",
+3012 => x"00000000",
+3013 => x"20202020",
+3014 => x"20202020",
+3015 => x"73686f75",
+3016 => x"6c642062",
+3017 => x"653a2020",
+3018 => x"2028696d",
+3019 => x"706c656d",
+3020 => x"656e7461",
+3021 => x"74696f6e",
+3022 => x"2d646570",
+3023 => x"656e6465",
+3024 => x"6e74292c",
+3025 => x"2073616d",
+3026 => x"65206173",
+3027 => x"2061626f",
+3028 => x"76650a00",
+3029 => x"496e745f",
+3030 => x"315f4c6f",
+3031 => x"633a2020",
+3032 => x"20202020",
+3033 => x"20202020",
+3034 => x"2025640a",
+3035 => x"00000000",
+3036 => x"496e745f",
+3037 => x"325f4c6f",
+3038 => x"633a2020",
+3039 => x"20202020",
+3040 => x"20202020",
+3041 => x"2025640a",
+3042 => x"00000000",
+3043 => x"496e745f",
+3044 => x"335f4c6f",
+3045 => x"633a2020",
+3046 => x"20202020",
+3047 => x"20202020",
+3048 => x"2025640a",
+3049 => x"00000000",
+3050 => x"456e756d",
+3051 => x"5f4c6f63",
+3052 => x"3a202020",
+3053 => x"20202020",
+3054 => x"20202020",
+3055 => x"2025640a",
+3056 => x"00000000",
+3057 => x"5374725f",
+3058 => x"315f4c6f",
+3059 => x"633a2020",
+3060 => x"20202020",
+3061 => x"20202020",
+3062 => x"2025730a",
+3063 => x"00000000",
+3064 => x"20202020",
+3065 => x"20202020",
+3066 => x"73686f75",
+3067 => x"6c642062",
+3068 => x"653a2020",
+3069 => x"20444852",
+3070 => x"5953544f",
+3071 => x"4e452050",
+3072 => x"524f4752",
+3073 => x"414d2c20",
+3074 => x"31275354",
+3075 => x"20535452",
+3076 => x"494e470a",
+3077 => x"00000000",
+3078 => x"5374725f",
+3079 => x"325f4c6f",
+3080 => x"633a2020",
+3081 => x"20202020",
+3082 => x"20202020",
+3083 => x"2025730a",
+3084 => x"00000000",
+3085 => x"20202020",
+3086 => x"20202020",
+3087 => x"73686f75",
+3088 => x"6c642062",
+3089 => x"653a2020",
+3090 => x"20444852",
+3091 => x"5953544f",
+3092 => x"4e452050",
+3093 => x"524f4752",
+3094 => x"414d2c20",
+3095 => x"32274e44",
+3096 => x"20535452",
+3097 => x"494e470a",
+3098 => x"00000000",
+3099 => x"55736572",
+3100 => x"2074696d",
+3101 => x"653a2025",
+3102 => x"640a0000",
+3103 => x"4d696372",
+3104 => x"6f736563",
+3105 => x"6f6e6473",
+3106 => x"20666f72",
+3107 => x"206f6e65",
+3108 => x"2072756e",
+3109 => x"20746872",
+3110 => x"6f756768",
+3111 => x"20446872",
+3112 => x"7973746f",
+3113 => x"6e653a20",
+3114 => x"00000000",
+3115 => x"2564200a",
+3116 => x"00000000",
+3117 => x"44687279",
+3118 => x"73746f6e",
+3119 => x"65732070",
+3120 => x"65722053",
+3121 => x"65636f6e",
+3122 => x"643a2020",
+3123 => x"20202020",
+3124 => x"20202020",
+3125 => x"20202020",
+3126 => x"20202020",
+3127 => x"20202020",
+3128 => x"00000000",
+3129 => x"56415820",
+3130 => x"4d495053",
+3131 => x"20726174",
+3132 => x"696e6720",
+3133 => x"2a203130",
+3134 => x"3030203d",
+3135 => x"20256420",
+3136 => x"0a000000",
+3137 => x"50726f67",
+3138 => x"72616d20",
+3139 => x"636f6d70",
+3140 => x"696c6564",
+3141 => x"20776974",
+3142 => x"686f7574",
+3143 => x"20277265",
+3144 => x"67697374",
+3145 => x"65722720",
+3146 => x"61747472",
+3147 => x"69627574",
+3148 => x"650a0000",
+3149 => x"4d656173",
+3150 => x"75726564",
+3151 => x"2074696d",
+3152 => x"6520746f",
+3153 => x"6f20736d",
+3154 => x"616c6c20",
+3155 => x"746f206f",
+3156 => x"62746169",
+3157 => x"6e206d65",
+3158 => x"616e696e",
+3159 => x"6766756c",
+3160 => x"20726573",
+3161 => x"756c7473",
+3162 => x"0a000000",
+3163 => x"506c6561",
+3164 => x"73652069",
+3165 => x"6e637265",
+3166 => x"61736520",
+3167 => x"6e756d62",
+3168 => x"6572206f",
+3169 => x"66207275",
+3170 => x"6e730a00",
+3171 => x"44485259",
+3172 => x"53544f4e",
+3173 => x"45205052",
+3174 => x"4f475241",
+3175 => x"4d2c2033",
+3176 => x"27524420",
+3177 => x"53545249",
+3178 => x"4e470000",
+3179 => x"43000000",
+3180 => x"64756d6d",
+3181 => x"792e6578",
+3182 => x"65000000",
+3183 => x"00010202",
+3184 => x"03030303",
+3185 => x"04040404",
+3186 => x"04040404",
+3187 => x"05050505",
+3188 => x"05050505",
+3189 => x"05050505",
+3190 => x"05050505",
+3191 => x"06060606",
+3192 => x"06060606",
+3193 => x"06060606",
+3194 => x"06060606",
+3195 => x"06060606",
+3196 => x"06060606",
+3197 => x"06060606",
+3198 => x"06060606",
+3199 => x"07070707",
+3200 => x"07070707",
+3201 => x"07070707",
+3202 => x"07070707",
+3203 => x"07070707",
+3204 => x"07070707",
+3205 => x"07070707",
+3206 => x"07070707",
+3207 => x"07070707",
+3208 => x"07070707",
+3209 => x"07070707",
+3210 => x"07070707",
+3211 => x"07070707",
+3212 => x"07070707",
+3213 => x"07070707",
+3214 => x"07070707",
+3215 => x"08080808",
+3216 => x"08080808",
+3217 => x"08080808",
+3218 => x"08080808",
+3219 => x"08080808",
+3220 => x"08080808",
+3221 => x"08080808",
+3222 => x"08080808",
+3223 => x"08080808",
+3224 => x"08080808",
+3225 => x"08080808",
+3226 => x"08080808",
+3227 => x"08080808",
+3228 => x"08080808",
+3229 => x"08080808",
+3230 => x"08080808",
+3231 => x"08080808",
+3232 => x"08080808",
+3233 => x"08080808",
+3234 => x"08080808",
+3235 => x"08080808",
+3236 => x"08080808",
+3237 => x"08080808",
+3238 => x"08080808",
+3239 => x"08080808",
+3240 => x"08080808",
+3241 => x"08080808",
+3242 => x"08080808",
+3243 => x"08080808",
+3244 => x"08080808",
+3245 => x"08080808",
+3246 => x"08080808",
+3247 => x"00ffffff",
+3248 => x"ff00ffff",
+3249 => x"ffff00ff",
+3250 => x"ffffff00",
+3251 => x"00000000",
+3252 => x"00000000",
+3253 => x"00000000",
+3254 => x"00003ab8",
+3255 => x"000186a0", -- iterations
+3256 => x"00000000",
+3257 => x"00000000",
+3258 => x"00000000",
+3259 => x"00000000",
+3260 => x"00000000",
+3261 => x"00000000",
+3262 => x"00000000",
+3263 => x"00000000",
+3264 => x"00000000",
+3265 => x"00000000",
+3266 => x"00000000",
+3267 => x"00000000",
+3268 => x"00000000",
+3269 => x"ffffffff",
+3270 => x"00000000",
+3271 => x"00020000",
+3272 => x"00000000",
+3273 => x"00000000",
+3274 => x"00003320",
+3275 => x"00003320",
+3276 => x"00003328",
+3277 => x"00003328",
+3278 => x"00003330",
+3279 => x"00003330",
+3280 => x"00003338",
+3281 => x"00003338",
+3282 => x"00003340",
+3283 => x"00003340",
+3284 => x"00003348",
+3285 => x"00003348",
+3286 => x"00003350",
+3287 => x"00003350",
+3288 => x"00003358",
+3289 => x"00003358",
+3290 => x"00003360",
+3291 => x"00003360",
+3292 => x"00003368",
+3293 => x"00003368",
+3294 => x"00003370",
+3295 => x"00003370",
+3296 => x"00003378",
+3297 => x"00003378",
+3298 => x"00003380",
+3299 => x"00003380",
+3300 => x"00003388",
+3301 => x"00003388",
+3302 => x"00003390",
+3303 => x"00003390",
+3304 => x"00003398",
+3305 => x"00003398",
+3306 => x"000033a0",
+3307 => x"000033a0",
+3308 => x"000033a8",
+3309 => x"000033a8",
+3310 => x"000033b0",
+3311 => x"000033b0",
+3312 => x"000033b8",
+3313 => x"000033b8",
+3314 => x"000033c0",
+3315 => x"000033c0",
+3316 => x"000033c8",
+3317 => x"000033c8",
+3318 => x"000033d0",
+3319 => x"000033d0",
+3320 => x"000033d8",
+3321 => x"000033d8",
+3322 => x"000033e0",
+3323 => x"000033e0",
+3324 => x"000033e8",
+3325 => x"000033e8",
+3326 => x"000033f0",
+3327 => x"000033f0",
+3328 => x"000033f8",
+3329 => x"000033f8",
+3330 => x"00003400",
+3331 => x"00003400",
+3332 => x"00003408",
+3333 => x"00003408",
+3334 => x"00003410",
+3335 => x"00003410",
+3336 => x"00003418",
+3337 => x"00003418",
+3338 => x"00003420",
+3339 => x"00003420",
+3340 => x"00003428",
+3341 => x"00003428",
+3342 => x"00003430",
+3343 => x"00003430",
+3344 => x"00003438",
+3345 => x"00003438",
+3346 => x"00003440",
+3347 => x"00003440",
+3348 => x"00003448",
+3349 => x"00003448",
+3350 => x"00003450",
+3351 => x"00003450",
+3352 => x"00003458",
+3353 => x"00003458",
+3354 => x"00003460",
+3355 => x"00003460",
+3356 => x"00003468",
+3357 => x"00003468",
+3358 => x"00003470",
+3359 => x"00003470",
+3360 => x"00003478",
+3361 => x"00003478",
+3362 => x"00003480",
+3363 => x"00003480",
+3364 => x"00003488",
+3365 => x"00003488",
+3366 => x"00003490",
+3367 => x"00003490",
+3368 => x"00003498",
+3369 => x"00003498",
+3370 => x"000034a0",
+3371 => x"000034a0",
+3372 => x"000034a8",
+3373 => x"000034a8",
+3374 => x"000034b0",
+3375 => x"000034b0",
+3376 => x"000034b8",
+3377 => x"000034b8",
+3378 => x"000034c0",
+3379 => x"000034c0",
+3380 => x"000034c8",
+3381 => x"000034c8",
+3382 => x"000034d0",
+3383 => x"000034d0",
+3384 => x"000034d8",
+3385 => x"000034d8",
+3386 => x"000034e0",
+3387 => x"000034e0",
+3388 => x"000034e8",
+3389 => x"000034e8",
+3390 => x"000034f0",
+3391 => x"000034f0",
+3392 => x"000034f8",
+3393 => x"000034f8",
+3394 => x"00003500",
+3395 => x"00003500",
+3396 => x"00003508",
+3397 => x"00003508",
+3398 => x"00003510",
+3399 => x"00003510",
+3400 => x"00003518",
+3401 => x"00003518",
+3402 => x"00003520",
+3403 => x"00003520",
+3404 => x"00003528",
+3405 => x"00003528",
+3406 => x"00003530",
+3407 => x"00003530",
+3408 => x"00003538",
+3409 => x"00003538",
+3410 => x"00003540",
+3411 => x"00003540",
+3412 => x"00003548",
+3413 => x"00003548",
+3414 => x"00003550",
+3415 => x"00003550",
+3416 => x"00003558",
+3417 => x"00003558",
+3418 => x"00003560",
+3419 => x"00003560",
+3420 => x"00003568",
+3421 => x"00003568",
+3422 => x"00003570",
+3423 => x"00003570",
+3424 => x"00003578",
+3425 => x"00003578",
+3426 => x"00003580",
+3427 => x"00003580",
+3428 => x"00003588",
+3429 => x"00003588",
+3430 => x"00003590",
+3431 => x"00003590",
+3432 => x"00003598",
+3433 => x"00003598",
+3434 => x"000035a0",
+3435 => x"000035a0",
+3436 => x"000035a8",
+3437 => x"000035a8",
+3438 => x"000035b0",
+3439 => x"000035b0",
+3440 => x"000035b8",
+3441 => x"000035b8",
+3442 => x"000035c0",
+3443 => x"000035c0",
+3444 => x"000035c8",
+3445 => x"000035c8",
+3446 => x"000035d0",
+3447 => x"000035d0",
+3448 => x"000035d8",
+3449 => x"000035d8",
+3450 => x"000035e0",
+3451 => x"000035e0",
+3452 => x"000035e8",
+3453 => x"000035e8",
+3454 => x"000035f0",
+3455 => x"000035f0",
+3456 => x"000035f8",
+3457 => x"000035f8",
+3458 => x"00003600",
+3459 => x"00003600",
+3460 => x"00003608",
+3461 => x"00003608",
+3462 => x"00003610",
+3463 => x"00003610",
+3464 => x"00003618",
+3465 => x"00003618",
+3466 => x"00003620",
+3467 => x"00003620",
+3468 => x"00003628",
+3469 => x"00003628",
+3470 => x"00003630",
+3471 => x"00003630",
+3472 => x"00003638",
+3473 => x"00003638",
+3474 => x"00003640",
+3475 => x"00003640",
+3476 => x"00003648",
+3477 => x"00003648",
+3478 => x"00003650",
+3479 => x"00003650",
+3480 => x"00003658",
+3481 => x"00003658",
+3482 => x"00003660",
+3483 => x"00003660",
+3484 => x"00003668",
+3485 => x"00003668",
+3486 => x"00003670",
+3487 => x"00003670",
+3488 => x"00003678",
+3489 => x"00003678",
+3490 => x"00003680",
+3491 => x"00003680",
+3492 => x"00003688",
+3493 => x"00003688",
+3494 => x"00003690",
+3495 => x"00003690",
+3496 => x"00003698",
+3497 => x"00003698",
+3498 => x"000036a0",
+3499 => x"000036a0",
+3500 => x"000036a8",
+3501 => x"000036a8",
+3502 => x"000036b0",
+3503 => x"000036b0",
+3504 => x"000036b8",
+3505 => x"000036b8",
+3506 => x"000036c0",
+3507 => x"000036c0",
+3508 => x"000036c8",
+3509 => x"000036c8",
+3510 => x"000036d0",
+3511 => x"000036d0",
+3512 => x"000036d8",
+3513 => x"000036d8",
+3514 => x"000036e0",
+3515 => x"000036e0",
+3516 => x"000036e8",
+3517 => x"000036e8",
+3518 => x"000036f0",
+3519 => x"000036f0",
+3520 => x"000036f8",
+3521 => x"000036f8",
+3522 => x"00003700",
+3523 => x"00003700",
+3524 => x"00003708",
+3525 => x"00003708",
+3526 => x"00003710",
+3527 => x"00003710",
+3528 => x"00003718",
+3529 => x"00003718",
+3530 => x"0000372c",
+3531 => x"00000000",
+3532 => x"00003994",
+3533 => x"000039f0",
+3534 => x"00003a4c",
+3535 => x"00000000",
+3536 => x"00000000",
+3537 => x"00000000",
+3538 => x"00000000",
+3539 => x"00000000",
+3540 => x"00000000",
+3541 => x"00000000",
+3542 => x"00000000",
+3543 => x"00000000",
+3544 => x"000031ac",
+3545 => x"00000000",
+3546 => x"00000000",
+3547 => x"00000000",
+3548 => x"00000000",
+3549 => x"00000000",
+3550 => x"00000000",
+3551 => x"00000000",
+3552 => x"00000000",
+3553 => x"00000000",
+3554 => x"00000000",
+3555 => x"00000000",
+3556 => x"00000000",
+3557 => x"00000000",
+3558 => x"00000000",
+3559 => x"00000000",
+3560 => x"00000000",
+3561 => x"00000000",
+3562 => x"00000000",
+3563 => x"00000000",
+3564 => x"00000000",
+3565 => x"00000000",
+3566 => x"00000000",
+3567 => x"00000000",
+3568 => x"00000000",
+3569 => x"00000000",
+3570 => x"00000000",
+3571 => x"00000000",
+3572 => x"00000000",
+3573 => x"00000001",
+3574 => x"330eabcd",
+3575 => x"1234e66d",
+3576 => x"deec0005",
+3577 => x"000b0000",
+3578 => x"00000000",
+3579 => x"00000000",
+3580 => x"00000000",
+3581 => x"00000000",
+3582 => x"00000000",
+3583 => x"00000000",
+3584 => x"00000000",
+3585 => x"00000000",
+3586 => x"00000000",
+3587 => x"00000000",
+3588 => x"00000000",
+3589 => x"00000000",
+3590 => x"00000000",
+3591 => x"00000000",
+3592 => x"00000000",
+3593 => x"00000000",
+3594 => x"00000000",
+3595 => x"00000000",
+3596 => x"00000000",
+3597 => x"00000000",
+3598 => x"00000000",
+3599 => x"00000000",
+3600 => x"00000000",
+3601 => x"00000000",
+3602 => x"00000000",
+3603 => x"00000000",
+3604 => x"00000000",
+3605 => x"00000000",
+3606 => x"00000000",
+3607 => x"00000000",
+3608 => x"00000000",
+3609 => x"00000000",
+3610 => x"00000000",
+3611 => x"00000000",
+3612 => x"00000000",
+3613 => x"00000000",
+3614 => x"00000000",
+3615 => x"00000000",
+3616 => x"00000000",
+3617 => x"00000000",
+3618 => x"00000000",
+3619 => x"00000000",
+3620 => x"00000000",
+3621 => x"00000000",
+3622 => x"00000000",
+3623 => x"00000000",
+3624 => x"00000000",
+3625 => x"00000000",
+3626 => x"00000000",
+3627 => x"00000000",
+3628 => x"00000000",
+3629 => x"00000000",
+3630 => x"00000000",
+3631 => x"00000000",
+3632 => x"00000000",
+3633 => x"00000000",
+3634 => x"00000000",
+3635 => x"00000000",
+3636 => x"00000000",
+3637 => x"00000000",
+3638 => x"00000000",
+3639 => x"00000000",
+3640 => x"00000000",
+3641 => x"00000000",
+3642 => x"00000000",
+3643 => x"00000000",
+3644 => x"00000000",
+3645 => x"00000000",
+3646 => x"00000000",
+3647 => x"00000000",
+3648 => x"00000000",
+3649 => x"00000000",
+3650 => x"00000000",
+3651 => x"00000000",
+3652 => x"00000000",
+3653 => x"00000000",
+3654 => x"00000000",
+3655 => x"00000000",
+3656 => x"00000000",
+3657 => x"00000000",
+3658 => x"00000000",
+3659 => x"00000000",
+3660 => x"00000000",
+3661 => x"00000000",
+3662 => x"00000000",
+3663 => x"00000000",
+3664 => x"00000000",
+3665 => x"00000000",
+3666 => x"00000000",
+3667 => x"00000000",
+3668 => x"00000000",
+3669 => x"00000000",
+3670 => x"00000000",
+3671 => x"00000000",
+3672 => x"00000000",
+3673 => x"00000000",
+3674 => x"00000000",
+3675 => x"00000000",
+3676 => x"00000000",
+3677 => x"00000000",
+3678 => x"00000000",
+3679 => x"00000000",
+3680 => x"00000000",
+3681 => x"00000000",
+3682 => x"00000000",
+3683 => x"00000000",
+3684 => x"00000000",
+3685 => x"00000000",
+3686 => x"00000000",
+3687 => x"00000000",
+3688 => x"00000000",
+3689 => x"00000000",
+3690 => x"00000000",
+3691 => x"00000000",
+3692 => x"00000000",
+3693 => x"00000000",
+3694 => x"00000000",
+3695 => x"00000000",
+3696 => x"00000000",
+3697 => x"00000000",
+3698 => x"00000000",
+3699 => x"00000000",
+3700 => x"00000000",
+3701 => x"00000000",
+3702 => x"00000000",
+3703 => x"00000000",
+3704 => x"00000000",
+3705 => x"00000000",
+3706 => x"00000000",
+3707 => x"00000000",
+3708 => x"00000000",
+3709 => x"00000000",
+3710 => x"00000000",
+3711 => x"00000000",
+3712 => x"00000000",
+3713 => x"00000000",
+3714 => x"00000000",
+3715 => x"00000000",
+3716 => x"00000000",
+3717 => x"00000000",
+3718 => x"00000000",
+3719 => x"00000000",
+3720 => x"00000000",
+3721 => x"00000000",
+3722 => x"00000000",
+3723 => x"00000000",
+3724 => x"00000000",
+3725 => x"00000000",
+3726 => x"00000000",
+3727 => x"00000000",
+3728 => x"00000000",
+3729 => x"00000000",
+3730 => x"00000000",
+3731 => x"00000000",
+3732 => x"00000000",
+3733 => x"00000000",
+3734 => x"00000000",
+3735 => x"00000000",
+3736 => x"00000000",
+3737 => x"00000000",
+3738 => x"00000000",
+3739 => x"00000000",
+3740 => x"00000000",
+3741 => x"00000000",
+3742 => x"00000000",
+3743 => x"00000000",
+3744 => x"00000000",
+3745 => x"00000000",
+3746 => x"00000000",
+3747 => x"00000000",
+3748 => x"00000000",
+3749 => x"00000000",
+3750 => x"00000000",
+3751 => x"00000000",
+3752 => x"00000000",
+3753 => x"00000000",
+3754 => x"000031b0",
+3755 => x"ffffffff",
+3756 => x"00000000",
+3757 => x"ffffffff",
+3758 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+mem_busy <= '0';
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (mem_writeEnable = '1') then
+ ram(conv_integer(mem_addr)) := mem_write;
+ end if;
+ mem_read <= ram(conv_integer(mem_addr));
+ end if;
+end process;
+
+
+
+
+end dram_arch;
diff --git a/zpu/hdl/zpu4/src/bram_dmips.vhd b/zpu/hdl/zpu4/src/bram_dmips.vhd
new file mode 100644
index 0000000..1c85e0d
--- /dev/null
+++ b/zpu/hdl/zpu4/src/bram_dmips.vhd
@@ -0,0 +1,3717 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity dualport_ram is
+port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+end dualport_ram;
+
+architecture dualport_ram_arch of dualport_ram is
+
+
+type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+0 => x"0b0b0b0b",
+1 => x"80700b0b",
+2 => x"80e2a40c",
+3 => x"3a0b0b80",
+4 => x"c6fc0400",
+5 => x"00000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"80c7c32d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b2a83",
+20 => x"ffff0652",
+21 => x"04000000",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b2b0906",
+29 => x"7383ffff",
+30 => x"0b0b0b0b",
+31 => x"83a70400",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"53510400",
+38 => x"00000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"51040000",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"53510400",
+55 => x"00000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"51040000",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"00000000",
+65 => x"00000000",
+66 => x"00000000",
+67 => x"00000000",
+68 => x"00000000",
+69 => x"00000000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"0b0b0b88",
+73 => x"c4040000",
+74 => x"00000000",
+75 => x"00000000",
+76 => x"00000000",
+77 => x"00000000",
+78 => x"00000000",
+79 => x"00000000",
+80 => x"720a722b",
+81 => x"0a535104",
+82 => x"00000000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a7",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"06075351",
+101 => x"04000000",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"71715351",
+105 => x"020d0406",
+106 => x"73830609",
+107 => x"81058205",
+108 => x"832b0b2b",
+109 => x"0772fc06",
+110 => x"0c515104",
+111 => x"00000000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"51040000",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"53510400",
+125 => x"00000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"52040000",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"05055351",
+138 => x"04000000",
+139 => x"00000000",
+140 => x"00000000",
+141 => x"00000000",
+142 => x"00000000",
+143 => x"00000000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07535104",
+147 => x"00000000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"04000000",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b80e2",
+162 => x"90738306",
+163 => x"10100508",
+164 => x"060b0b0b",
+165 => x"88aa0400",
+166 => x"00000000",
+167 => x"00000000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0baf",
+171 => x"ac2d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c510400",
+175 => x"00000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0baf",
+179 => x"f02d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c510400",
+183 => x"00000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70547106",
+188 => x"73097274",
+189 => x"05ff0506",
+190 => x"07515151",
+191 => x"04000000",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"05705471",
+196 => x"06730972",
+197 => x"7405ff05",
+198 => x"06075151",
+199 => x"51040000",
+200 => x"05ff0504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"80e2a00c",
+210 => x"51040000",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"71810552",
+217 => x"04000000",
+218 => x"00000000",
+219 => x"00000000",
+220 => x"00000000",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"04000000",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"717105ff",
+249 => x"05715351",
+250 => x"020d0400",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"83d93f80",
+257 => x"cbcf3f04",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10101053",
+266 => x"51047381",
+267 => x"ff067383",
+268 => x"06098105",
+269 => x"83051010",
+270 => x"102b0772",
+271 => x"fc060c51",
+272 => x"51043c04",
+273 => x"72728072",
+274 => x"8106ff05",
+275 => x"09720605",
+276 => x"71105272",
+277 => x"0a100a53",
+278 => x"72ed3851",
+279 => x"51535104",
+280 => x"ff3d0d0b",
+281 => x"0b80f294",
+282 => x"08528412",
+283 => x"08708106",
+284 => x"515170f6",
+285 => x"38710881",
+286 => x"ff06800c",
+287 => x"833d0d04",
+288 => x"ff3d0d0b",
+289 => x"0b80f294",
+290 => x"08528412",
+291 => x"08700a10",
+292 => x"0a708106",
+293 => x"51515170",
+294 => x"f1387372",
+295 => x"0c833d0d",
+296 => x"0480e2a0",
+297 => x"08802ea8",
+298 => x"38838080",
+299 => x"0b0b0b80",
+300 => x"f2940c82",
+301 => x"a0800b0b",
+302 => x"0b80f298",
+303 => x"0c829080",
+304 => x"0b80f2a8",
+305 => x"0c0b0b80",
+306 => x"f29c0b80",
+307 => x"f2ac0c04",
+308 => x"f8808080",
+309 => x"a40b0b0b",
+310 => x"80f2940c",
+311 => x"f8808082",
+312 => x"800b0b0b",
+313 => x"80f2980c",
+314 => x"f8808084",
+315 => x"800b80f2",
+316 => x"a80cf880",
+317 => x"8080940b",
+318 => x"80f2ac0c",
+319 => x"f8808080",
+320 => x"9c0b80f2",
+321 => x"a40cf880",
+322 => x"8080a00b",
+323 => x"80f2b00c",
+324 => x"04f23d0d",
+325 => x"600b0b80",
+326 => x"f2980856",
+327 => x"5d82750c",
+328 => x"8059805a",
+329 => x"800b8f3d",
+330 => x"71101017",
+331 => x"70085957",
+332 => x"5d5b8076",
+333 => x"81ff067c",
+334 => x"832b5658",
+335 => x"5276537b",
+336 => x"519af33f",
+337 => x"7d7f7a72",
+338 => x"077c7207",
+339 => x"71716081",
+340 => x"05415f5d",
+341 => x"5b595755",
+342 => x"7a8724bb",
+343 => x"380b0b80",
+344 => x"f298087b",
+345 => x"10101170",
+346 => x"08585155",
+347 => x"807681ff",
+348 => x"067c832b",
+349 => x"56585276",
+350 => x"537b519a",
+351 => x"b93f7d7f",
+352 => x"7a72077c",
+353 => x"72077171",
+354 => x"60810541",
+355 => x"5f5d5b59",
+356 => x"5755877b",
+357 => x"25c73876",
+358 => x"7d0c7784",
+359 => x"1e0c7c80",
+360 => x"0c903d0d",
+361 => x"04ff3d0d",
+362 => x"80f2a033",
+363 => x"5170a738",
+364 => x"80e2ac08",
+365 => x"70085252",
+366 => x"70802e94",
+367 => x"38841280",
+368 => x"e2ac0c70",
+369 => x"2d80e2ac",
+370 => x"08700852",
+371 => x"5270ee38",
+372 => x"810b80f2",
+373 => x"a034833d",
+374 => x"0d040480",
+375 => x"3d0d0b0b",
+376 => x"80f29008",
+377 => x"802e8e38",
+378 => x"0b0b0b0b",
+379 => x"800b802e",
+380 => x"09810685",
+381 => x"38823d0d",
+382 => x"040b0b80",
+383 => x"f290510b",
+384 => x"0b0bf3fc",
+385 => x"3f823d0d",
+386 => x"0404ff3d",
+387 => x"0d028f05",
+388 => x"3352718a",
+389 => x"2e8a3871",
+390 => x"51fce53f",
+391 => x"833d0d04",
+392 => x"8d51fcdc",
+393 => x"3f7151fc",
+394 => x"d73f833d",
+395 => x"0d04ce3d",
+396 => x"0db53d70",
+397 => x"70840552",
+398 => x"088c8a5c",
+399 => x"56a53d5e",
+400 => x"5c807570",
+401 => x"81055733",
+402 => x"765b5558",
+403 => x"73782e80",
+404 => x"c1388e3d",
+405 => x"5b73a52e",
+406 => x"09810680",
+407 => x"c5387870",
+408 => x"81055a33",
+409 => x"547380e4",
+410 => x"2e81b638",
+411 => x"7380e424",
+412 => x"80c63873",
+413 => x"80e32ea1",
+414 => x"388052a5",
+415 => x"51792d80",
+416 => x"52735179",
+417 => x"2d821858",
+418 => x"78708105",
+419 => x"5a335473",
+420 => x"c4387780",
+421 => x"0cb43d0d",
+422 => x"047b841d",
+423 => x"83123356",
+424 => x"5d578052",
+425 => x"7351792d",
+426 => x"81187970",
+427 => x"81055b33",
+428 => x"555873ff",
+429 => x"a038db39",
+430 => x"7380f32e",
+431 => x"098106ff",
+432 => x"b8387b84",
+433 => x"1d710859",
+434 => x"5d568077",
+435 => x"33555673",
+436 => x"762e8d38",
+437 => x"81167018",
+438 => x"70335755",
+439 => x"5674f538",
+440 => x"ff165580",
+441 => x"7625ffa0",
+442 => x"38767081",
+443 => x"05583354",
+444 => x"80527351",
+445 => x"792d8118",
+446 => x"75ff1757",
+447 => x"57588076",
+448 => x"25ff8538",
+449 => x"76708105",
+450 => x"58335480",
+451 => x"52735179",
+452 => x"2d811875",
+453 => x"ff175757",
+454 => x"58758024",
+455 => x"cc38fee8",
+456 => x"397b841d",
+457 => x"71087071",
+458 => x"9f2c5953",
+459 => x"595d5680",
+460 => x"75248195",
+461 => x"38757d7c",
+462 => x"58565480",
+463 => x"5773772e",
+464 => x"098106b6",
+465 => x"38b07b34",
+466 => x"02b50556",
+467 => x"7a762e97",
+468 => x"38ff1656",
+469 => x"75337570",
+470 => x"81055734",
+471 => x"8117577a",
+472 => x"762e0981",
+473 => x"06eb3880",
+474 => x"7534767d",
+475 => x"ff125758",
+476 => x"56758024",
+477 => x"fef338fe",
+478 => x"8f398a52",
+479 => x"7351a0f0",
+480 => x"3f80080b",
+481 => x"0b80d484",
+482 => x"05337670",
+483 => x"81055834",
+484 => x"8a527351",
+485 => x"a0963f80",
+486 => x"08548008",
+487 => x"802effac",
+488 => x"388a5273",
+489 => x"51a0c93f",
+490 => x"80080b0b",
+491 => x"80d48405",
+492 => x"33767081",
+493 => x"0558348a",
+494 => x"5273519f",
+495 => x"ef3f8008",
+496 => x"548008ff",
+497 => x"b538ff84",
+498 => x"39745276",
+499 => x"53b43dff",
+500 => x"b8055195",
+501 => x"b63fa33d",
+502 => x"0856fed9",
+503 => x"39803d0d",
+504 => x"80c10b81",
+505 => x"c0f43480",
+506 => x"0b81c2d0",
+507 => x"0c70800c",
+508 => x"823d0d04",
+509 => x"ff3d0d80",
+510 => x"0b81c0f4",
+511 => x"33525270",
+512 => x"80c12e99",
+513 => x"387181c2",
+514 => x"d0080781",
+515 => x"c2d00c80",
+516 => x"c20b81c0",
+517 => x"f8347080",
+518 => x"0c833d0d",
+519 => x"04810b81",
+520 => x"c2d00807",
+521 => x"81c2d00c",
+522 => x"80c20b81",
+523 => x"c0f83470",
+524 => x"800c833d",
+525 => x"0d04fd3d",
+526 => x"0d757008",
+527 => x"8a055353",
+528 => x"81c0f433",
+529 => x"517080c1",
+530 => x"2e8b3873",
+531 => x"f3387080",
+532 => x"0c853d0d",
+533 => x"04ff1270",
+534 => x"81c0f008",
+535 => x"31740c80",
+536 => x"0c853d0d",
+537 => x"04fc3d0d",
+538 => x"81c0fc08",
+539 => x"5574802e",
+540 => x"8c387675",
+541 => x"08710c81",
+542 => x"c0fc0856",
+543 => x"548c1553",
+544 => x"81c0f008",
+545 => x"528a5190",
+546 => x"f03f7380",
+547 => x"0c863d0d",
+548 => x"04fb3d0d",
+549 => x"77700856",
+550 => x"56b05381",
+551 => x"c0fc0852",
+552 => x"7451acb4",
+553 => x"3f850b8c",
+554 => x"170c850b",
+555 => x"8c160c75",
+556 => x"08750c81",
+557 => x"c0fc0854",
+558 => x"73802e8a",
+559 => x"38730875",
+560 => x"0c81c0fc",
+561 => x"08548c14",
+562 => x"5381c0f0",
+563 => x"08528a51",
+564 => x"90a73f84",
+565 => x"1508ad38",
+566 => x"860b8c16",
+567 => x"0c881552",
+568 => x"88160851",
+569 => x"8fb33f81",
+570 => x"c0fc0870",
+571 => x"08760c54",
+572 => x"8c157054",
+573 => x"548a5273",
+574 => x"08518ffd",
+575 => x"3f73800c",
+576 => x"873d0d04",
+577 => x"750854b0",
+578 => x"53735275",
+579 => x"51abc93f",
+580 => x"73800c87",
+581 => x"3d0d04d9",
+582 => x"3d0db051",
+583 => x"9eeb3f80",
+584 => x"0881c0ec",
+585 => x"0cb0519e",
+586 => x"e03f8008",
+587 => x"81c0fc0c",
+588 => x"81c0ec08",
+589 => x"80080c80",
+590 => x"0b800884",
+591 => x"050c820b",
+592 => x"80088805",
+593 => x"0ca80b80",
+594 => x"088c050c",
+595 => x"9f530b0b",
+596 => x"80d49052",
+597 => x"80089005",
+598 => x"51aafd3f",
+599 => x"a13d5e9f",
+600 => x"530b0b80",
+601 => x"d4b0527d",
+602 => x"51aaed3f",
+603 => x"8a0b80ff",
+604 => x"b00c0b0b",
+605 => x"80ded451",
+606 => x"f9b43f0b",
+607 => x"0b80d4d0",
+608 => x"51f9ab3f",
+609 => x"0b0b80de",
+610 => x"d451f9a2",
+611 => x"3f80e2b4",
+612 => x"08802e8a",
+613 => x"cf380b0b",
+614 => x"80d58051",
+615 => x"f9903f0b",
+616 => x"0b80ded4",
+617 => x"51f9873f",
+618 => x"80e2b008",
+619 => x"520b0b80",
+620 => x"d5ac51f8",
+621 => x"f93f80f2",
+622 => x"cc51bbf8",
+623 => x"3f810b9a",
+624 => x"3d5e5b80",
+625 => x"0b80e2b0",
+626 => x"082582d6",
+627 => x"38903d5f",
+628 => x"80c10b81",
+629 => x"c0f43481",
+630 => x"0b81c2d0",
+631 => x"0c80c20b",
+632 => x"81c0f834",
+633 => x"8240835a",
+634 => x"9f530b0b",
+635 => x"80d5dc52",
+636 => x"7c51a9e4",
+637 => x"3f814180",
+638 => x"7d537e52",
+639 => x"568f9e3f",
+640 => x"8008762e",
+641 => x"09810683",
+642 => x"38815675",
+643 => x"81c2d00c",
+644 => x"7f705856",
+645 => x"758325a2",
+646 => x"38751010",
+647 => x"16fd0542",
+648 => x"a93dffa4",
+649 => x"05538352",
+650 => x"76518dcd",
+651 => x"3f7f8105",
+652 => x"70417058",
+653 => x"56837624",
+654 => x"e0386154",
+655 => x"755380f2",
+656 => x"d45281c1",
+657 => x"88518dc1",
+658 => x"3f81c0fc",
+659 => x"08700858",
+660 => x"58b05377",
+661 => x"527651a8",
+662 => x"ff3f850b",
+663 => x"8c190c85",
+664 => x"0b8c180c",
+665 => x"7708770c",
+666 => x"81c0fc08",
+667 => x"5675802e",
+668 => x"8a387508",
+669 => x"770c81c0",
+670 => x"fc08568c",
+671 => x"165381c0",
+672 => x"f008528a",
+673 => x"518cf23f",
+674 => x"84170888",
+675 => x"e038860b",
+676 => x"8c180c88",
+677 => x"17528818",
+678 => x"08518bfd",
+679 => x"3f81c0fc",
+680 => x"08700878",
+681 => x"0c568c17",
+682 => x"7054598a",
+683 => x"52780851",
+684 => x"8cc73f80",
+685 => x"c10b81c0",
+686 => x"f8335757",
+687 => x"767626a2",
+688 => x"3880c352",
+689 => x"76518dab",
+690 => x"3f800861",
+691 => x"2e8aec38",
+692 => x"81177081",
+693 => x"ff0681c0",
+694 => x"f8335858",
+695 => x"58757727",
+696 => x"e0387960",
+697 => x"29627054",
+698 => x"71535b59",
+699 => x"99be3f80",
+700 => x"0840787a",
+701 => x"31708729",
+702 => x"80083180",
+703 => x"088a0581",
+704 => x"c0f43381",
+705 => x"c0f0085e",
+706 => x"5b525a56",
+707 => x"7780c12e",
+708 => x"8ad8387b",
+709 => x"f738811b",
+710 => x"5b80e2b0",
+711 => x"087b25fd",
+712 => x"af3881c0",
+713 => x"e451b98c",
+714 => x"3f0b0b80",
+715 => x"d5fc51f5",
+716 => x"fd3f0b0b",
+717 => x"80ded451",
+718 => x"f5f43f0b",
+719 => x"0b80d68c",
+720 => x"51f5eb3f",
+721 => x"0b0b80de",
+722 => x"d451f5e2",
+723 => x"3f81c0f0",
+724 => x"08520b0b",
+725 => x"80d6c451",
+726 => x"f5d43f85",
+727 => x"520b0b80",
+728 => x"d6e051f5",
+729 => x"c93f81c2",
+730 => x"d008520b",
+731 => x"0b80d6fc",
+732 => x"51f5bb3f",
+733 => x"81520b0b",
+734 => x"80d6e051",
+735 => x"f5b03f81",
+736 => x"c0f43352",
+737 => x"0b0b80d7",
+738 => x"9851f5a2",
+739 => x"3f80c152",
+740 => x"0b0b80d7",
+741 => x"b451f596",
+742 => x"3f81c0f8",
+743 => x"33520b0b",
+744 => x"80d7d051",
+745 => x"f5883f80",
+746 => x"c2520b0b",
+747 => x"80d7b451",
+748 => x"f4fc3f81",
+749 => x"c1a80852",
+750 => x"0b0b80d7",
+751 => x"ec51f4ee",
+752 => x"3f87520b",
+753 => x"0b80d6e0",
+754 => x"51f4e33f",
+755 => x"80ffb008",
+756 => x"520b0b80",
+757 => x"d88851f4",
+758 => x"d53f0b0b",
+759 => x"80d8a451",
+760 => x"f4cc3f0b",
+761 => x"0b80d8d0",
+762 => x"51f4c33f",
+763 => x"81c0fc08",
+764 => x"7008535a",
+765 => x"0b0b80d8",
+766 => x"dc51f4b2",
+767 => x"3f0b0b80",
+768 => x"d8f851f4",
+769 => x"a93f81c0",
+770 => x"fc088411",
+771 => x"0853560b",
+772 => x"0b80d9ac",
+773 => x"51f4973f",
+774 => x"80520b0b",
+775 => x"80d6e051",
+776 => x"f48c3f81",
+777 => x"c0fc0888",
+778 => x"11085358",
+779 => x"0b0b80d9",
+780 => x"c851f3fa",
+781 => x"3f82520b",
+782 => x"0b80d6e0",
+783 => x"51f3ef3f",
+784 => x"81c0fc08",
+785 => x"8c110853",
+786 => x"570b0b80",
+787 => x"d9e451f3",
+788 => x"dd3f9152",
+789 => x"0b0b80d6",
+790 => x"e051f3d2",
+791 => x"3f81c0fc",
+792 => x"08900552",
+793 => x"0b0b80da",
+794 => x"8051f3c2",
+795 => x"3f0b0b80",
+796 => x"da9c51f3",
+797 => x"b93f0b0b",
+798 => x"80dad451",
+799 => x"f3b03f81",
+800 => x"c0ec0870",
+801 => x"08535f0b",
+802 => x"0b80d8dc",
+803 => x"51f39f3f",
+804 => x"0b0b80da",
+805 => x"e851f396",
+806 => x"3f81c0ec",
+807 => x"08841108",
+808 => x"535b0b0b",
+809 => x"80d9ac51",
+810 => x"f3843f80",
+811 => x"520b0b80",
+812 => x"d6e051f2",
+813 => x"f93f81c0",
+814 => x"ec088811",
+815 => x"08535c0b",
+816 => x"0b80d9c8",
+817 => x"51f2e73f",
+818 => x"81520b0b",
+819 => x"80d6e051",
+820 => x"f2dc3f81",
+821 => x"c0ec088c",
+822 => x"1108535a",
+823 => x"0b0b80d9",
+824 => x"e451f2ca",
+825 => x"3f92520b",
+826 => x"0b80d6e0",
+827 => x"51f2bf3f",
+828 => x"81c0ec08",
+829 => x"9005520b",
+830 => x"0b80da80",
+831 => x"51f2af3f",
+832 => x"0b0b80da",
+833 => x"9c51f2a6",
+834 => x"3f7f520b",
+835 => x"0b80dba8",
+836 => x"51f29b3f",
+837 => x"85520b0b",
+838 => x"80d6e051",
+839 => x"f2903f78",
+840 => x"520b0b80",
+841 => x"dbc451f2",
+842 => x"853f8d52",
+843 => x"0b0b80d6",
+844 => x"e051f1fa",
+845 => x"3f61520b",
+846 => x"0b80dbe0",
+847 => x"51f1ef3f",
+848 => x"87520b0b",
+849 => x"80d6e051",
+850 => x"f1e43f60",
+851 => x"520b0b80",
+852 => x"dbfc51f1",
+853 => x"d93f8152",
+854 => x"0b0b80d6",
+855 => x"e051f1ce",
+856 => x"3f7d520b",
+857 => x"0b80dc98",
+858 => x"51f1c33f",
+859 => x"0b0b80dc",
+860 => x"b451f1ba",
+861 => x"3f7c520b",
+862 => x"0b80dcec",
+863 => x"51f1af3f",
+864 => x"0b0b80dd",
+865 => x"8851f1a6",
+866 => x"3f0b0b80",
+867 => x"ded451f1",
+868 => x"9d3f81c0",
+869 => x"e40881c0",
+870 => x"e80880f2",
+871 => x"cc0880f2",
+872 => x"d0087271",
+873 => x"31707426",
+874 => x"75743170",
+875 => x"723180f2",
+876 => x"c40c4444",
+877 => x"80f2c80c",
+878 => x"80f2c808",
+879 => x"560b0b80",
+880 => x"ddc0555c",
+881 => x"595758f0",
+882 => x"e53f80f2",
+883 => x"c4085680",
+884 => x"762582b1",
+885 => x"3880e2b0",
+886 => x"0870719f",
+887 => x"2c9a3d53",
+888 => x"565680f2",
+889 => x"c40880f2",
+890 => x"c8084153",
+891 => x"7f547052",
+892 => x"5a8a8d3f",
+893 => x"66685f80",
+894 => x"f2b40c7d",
+895 => x"80f2b80c",
+896 => x"80e2b008",
+897 => x"709f2c58",
+898 => x"568058bd",
+899 => x"84c07855",
+900 => x"55765275",
+901 => x"53795187",
+902 => x"f33f953d",
+903 => x"80f2c408",
+904 => x"80f2c808",
+905 => x"41557f56",
+906 => x"67694053",
+907 => x"7e547052",
+908 => x"5c89cd3f",
+909 => x"64665e80",
+910 => x"f2bc0c7c",
+911 => x"80f2c00c",
+912 => x"80e2b008",
+913 => x"709f2c40",
+914 => x"58805783",
+915 => x"dceb9480",
+916 => x"7755557e",
+917 => x"5277537b",
+918 => x"5187b13f",
+919 => x"64665d5b",
+920 => x"805e8ddd",
+921 => x"7e555580",
+922 => x"f2c40880",
+923 => x"f2c80859",
+924 => x"52775379",
+925 => x"5187953f",
+926 => x"66684054",
+927 => x"7e557a52",
+928 => x"7b53a93d",
+929 => x"ffa80551",
+930 => x"88f63f62",
+931 => x"645e81c1",
+932 => x"800c7c81",
+933 => x"c1840c0b",
+934 => x"0b80ddd0",
+935 => x"51ef8f3f",
+936 => x"80f2b808",
+937 => x"520b0b80",
+938 => x"de8051ef",
+939 => x"813f0b0b",
+940 => x"80de8851",
+941 => x"eef83f80",
+942 => x"f2c00852",
+943 => x"0b0b80de",
+944 => x"8051eeea",
+945 => x"3f81c184",
+946 => x"08520b0b",
+947 => x"80deb851",
+948 => x"eedc3f0b",
+949 => x"0b80ded4",
+950 => x"51eed33f",
+951 => x"800b800c",
+952 => x"a93d0d04",
+953 => x"0b0b80de",
+954 => x"d851f5b0",
+955 => x"39770857",
+956 => x"b0537652",
+957 => x"77519fe0",
+958 => x"3f80c10b",
+959 => x"81c0f833",
+960 => x"5757f7b8",
+961 => x"39758a38",
+962 => x"80f2c808",
+963 => x"8126fdc5",
+964 => x"380b0b80",
+965 => x"df8851ee",
+966 => x"953f0b0b",
+967 => x"80dfc051",
+968 => x"ee8c3f0b",
+969 => x"0b80ded4",
+970 => x"51ee833f",
+971 => x"80e2b008",
+972 => x"70719f2c",
+973 => x"9a3d5356",
+974 => x"5680f2c4",
+975 => x"0880f2c8",
+976 => x"0841537f",
+977 => x"5470525a",
+978 => x"87b63f66",
+979 => x"685f80f2",
+980 => x"b40c7d80",
+981 => x"f2b80c80",
+982 => x"e2b00870",
+983 => x"9f2c5856",
+984 => x"8058bd84",
+985 => x"c0785555",
+986 => x"76527553",
+987 => x"7951859c",
+988 => x"3f953d80",
+989 => x"f2c40880",
+990 => x"f2c80841",
+991 => x"557f5667",
+992 => x"6940537e",
+993 => x"5470525c",
+994 => x"86f63f64",
+995 => x"665e80f2",
+996 => x"bc0c7c80",
+997 => x"f2c00c80",
+998 => x"e2b00870",
+999 => x"9f2c4058",
+1000 => x"805783dc",
+1001 => x"eb948077",
+1002 => x"55557e52",
+1003 => x"77537b51",
+1004 => x"84da3f64",
+1005 => x"665d5b80",
+1006 => x"5e8ddd7e",
+1007 => x"555580f2",
+1008 => x"c40880f2",
+1009 => x"c8085952",
+1010 => x"77537951",
+1011 => x"84be3f66",
+1012 => x"6840547e",
+1013 => x"557a527b",
+1014 => x"53a93dff",
+1015 => x"a8055186",
+1016 => x"9f3f6264",
+1017 => x"5e81c180",
+1018 => x"0c7c81c1",
+1019 => x"840c0b0b",
+1020 => x"80ddd051",
+1021 => x"ecb83f80",
+1022 => x"f2b80852",
+1023 => x"0b0b80de",
+1024 => x"8051ecaa",
+1025 => x"3f0b0b80",
+1026 => x"de8851ec",
+1027 => x"a13f80f2",
+1028 => x"c008520b",
+1029 => x"0b80de80",
+1030 => x"51ec933f",
+1031 => x"81c18408",
+1032 => x"520b0b80",
+1033 => x"deb851ec",
+1034 => x"853f0b0b",
+1035 => x"80ded451",
+1036 => x"ebfc3f80",
+1037 => x"0b800ca9",
+1038 => x"3d0d04a9",
+1039 => x"3dffa005",
+1040 => x"52805180",
+1041 => x"d43f9f53",
+1042 => x"0b0b80df",
+1043 => x"e0527c51",
+1044 => x"9d863f7a",
+1045 => x"7b81c0f0",
+1046 => x"0c811870",
+1047 => x"81ff0681",
+1048 => x"c0f83359",
+1049 => x"59595af4",
+1050 => x"f439ff16",
+1051 => x"707b3160",
+1052 => x"0c5c800b",
+1053 => x"811c5c5c",
+1054 => x"80e2b008",
+1055 => x"7b25f2d0",
+1056 => x"38f59f39",
+1057 => x"ff3d0d73",
+1058 => x"82327030",
+1059 => x"70720780",
+1060 => x"25800c52",
+1061 => x"52833d0d",
+1062 => x"04fe3d0d",
+1063 => x"74767153",
+1064 => x"54527182",
+1065 => x"2e833883",
+1066 => x"5171812e",
+1067 => x"9a388172",
+1068 => x"269f3871",
+1069 => x"822eb838",
+1070 => x"71842ea9",
+1071 => x"3870730c",
+1072 => x"70800c84",
+1073 => x"3d0d0480",
+1074 => x"e40b81c0",
+1075 => x"f008258b",
+1076 => x"3880730c",
+1077 => x"70800c84",
+1078 => x"3d0d0483",
+1079 => x"730c7080",
+1080 => x"0c843d0d",
+1081 => x"0482730c",
+1082 => x"70800c84",
+1083 => x"3d0d0481",
+1084 => x"730c7080",
+1085 => x"0c843d0d",
+1086 => x"04803d0d",
+1087 => x"74741482",
+1088 => x"05710c80",
+1089 => x"0c823d0d",
+1090 => x"04f73d0d",
+1091 => x"7b7d7f61",
+1092 => x"85127082",
+1093 => x"2b751170",
+1094 => x"74717084",
+1095 => x"05530c5a",
+1096 => x"5a5d5b76",
+1097 => x"0c7980f8",
+1098 => x"180c7986",
+1099 => x"12525758",
+1100 => x"5a5a7676",
+1101 => x"24993876",
+1102 => x"b329822b",
+1103 => x"79115153",
+1104 => x"76737084",
+1105 => x"05550c81",
+1106 => x"14547574",
+1107 => x"25f23876",
+1108 => x"81cc2919",
+1109 => x"fc110881",
+1110 => x"05fc120c",
+1111 => x"7a197008",
+1112 => x"9fa0130c",
+1113 => x"5856850b",
+1114 => x"81c0f00c",
+1115 => x"75800c8b",
+1116 => x"3d0d04fe",
+1117 => x"3d0d0293",
+1118 => x"05335180",
+1119 => x"02840597",
+1120 => x"05335452",
+1121 => x"70732e88",
+1122 => x"3871800c",
+1123 => x"843d0d04",
+1124 => x"7081c0f4",
+1125 => x"34810b80",
+1126 => x"0c843d0d",
+1127 => x"04f83d0d",
+1128 => x"7a7c5956",
+1129 => x"820b8319",
+1130 => x"55557416",
+1131 => x"70337533",
+1132 => x"5b515372",
+1133 => x"792e80c6",
+1134 => x"3880c10b",
+1135 => x"81168116",
+1136 => x"56565782",
+1137 => x"7525e338",
+1138 => x"ffa91770",
+1139 => x"81ff0655",
+1140 => x"59738226",
+1141 => x"83388755",
+1142 => x"81537680",
+1143 => x"d22e9838",
+1144 => x"77527551",
+1145 => x"9bc43f80",
+1146 => x"53728008",
+1147 => x"25893887",
+1148 => x"1581c0f0",
+1149 => x"0c815372",
+1150 => x"800c8a3d",
+1151 => x"0d047281",
+1152 => x"c0f43482",
+1153 => x"7525ffa2",
+1154 => x"38ffbd39",
+1155 => x"ef3d0d63",
+1156 => x"65675b42",
+1157 => x"79436769",
+1158 => x"59407741",
+1159 => x"5a805d80",
+1160 => x"5e617083",
+1161 => x"ffff0671",
+1162 => x"902a6270",
+1163 => x"83ffff06",
+1164 => x"71902a74",
+1165 => x"72297473",
+1166 => x"29757329",
+1167 => x"77742973",
+1168 => x"902a0572",
+1169 => x"11515856",
+1170 => x"535f5a57",
+1171 => x"5a585558",
+1172 => x"73732786",
+1173 => x"38848080",
+1174 => x"16567390",
+1175 => x"2a165b78",
+1176 => x"83ffff06",
+1177 => x"74848080",
+1178 => x"29055c7a",
+1179 => x"7c5a5d78",
+1180 => x"5e777f29",
+1181 => x"61782905",
+1182 => x"7d055d7c",
+1183 => x"7e567a0c",
+1184 => x"74841b0c",
+1185 => x"79800c93",
+1186 => x"3d0d04f9",
+1187 => x"3d0d797b",
+1188 => x"7d545872",
+1189 => x"59773079",
+1190 => x"70307072",
+1191 => x"079f2a73",
+1192 => x"71315a52",
+1193 => x"59777956",
+1194 => x"730c5373",
+1195 => x"84130c54",
+1196 => x"800c893d",
+1197 => x"0d04f93d",
+1198 => x"0d797b7d",
+1199 => x"7f565452",
+1200 => x"5472802e",
+1201 => x"a0387057",
+1202 => x"7158a073",
+1203 => x"31528072",
+1204 => x"25a13877",
+1205 => x"70742b57",
+1206 => x"70732a78",
+1207 => x"752b0756",
+1208 => x"51747653",
+1209 => x"5170740c",
+1210 => x"7184150c",
+1211 => x"73800c89",
+1212 => x"3d0d0480",
+1213 => x"56777230",
+1214 => x"2b557476",
+1215 => x"5351e639",
+1216 => x"e43d0d6e",
+1217 => x"a13d08a3",
+1218 => x"3d085957",
+1219 => x"5f80764d",
+1220 => x"774ea33d",
+1221 => x"08a53d08",
+1222 => x"574b754c",
+1223 => x"5e7d6c24",
+1224 => x"86fb3880",
+1225 => x"6a24878f",
+1226 => x"38696b58",
+1227 => x"566b6d5d",
+1228 => x"467b4775",
+1229 => x"44764564",
+1230 => x"6468685c",
+1231 => x"5c565674",
+1232 => x"81e73878",
+1233 => x"762782c7",
+1234 => x"387581ff",
+1235 => x"26832b55",
+1236 => x"83ffff76",
+1237 => x"278c3890",
+1238 => x"55fe800a",
+1239 => x"76278338",
+1240 => x"98557575",
+1241 => x"2a80e080",
+1242 => x"057033a0",
+1243 => x"77317131",
+1244 => x"57555774",
+1245 => x"802e9538",
+1246 => x"75752ba0",
+1247 => x"76317a77",
+1248 => x"2b7c722a",
+1249 => x"077c782b",
+1250 => x"5d5b5956",
+1251 => x"75902a76",
+1252 => x"83ffff06",
+1253 => x"71547a53",
+1254 => x"59578880",
+1255 => x"3f80085b",
+1256 => x"87ea3f80",
+1257 => x"08800879",
+1258 => x"297c902b",
+1259 => x"7c902a07",
+1260 => x"56565973",
+1261 => x"75279438",
+1262 => x"8008ff05",
+1263 => x"76155559",
+1264 => x"75742687",
+1265 => x"38747426",
+1266 => x"87b93876",
+1267 => x"52737531",
+1268 => x"5187c93f",
+1269 => x"80085587",
+1270 => x"b33f8008",
+1271 => x"80087929",
+1272 => x"7b83ffff",
+1273 => x"0677902b",
+1274 => x"07565957",
+1275 => x"73782796",
+1276 => x"388008ff",
+1277 => x"05761555",
+1278 => x"57757426",
+1279 => x"89387774",
+1280 => x"26777131",
+1281 => x"58567890",
+1282 => x"2b770758",
+1283 => x"805b7a40",
+1284 => x"77417f61",
+1285 => x"56547d80",
+1286 => x"d938737f",
+1287 => x"0c747f84",
+1288 => x"050c7e80",
+1289 => x"0c9e3d0d",
+1290 => x"0480705c",
+1291 => x"58747926",
+1292 => x"dd387481",
+1293 => x"ff26832b",
+1294 => x"577483ff",
+1295 => x"ff2682a5",
+1296 => x"3874772a",
+1297 => x"80e08005",
+1298 => x"7033a079",
+1299 => x"31713159",
+1300 => x"5c5d7682",
+1301 => x"b3387654",
+1302 => x"74792783",
+1303 => x"38815479",
+1304 => x"76277407",
+1305 => x"59815878",
+1306 => x"ffa23876",
+1307 => x"58805bff",
+1308 => x"9d397352",
+1309 => x"74539e3d",
+1310 => x"e80551fc",
+1311 => x"8e3f6769",
+1312 => x"567f0c74",
+1313 => x"7f84050c",
+1314 => x"7e800c9e",
+1315 => x"3d0d0475",
+1316 => x"802e81c4",
+1317 => x"387581ff",
+1318 => x"26832b55",
+1319 => x"83ffff76",
+1320 => x"278c3890",
+1321 => x"55fe800a",
+1322 => x"76278338",
+1323 => x"98557575",
+1324 => x"2a80e080",
+1325 => x"057033a0",
+1326 => x"77317131",
+1327 => x"575e5474",
+1328 => x"84913878",
+1329 => x"76315481",
+1330 => x"76902a77",
+1331 => x"83ffff06",
+1332 => x"5f5d5b7b",
+1333 => x"52735185",
+1334 => x"c33f8008",
+1335 => x"5785ad3f",
+1336 => x"80088008",
+1337 => x"7e297890",
+1338 => x"2b7c902a",
+1339 => x"07565659",
+1340 => x"73752794",
+1341 => x"388008ff",
+1342 => x"05761555",
+1343 => x"59757426",
+1344 => x"87387474",
+1345 => x"2684f338",
+1346 => x"7b527375",
+1347 => x"3151858c",
+1348 => x"3f800855",
+1349 => x"84f63f80",
+1350 => x"0880087e",
+1351 => x"297b83ff",
+1352 => x"ff067790",
+1353 => x"2b075659",
+1354 => x"57737827",
+1355 => x"96388008",
+1356 => x"ff057615",
+1357 => x"55577574",
+1358 => x"26893877",
+1359 => x"74267771",
+1360 => x"31585a78",
+1361 => x"902b7707",
+1362 => x"7b41417f",
+1363 => x"6156547d",
+1364 => x"802efdc6",
+1365 => x"38fe9b39",
+1366 => x"75528151",
+1367 => x"84ae3f80",
+1368 => x"0856feb1",
+1369 => x"399057fe",
+1370 => x"800a7527",
+1371 => x"fdd33898",
+1372 => x"75712a80",
+1373 => x"e0800570",
+1374 => x"33a07331",
+1375 => x"7131535d",
+1376 => x"5e577680",
+1377 => x"2efdcf38",
+1378 => x"a0773175",
+1379 => x"782b7772",
+1380 => x"2a077779",
+1381 => x"2b7b7a2b",
+1382 => x"7d742a07",
+1383 => x"7d7b2b73",
+1384 => x"902a7483",
+1385 => x"ffff0671",
+1386 => x"597f772a",
+1387 => x"585e5c41",
+1388 => x"5f585c54",
+1389 => x"83e63f80",
+1390 => x"085483d0",
+1391 => x"3f800880",
+1392 => x"08792975",
+1393 => x"902b7e90",
+1394 => x"2a075656",
+1395 => x"59737527",
+1396 => x"99388008",
+1397 => x"ff057b15",
+1398 => x"55597a74",
+1399 => x"268c3873",
+1400 => x"75278738",
+1401 => x"ff197b15",
+1402 => x"55597652",
+1403 => x"73753151",
+1404 => x"83aa3f80",
+1405 => x"08558394",
+1406 => x"3f800880",
+1407 => x"0879297d",
+1408 => x"83ffff06",
+1409 => x"77902b07",
+1410 => x"56595773",
+1411 => x"78279938",
+1412 => x"8008ff05",
+1413 => x"7b155557",
+1414 => x"7a74268c",
+1415 => x"38737827",
+1416 => x"8738ff17",
+1417 => x"7b155557",
+1418 => x"73783179",
+1419 => x"902b7807",
+1420 => x"7083ffff",
+1421 => x"0671902a",
+1422 => x"7983ffff",
+1423 => x"067a902a",
+1424 => x"73722973",
+1425 => x"73297473",
+1426 => x"29767429",
+1427 => x"73902a05",
+1428 => x"72055755",
+1429 => x"435f5b58",
+1430 => x"5a57595a",
+1431 => x"747c2786",
+1432 => x"38848080",
+1433 => x"17577490",
+1434 => x"2a177983",
+1435 => x"ffff0676",
+1436 => x"84808029",
+1437 => x"05575776",
+1438 => x"7a269a38",
+1439 => x"767a3270",
+1440 => x"30707207",
+1441 => x"8025565a",
+1442 => x"5b7c7627",
+1443 => x"fafe3873",
+1444 => x"802efaf8",
+1445 => x"38ff1858",
+1446 => x"805bfaf2",
+1447 => x"39ff7653",
+1448 => x"77549f3d",
+1449 => x"e805525e",
+1450 => x"f7e13f67",
+1451 => x"69574c75",
+1452 => x"4d698025",
+1453 => x"f8f3387d",
+1454 => x"096a6c5c",
+1455 => x"537a549f",
+1456 => x"3de80552",
+1457 => x"5ef7c43f",
+1458 => x"6769714c",
+1459 => x"704d5856",
+1460 => x"f8db39a0",
+1461 => x"75317676",
+1462 => x"2b7a772b",
+1463 => x"7c732a07",
+1464 => x"7c782b72",
+1465 => x"902a7383",
+1466 => x"ffff0671",
+1467 => x"587e762a",
+1468 => x"5742405d",
+1469 => x"5d575881",
+1470 => x"a33f8008",
+1471 => x"57818d3f",
+1472 => x"80088008",
+1473 => x"7e297890",
+1474 => x"2b7d902a",
+1475 => x"07565659",
+1476 => x"73752799",
+1477 => x"388008ff",
+1478 => x"05761555",
+1479 => x"59757426",
+1480 => x"8c387375",
+1481 => x"278738ff",
+1482 => x"19761555",
+1483 => x"597b5273",
+1484 => x"75315180",
+1485 => x"e73f8008",
+1486 => x"5580d13f",
+1487 => x"80088008",
+1488 => x"7e297c83",
+1489 => x"ffff0670",
+1490 => x"78902b07",
+1491 => x"51565858",
+1492 => x"73772799",
+1493 => x"388008ff",
+1494 => x"05761555",
+1495 => x"58757426",
+1496 => x"8c387377",
+1497 => x"278738ff",
+1498 => x"18761555",
+1499 => x"5878902b",
+1500 => x"78077478",
+1501 => x"31555bfa",
+1502 => x"da39ff19",
+1503 => x"76155559",
+1504 => x"fb8639ff",
+1505 => x"19761555",
+1506 => x"59f8c039",
+1507 => x"fe3d0d80",
+1508 => x"53755274",
+1509 => x"5181913f",
+1510 => x"843d0d04",
+1511 => x"fe3d0d81",
+1512 => x"53755274",
+1513 => x"5181813f",
+1514 => x"843d0d04",
+1515 => x"fb3d0d77",
+1516 => x"79555580",
+1517 => x"56757524",
+1518 => x"ab388074",
+1519 => x"249d3880",
+1520 => x"53735274",
+1521 => x"5180e13f",
+1522 => x"80085475",
+1523 => x"802e8538",
+1524 => x"80083054",
+1525 => x"73800c87",
+1526 => x"3d0d0473",
+1527 => x"30768132",
+1528 => x"5754dc39",
+1529 => x"74305581",
+1530 => x"56738025",
+1531 => x"d238ec39",
+1532 => x"fa3d0d78",
+1533 => x"7a575580",
+1534 => x"57767524",
+1535 => x"a438759f",
+1536 => x"2c548153",
+1537 => x"75743274",
+1538 => x"31527451",
+1539 => x"9b3f8008",
+1540 => x"5476802e",
+1541 => x"85388008",
+1542 => x"30547380",
+1543 => x"0c883d0d",
+1544 => x"04743055",
+1545 => x"8157d739",
+1546 => x"fc3d0d76",
+1547 => x"78535481",
+1548 => x"53807473",
+1549 => x"26525572",
+1550 => x"802e9838",
+1551 => x"70802eab",
+1552 => x"38807224",
+1553 => x"a6387110",
+1554 => x"73107572",
+1555 => x"26535452",
+1556 => x"72ea3873",
+1557 => x"51788338",
+1558 => x"74517080",
+1559 => x"0c863d0d",
+1560 => x"04720a10",
+1561 => x"0a720a10",
+1562 => x"0a535372",
+1563 => x"802ee438",
+1564 => x"717426ed",
+1565 => x"38737231",
+1566 => x"75740774",
+1567 => x"0a100a74",
+1568 => x"0a100a55",
+1569 => x"555654e3",
+1570 => x"39ff3d0d",
+1571 => x"735280ea",
+1572 => x"fc085196",
+1573 => x"3f833d0d",
+1574 => x"04ff3d0d",
+1575 => x"735280ea",
+1576 => x"fc085190",
+1577 => x"cc3f833d",
+1578 => x"0d04f43d",
+1579 => x"0d7e608b",
+1580 => x"1170f806",
+1581 => x"5b55555d",
+1582 => x"72962683",
+1583 => x"38905880",
+1584 => x"78247479",
+1585 => x"26075580",
+1586 => x"5474742e",
+1587 => x"09810680",
+1588 => x"ca387c51",
+1589 => x"8d9e3f77",
+1590 => x"83f72680",
+1591 => x"c5387783",
+1592 => x"2a701010",
+1593 => x"1080e2f4",
+1594 => x"058c1108",
+1595 => x"58585475",
+1596 => x"772e81f0",
+1597 => x"38841608",
+1598 => x"fc068c17",
+1599 => x"08881808",
+1600 => x"718c120c",
+1601 => x"88120c5b",
+1602 => x"76058411",
+1603 => x"08810784",
+1604 => x"120c537c",
+1605 => x"518cde3f",
+1606 => x"88165473",
+1607 => x"800c8e3d",
+1608 => x"0d047789",
+1609 => x"2a78832a",
+1610 => x"58547380",
+1611 => x"2ebf3877",
+1612 => x"862ab805",
+1613 => x"57847427",
+1614 => x"b43880db",
+1615 => x"14579474",
+1616 => x"27ab3877",
+1617 => x"8c2a80ee",
+1618 => x"055780d4",
+1619 => x"74279e38",
+1620 => x"778f2a80",
+1621 => x"f7055782",
+1622 => x"d4742791",
+1623 => x"3877922a",
+1624 => x"80fc0557",
+1625 => x"8ad47427",
+1626 => x"843880fe",
+1627 => x"57761010",
+1628 => x"1080e2f4",
+1629 => x"058c1108",
+1630 => x"56537473",
+1631 => x"2ea33884",
+1632 => x"1508fc06",
+1633 => x"70793155",
+1634 => x"56738f24",
+1635 => x"88e43873",
+1636 => x"802588e6",
+1637 => x"388c1508",
+1638 => x"5574732e",
+1639 => x"098106df",
+1640 => x"38811759",
+1641 => x"80e38408",
+1642 => x"567580e2",
+1643 => x"fc2e82cc",
+1644 => x"38841608",
+1645 => x"fc067079",
+1646 => x"31555573",
+1647 => x"8f24bb38",
+1648 => x"80e2fc0b",
+1649 => x"80e3880c",
+1650 => x"80e2fc0b",
+1651 => x"80e3840c",
+1652 => x"80742480",
+1653 => x"db387416",
+1654 => x"84110881",
+1655 => x"0784120c",
+1656 => x"53feb039",
+1657 => x"88168c11",
+1658 => x"08575975",
+1659 => x"792e0981",
+1660 => x"06fe8238",
+1661 => x"821459ff",
+1662 => x"ab397716",
+1663 => x"78810784",
+1664 => x"180c7080",
+1665 => x"e3880c70",
+1666 => x"80e3840c",
+1667 => x"80e2fc0b",
+1668 => x"8c120c8c",
+1669 => x"11088812",
+1670 => x"0c748107",
+1671 => x"84120c74",
+1672 => x"0574710c",
+1673 => x"5b7c518a",
+1674 => x"cc3f8816",
+1675 => x"54fdec39",
+1676 => x"83ff7527",
+1677 => x"83913874",
+1678 => x"892a7583",
+1679 => x"2a545473",
+1680 => x"802ebf38",
+1681 => x"74862ab8",
+1682 => x"05538474",
+1683 => x"27b43880",
+1684 => x"db145394",
+1685 => x"7427ab38",
+1686 => x"748c2a80",
+1687 => x"ee055380",
+1688 => x"d474279e",
+1689 => x"38748f2a",
+1690 => x"80f70553",
+1691 => x"82d47427",
+1692 => x"91387492",
+1693 => x"2a80fc05",
+1694 => x"538ad474",
+1695 => x"27843880",
+1696 => x"fe537210",
+1697 => x"101080e2",
+1698 => x"f4058811",
+1699 => x"08555773",
+1700 => x"772e868b",
+1701 => x"38841408",
+1702 => x"fc065b74",
+1703 => x"7b278d38",
+1704 => x"88140854",
+1705 => x"73772e09",
+1706 => x"8106ea38",
+1707 => x"8c140880",
+1708 => x"e2f40b84",
+1709 => x"0508718c",
+1710 => x"190c7588",
+1711 => x"190c7788",
+1712 => x"130c5c57",
+1713 => x"758c150c",
+1714 => x"78538079",
+1715 => x"24839838",
+1716 => x"72822c81",
+1717 => x"712b5656",
+1718 => x"747b2680",
+1719 => x"ca387a75",
+1720 => x"06577682",
+1721 => x"a33878fc",
+1722 => x"06840559",
+1723 => x"7410707c",
+1724 => x"06555573",
+1725 => x"82923884",
+1726 => x"1959f139",
+1727 => x"80e2f40b",
+1728 => x"84050879",
+1729 => x"545b7880",
+1730 => x"25c63882",
+1731 => x"da397409",
+1732 => x"7b067080",
+1733 => x"e2f40b84",
+1734 => x"050c5b74",
+1735 => x"1055747b",
+1736 => x"26853874",
+1737 => x"85bc3880",
+1738 => x"e2f40b88",
+1739 => x"05087084",
+1740 => x"1208fc06",
+1741 => x"707b317b",
+1742 => x"72268f72",
+1743 => x"25075d57",
+1744 => x"5c5c5578",
+1745 => x"802e80d9",
+1746 => x"38791580",
+1747 => x"e2ec0819",
+1748 => x"90115954",
+1749 => x"5680e2e8",
+1750 => x"08ff2e88",
+1751 => x"38a08f13",
+1752 => x"e0800657",
+1753 => x"76527c51",
+1754 => x"888c3f80",
+1755 => x"08548008",
+1756 => x"ff2e9038",
+1757 => x"80087627",
+1758 => x"82a73874",
+1759 => x"80e2f42e",
+1760 => x"829f3880",
+1761 => x"e2f40b88",
+1762 => x"05085584",
+1763 => x"1508fc06",
+1764 => x"70793179",
+1765 => x"72268f72",
+1766 => x"25075d55",
+1767 => x"5a7a83f2",
+1768 => x"38778107",
+1769 => x"84160c77",
+1770 => x"157080e2",
+1771 => x"f40b8805",
+1772 => x"0c748107",
+1773 => x"84120c56",
+1774 => x"7c5187b9",
+1775 => x"3f881554",
+1776 => x"73800c8e",
+1777 => x"3d0d0474",
+1778 => x"832a7054",
+1779 => x"54807424",
+1780 => x"819b3872",
+1781 => x"822c8171",
+1782 => x"2b80e2f8",
+1783 => x"08077080",
+1784 => x"e2f40b84",
+1785 => x"050c7510",
+1786 => x"101080e2",
+1787 => x"f4058811",
+1788 => x"08718c1b",
+1789 => x"0c70881b",
+1790 => x"0c798813",
+1791 => x"0c57555c",
+1792 => x"55758c15",
+1793 => x"0cfdc139",
+1794 => x"78791010",
+1795 => x"1080e2f4",
+1796 => x"0570565b",
+1797 => x"5c8c1408",
+1798 => x"5675742e",
+1799 => x"a3388416",
+1800 => x"08fc0670",
+1801 => x"79315853",
+1802 => x"768f2483",
+1803 => x"f1387680",
+1804 => x"2584af38",
+1805 => x"8c160856",
+1806 => x"75742e09",
+1807 => x"8106df38",
+1808 => x"8814811a",
+1809 => x"70830655",
+1810 => x"5a5472c9",
+1811 => x"387b8306",
+1812 => x"5675802e",
+1813 => x"fdb838ff",
+1814 => x"1cf81b5b",
+1815 => x"5c881a08",
+1816 => x"7a2eea38",
+1817 => x"fdb53983",
+1818 => x"1953fce4",
+1819 => x"39831470",
+1820 => x"822c8171",
+1821 => x"2b80e2f8",
+1822 => x"08077080",
+1823 => x"e2f40b84",
+1824 => x"050c7610",
+1825 => x"101080e2",
+1826 => x"f4058811",
+1827 => x"08718c1c",
+1828 => x"0c70881c",
+1829 => x"0c7a8813",
+1830 => x"0c58535d",
+1831 => x"5653fee1",
+1832 => x"3980e2b8",
+1833 => x"08175980",
+1834 => x"08762e81",
+1835 => x"8b3880e2",
+1836 => x"e808ff2e",
+1837 => x"848e3873",
+1838 => x"76311980",
+1839 => x"e2b80c73",
+1840 => x"87067056",
+1841 => x"5372802e",
+1842 => x"88388873",
+1843 => x"31701555",
+1844 => x"5576149f",
+1845 => x"ff06a080",
+1846 => x"71311670",
+1847 => x"547e5351",
+1848 => x"5385933f",
+1849 => x"80085680",
+1850 => x"08ff2e81",
+1851 => x"9e3880e2",
+1852 => x"b8081370",
+1853 => x"80e2b80c",
+1854 => x"747580e2",
+1855 => x"f40b8805",
+1856 => x"0c777631",
+1857 => x"15810755",
+1858 => x"56597a80",
+1859 => x"e2f42e83",
+1860 => x"c038798f",
+1861 => x"2682ef38",
+1862 => x"810b8415",
+1863 => x"0c841508",
+1864 => x"fc067079",
+1865 => x"31797226",
+1866 => x"8f722507",
+1867 => x"5d555a7a",
+1868 => x"802efced",
+1869 => x"3880db39",
+1870 => x"80089fff",
+1871 => x"065574fe",
+1872 => x"ed387880",
+1873 => x"e2b80c80",
+1874 => x"e2f40b88",
+1875 => x"05087a18",
+1876 => x"81078412",
+1877 => x"0c5580e2",
+1878 => x"e4087927",
+1879 => x"86387880",
+1880 => x"e2e40c80",
+1881 => x"e2e00879",
+1882 => x"27fca038",
+1883 => x"7880e2e0",
+1884 => x"0c841508",
+1885 => x"fc067079",
+1886 => x"31797226",
+1887 => x"8f722507",
+1888 => x"5d555a7a",
+1889 => x"802efc99",
+1890 => x"38883980",
+1891 => x"745753fe",
+1892 => x"dd397c51",
+1893 => x"83df3f80",
+1894 => x"0b800c8e",
+1895 => x"3d0d0480",
+1896 => x"7324a538",
+1897 => x"72822c81",
+1898 => x"712b80e2",
+1899 => x"f8080770",
+1900 => x"80e2f40b",
+1901 => x"84050c5c",
+1902 => x"5a768c17",
+1903 => x"0c738817",
+1904 => x"0c758818",
+1905 => x"0cf9fd39",
+1906 => x"83137082",
+1907 => x"2c81712b",
+1908 => x"80e2f808",
+1909 => x"077080e2",
+1910 => x"f40b8405",
+1911 => x"0c5d5b53",
+1912 => x"d8397a75",
+1913 => x"065c7bfc",
+1914 => x"9f388419",
+1915 => x"75105659",
+1916 => x"f139ff17",
+1917 => x"810559f7",
+1918 => x"ab398c15",
+1919 => x"08881608",
+1920 => x"718c120c",
+1921 => x"88120c59",
+1922 => x"75158411",
+1923 => x"08810784",
+1924 => x"120c587c",
+1925 => x"5182de3f",
+1926 => x"881554fb",
+1927 => x"a3397716",
+1928 => x"78810784",
+1929 => x"180c8c17",
+1930 => x"08881808",
+1931 => x"718c120c",
+1932 => x"88120c5c",
+1933 => x"7080e388",
+1934 => x"0c7080e3",
+1935 => x"840c80e2",
+1936 => x"fc0b8c12",
+1937 => x"0c8c1108",
+1938 => x"88120c77",
+1939 => x"81078412",
+1940 => x"0c770577",
+1941 => x"710c557c",
+1942 => x"51829a3f",
+1943 => x"881654f5",
+1944 => x"ba397216",
+1945 => x"84110881",
+1946 => x"0784120c",
+1947 => x"588c1608",
+1948 => x"88170871",
+1949 => x"8c120c88",
+1950 => x"120c577c",
+1951 => x"5181f63f",
+1952 => x"881654f5",
+1953 => x"96397284",
+1954 => x"150cf41a",
+1955 => x"f8067084",
+1956 => x"1d088106",
+1957 => x"07841d0c",
+1958 => x"701c5556",
+1959 => x"850b8415",
+1960 => x"0c850b88",
+1961 => x"150c8f76",
+1962 => x"27fdab38",
+1963 => x"881b527c",
+1964 => x"5184be3f",
+1965 => x"80e2f40b",
+1966 => x"88050880",
+1967 => x"e2b8085a",
+1968 => x"55fd9339",
+1969 => x"7880e2b8",
+1970 => x"0c7380e2",
+1971 => x"e80cfbef",
+1972 => x"39728415",
+1973 => x"0cfcff39",
+1974 => x"fb3d0d77",
+1975 => x"707a7c58",
+1976 => x"5553568f",
+1977 => x"752780e6",
+1978 => x"38727607",
+1979 => x"83065170",
+1980 => x"80dc3875",
+1981 => x"73525470",
+1982 => x"70840552",
+1983 => x"08747084",
+1984 => x"05560c73",
+1985 => x"71708405",
+1986 => x"53087170",
+1987 => x"8405530c",
+1988 => x"71708405",
+1989 => x"53087170",
+1990 => x"8405530c",
+1991 => x"71708405",
+1992 => x"53087170",
+1993 => x"8405530c",
+1994 => x"f0165654",
+1995 => x"748f26c7",
+1996 => x"38837527",
+1997 => x"95387070",
+1998 => x"84055208",
+1999 => x"74708405",
+2000 => x"560cfc15",
+2001 => x"55748326",
+2002 => x"ed387371",
+2003 => x"5452ff15",
+2004 => x"5170ff2e",
+2005 => x"98387270",
+2006 => x"81055433",
+2007 => x"72708105",
+2008 => x"5434ff11",
+2009 => x"5170ff2e",
+2010 => x"098106ea",
+2011 => x"3875800c",
+2012 => x"873d0d04",
+2013 => x"0404fd3d",
+2014 => x"0d800b81",
+2015 => x"c2d40c76",
+2016 => x"5187ca3f",
+2017 => x"80085380",
+2018 => x"08ff2e88",
+2019 => x"3872800c",
+2020 => x"853d0d04",
+2021 => x"81c2d408",
+2022 => x"5473802e",
+2023 => x"f0387574",
+2024 => x"710c5272",
+2025 => x"800c853d",
+2026 => x"0d04fb3d",
+2027 => x"0d777970",
+2028 => x"72078306",
+2029 => x"53545270",
+2030 => x"93387173",
+2031 => x"73085456",
+2032 => x"54717308",
+2033 => x"2e80c438",
+2034 => x"73755452",
+2035 => x"71337081",
+2036 => x"ff065254",
+2037 => x"70802e9d",
+2038 => x"38723355",
+2039 => x"70752e09",
+2040 => x"81069538",
+2041 => x"81128114",
+2042 => x"71337081",
+2043 => x"ff065456",
+2044 => x"545270e5",
+2045 => x"38723355",
+2046 => x"7381ff06",
+2047 => x"7581ff06",
+2048 => x"71713180",
+2049 => x"0c555287",
+2050 => x"3d0d0471",
+2051 => x"09f7fbfd",
+2052 => x"ff1306f8",
+2053 => x"84828180",
+2054 => x"06527197",
+2055 => x"38841484",
+2056 => x"16710854",
+2057 => x"56547175",
+2058 => x"082ee038",
+2059 => x"73755452",
+2060 => x"ff9a3980",
+2061 => x"0b800c87",
+2062 => x"3d0d04fb",
+2063 => x"3d0d7770",
+2064 => x"5256feb0",
+2065 => x"3f80e2f4",
+2066 => x"0b880508",
+2067 => x"841108fc",
+2068 => x"06707b31",
+2069 => x"9fef05e0",
+2070 => x"8006e080",
+2071 => x"05525555",
+2072 => x"a0807524",
+2073 => x"94388052",
+2074 => x"7551fe8a",
+2075 => x"3f80e2fc",
+2076 => x"08145372",
+2077 => x"80082e8f",
+2078 => x"387551fd",
+2079 => x"f83f8053",
+2080 => x"72800c87",
+2081 => x"3d0d0474",
+2082 => x"30527551",
+2083 => x"fde83f80",
+2084 => x"08ff2ea8",
+2085 => x"3880e2f4",
+2086 => x"0b880508",
+2087 => x"74763181",
+2088 => x"0784120c",
+2089 => x"5380e2b8",
+2090 => x"08753180",
+2091 => x"e2b80c75",
+2092 => x"51fdc23f",
+2093 => x"810b800c",
+2094 => x"873d0d04",
+2095 => x"80527551",
+2096 => x"fdb43f80",
+2097 => x"e2f40b88",
+2098 => x"05088008",
+2099 => x"71315454",
+2100 => x"8f7325ff",
+2101 => x"a4388008",
+2102 => x"80e2e808",
+2103 => x"3180e2b8",
+2104 => x"0c728107",
+2105 => x"84150c75",
+2106 => x"51fd8a3f",
+2107 => x"8053ff90",
+2108 => x"39f73d0d",
+2109 => x"7b7d545a",
+2110 => x"72802e82",
+2111 => x"83387951",
+2112 => x"fcf23ff8",
+2113 => x"13841108",
+2114 => x"70fe0670",
+2115 => x"13841108",
+2116 => x"fc065c57",
+2117 => x"58545780",
+2118 => x"e2fc0874",
+2119 => x"2e82de38",
+2120 => x"7784150c",
+2121 => x"80738106",
+2122 => x"56597479",
+2123 => x"2e81d538",
+2124 => x"77148411",
+2125 => x"08810656",
+2126 => x"5374a038",
+2127 => x"77165678",
+2128 => x"81e63888",
+2129 => x"14085574",
+2130 => x"80e2fc2e",
+2131 => x"82f9388c",
+2132 => x"1408708c",
+2133 => x"170c7588",
+2134 => x"120c5875",
+2135 => x"81078418",
+2136 => x"0c751776",
+2137 => x"710c5478",
+2138 => x"81913883",
+2139 => x"ff762781",
+2140 => x"c8387589",
+2141 => x"2a76832a",
+2142 => x"54547380",
+2143 => x"2ebf3875",
+2144 => x"862ab805",
+2145 => x"53847427",
+2146 => x"b43880db",
+2147 => x"14539474",
+2148 => x"27ab3875",
+2149 => x"8c2a80ee",
+2150 => x"055380d4",
+2151 => x"74279e38",
+2152 => x"758f2a80",
+2153 => x"f7055382",
+2154 => x"d4742791",
+2155 => x"3875922a",
+2156 => x"80fc0553",
+2157 => x"8ad47427",
+2158 => x"843880fe",
+2159 => x"53721010",
+2160 => x"1080e2f4",
+2161 => x"05881108",
+2162 => x"55557375",
+2163 => x"2e82bf38",
+2164 => x"841408fc",
+2165 => x"06597579",
+2166 => x"278d3888",
+2167 => x"14085473",
+2168 => x"752e0981",
+2169 => x"06ea388c",
+2170 => x"1408708c",
+2171 => x"190c7488",
+2172 => x"190c7788",
+2173 => x"120c5576",
+2174 => x"8c150c79",
+2175 => x"51faf63f",
+2176 => x"8b3d0d04",
+2177 => x"76087771",
+2178 => x"31587605",
+2179 => x"88180856",
+2180 => x"567480e2",
+2181 => x"fc2e80e0",
+2182 => x"388c1708",
+2183 => x"708c170c",
+2184 => x"7588120c",
+2185 => x"53fe8939",
+2186 => x"8814088c",
+2187 => x"1508708c",
+2188 => x"130c5988",
+2189 => x"190cfea3",
+2190 => x"3975832a",
+2191 => x"70545480",
+2192 => x"74248198",
+2193 => x"3872822c",
+2194 => x"81712b80",
+2195 => x"e2f80807",
+2196 => x"80e2f40b",
+2197 => x"84050c74",
+2198 => x"10101080",
+2199 => x"e2f40588",
+2200 => x"1108718c",
+2201 => x"1b0c7088",
+2202 => x"1b0c7988",
+2203 => x"130c565a",
+2204 => x"55768c15",
+2205 => x"0cff8439",
+2206 => x"8159fdb4",
+2207 => x"39771673",
+2208 => x"81065455",
+2209 => x"72983876",
+2210 => x"08777131",
+2211 => x"5875058c",
+2212 => x"18088819",
+2213 => x"08718c12",
+2214 => x"0c88120c",
+2215 => x"55557481",
+2216 => x"0784180c",
+2217 => x"7680e2f4",
+2218 => x"0b88050c",
+2219 => x"80e2f008",
+2220 => x"7526fec7",
+2221 => x"3880e2ec",
+2222 => x"08527951",
+2223 => x"fafd3f79",
+2224 => x"51f9b23f",
+2225 => x"feba3981",
+2226 => x"778c170c",
+2227 => x"7788170c",
+2228 => x"758c190c",
+2229 => x"7588190c",
+2230 => x"59fd8039",
+2231 => x"83147082",
+2232 => x"2c81712b",
+2233 => x"80e2f808",
+2234 => x"0780e2f4",
+2235 => x"0b84050c",
+2236 => x"75101010",
+2237 => x"80e2f405",
+2238 => x"88110871",
+2239 => x"8c1c0c70",
+2240 => x"881c0c7a",
+2241 => x"88130c57",
+2242 => x"5b5653fe",
+2243 => x"e4398073",
+2244 => x"24a33872",
+2245 => x"822c8171",
+2246 => x"2b80e2f8",
+2247 => x"080780e2",
+2248 => x"f40b8405",
+2249 => x"0c58748c",
+2250 => x"180c7388",
+2251 => x"180c7688",
+2252 => x"160cfdc3",
+2253 => x"39831370",
+2254 => x"822c8171",
+2255 => x"2b80e2f8",
+2256 => x"080780e2",
+2257 => x"f40b8405",
+2258 => x"0c5953da",
+2259 => x"39fe3d0d",
+2260 => x"81c2d808",
+2261 => x"51708a38",
+2262 => x"81c2e070",
+2263 => x"81c2d80c",
+2264 => x"51741152",
+2265 => x"ff537187",
+2266 => x"fb808026",
+2267 => x"88387181",
+2268 => x"c2d80c70",
+2269 => x"5372800c",
+2270 => x"843d0d04",
+2271 => x"fd3d0d80",
+2272 => x"0b80e2a4",
+2273 => x"08545472",
+2274 => x"812e9b38",
+2275 => x"7381c2dc",
+2276 => x"0cc28e3f",
+2277 => x"c0ea3f80",
+2278 => x"f1fc5281",
+2279 => x"51caf83f",
+2280 => x"80085189",
+2281 => x"a73f7281",
+2282 => x"c2dc0cc1",
+2283 => x"f43fc0d0",
+2284 => x"3f80f1fc",
+2285 => x"528151ca",
+2286 => x"de3f8008",
+2287 => x"51898d3f",
+2288 => x"00ff3900",
+2289 => x"ff39f53d",
+2290 => x"0d7e6081",
+2291 => x"c2dc0870",
+2292 => x"5b585b5b",
+2293 => x"7580c238",
+2294 => x"777a25a1",
+2295 => x"38771b70",
+2296 => x"337081ff",
+2297 => x"06585859",
+2298 => x"758a2e98",
+2299 => x"387681ff",
+2300 => x"0651c18c",
+2301 => x"3f811858",
+2302 => x"797824e1",
+2303 => x"3879800c",
+2304 => x"8d3d0d04",
+2305 => x"8d51c0f8",
+2306 => x"3f783370",
+2307 => x"81ff0652",
+2308 => x"57c0ed3f",
+2309 => x"811858e0",
+2310 => x"3979557a",
+2311 => x"547d5385",
+2312 => x"528d3dfc",
+2313 => x"0551c09a",
+2314 => x"3f800856",
+2315 => x"88973f7b",
+2316 => x"80080c75",
+2317 => x"800c8d3d",
+2318 => x"0d04f63d",
+2319 => x"0d7d7f81",
+2320 => x"c2dc0870",
+2321 => x"5a585a5a",
+2322 => x"7580c338",
+2323 => x"767925b1",
+2324 => x"38761a58",
+2325 => x"c08a3f80",
+2326 => x"08783480",
+2327 => x"0b800881",
+2328 => x"ff065758",
+2329 => x"758a2ea2",
+2330 => x"38758d32",
+2331 => x"70307080",
+2332 => x"257a0751",
+2333 => x"515675b8",
+2334 => x"38811757",
+2335 => x"787724d1",
+2336 => x"38765675",
+2337 => x"800c8c3d",
+2338 => x"0d048158",
+2339 => x"dc397855",
+2340 => x"79547c53",
+2341 => x"84528c3d",
+2342 => x"fc0551ff",
+2343 => x"bfa43f80",
+2344 => x"085687a1",
+2345 => x"3f7a8008",
+2346 => x"0c75800c",
+2347 => x"8c3d0d04",
+2348 => x"811756cf",
+2349 => x"39f93d0d",
+2350 => x"795781c2",
+2351 => x"dc08802e",
+2352 => x"ad387651",
+2353 => x"89b43f7b",
+2354 => x"567a5580",
+2355 => x"08810554",
+2356 => x"76538252",
+2357 => x"893dfc05",
+2358 => x"51ffbee6",
+2359 => x"3f800857",
+2360 => x"86e33f77",
+2361 => x"80080c76",
+2362 => x"800c893d",
+2363 => x"0d0486d5",
+2364 => x"3f850b80",
+2365 => x"080cff0b",
+2366 => x"800c893d",
+2367 => x"0d04fb3d",
+2368 => x"0d81c2dc",
+2369 => x"08705654",
+2370 => x"73883874",
+2371 => x"800c873d",
+2372 => x"0d047753",
+2373 => x"8352873d",
+2374 => x"fc0551ff",
+2375 => x"bea43f80",
+2376 => x"085486a1",
+2377 => x"3f758008",
+2378 => x"0c73800c",
+2379 => x"873d0d04",
+2380 => x"ff0b800c",
+2381 => x"04fb3d0d",
+2382 => x"775581c2",
+2383 => x"dc08802e",
+2384 => x"a9387451",
+2385 => x"88b43f80",
+2386 => x"08810554",
+2387 => x"74538752",
+2388 => x"873dfc05",
+2389 => x"51ffbdea",
+2390 => x"3f800855",
+2391 => x"85e73f75",
+2392 => x"80080c74",
+2393 => x"800c873d",
+2394 => x"0d0485d9",
+2395 => x"3f850b80",
+2396 => x"080cff0b",
+2397 => x"800c873d",
+2398 => x"0d04fa3d",
+2399 => x"0d81c2dc",
+2400 => x"08802ea3",
+2401 => x"387a5579",
+2402 => x"54785386",
+2403 => x"52883dfc",
+2404 => x"0551ffbd",
+2405 => x"ad3f8008",
+2406 => x"5685aa3f",
+2407 => x"7680080c",
+2408 => x"75800c88",
+2409 => x"3d0d0485",
+2410 => x"9c3f9d0b",
+2411 => x"80080cff",
+2412 => x"0b800c88",
+2413 => x"3d0d04f7",
+2414 => x"3d0d7b7d",
+2415 => x"5b59bc53",
+2416 => x"80527951",
+2417 => x"86aa3f80",
+2418 => x"70565798",
+2419 => x"56741970",
+2420 => x"3370782b",
+2421 => x"79078118",
+2422 => x"f81a5a58",
+2423 => x"59555884",
+2424 => x"7524ea38",
+2425 => x"767a2384",
+2426 => x"19588070",
+2427 => x"56579856",
+2428 => x"74187033",
+2429 => x"70782b79",
+2430 => x"078118f8",
+2431 => x"1a5a5859",
+2432 => x"51548475",
+2433 => x"24ea3876",
+2434 => x"821b2388",
+2435 => x"19588070",
+2436 => x"56579856",
+2437 => x"74187033",
+2438 => x"70782b79",
+2439 => x"078118f8",
+2440 => x"1a5a5859",
+2441 => x"51548475",
+2442 => x"24ea3876",
+2443 => x"841b0c8c",
+2444 => x"19588070",
+2445 => x"56579856",
+2446 => x"74187033",
+2447 => x"70782b79",
+2448 => x"078118f8",
+2449 => x"1a5a5859",
+2450 => x"51548475",
+2451 => x"24ea3876",
+2452 => x"881b2390",
+2453 => x"19588070",
+2454 => x"56579856",
+2455 => x"74187033",
+2456 => x"70782b79",
+2457 => x"078118f8",
+2458 => x"1a5a5859",
+2459 => x"51548475",
+2460 => x"24ea3876",
+2461 => x"8a1b2394",
+2462 => x"19588070",
+2463 => x"56579856",
+2464 => x"74187033",
+2465 => x"70782b79",
+2466 => x"078118f8",
+2467 => x"1a5a5859",
+2468 => x"51548475",
+2469 => x"24ea3876",
+2470 => x"8c1b2398",
+2471 => x"19588070",
+2472 => x"56579856",
+2473 => x"74187033",
+2474 => x"70782b79",
+2475 => x"078118f8",
+2476 => x"1a5a5859",
+2477 => x"51548475",
+2478 => x"24ea3876",
+2479 => x"8e1b239c",
+2480 => x"19588070",
+2481 => x"5657b856",
+2482 => x"74187033",
+2483 => x"70782b79",
+2484 => x"078118f8",
+2485 => x"1a5a5859",
+2486 => x"5a548875",
+2487 => x"24ea3876",
+2488 => x"901b0c8b",
+2489 => x"3d0d04e9",
+2490 => x"3d0d6a81",
+2491 => x"c2dc0857",
+2492 => x"57759338",
+2493 => x"80c0800b",
+2494 => x"84180c75",
+2495 => x"ac180c75",
+2496 => x"800c993d",
+2497 => x"0d04893d",
+2498 => x"70556a54",
+2499 => x"558a5299",
+2500 => x"3dffbc05",
+2501 => x"51ffbaaa",
+2502 => x"3f800877",
+2503 => x"53755256",
+2504 => x"fd953f82",
+2505 => x"a03f7780",
+2506 => x"080c7580",
+2507 => x"0c993d0d",
+2508 => x"04e93d0d",
+2509 => x"695781c2",
+2510 => x"dc08802e",
+2511 => x"b6387651",
+2512 => x"84b83f89",
+2513 => x"3d705680",
+2514 => x"08810555",
+2515 => x"7754568f",
+2516 => x"52993dff",
+2517 => x"bc0551ff",
+2518 => x"b9e83f80",
+2519 => x"086b5376",
+2520 => x"5257fcd3",
+2521 => x"3f81de3f",
+2522 => x"7780080c",
+2523 => x"76800c99",
+2524 => x"3d0d0481",
+2525 => x"d03f850b",
+2526 => x"80080cff",
+2527 => x"0b800c99",
+2528 => x"3d0d04fc",
+2529 => x"3d0d8154",
+2530 => x"81c2dc08",
+2531 => x"88387380",
+2532 => x"0c863d0d",
+2533 => x"04765397",
+2534 => x"b952863d",
+2535 => x"fc0551ff",
+2536 => x"b9a03f80",
+2537 => x"0854819d",
+2538 => x"3f748008",
+2539 => x"0c73800c",
+2540 => x"863d0d04",
+2541 => x"f43d0d7e",
+2542 => x"80f2a808",
+2543 => x"700881ff",
+2544 => x"06913df8",
+2545 => x"05545159",
+2546 => x"59ffbac5",
+2547 => x"3f775780",
+2548 => x"5476557b",
+2549 => x"7d585276",
+2550 => x"538e3df0",
+2551 => x"0551d6a0",
+2552 => x"3f797b58",
+2553 => x"790c7684",
+2554 => x"1a0c7880",
+2555 => x"0c8e3d0d",
+2556 => x"04f43d0d",
+2557 => x"7e80f2a8",
+2558 => x"08700870",
+2559 => x"81ff0692",
+2560 => x"3df80555",
+2561 => x"515a5759",
+2562 => x"ffba863f",
+2563 => x"7757800b",
+2564 => x"8b3d5954",
+2565 => x"76557b7d",
+2566 => x"58527653",
+2567 => x"7751d5e0",
+2568 => x"3f8056bd",
+2569 => x"84c07655",
+2570 => x"55797b58",
+2571 => x"52765377",
+2572 => x"51d5cd3f",
+2573 => x"7a577880",
+2574 => x"2e843876",
+2575 => x"790c7680",
+2576 => x"0c8e3d0d",
+2577 => x"0480eafc",
+2578 => x"08800c04",
+2579 => x"f73d0d7b",
+2580 => x"80eafc08",
+2581 => x"82c81108",
+2582 => x"5a545a77",
+2583 => x"802e80da",
+2584 => x"38818818",
+2585 => x"841908ff",
+2586 => x"0581712b",
+2587 => x"59555980",
+2588 => x"742480ea",
+2589 => x"38807424",
+2590 => x"b5387382",
+2591 => x"2b781188",
+2592 => x"05565681",
+2593 => x"80190877",
+2594 => x"06537280",
+2595 => x"2eb63878",
+2596 => x"16700853",
+2597 => x"53795174",
+2598 => x"0853722d",
+2599 => x"ff14fc17",
+2600 => x"fc177981",
+2601 => x"2c5a5757",
+2602 => x"54738025",
+2603 => x"d6387708",
+2604 => x"5877ffad",
+2605 => x"3880eafc",
+2606 => x"0853bc13",
+2607 => x"08a53879",
+2608 => x"51f5fd3f",
+2609 => x"74085372",
+2610 => x"2dff14fc",
+2611 => x"17fc1779",
+2612 => x"812c5a57",
+2613 => x"57547380",
+2614 => x"25ffa838",
+2615 => x"d1398057",
+2616 => x"ff933972",
+2617 => x"51bc1308",
+2618 => x"54732d79",
+2619 => x"51f5d13f",
+2620 => x"fb3d0d77",
+2621 => x"7a71028c",
+2622 => x"05a30533",
+2623 => x"58545456",
+2624 => x"83732780",
+2625 => x"d4387583",
+2626 => x"06517080",
+2627 => x"cc387488",
+2628 => x"2b750770",
+2629 => x"71902b07",
+2630 => x"55518f73",
+2631 => x"27a73873",
+2632 => x"72708405",
+2633 => x"540c7174",
+2634 => x"71708405",
+2635 => x"530c7471",
+2636 => x"70840553",
+2637 => x"0c747170",
+2638 => x"8405530c",
+2639 => x"f0145452",
+2640 => x"728f26db",
+2641 => x"38837327",
+2642 => x"90387372",
+2643 => x"70840554",
+2644 => x"0cfc1353",
+2645 => x"728326f2",
+2646 => x"38ff1351",
+2647 => x"70ff2e93",
+2648 => x"38747270",
+2649 => x"81055434",
+2650 => x"ff115170",
+2651 => x"ff2e0981",
+2652 => x"06ef3875",
+2653 => x"800c873d",
+2654 => x"0d04fd3d",
+2655 => x"0d757071",
+2656 => x"83065355",
+2657 => x"5270b438",
+2658 => x"71700870",
+2659 => x"09f7fbfd",
+2660 => x"ff1206f8",
+2661 => x"84828180",
+2662 => x"06545253",
+2663 => x"719b3884",
+2664 => x"13700870",
+2665 => x"09f7fbfd",
+2666 => x"ff1206f8",
+2667 => x"84828180",
+2668 => x"06545253",
+2669 => x"71802ee7",
+2670 => x"38725271",
+2671 => x"33537280",
+2672 => x"2e8a3881",
+2673 => x"12703354",
+2674 => x"5272f838",
+2675 => x"71743180",
+2676 => x"0c853d0d",
+2677 => x"04ff3d0d",
+2678 => x"80f2840b",
+2679 => x"fc057008",
+2680 => x"525270ff",
+2681 => x"2e913870",
+2682 => x"2dfc1270",
+2683 => x"08525270",
+2684 => x"ff2e0981",
+2685 => x"06f13883",
+2686 => x"3d0d0404",
+2687 => x"ffb7a63f",
+2688 => x"04000000",
+2689 => x"30313233",
+2690 => x"34353637",
+2691 => x"38390000",
+2692 => x"44485259",
+2693 => x"53544f4e",
+2694 => x"45205052",
+2695 => x"4f475241",
+2696 => x"4d2c2053",
+2697 => x"4f4d4520",
+2698 => x"53545249",
+2699 => x"4e470000",
+2700 => x"44485259",
+2701 => x"53544f4e",
+2702 => x"45205052",
+2703 => x"4f475241",
+2704 => x"4d2c2031",
+2705 => x"27535420",
+2706 => x"53545249",
+2707 => x"4e470000",
+2708 => x"44687279",
+2709 => x"73746f6e",
+2710 => x"65204265",
+2711 => x"6e63686d",
+2712 => x"61726b2c",
+2713 => x"20566572",
+2714 => x"73696f6e",
+2715 => x"20322e31",
+2716 => x"20284c61",
+2717 => x"6e677561",
+2718 => x"67653a20",
+2719 => x"43290a00",
+2720 => x"50726f67",
+2721 => x"72616d20",
+2722 => x"636f6d70",
+2723 => x"696c6564",
+2724 => x"20776974",
+2725 => x"68202772",
+2726 => x"65676973",
+2727 => x"74657227",
+2728 => x"20617474",
+2729 => x"72696275",
+2730 => x"74650a00",
+2731 => x"45786563",
+2732 => x"7574696f",
+2733 => x"6e207374",
+2734 => x"61727473",
+2735 => x"2c202564",
+2736 => x"2072756e",
+2737 => x"73207468",
+2738 => x"726f7567",
+2739 => x"68204468",
+2740 => x"72797374",
+2741 => x"6f6e650a",
+2742 => x"00000000",
+2743 => x"44485259",
+2744 => x"53544f4e",
+2745 => x"45205052",
+2746 => x"4f475241",
+2747 => x"4d2c2032",
+2748 => x"274e4420",
+2749 => x"53545249",
+2750 => x"4e470000",
+2751 => x"45786563",
+2752 => x"7574696f",
+2753 => x"6e20656e",
+2754 => x"64730a00",
+2755 => x"46696e61",
+2756 => x"6c207661",
+2757 => x"6c756573",
+2758 => x"206f6620",
+2759 => x"74686520",
+2760 => x"76617269",
+2761 => x"61626c65",
+2762 => x"73207573",
+2763 => x"65642069",
+2764 => x"6e207468",
+2765 => x"65206265",
+2766 => x"6e63686d",
+2767 => x"61726b3a",
+2768 => x"0a000000",
+2769 => x"496e745f",
+2770 => x"476c6f62",
+2771 => x"3a202020",
+2772 => x"20202020",
+2773 => x"20202020",
+2774 => x"2025640a",
+2775 => x"00000000",
+2776 => x"20202020",
+2777 => x"20202020",
+2778 => x"73686f75",
+2779 => x"6c642062",
+2780 => x"653a2020",
+2781 => x"2025640a",
+2782 => x"00000000",
+2783 => x"426f6f6c",
+2784 => x"5f476c6f",
+2785 => x"623a2020",
+2786 => x"20202020",
+2787 => x"20202020",
+2788 => x"2025640a",
+2789 => x"00000000",
+2790 => x"43685f31",
+2791 => x"5f476c6f",
+2792 => x"623a2020",
+2793 => x"20202020",
+2794 => x"20202020",
+2795 => x"2025630a",
+2796 => x"00000000",
+2797 => x"20202020",
+2798 => x"20202020",
+2799 => x"73686f75",
+2800 => x"6c642062",
+2801 => x"653a2020",
+2802 => x"2025630a",
+2803 => x"00000000",
+2804 => x"43685f32",
+2805 => x"5f476c6f",
+2806 => x"623a2020",
+2807 => x"20202020",
+2808 => x"20202020",
+2809 => x"2025630a",
+2810 => x"00000000",
+2811 => x"4172725f",
+2812 => x"315f476c",
+2813 => x"6f625b38",
+2814 => x"5d3a2020",
+2815 => x"20202020",
+2816 => x"2025640a",
+2817 => x"00000000",
+2818 => x"4172725f",
+2819 => x"325f476c",
+2820 => x"6f625b38",
+2821 => x"5d5b375d",
+2822 => x"3a202020",
+2823 => x"2025640a",
+2824 => x"00000000",
+2825 => x"20202020",
+2826 => x"20202020",
+2827 => x"73686f75",
+2828 => x"6c642062",
+2829 => x"653a2020",
+2830 => x"204e756d",
+2831 => x"6265725f",
+2832 => x"4f665f52",
+2833 => x"756e7320",
+2834 => x"2b203130",
+2835 => x"0a000000",
+2836 => x"5074725f",
+2837 => x"476c6f62",
+2838 => x"2d3e0a00",
+2839 => x"20205074",
+2840 => x"725f436f",
+2841 => x"6d703a20",
+2842 => x"20202020",
+2843 => x"20202020",
+2844 => x"2025640a",
+2845 => x"00000000",
+2846 => x"20202020",
+2847 => x"20202020",
+2848 => x"73686f75",
+2849 => x"6c642062",
+2850 => x"653a2020",
+2851 => x"2028696d",
+2852 => x"706c656d",
+2853 => x"656e7461",
+2854 => x"74696f6e",
+2855 => x"2d646570",
+2856 => x"656e6465",
+2857 => x"6e74290a",
+2858 => x"00000000",
+2859 => x"20204469",
+2860 => x"7363723a",
+2861 => x"20202020",
+2862 => x"20202020",
+2863 => x"20202020",
+2864 => x"2025640a",
+2865 => x"00000000",
+2866 => x"2020456e",
+2867 => x"756d5f43",
+2868 => x"6f6d703a",
+2869 => x"20202020",
+2870 => x"20202020",
+2871 => x"2025640a",
+2872 => x"00000000",
+2873 => x"2020496e",
+2874 => x"745f436f",
+2875 => x"6d703a20",
+2876 => x"20202020",
+2877 => x"20202020",
+2878 => x"2025640a",
+2879 => x"00000000",
+2880 => x"20205374",
+2881 => x"725f436f",
+2882 => x"6d703a20",
+2883 => x"20202020",
+2884 => x"20202020",
+2885 => x"2025730a",
+2886 => x"00000000",
+2887 => x"20202020",
+2888 => x"20202020",
+2889 => x"73686f75",
+2890 => x"6c642062",
+2891 => x"653a2020",
+2892 => x"20444852",
+2893 => x"5953544f",
+2894 => x"4e452050",
+2895 => x"524f4752",
+2896 => x"414d2c20",
+2897 => x"534f4d45",
+2898 => x"20535452",
+2899 => x"494e470a",
+2900 => x"00000000",
+2901 => x"4e657874",
+2902 => x"5f507472",
+2903 => x"5f476c6f",
+2904 => x"622d3e0a",
+2905 => x"00000000",
+2906 => x"20202020",
+2907 => x"20202020",
+2908 => x"73686f75",
+2909 => x"6c642062",
+2910 => x"653a2020",
+2911 => x"2028696d",
+2912 => x"706c656d",
+2913 => x"656e7461",
+2914 => x"74696f6e",
+2915 => x"2d646570",
+2916 => x"656e6465",
+2917 => x"6e74292c",
+2918 => x"2073616d",
+2919 => x"65206173",
+2920 => x"2061626f",
+2921 => x"76650a00",
+2922 => x"496e745f",
+2923 => x"315f4c6f",
+2924 => x"633a2020",
+2925 => x"20202020",
+2926 => x"20202020",
+2927 => x"2025640a",
+2928 => x"00000000",
+2929 => x"496e745f",
+2930 => x"325f4c6f",
+2931 => x"633a2020",
+2932 => x"20202020",
+2933 => x"20202020",
+2934 => x"2025640a",
+2935 => x"00000000",
+2936 => x"496e745f",
+2937 => x"335f4c6f",
+2938 => x"633a2020",
+2939 => x"20202020",
+2940 => x"20202020",
+2941 => x"2025640a",
+2942 => x"00000000",
+2943 => x"456e756d",
+2944 => x"5f4c6f63",
+2945 => x"3a202020",
+2946 => x"20202020",
+2947 => x"20202020",
+2948 => x"2025640a",
+2949 => x"00000000",
+2950 => x"5374725f",
+2951 => x"315f4c6f",
+2952 => x"633a2020",
+2953 => x"20202020",
+2954 => x"20202020",
+2955 => x"2025730a",
+2956 => x"00000000",
+2957 => x"20202020",
+2958 => x"20202020",
+2959 => x"73686f75",
+2960 => x"6c642062",
+2961 => x"653a2020",
+2962 => x"20444852",
+2963 => x"5953544f",
+2964 => x"4e452050",
+2965 => x"524f4752",
+2966 => x"414d2c20",
+2967 => x"31275354",
+2968 => x"20535452",
+2969 => x"494e470a",
+2970 => x"00000000",
+2971 => x"5374725f",
+2972 => x"325f4c6f",
+2973 => x"633a2020",
+2974 => x"20202020",
+2975 => x"20202020",
+2976 => x"2025730a",
+2977 => x"00000000",
+2978 => x"20202020",
+2979 => x"20202020",
+2980 => x"73686f75",
+2981 => x"6c642062",
+2982 => x"653a2020",
+2983 => x"20444852",
+2984 => x"5953544f",
+2985 => x"4e452050",
+2986 => x"524f4752",
+2987 => x"414d2c20",
+2988 => x"32274e44",
+2989 => x"20535452",
+2990 => x"494e470a",
+2991 => x"00000000",
+2992 => x"55736572",
+2993 => x"2074696d",
+2994 => x"653a2025",
+2995 => x"640a0000",
+2996 => x"4d696372",
+2997 => x"6f736563",
+2998 => x"6f6e6473",
+2999 => x"20666f72",
+3000 => x"206f6e65",
+3001 => x"2072756e",
+3002 => x"20746872",
+3003 => x"6f756768",
+3004 => x"20446872",
+3005 => x"7973746f",
+3006 => x"6e653a20",
+3007 => x"00000000",
+3008 => x"2564200a",
+3009 => x"00000000",
+3010 => x"44687279",
+3011 => x"73746f6e",
+3012 => x"65732070",
+3013 => x"65722053",
+3014 => x"65636f6e",
+3015 => x"643a2020",
+3016 => x"20202020",
+3017 => x"20202020",
+3018 => x"20202020",
+3019 => x"20202020",
+3020 => x"20202020",
+3021 => x"00000000",
+3022 => x"56415820",
+3023 => x"4d495053",
+3024 => x"20726174",
+3025 => x"696e6720",
+3026 => x"2a203130",
+3027 => x"3030203d",
+3028 => x"20256420",
+3029 => x"0a000000",
+3030 => x"50726f67",
+3031 => x"72616d20",
+3032 => x"636f6d70",
+3033 => x"696c6564",
+3034 => x"20776974",
+3035 => x"686f7574",
+3036 => x"20277265",
+3037 => x"67697374",
+3038 => x"65722720",
+3039 => x"61747472",
+3040 => x"69627574",
+3041 => x"650a0000",
+3042 => x"4d656173",
+3043 => x"75726564",
+3044 => x"2074696d",
+3045 => x"6520746f",
+3046 => x"6f20736d",
+3047 => x"616c6c20",
+3048 => x"746f206f",
+3049 => x"62746169",
+3050 => x"6e206d65",
+3051 => x"616e696e",
+3052 => x"6766756c",
+3053 => x"20726573",
+3054 => x"756c7473",
+3055 => x"0a000000",
+3056 => x"506c6561",
+3057 => x"73652069",
+3058 => x"6e637265",
+3059 => x"61736520",
+3060 => x"6e756d62",
+3061 => x"6572206f",
+3062 => x"66207275",
+3063 => x"6e730a00",
+3064 => x"44485259",
+3065 => x"53544f4e",
+3066 => x"45205052",
+3067 => x"4f475241",
+3068 => x"4d2c2033",
+3069 => x"27524420",
+3070 => x"53545249",
+3071 => x"4e470000",
+3072 => x"00010202",
+3073 => x"03030303",
+3074 => x"04040404",
+3075 => x"04040404",
+3076 => x"05050505",
+3077 => x"05050505",
+3078 => x"05050505",
+3079 => x"05050505",
+3080 => x"06060606",
+3081 => x"06060606",
+3082 => x"06060606",
+3083 => x"06060606",
+3084 => x"06060606",
+3085 => x"06060606",
+3086 => x"06060606",
+3087 => x"06060606",
+3088 => x"07070707",
+3089 => x"07070707",
+3090 => x"07070707",
+3091 => x"07070707",
+3092 => x"07070707",
+3093 => x"07070707",
+3094 => x"07070707",
+3095 => x"07070707",
+3096 => x"07070707",
+3097 => x"07070707",
+3098 => x"07070707",
+3099 => x"07070707",
+3100 => x"07070707",
+3101 => x"07070707",
+3102 => x"07070707",
+3103 => x"07070707",
+3104 => x"08080808",
+3105 => x"08080808",
+3106 => x"08080808",
+3107 => x"08080808",
+3108 => x"08080808",
+3109 => x"08080808",
+3110 => x"08080808",
+3111 => x"08080808",
+3112 => x"08080808",
+3113 => x"08080808",
+3114 => x"08080808",
+3115 => x"08080808",
+3116 => x"08080808",
+3117 => x"08080808",
+3118 => x"08080808",
+3119 => x"08080808",
+3120 => x"08080808",
+3121 => x"08080808",
+3122 => x"08080808",
+3123 => x"08080808",
+3124 => x"08080808",
+3125 => x"08080808",
+3126 => x"08080808",
+3127 => x"08080808",
+3128 => x"08080808",
+3129 => x"08080808",
+3130 => x"08080808",
+3131 => x"08080808",
+3132 => x"08080808",
+3133 => x"08080808",
+3134 => x"08080808",
+3135 => x"08080808",
+3136 => x"43000000",
+3137 => x"64756d6d",
+3138 => x"792e6578",
+3139 => x"65000000",
+3140 => x"00ffffff",
+3141 => x"ff00ffff",
+3142 => x"ffff00ff",
+3143 => x"ffffff00",
+3144 => x"00000000",
+3145 => x"00000000",
+3146 => x"00000000",
+3147 => x"0000390c",
+3148 => x"000004d2", -- iterations 0x4d2=1234
+3149 => x"00000000",
+3150 => x"00000000",
+3151 => x"00000000",
+3152 => x"00000000",
+3153 => x"00000000",
+3154 => x"00000000",
+3155 => x"00000000",
+3156 => x"00000000",
+3157 => x"00000000",
+3158 => x"00000000",
+3159 => x"00000000",
+3160 => x"00000000",
+3161 => x"00000000",
+3162 => x"ffffffff",
+3163 => x"00000000",
+3164 => x"00020000",
+3165 => x"00000000",
+3166 => x"00000000",
+3167 => x"00003174",
+3168 => x"00003174",
+3169 => x"0000317c",
+3170 => x"0000317c",
+3171 => x"00003184",
+3172 => x"00003184",
+3173 => x"0000318c",
+3174 => x"0000318c",
+3175 => x"00003194",
+3176 => x"00003194",
+3177 => x"0000319c",
+3178 => x"0000319c",
+3179 => x"000031a4",
+3180 => x"000031a4",
+3181 => x"000031ac",
+3182 => x"000031ac",
+3183 => x"000031b4",
+3184 => x"000031b4",
+3185 => x"000031bc",
+3186 => x"000031bc",
+3187 => x"000031c4",
+3188 => x"000031c4",
+3189 => x"000031cc",
+3190 => x"000031cc",
+3191 => x"000031d4",
+3192 => x"000031d4",
+3193 => x"000031dc",
+3194 => x"000031dc",
+3195 => x"000031e4",
+3196 => x"000031e4",
+3197 => x"000031ec",
+3198 => x"000031ec",
+3199 => x"000031f4",
+3200 => x"000031f4",
+3201 => x"000031fc",
+3202 => x"000031fc",
+3203 => x"00003204",
+3204 => x"00003204",
+3205 => x"0000320c",
+3206 => x"0000320c",
+3207 => x"00003214",
+3208 => x"00003214",
+3209 => x"0000321c",
+3210 => x"0000321c",
+3211 => x"00003224",
+3212 => x"00003224",
+3213 => x"0000322c",
+3214 => x"0000322c",
+3215 => x"00003234",
+3216 => x"00003234",
+3217 => x"0000323c",
+3218 => x"0000323c",
+3219 => x"00003244",
+3220 => x"00003244",
+3221 => x"0000324c",
+3222 => x"0000324c",
+3223 => x"00003254",
+3224 => x"00003254",
+3225 => x"0000325c",
+3226 => x"0000325c",
+3227 => x"00003264",
+3228 => x"00003264",
+3229 => x"0000326c",
+3230 => x"0000326c",
+3231 => x"00003274",
+3232 => x"00003274",
+3233 => x"0000327c",
+3234 => x"0000327c",
+3235 => x"00003284",
+3236 => x"00003284",
+3237 => x"0000328c",
+3238 => x"0000328c",
+3239 => x"00003294",
+3240 => x"00003294",
+3241 => x"0000329c",
+3242 => x"0000329c",
+3243 => x"000032a4",
+3244 => x"000032a4",
+3245 => x"000032ac",
+3246 => x"000032ac",
+3247 => x"000032b4",
+3248 => x"000032b4",
+3249 => x"000032bc",
+3250 => x"000032bc",
+3251 => x"000032c4",
+3252 => x"000032c4",
+3253 => x"000032cc",
+3254 => x"000032cc",
+3255 => x"000032d4",
+3256 => x"000032d4",
+3257 => x"000032dc",
+3258 => x"000032dc",
+3259 => x"000032e4",
+3260 => x"000032e4",
+3261 => x"000032ec",
+3262 => x"000032ec",
+3263 => x"000032f4",
+3264 => x"000032f4",
+3265 => x"000032fc",
+3266 => x"000032fc",
+3267 => x"00003304",
+3268 => x"00003304",
+3269 => x"0000330c",
+3270 => x"0000330c",
+3271 => x"00003314",
+3272 => x"00003314",
+3273 => x"0000331c",
+3274 => x"0000331c",
+3275 => x"00003324",
+3276 => x"00003324",
+3277 => x"0000332c",
+3278 => x"0000332c",
+3279 => x"00003334",
+3280 => x"00003334",
+3281 => x"0000333c",
+3282 => x"0000333c",
+3283 => x"00003344",
+3284 => x"00003344",
+3285 => x"0000334c",
+3286 => x"0000334c",
+3287 => x"00003354",
+3288 => x"00003354",
+3289 => x"0000335c",
+3290 => x"0000335c",
+3291 => x"00003364",
+3292 => x"00003364",
+3293 => x"0000336c",
+3294 => x"0000336c",
+3295 => x"00003374",
+3296 => x"00003374",
+3297 => x"0000337c",
+3298 => x"0000337c",
+3299 => x"00003384",
+3300 => x"00003384",
+3301 => x"0000338c",
+3302 => x"0000338c",
+3303 => x"00003394",
+3304 => x"00003394",
+3305 => x"0000339c",
+3306 => x"0000339c",
+3307 => x"000033a4",
+3308 => x"000033a4",
+3309 => x"000033ac",
+3310 => x"000033ac",
+3311 => x"000033b4",
+3312 => x"000033b4",
+3313 => x"000033bc",
+3314 => x"000033bc",
+3315 => x"000033c4",
+3316 => x"000033c4",
+3317 => x"000033cc",
+3318 => x"000033cc",
+3319 => x"000033d4",
+3320 => x"000033d4",
+3321 => x"000033dc",
+3322 => x"000033dc",
+3323 => x"000033e4",
+3324 => x"000033e4",
+3325 => x"000033ec",
+3326 => x"000033ec",
+3327 => x"000033f4",
+3328 => x"000033f4",
+3329 => x"000033fc",
+3330 => x"000033fc",
+3331 => x"00003404",
+3332 => x"00003404",
+3333 => x"0000340c",
+3334 => x"0000340c",
+3335 => x"00003414",
+3336 => x"00003414",
+3337 => x"0000341c",
+3338 => x"0000341c",
+3339 => x"00003424",
+3340 => x"00003424",
+3341 => x"0000342c",
+3342 => x"0000342c",
+3343 => x"00003434",
+3344 => x"00003434",
+3345 => x"0000343c",
+3346 => x"0000343c",
+3347 => x"00003444",
+3348 => x"00003444",
+3349 => x"0000344c",
+3350 => x"0000344c",
+3351 => x"00003454",
+3352 => x"00003454",
+3353 => x"0000345c",
+3354 => x"0000345c",
+3355 => x"00003464",
+3356 => x"00003464",
+3357 => x"0000346c",
+3358 => x"0000346c",
+3359 => x"00003474",
+3360 => x"00003474",
+3361 => x"0000347c",
+3362 => x"0000347c",
+3363 => x"00003484",
+3364 => x"00003484",
+3365 => x"0000348c",
+3366 => x"0000348c",
+3367 => x"00003494",
+3368 => x"00003494",
+3369 => x"0000349c",
+3370 => x"0000349c",
+3371 => x"000034a4",
+3372 => x"000034a4",
+3373 => x"000034ac",
+3374 => x"000034ac",
+3375 => x"000034b4",
+3376 => x"000034b4",
+3377 => x"000034bc",
+3378 => x"000034bc",
+3379 => x"000034c4",
+3380 => x"000034c4",
+3381 => x"000034cc",
+3382 => x"000034cc",
+3383 => x"000034d4",
+3384 => x"000034d4",
+3385 => x"000034dc",
+3386 => x"000034dc",
+3387 => x"000034e4",
+3388 => x"000034e4",
+3389 => x"000034ec",
+3390 => x"000034ec",
+3391 => x"000034f4",
+3392 => x"000034f4",
+3393 => x"000034fc",
+3394 => x"000034fc",
+3395 => x"00003504",
+3396 => x"00003504",
+3397 => x"0000350c",
+3398 => x"0000350c",
+3399 => x"00003514",
+3400 => x"00003514",
+3401 => x"0000351c",
+3402 => x"0000351c",
+3403 => x"00003524",
+3404 => x"00003524",
+3405 => x"0000352c",
+3406 => x"0000352c",
+3407 => x"00003534",
+3408 => x"00003534",
+3409 => x"0000353c",
+3410 => x"0000353c",
+3411 => x"00003544",
+3412 => x"00003544",
+3413 => x"0000354c",
+3414 => x"0000354c",
+3415 => x"00003554",
+3416 => x"00003554",
+3417 => x"0000355c",
+3418 => x"0000355c",
+3419 => x"00003564",
+3420 => x"00003564",
+3421 => x"0000356c",
+3422 => x"0000356c",
+3423 => x"00003580",
+3424 => x"00000000",
+3425 => x"000037e8",
+3426 => x"00003844",
+3427 => x"000038a0",
+3428 => x"00000000",
+3429 => x"00000000",
+3430 => x"00000000",
+3431 => x"00000000",
+3432 => x"00000000",
+3433 => x"00000000",
+3434 => x"00000000",
+3435 => x"00000000",
+3436 => x"00000000",
+3437 => x"00003100",
+3438 => x"00000000",
+3439 => x"00000000",
+3440 => x"00000000",
+3441 => x"00000000",
+3442 => x"00000000",
+3443 => x"00000000",
+3444 => x"00000000",
+3445 => x"00000000",
+3446 => x"00000000",
+3447 => x"00000000",
+3448 => x"00000000",
+3449 => x"00000000",
+3450 => x"00000000",
+3451 => x"00000000",
+3452 => x"00000000",
+3453 => x"00000000",
+3454 => x"00000000",
+3455 => x"00000000",
+3456 => x"00000000",
+3457 => x"00000000",
+3458 => x"00000000",
+3459 => x"00000000",
+3460 => x"00000000",
+3461 => x"00000000",
+3462 => x"00000000",
+3463 => x"00000000",
+3464 => x"00000000",
+3465 => x"00000000",
+3466 => x"00000001",
+3467 => x"330eabcd",
+3468 => x"1234e66d",
+3469 => x"deec0005",
+3470 => x"000b0000",
+3471 => x"00000000",
+3472 => x"00000000",
+3473 => x"00000000",
+3474 => x"00000000",
+3475 => x"00000000",
+3476 => x"00000000",
+3477 => x"00000000",
+3478 => x"00000000",
+3479 => x"00000000",
+3480 => x"00000000",
+3481 => x"00000000",
+3482 => x"00000000",
+3483 => x"00000000",
+3484 => x"00000000",
+3485 => x"00000000",
+3486 => x"00000000",
+3487 => x"00000000",
+3488 => x"00000000",
+3489 => x"00000000",
+3490 => x"00000000",
+3491 => x"00000000",
+3492 => x"00000000",
+3493 => x"00000000",
+3494 => x"00000000",
+3495 => x"00000000",
+3496 => x"00000000",
+3497 => x"00000000",
+3498 => x"00000000",
+3499 => x"00000000",
+3500 => x"00000000",
+3501 => x"00000000",
+3502 => x"00000000",
+3503 => x"00000000",
+3504 => x"00000000",
+3505 => x"00000000",
+3506 => x"00000000",
+3507 => x"00000000",
+3508 => x"00000000",
+3509 => x"00000000",
+3510 => x"00000000",
+3511 => x"00000000",
+3512 => x"00000000",
+3513 => x"00000000",
+3514 => x"00000000",
+3515 => x"00000000",
+3516 => x"00000000",
+3517 => x"00000000",
+3518 => x"00000000",
+3519 => x"00000000",
+3520 => x"00000000",
+3521 => x"00000000",
+3522 => x"00000000",
+3523 => x"00000000",
+3524 => x"00000000",
+3525 => x"00000000",
+3526 => x"00000000",
+3527 => x"00000000",
+3528 => x"00000000",
+3529 => x"00000000",
+3530 => x"00000000",
+3531 => x"00000000",
+3532 => x"00000000",
+3533 => x"00000000",
+3534 => x"00000000",
+3535 => x"00000000",
+3536 => x"00000000",
+3537 => x"00000000",
+3538 => x"00000000",
+3539 => x"00000000",
+3540 => x"00000000",
+3541 => x"00000000",
+3542 => x"00000000",
+3543 => x"00000000",
+3544 => x"00000000",
+3545 => x"00000000",
+3546 => x"00000000",
+3547 => x"00000000",
+3548 => x"00000000",
+3549 => x"00000000",
+3550 => x"00000000",
+3551 => x"00000000",
+3552 => x"00000000",
+3553 => x"00000000",
+3554 => x"00000000",
+3555 => x"00000000",
+3556 => x"00000000",
+3557 => x"00000000",
+3558 => x"00000000",
+3559 => x"00000000",
+3560 => x"00000000",
+3561 => x"00000000",
+3562 => x"00000000",
+3563 => x"00000000",
+3564 => x"00000000",
+3565 => x"00000000",
+3566 => x"00000000",
+3567 => x"00000000",
+3568 => x"00000000",
+3569 => x"00000000",
+3570 => x"00000000",
+3571 => x"00000000",
+3572 => x"00000000",
+3573 => x"00000000",
+3574 => x"00000000",
+3575 => x"00000000",
+3576 => x"00000000",
+3577 => x"00000000",
+3578 => x"00000000",
+3579 => x"00000000",
+3580 => x"00000000",
+3581 => x"00000000",
+3582 => x"00000000",
+3583 => x"00000000",
+3584 => x"00000000",
+3585 => x"00000000",
+3586 => x"00000000",
+3587 => x"00000000",
+3588 => x"00000000",
+3589 => x"00000000",
+3590 => x"00000000",
+3591 => x"00000000",
+3592 => x"00000000",
+3593 => x"00000000",
+3594 => x"00000000",
+3595 => x"00000000",
+3596 => x"00000000",
+3597 => x"00000000",
+3598 => x"00000000",
+3599 => x"00000000",
+3600 => x"00000000",
+3601 => x"00000000",
+3602 => x"00000000",
+3603 => x"00000000",
+3604 => x"00000000",
+3605 => x"00000000",
+3606 => x"00000000",
+3607 => x"00000000",
+3608 => x"00000000",
+3609 => x"00000000",
+3610 => x"00000000",
+3611 => x"00000000",
+3612 => x"00000000",
+3613 => x"00000000",
+3614 => x"00000000",
+3615 => x"00000000",
+3616 => x"00000000",
+3617 => x"00000000",
+3618 => x"00000000",
+3619 => x"00000000",
+3620 => x"00000000",
+3621 => x"00000000",
+3622 => x"00000000",
+3623 => x"00000000",
+3624 => x"00000000",
+3625 => x"00000000",
+3626 => x"00000000",
+3627 => x"00000000",
+3628 => x"00000000",
+3629 => x"00000000",
+3630 => x"00000000",
+3631 => x"00000000",
+3632 => x"00000000",
+3633 => x"00000000",
+3634 => x"00000000",
+3635 => x"00000000",
+3636 => x"00000000",
+3637 => x"00000000",
+3638 => x"00000000",
+3639 => x"00000000",
+3640 => x"00000000",
+3641 => x"00000000",
+3642 => x"00000000",
+3643 => x"00000000",
+3644 => x"00000000",
+3645 => x"00000000",
+3646 => x"00000000",
+3647 => x"00003104",
+3648 => x"ffffffff",
+3649 => x"00000000",
+3650 => x"ffffffff",
+3651 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then
+ report "write collision" severity failure;
+ end if;
+
+ if (memAWriteEnable = '1') then
+ ram(conv_integer(memAAddr)) := memAWrite;
+ memARead <= memAWrite;
+ else
+ memARead <= ram(conv_integer(memAAddr));
+ end if;
+ end if;
+end process;
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memBWriteEnable = '1') then
+ ram(conv_integer(memBAddr)) := memBWrite;
+ memBRead <= memBWrite;
+ else
+ memBRead <= ram(conv_integer(memBAddr));
+ end if;
+ end if;
+end process;
+
+
+
+
+end dualport_ram_arch;
diff --git a/zpu/hdl/zpu4/src/build.xml b/zpu/hdl/zpu4/src/build.xml
new file mode 100644
index 0000000..e1b268a
--- /dev/null
+++ b/zpu/hdl/zpu4/src/build.xml
@@ -0,0 +1,114 @@
+<!--
+
+FIX!!! start /b /wait /belownormal does not propagate return code..
+-->
+<project name="ZPU3" default="all" basedir=".">
+ <property name="chipname" value="ic300"/>
+ <property name="packagetype" value="xc3s400-ft256-4"/>
+
+
+ <description>eCosBoard firmware build file</description>
+
+ <target name="setuplibs">
+ <!-- N/A yet
+ <copy todir="../src">
+ <fileset dir="..\fpgalib\" includes="foo_top.ngc" />
+ </copy>
+ -->
+ </target>
+
+ <target name="setup">
+ <mkdir dir="..\reports"/>
+ <mkdir dir="..\syn"/>
+ <mkdir dir="..\ngo"/>
+ <mkdir dir="..\output"/>
+ <mkdir dir="..\tmp"/>
+ <mkdir dir="..\xst"/>
+ </target>
+
+ <target name="clean">
+ <delete dir="..\reports"/>
+ <delete dir="..\syn"/>
+ <delete dir="..\ngo"/>
+ <delete dir="..\output"/>
+ <delete dir="..\tmp"/>
+ <delete dir="..\xst"/>
+ </target>
+
+ <target name="synthesis" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c xst -intstyle ise -ifn xmake.xst -ofn ..\reports\1_synthesis.txt"/>
+ </exec>
+ </target>
+
+
+ <target name="translate" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c ngdbuild -intstyle ise -dd ..\ngo -uc ${chipname}.ucf -a -p ${packagetype} ..\syn\${chipname}.ngc ..\ngo\${chipname}.ngd"/>
+ </exec>
+ <move tofile="..\reports\2_translate.txt">
+ <fileset dir="..\ngo" includes="${chipname}.bld"/>
+ </move>
+ </target>
+
+ <target name="mapping" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c map -intstyle ise -p ${packagetype} -ol high -timing -detail -cm area -ignore_keep_hierarchy -pr b -k 6 -r -c 100 -tx off -o ..\ngo\${chipname}_map.ncd ..\ngo\${chipname}.ngd ..\ngo\${chipname}.pcf"/>
+ </exec>
+ <move tofile="..\reports\3_mapping.txt">
+ <fileset dir="..\ngo" includes="${chipname}_map.mrp"/>
+ </move>
+ </target>
+
+
+ <target name="placeandroute" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c par -w -intstyle ise -ol high -t 1 ..\ngo\${chipname}_map.ncd ..\ngo\${chipname}.ncd ..\ngo\${chipname}.pcf"/>
+ </exec>
+ <move tofile="..\reports\4_placeandroute.txt">
+ <fileset dir="..\ngo" includes="${chipname}.par"/>
+ </move>
+ <move tofile="..\reports\5_pads.txt">
+ <fileset dir="..\ngo" includes="${chipname}_pad.txt"/>
+ </move>
+ </target>
+
+
+ <target name="gentime" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c trce -intstyle ise -v 3 -l 3 -a -u 100 ..\ngo\${chipname}.ncd -o ..\reports\timing.twr ..\ngo\${chipname}.pcf"/>
+ </exec>
+ <delete file="..\reports\6_timing.txt"/>
+ <move tofile="..\reports\6_timing.txt">
+ <fileset dir="..\reports" includes="timing.twr"/>
+ </move>
+ </target>
+
+
+ <target name="genbit" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c bitgen -intstyle ise -w -f ${chipname}.bitgen ..\ngo\${chipname}.ncd"/>
+ </exec>
+ <move tofile="..\reports\7_bitgen.txt">
+ <fileset dir="..\ngo" includes="${chipname}.bgn"/>
+ </move>
+ </target>
+
+ <target name="copyfiles" depends="setup">
+ <copy todir="../output">
+ <fileset dir="..\ngo" includes="${chipname}.bin"/>
+ </copy>
+ <!--
+ <copy tofile="${workspace_loc}\firmware\board\xeddvifpgadata.rawdata">
+ <fileset dir="..\ngo" includes="${chipname}.bin"/>
+ </copy>
+ -->
+ </target>
+
+
+ <target name="all" depends="setuplibs,synthesis,translate,mapping,placeandroute,gentime,genbit,copyfiles">
+
+ </target>
+
+
+</project> \ No newline at end of file
diff --git a/zpu/hdl/zpu4/src/clocks.vhd b/zpu/hdl/zpu4/src/clocks.vhd
new file mode 100644
index 0000000..a352b3c
--- /dev/null
+++ b/zpu/hdl/zpu4/src/clocks.vhd
@@ -0,0 +1,246 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library UNISIM;
+use UNISIM.vcomponents.all;
+
+entity clocks is
+ port ( areset : in std_logic;
+ cpu_clk_p : in std_logic;
+ sdr_clk_fb_p : in std_logic;
+ cpu_clk : out std_logic;
+ cpu_clk_2x : out std_logic;
+ cpu_clk_4x : out std_logic;
+ ddr_in_clk : out std_logic;
+ ddr_in_clk_2x : out std_logic;
+ locked : out std_logic_vector(2 downto 0));
+end clocks;
+
+architecture behave of clocks is
+
+signal low : std_logic;
+
+signal cpu_clk_in : std_logic;
+signal sdr_clk_fb_in : std_logic;
+
+signal dcm_cpu1 : std_logic;
+signal dcm_cpu2 : std_logic;
+signal dcm_cpu2_dum : std_logic;
+signal dcm_cpu4 : std_logic;
+signal dcm_ddr2 : std_logic;
+signal dcm_ddr2_2x : std_logic;
+
+signal cpu_clk_int : std_logic;
+signal cpu_clk_2x_int : std_logic;
+signal cpu_clk_2x_dum_int : std_logic;
+signal cpu_clk_4x_int : std_logic;
+signal ddr_in_clk_int : std_logic;
+signal ddr_in_clk_2x_int : std_logic;
+
+signal dcm1_locked_del : std_logic;
+signal dcm2_locked_del : std_logic;
+signal dcm2_reset : std_logic;
+signal dcm3_reset : std_logic;
+
+signal locked_int : std_logic_vector(2 downto 0);
+signal del_addr : std_logic_vector(3 downto 0);
+
+begin
+
+ low <= '0';
+ del_addr <= "1111";
+
+ cpu_clk <= cpu_clk_int;
+ cpu_clk_2x <= cpu_clk_2x_int;
+ cpu_clk_4x <= cpu_clk_4x_int;
+ ddr_in_clk <= ddr_in_clk_int;
+ ddr_in_clk_2x <= ddr_in_clk_2x_int;
+ locked <= locked_int;
+
+
+ CPU_IBUFG:
+ IBUFG port map (
+ O => cpu_clk_in,
+ I => cpu_clk_p);
+
+ SDR_FB_IBUFG:
+ IBUFG port map (
+ O => sdr_clk_fb_in,
+ I => sdr_clk_fb_p);
+
+ dcm2_rst:
+ SRL16 generic map (
+ INIT => X"0000")
+ port map (
+ Q => dcm1_locked_del,
+ A0 => del_addr(0),
+ A1 => del_addr(1),
+ A2 => del_addr(2),
+ A3 => del_addr(3),
+ CLK => cpu_clk_int,
+ D => locked_int(0));
+
+ dcm2_reset <= not(dcm1_locked_del);
+
+ dcm3_rst:
+ SRL16 generic map (
+ INIT => X"0000")
+ port map (
+ Q => dcm2_locked_del,
+ A0 => del_addr(0),
+ A1 => del_addr(1),
+ A2 => del_addr(2),
+ A3 => del_addr(3),
+ CLK => cpu_clk_int,
+ D => locked_int(1));
+
+ dcm3_reset <= not(dcm2_locked_del);
+
+ cpu1_dcm:
+ DCM generic map (
+ CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+ -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
+ CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
+ CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
+ CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
+ CLKIN_PERIOD => 15.625, -- Specify period of input clock
+ CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
+ CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
+ DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
+ -- an integer from 0 to 15
+ DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
+ DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
+ DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
+ FACTORY_JF => X"8080", -- FACTORY JF Values
+ PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
+ STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
+ port map (
+ CLK0 => dcm_cpu1, -- 0 degree DCM CLK ouptput
+ CLK180 => open, -- 180 degree DCM CLK output
+ CLK270 => open, -- 270 degree DCM CLK output
+ CLK2X => dcm_cpu2, -- 2X DCM CLK output
+ CLK2X180 => open, -- 2X, 180 degree DCM CLK out
+ CLK90 => open, -- 90 degree DCM CLK output
+ CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
+ CLKFX => open, -- DCM CLK synthesis out (M/D)
+ CLKFX180 => open, -- 180 degree CLK synthesis out
+ LOCKED => locked_int(0), -- DCM LOCK status output
+ PSDONE => open, -- Dynamic phase adjust done output
+ STATUS => open, -- 8-bit DCM status bits output
+ CLKFB => cpu_clk_int, -- DCM clock feedback
+ CLKIN => cpu_clk_in, -- Clock input (from IBUFG, BUFG or DCM)
+ PSCLK => low, -- Dynamic phase adjust clock input
+ PSEN => low, -- Dynamic phase adjust enable input
+ PSINCDEC => low, -- Dynamic phase adjust increment/decrement
+ RST => areset); -- DCM asynchronous reset input
+
+ cpu2_dcm:
+ DCM generic map (
+ CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+ -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
+ CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
+ CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
+ CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
+ CLKIN_PERIOD => 7.8125, -- Specify period of input clock
+ CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
+ CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
+ DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
+ -- an integer from 0 to 15
+ DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
+ DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
+ DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
+ FACTORY_JF => X"8080", -- FACTORY JF Values
+ PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
+ STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
+ port map (
+ CLK0 => dcm_cpu2_dum, -- 0 degree DCM CLK ouptput
+ CLK180 => open, -- 180 degree DCM CLK output
+ CLK270 => open, -- 270 degree DCM CLK output
+ CLK2X => dcm_cpu4, -- 2X DCM CLK output
+ CLK2X180 => open, -- 2X, 180 degree DCM CLK out
+ CLK90 => open, -- 90 degree DCM CLK output
+ CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
+ CLKFX => open, -- DCM CLK synthesis out (M/D)
+ CLKFX180 => open, -- 180 degree CLK synthesis out
+ LOCKED => locked_int(1), -- DCM LOCK status output
+ PSDONE => open, -- Dynamic phase adjust done output
+ STATUS => open, -- 8-bit DCM status bits output
+ CLKFB => cpu_clk_2x_dum_int, -- DCM clock feedback
+ CLKIN => cpu_clk_2x_int, -- Clock input (from IBUFG, BUFG or DCM)
+ PSCLK => low, -- Dynamic phase adjust clock input
+ PSEN => low, -- Dynamic phase adjust enable input
+ PSINCDEC => low, -- Dynamic phase adjust increment/decrement
+ RST => dcm2_reset); -- DCM asynchronous reset input
+
+ ddr_read_dcm:
+ DCM generic map (
+ CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+ -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
+ CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
+ CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
+ CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
+ CLKIN_PERIOD => 7.8125, -- Specify period of input clock
+ CLKOUT_PHASE_SHIFT => "FIXED", -- Specify phase shift of NONE, FIXED or VARIABLE
+-- CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
+ CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
+ DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
+ -- an integer from 0 to 15
+ DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
+ DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
+ DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
+ FACTORY_JF => X"8080", -- FACTORY JF Values
+ PHASE_SHIFT => 103, -- Amount of fixed phase shift from -255 to 255
+-- PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
+ STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
+ port map (
+ CLK0 => dcm_ddr2, -- 0 degree DCM CLK ouptput
+ CLK180 => open, -- 180 degree DCM CLK output
+ CLK270 => open, -- 270 degree DCM CLK output
+ CLK2X => dcm_ddr2_2x, -- 2X DCM CLK output
+ CLK2X180 => open, -- 2X, 180 degree DCM CLK out
+ CLK90 => open, -- 90 degree DCM CLK output
+ CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
+ CLKFX => open, -- DCM CLK synthesis out (M/D)
+ CLKFX180 => open, -- 180 degree CLK synthesis out
+ LOCKED => locked_int(2), -- DCM LOCK status output
+ PSDONE => open, -- Dynamic phase adjust done output
+ STATUS => open, -- 8-bit DCM status bits output
+ CLKFB => ddr_in_clk_int, -- DCM clock feedback
+ CLKIN => sdr_clk_fb_in, -- Clock input (from IBUFG, BUFG or DCM)
+ PSCLK => low, -- Dynamic phase adjust clock input
+ PSEN => low, -- Dynamic phase adjust enable input
+ PSINCDEC => low, -- Dynamic phase adjust increment/decrement
+ RST => dcm3_reset); -- DCM asynchronous reset input
+
+ cpu1:
+ BUFG port map (
+ I => dcm_cpu1,
+ O => cpu_clk_int);
+
+ cpu2:
+ BUFG port map (
+ I => dcm_cpu2,
+ O => cpu_clk_2x_int);
+
+ cpu2_dum:
+ BUFG port map (
+ I => dcm_cpu2_dum,
+ O => cpu_clk_2x_dum_int);
+
+ cpu4:
+ BUFG port map (
+ I => dcm_cpu4,
+ O => cpu_clk_4x_int);
+
+ ddr_clk:
+ BUFG port map (
+ I => dcm_ddr2,
+ O => ddr_in_clk_int);
+
+ ddr_clk_2x:
+ BUFG port map (
+ I => dcm_ddr2_2x,
+ O => ddr_in_clk_2x_int);
+
+end behave; \ No newline at end of file
diff --git a/zpu/hdl/zpu4/src/dmipssmalltrace.do b/zpu/hdl/zpu4/src/dmipssmalltrace.do
new file mode 100644
index 0000000..eb4c6fe
--- /dev/null
+++ b/zpu/hdl/zpu4/src/dmipssmalltrace.do
@@ -0,0 +1,26 @@
+set BreakOnAssertion 1
+vlib work
+
+vcom -93 -explicit zpu_config_trace.vhd
+vcom -93 -explicit zpupkg.vhd
+vcom -93 -explicit txt_util.vhd
+vcom -93 -explicit sim_fpga_top.vhd
+vcom -93 -explicit zpu_core_small.vhd
+vcom -93 -explicit bram_dmips.vhd
+vcom -93 -explicit dram_dmips.vhd
+vcom -93 -explicit timer.vhd
+vcom -93 -explicit io.vhd
+vcom -93 -explicit trace.vhd
+
+
+vsim fpga_top
+view wave
+
+add wave -recursive fpga_top/zpu/*
+#--add wave -recursive fpga_top/ioMap/*
+#add wave -recursive fpga_top/*
+view structure
+
+
+# run ZPU
+run 5 ms
diff --git a/zpu/hdl/zpu4/src/dmipstrace.do b/zpu/hdl/zpu4/src/dmipstrace.do
new file mode 100644
index 0000000..8d5f430
--- /dev/null
+++ b/zpu/hdl/zpu4/src/dmipstrace.do
@@ -0,0 +1,25 @@
+set BreakOnAssertion 1
+vlib work
+
+vcom -93 -explicit zpu_config_trace.vhd
+vcom -93 -explicit zpupkg.vhd
+vcom -93 -explicit txt_util.vhd
+vcom -93 -explicit sim_fpga_top.vhd
+vcom -93 -explicit zpu_core.vhd
+vcom -93 -explicit dram_dmips.vhd
+vcom -93 -explicit timer.vhd
+vcom -93 -explicit io.vhd
+vcom -93 -explicit trace.vhd
+
+
+vsim fpga_top
+view wave
+
+add wave -recursive fpga_top/zpu/*
+#--add wave -recursive fpga_top/ioMap/*
+#add wave -recursive fpga_top/*
+view structure
+
+
+# run ZPU
+run 5 ms
diff --git a/zpu/hdl/zpu4/src/dmipstraceintstack.do b/zpu/hdl/zpu4/src/dmipstraceintstack.do
new file mode 100644
index 0000000..b2addb4
--- /dev/null
+++ b/zpu/hdl/zpu4/src/dmipstraceintstack.do
@@ -0,0 +1,25 @@
+set BreakOnAssertion 1
+vlib work
+
+vcom -93 -explicit zpu_config_trace.vhd
+vcom -93 -explicit zpupkg.vhd
+vcom -93 -explicit txt_util.vhd
+vcom -93 -explicit sim_fpga_top.vhd
+vcom -93 -explicit zpu_core_intstack.vhd
+vcom -93 -explicit dram_dmips.vhd
+vcom -93 -explicit timer.vhd
+vcom -93 -explicit io.vhd
+vcom -93 -explicit trace.vhd
+
+
+vsim fpga_top
+view wave
+
+add wave -recursive fpga_top/zpu/*
+#--add wave -recursive fpga_top/ioMap/*
+#add wave -recursive fpga_top/*
+view structure
+
+
+# run ZPU
+run 5 ms
diff --git a/zpu/hdl/zpu4/src/dram_dmips.vhd b/zpu/hdl/zpu4/src/dram_dmips.vhd
new file mode 100644
index 0000000..e63a27a
--- /dev/null
+++ b/zpu/hdl/zpu4/src/dram_dmips.vhd
@@ -0,0 +1,3702 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity dram is
+port (clk : in std_logic;
+areset : std_logic;
+ mem_writeEnable : in std_logic;
+ mem_readEnable : in std_logic;
+ mem_addr : in std_logic_vector(maxAddrBit downto 0);
+ mem_write : in std_logic_vector(wordSize-1 downto 0);
+ mem_read : out std_logic_vector(wordSize-1 downto 0);
+ mem_busy : out std_logic;
+ mem_writeMask : in std_logic_vector(wordBytes-1 downto 0));
+end dram;
+
+architecture dram_arch of dram is
+
+
+type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+0 => x"0b0b0b0b",
+1 => x"80700b0b",
+2 => x"80e2a40c",
+3 => x"3a0b0b80",
+4 => x"c6fc0400",
+5 => x"00000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"80c7c32d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b2a83",
+20 => x"ffff0652",
+21 => x"04000000",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b2b0906",
+29 => x"7383ffff",
+30 => x"0b0b0b0b",
+31 => x"83a70400",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"53510400",
+38 => x"00000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"51040000",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"53510400",
+55 => x"00000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"51040000",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"00000000",
+65 => x"00000000",
+66 => x"00000000",
+67 => x"00000000",
+68 => x"00000000",
+69 => x"00000000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"0b0b0b88",
+73 => x"c4040000",
+74 => x"00000000",
+75 => x"00000000",
+76 => x"00000000",
+77 => x"00000000",
+78 => x"00000000",
+79 => x"00000000",
+80 => x"720a722b",
+81 => x"0a535104",
+82 => x"00000000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a7",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"06075351",
+101 => x"04000000",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"71715351",
+105 => x"020d0406",
+106 => x"73830609",
+107 => x"81058205",
+108 => x"832b0b2b",
+109 => x"0772fc06",
+110 => x"0c515104",
+111 => x"00000000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"51040000",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"53510400",
+125 => x"00000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"52040000",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"05055351",
+138 => x"04000000",
+139 => x"00000000",
+140 => x"00000000",
+141 => x"00000000",
+142 => x"00000000",
+143 => x"00000000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07535104",
+147 => x"00000000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"04000000",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b80e2",
+162 => x"90738306",
+163 => x"10100508",
+164 => x"060b0b0b",
+165 => x"88aa0400",
+166 => x"00000000",
+167 => x"00000000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0baf",
+171 => x"ac2d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c510400",
+175 => x"00000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0baf",
+179 => x"f02d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c510400",
+183 => x"00000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70547106",
+188 => x"73097274",
+189 => x"05ff0506",
+190 => x"07515151",
+191 => x"04000000",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"05705471",
+196 => x"06730972",
+197 => x"7405ff05",
+198 => x"06075151",
+199 => x"51040000",
+200 => x"05ff0504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"80e2a00c",
+210 => x"51040000",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"71810552",
+217 => x"04000000",
+218 => x"00000000",
+219 => x"00000000",
+220 => x"00000000",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"04000000",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"717105ff",
+249 => x"05715351",
+250 => x"020d0400",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"83d93f80",
+257 => x"cbcf3f04",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10101053",
+266 => x"51047381",
+267 => x"ff067383",
+268 => x"06098105",
+269 => x"83051010",
+270 => x"102b0772",
+271 => x"fc060c51",
+272 => x"51043c04",
+273 => x"72728072",
+274 => x"8106ff05",
+275 => x"09720605",
+276 => x"71105272",
+277 => x"0a100a53",
+278 => x"72ed3851",
+279 => x"51535104",
+280 => x"ff3d0d0b",
+281 => x"0b80f294",
+282 => x"08528412",
+283 => x"08708106",
+284 => x"515170f6",
+285 => x"38710881",
+286 => x"ff06800c",
+287 => x"833d0d04",
+288 => x"ff3d0d0b",
+289 => x"0b80f294",
+290 => x"08528412",
+291 => x"08700a10",
+292 => x"0a708106",
+293 => x"51515170",
+294 => x"f1387372",
+295 => x"0c833d0d",
+296 => x"0480e2a0",
+297 => x"08802ea8",
+298 => x"38838080",
+299 => x"0b0b0b80",
+300 => x"f2940c82",
+301 => x"a0800b0b",
+302 => x"0b80f298",
+303 => x"0c829080",
+304 => x"0b80f2a8",
+305 => x"0c0b0b80",
+306 => x"f29c0b80",
+307 => x"f2ac0c04",
+308 => x"f8808080",
+309 => x"a40b0b0b",
+310 => x"80f2940c",
+311 => x"f8808082",
+312 => x"800b0b0b",
+313 => x"80f2980c",
+314 => x"f8808084",
+315 => x"800b80f2",
+316 => x"a80cf880",
+317 => x"8080940b",
+318 => x"80f2ac0c",
+319 => x"f8808080",
+320 => x"9c0b80f2",
+321 => x"a40cf880",
+322 => x"8080a00b",
+323 => x"80f2b00c",
+324 => x"04f23d0d",
+325 => x"600b0b80",
+326 => x"f2980856",
+327 => x"5d82750c",
+328 => x"8059805a",
+329 => x"800b8f3d",
+330 => x"71101017",
+331 => x"70085957",
+332 => x"5d5b8076",
+333 => x"81ff067c",
+334 => x"832b5658",
+335 => x"5276537b",
+336 => x"519af33f",
+337 => x"7d7f7a72",
+338 => x"077c7207",
+339 => x"71716081",
+340 => x"05415f5d",
+341 => x"5b595755",
+342 => x"7a8724bb",
+343 => x"380b0b80",
+344 => x"f298087b",
+345 => x"10101170",
+346 => x"08585155",
+347 => x"807681ff",
+348 => x"067c832b",
+349 => x"56585276",
+350 => x"537b519a",
+351 => x"b93f7d7f",
+352 => x"7a72077c",
+353 => x"72077171",
+354 => x"60810541",
+355 => x"5f5d5b59",
+356 => x"5755877b",
+357 => x"25c73876",
+358 => x"7d0c7784",
+359 => x"1e0c7c80",
+360 => x"0c903d0d",
+361 => x"04ff3d0d",
+362 => x"80f2a033",
+363 => x"5170a738",
+364 => x"80e2ac08",
+365 => x"70085252",
+366 => x"70802e94",
+367 => x"38841280",
+368 => x"e2ac0c70",
+369 => x"2d80e2ac",
+370 => x"08700852",
+371 => x"5270ee38",
+372 => x"810b80f2",
+373 => x"a034833d",
+374 => x"0d040480",
+375 => x"3d0d0b0b",
+376 => x"80f29008",
+377 => x"802e8e38",
+378 => x"0b0b0b0b",
+379 => x"800b802e",
+380 => x"09810685",
+381 => x"38823d0d",
+382 => x"040b0b80",
+383 => x"f290510b",
+384 => x"0b0bf3fc",
+385 => x"3f823d0d",
+386 => x"0404ff3d",
+387 => x"0d028f05",
+388 => x"3352718a",
+389 => x"2e8a3871",
+390 => x"51fce53f",
+391 => x"833d0d04",
+392 => x"8d51fcdc",
+393 => x"3f7151fc",
+394 => x"d73f833d",
+395 => x"0d04ce3d",
+396 => x"0db53d70",
+397 => x"70840552",
+398 => x"088c8a5c",
+399 => x"56a53d5e",
+400 => x"5c807570",
+401 => x"81055733",
+402 => x"765b5558",
+403 => x"73782e80",
+404 => x"c1388e3d",
+405 => x"5b73a52e",
+406 => x"09810680",
+407 => x"c5387870",
+408 => x"81055a33",
+409 => x"547380e4",
+410 => x"2e81b638",
+411 => x"7380e424",
+412 => x"80c63873",
+413 => x"80e32ea1",
+414 => x"388052a5",
+415 => x"51792d80",
+416 => x"52735179",
+417 => x"2d821858",
+418 => x"78708105",
+419 => x"5a335473",
+420 => x"c4387780",
+421 => x"0cb43d0d",
+422 => x"047b841d",
+423 => x"83123356",
+424 => x"5d578052",
+425 => x"7351792d",
+426 => x"81187970",
+427 => x"81055b33",
+428 => x"555873ff",
+429 => x"a038db39",
+430 => x"7380f32e",
+431 => x"098106ff",
+432 => x"b8387b84",
+433 => x"1d710859",
+434 => x"5d568077",
+435 => x"33555673",
+436 => x"762e8d38",
+437 => x"81167018",
+438 => x"70335755",
+439 => x"5674f538",
+440 => x"ff165580",
+441 => x"7625ffa0",
+442 => x"38767081",
+443 => x"05583354",
+444 => x"80527351",
+445 => x"792d8118",
+446 => x"75ff1757",
+447 => x"57588076",
+448 => x"25ff8538",
+449 => x"76708105",
+450 => x"58335480",
+451 => x"52735179",
+452 => x"2d811875",
+453 => x"ff175757",
+454 => x"58758024",
+455 => x"cc38fee8",
+456 => x"397b841d",
+457 => x"71087071",
+458 => x"9f2c5953",
+459 => x"595d5680",
+460 => x"75248195",
+461 => x"38757d7c",
+462 => x"58565480",
+463 => x"5773772e",
+464 => x"098106b6",
+465 => x"38b07b34",
+466 => x"02b50556",
+467 => x"7a762e97",
+468 => x"38ff1656",
+469 => x"75337570",
+470 => x"81055734",
+471 => x"8117577a",
+472 => x"762e0981",
+473 => x"06eb3880",
+474 => x"7534767d",
+475 => x"ff125758",
+476 => x"56758024",
+477 => x"fef338fe",
+478 => x"8f398a52",
+479 => x"7351a0f0",
+480 => x"3f80080b",
+481 => x"0b80d484",
+482 => x"05337670",
+483 => x"81055834",
+484 => x"8a527351",
+485 => x"a0963f80",
+486 => x"08548008",
+487 => x"802effac",
+488 => x"388a5273",
+489 => x"51a0c93f",
+490 => x"80080b0b",
+491 => x"80d48405",
+492 => x"33767081",
+493 => x"0558348a",
+494 => x"5273519f",
+495 => x"ef3f8008",
+496 => x"548008ff",
+497 => x"b538ff84",
+498 => x"39745276",
+499 => x"53b43dff",
+500 => x"b8055195",
+501 => x"b63fa33d",
+502 => x"0856fed9",
+503 => x"39803d0d",
+504 => x"80c10b81",
+505 => x"c0f43480",
+506 => x"0b81c2d0",
+507 => x"0c70800c",
+508 => x"823d0d04",
+509 => x"ff3d0d80",
+510 => x"0b81c0f4",
+511 => x"33525270",
+512 => x"80c12e99",
+513 => x"387181c2",
+514 => x"d0080781",
+515 => x"c2d00c80",
+516 => x"c20b81c0",
+517 => x"f8347080",
+518 => x"0c833d0d",
+519 => x"04810b81",
+520 => x"c2d00807",
+521 => x"81c2d00c",
+522 => x"80c20b81",
+523 => x"c0f83470",
+524 => x"800c833d",
+525 => x"0d04fd3d",
+526 => x"0d757008",
+527 => x"8a055353",
+528 => x"81c0f433",
+529 => x"517080c1",
+530 => x"2e8b3873",
+531 => x"f3387080",
+532 => x"0c853d0d",
+533 => x"04ff1270",
+534 => x"81c0f008",
+535 => x"31740c80",
+536 => x"0c853d0d",
+537 => x"04fc3d0d",
+538 => x"81c0fc08",
+539 => x"5574802e",
+540 => x"8c387675",
+541 => x"08710c81",
+542 => x"c0fc0856",
+543 => x"548c1553",
+544 => x"81c0f008",
+545 => x"528a5190",
+546 => x"f03f7380",
+547 => x"0c863d0d",
+548 => x"04fb3d0d",
+549 => x"77700856",
+550 => x"56b05381",
+551 => x"c0fc0852",
+552 => x"7451acb4",
+553 => x"3f850b8c",
+554 => x"170c850b",
+555 => x"8c160c75",
+556 => x"08750c81",
+557 => x"c0fc0854",
+558 => x"73802e8a",
+559 => x"38730875",
+560 => x"0c81c0fc",
+561 => x"08548c14",
+562 => x"5381c0f0",
+563 => x"08528a51",
+564 => x"90a73f84",
+565 => x"1508ad38",
+566 => x"860b8c16",
+567 => x"0c881552",
+568 => x"88160851",
+569 => x"8fb33f81",
+570 => x"c0fc0870",
+571 => x"08760c54",
+572 => x"8c157054",
+573 => x"548a5273",
+574 => x"08518ffd",
+575 => x"3f73800c",
+576 => x"873d0d04",
+577 => x"750854b0",
+578 => x"53735275",
+579 => x"51abc93f",
+580 => x"73800c87",
+581 => x"3d0d04d9",
+582 => x"3d0db051",
+583 => x"9eeb3f80",
+584 => x"0881c0ec",
+585 => x"0cb0519e",
+586 => x"e03f8008",
+587 => x"81c0fc0c",
+588 => x"81c0ec08",
+589 => x"80080c80",
+590 => x"0b800884",
+591 => x"050c820b",
+592 => x"80088805",
+593 => x"0ca80b80",
+594 => x"088c050c",
+595 => x"9f530b0b",
+596 => x"80d49052",
+597 => x"80089005",
+598 => x"51aafd3f",
+599 => x"a13d5e9f",
+600 => x"530b0b80",
+601 => x"d4b0527d",
+602 => x"51aaed3f",
+603 => x"8a0b80ff",
+604 => x"b00c0b0b",
+605 => x"80ded451",
+606 => x"f9b43f0b",
+607 => x"0b80d4d0",
+608 => x"51f9ab3f",
+609 => x"0b0b80de",
+610 => x"d451f9a2",
+611 => x"3f80e2b4",
+612 => x"08802e8a",
+613 => x"cf380b0b",
+614 => x"80d58051",
+615 => x"f9903f0b",
+616 => x"0b80ded4",
+617 => x"51f9873f",
+618 => x"80e2b008",
+619 => x"520b0b80",
+620 => x"d5ac51f8",
+621 => x"f93f80f2",
+622 => x"cc51bbf8",
+623 => x"3f810b9a",
+624 => x"3d5e5b80",
+625 => x"0b80e2b0",
+626 => x"082582d6",
+627 => x"38903d5f",
+628 => x"80c10b81",
+629 => x"c0f43481",
+630 => x"0b81c2d0",
+631 => x"0c80c20b",
+632 => x"81c0f834",
+633 => x"8240835a",
+634 => x"9f530b0b",
+635 => x"80d5dc52",
+636 => x"7c51a9e4",
+637 => x"3f814180",
+638 => x"7d537e52",
+639 => x"568f9e3f",
+640 => x"8008762e",
+641 => x"09810683",
+642 => x"38815675",
+643 => x"81c2d00c",
+644 => x"7f705856",
+645 => x"758325a2",
+646 => x"38751010",
+647 => x"16fd0542",
+648 => x"a93dffa4",
+649 => x"05538352",
+650 => x"76518dcd",
+651 => x"3f7f8105",
+652 => x"70417058",
+653 => x"56837624",
+654 => x"e0386154",
+655 => x"755380f2",
+656 => x"d45281c1",
+657 => x"88518dc1",
+658 => x"3f81c0fc",
+659 => x"08700858",
+660 => x"58b05377",
+661 => x"527651a8",
+662 => x"ff3f850b",
+663 => x"8c190c85",
+664 => x"0b8c180c",
+665 => x"7708770c",
+666 => x"81c0fc08",
+667 => x"5675802e",
+668 => x"8a387508",
+669 => x"770c81c0",
+670 => x"fc08568c",
+671 => x"165381c0",
+672 => x"f008528a",
+673 => x"518cf23f",
+674 => x"84170888",
+675 => x"e038860b",
+676 => x"8c180c88",
+677 => x"17528818",
+678 => x"08518bfd",
+679 => x"3f81c0fc",
+680 => x"08700878",
+681 => x"0c568c17",
+682 => x"7054598a",
+683 => x"52780851",
+684 => x"8cc73f80",
+685 => x"c10b81c0",
+686 => x"f8335757",
+687 => x"767626a2",
+688 => x"3880c352",
+689 => x"76518dab",
+690 => x"3f800861",
+691 => x"2e8aec38",
+692 => x"81177081",
+693 => x"ff0681c0",
+694 => x"f8335858",
+695 => x"58757727",
+696 => x"e0387960",
+697 => x"29627054",
+698 => x"71535b59",
+699 => x"99be3f80",
+700 => x"0840787a",
+701 => x"31708729",
+702 => x"80083180",
+703 => x"088a0581",
+704 => x"c0f43381",
+705 => x"c0f0085e",
+706 => x"5b525a56",
+707 => x"7780c12e",
+708 => x"8ad8387b",
+709 => x"f738811b",
+710 => x"5b80e2b0",
+711 => x"087b25fd",
+712 => x"af3881c0",
+713 => x"e451b98c",
+714 => x"3f0b0b80",
+715 => x"d5fc51f5",
+716 => x"fd3f0b0b",
+717 => x"80ded451",
+718 => x"f5f43f0b",
+719 => x"0b80d68c",
+720 => x"51f5eb3f",
+721 => x"0b0b80de",
+722 => x"d451f5e2",
+723 => x"3f81c0f0",
+724 => x"08520b0b",
+725 => x"80d6c451",
+726 => x"f5d43f85",
+727 => x"520b0b80",
+728 => x"d6e051f5",
+729 => x"c93f81c2",
+730 => x"d008520b",
+731 => x"0b80d6fc",
+732 => x"51f5bb3f",
+733 => x"81520b0b",
+734 => x"80d6e051",
+735 => x"f5b03f81",
+736 => x"c0f43352",
+737 => x"0b0b80d7",
+738 => x"9851f5a2",
+739 => x"3f80c152",
+740 => x"0b0b80d7",
+741 => x"b451f596",
+742 => x"3f81c0f8",
+743 => x"33520b0b",
+744 => x"80d7d051",
+745 => x"f5883f80",
+746 => x"c2520b0b",
+747 => x"80d7b451",
+748 => x"f4fc3f81",
+749 => x"c1a80852",
+750 => x"0b0b80d7",
+751 => x"ec51f4ee",
+752 => x"3f87520b",
+753 => x"0b80d6e0",
+754 => x"51f4e33f",
+755 => x"80ffb008",
+756 => x"520b0b80",
+757 => x"d88851f4",
+758 => x"d53f0b0b",
+759 => x"80d8a451",
+760 => x"f4cc3f0b",
+761 => x"0b80d8d0",
+762 => x"51f4c33f",
+763 => x"81c0fc08",
+764 => x"7008535a",
+765 => x"0b0b80d8",
+766 => x"dc51f4b2",
+767 => x"3f0b0b80",
+768 => x"d8f851f4",
+769 => x"a93f81c0",
+770 => x"fc088411",
+771 => x"0853560b",
+772 => x"0b80d9ac",
+773 => x"51f4973f",
+774 => x"80520b0b",
+775 => x"80d6e051",
+776 => x"f48c3f81",
+777 => x"c0fc0888",
+778 => x"11085358",
+779 => x"0b0b80d9",
+780 => x"c851f3fa",
+781 => x"3f82520b",
+782 => x"0b80d6e0",
+783 => x"51f3ef3f",
+784 => x"81c0fc08",
+785 => x"8c110853",
+786 => x"570b0b80",
+787 => x"d9e451f3",
+788 => x"dd3f9152",
+789 => x"0b0b80d6",
+790 => x"e051f3d2",
+791 => x"3f81c0fc",
+792 => x"08900552",
+793 => x"0b0b80da",
+794 => x"8051f3c2",
+795 => x"3f0b0b80",
+796 => x"da9c51f3",
+797 => x"b93f0b0b",
+798 => x"80dad451",
+799 => x"f3b03f81",
+800 => x"c0ec0870",
+801 => x"08535f0b",
+802 => x"0b80d8dc",
+803 => x"51f39f3f",
+804 => x"0b0b80da",
+805 => x"e851f396",
+806 => x"3f81c0ec",
+807 => x"08841108",
+808 => x"535b0b0b",
+809 => x"80d9ac51",
+810 => x"f3843f80",
+811 => x"520b0b80",
+812 => x"d6e051f2",
+813 => x"f93f81c0",
+814 => x"ec088811",
+815 => x"08535c0b",
+816 => x"0b80d9c8",
+817 => x"51f2e73f",
+818 => x"81520b0b",
+819 => x"80d6e051",
+820 => x"f2dc3f81",
+821 => x"c0ec088c",
+822 => x"1108535a",
+823 => x"0b0b80d9",
+824 => x"e451f2ca",
+825 => x"3f92520b",
+826 => x"0b80d6e0",
+827 => x"51f2bf3f",
+828 => x"81c0ec08",
+829 => x"9005520b",
+830 => x"0b80da80",
+831 => x"51f2af3f",
+832 => x"0b0b80da",
+833 => x"9c51f2a6",
+834 => x"3f7f520b",
+835 => x"0b80dba8",
+836 => x"51f29b3f",
+837 => x"85520b0b",
+838 => x"80d6e051",
+839 => x"f2903f78",
+840 => x"520b0b80",
+841 => x"dbc451f2",
+842 => x"853f8d52",
+843 => x"0b0b80d6",
+844 => x"e051f1fa",
+845 => x"3f61520b",
+846 => x"0b80dbe0",
+847 => x"51f1ef3f",
+848 => x"87520b0b",
+849 => x"80d6e051",
+850 => x"f1e43f60",
+851 => x"520b0b80",
+852 => x"dbfc51f1",
+853 => x"d93f8152",
+854 => x"0b0b80d6",
+855 => x"e051f1ce",
+856 => x"3f7d520b",
+857 => x"0b80dc98",
+858 => x"51f1c33f",
+859 => x"0b0b80dc",
+860 => x"b451f1ba",
+861 => x"3f7c520b",
+862 => x"0b80dcec",
+863 => x"51f1af3f",
+864 => x"0b0b80dd",
+865 => x"8851f1a6",
+866 => x"3f0b0b80",
+867 => x"ded451f1",
+868 => x"9d3f81c0",
+869 => x"e40881c0",
+870 => x"e80880f2",
+871 => x"cc0880f2",
+872 => x"d0087271",
+873 => x"31707426",
+874 => x"75743170",
+875 => x"723180f2",
+876 => x"c40c4444",
+877 => x"80f2c80c",
+878 => x"80f2c808",
+879 => x"560b0b80",
+880 => x"ddc0555c",
+881 => x"595758f0",
+882 => x"e53f80f2",
+883 => x"c4085680",
+884 => x"762582b1",
+885 => x"3880e2b0",
+886 => x"0870719f",
+887 => x"2c9a3d53",
+888 => x"565680f2",
+889 => x"c40880f2",
+890 => x"c8084153",
+891 => x"7f547052",
+892 => x"5a8a8d3f",
+893 => x"66685f80",
+894 => x"f2b40c7d",
+895 => x"80f2b80c",
+896 => x"80e2b008",
+897 => x"709f2c58",
+898 => x"568058bd",
+899 => x"84c07855",
+900 => x"55765275",
+901 => x"53795187",
+902 => x"f33f953d",
+903 => x"80f2c408",
+904 => x"80f2c808",
+905 => x"41557f56",
+906 => x"67694053",
+907 => x"7e547052",
+908 => x"5c89cd3f",
+909 => x"64665e80",
+910 => x"f2bc0c7c",
+911 => x"80f2c00c",
+912 => x"80e2b008",
+913 => x"709f2c40",
+914 => x"58805783",
+915 => x"dceb9480",
+916 => x"7755557e",
+917 => x"5277537b",
+918 => x"5187b13f",
+919 => x"64665d5b",
+920 => x"805e8ddd",
+921 => x"7e555580",
+922 => x"f2c40880",
+923 => x"f2c80859",
+924 => x"52775379",
+925 => x"5187953f",
+926 => x"66684054",
+927 => x"7e557a52",
+928 => x"7b53a93d",
+929 => x"ffa80551",
+930 => x"88f63f62",
+931 => x"645e81c1",
+932 => x"800c7c81",
+933 => x"c1840c0b",
+934 => x"0b80ddd0",
+935 => x"51ef8f3f",
+936 => x"80f2b808",
+937 => x"520b0b80",
+938 => x"de8051ef",
+939 => x"813f0b0b",
+940 => x"80de8851",
+941 => x"eef83f80",
+942 => x"f2c00852",
+943 => x"0b0b80de",
+944 => x"8051eeea",
+945 => x"3f81c184",
+946 => x"08520b0b",
+947 => x"80deb851",
+948 => x"eedc3f0b",
+949 => x"0b80ded4",
+950 => x"51eed33f",
+951 => x"800b800c",
+952 => x"a93d0d04",
+953 => x"0b0b80de",
+954 => x"d851f5b0",
+955 => x"39770857",
+956 => x"b0537652",
+957 => x"77519fe0",
+958 => x"3f80c10b",
+959 => x"81c0f833",
+960 => x"5757f7b8",
+961 => x"39758a38",
+962 => x"80f2c808",
+963 => x"8126fdc5",
+964 => x"380b0b80",
+965 => x"df8851ee",
+966 => x"953f0b0b",
+967 => x"80dfc051",
+968 => x"ee8c3f0b",
+969 => x"0b80ded4",
+970 => x"51ee833f",
+971 => x"80e2b008",
+972 => x"70719f2c",
+973 => x"9a3d5356",
+974 => x"5680f2c4",
+975 => x"0880f2c8",
+976 => x"0841537f",
+977 => x"5470525a",
+978 => x"87b63f66",
+979 => x"685f80f2",
+980 => x"b40c7d80",
+981 => x"f2b80c80",
+982 => x"e2b00870",
+983 => x"9f2c5856",
+984 => x"8058bd84",
+985 => x"c0785555",
+986 => x"76527553",
+987 => x"7951859c",
+988 => x"3f953d80",
+989 => x"f2c40880",
+990 => x"f2c80841",
+991 => x"557f5667",
+992 => x"6940537e",
+993 => x"5470525c",
+994 => x"86f63f64",
+995 => x"665e80f2",
+996 => x"bc0c7c80",
+997 => x"f2c00c80",
+998 => x"e2b00870",
+999 => x"9f2c4058",
+1000 => x"805783dc",
+1001 => x"eb948077",
+1002 => x"55557e52",
+1003 => x"77537b51",
+1004 => x"84da3f64",
+1005 => x"665d5b80",
+1006 => x"5e8ddd7e",
+1007 => x"555580f2",
+1008 => x"c40880f2",
+1009 => x"c8085952",
+1010 => x"77537951",
+1011 => x"84be3f66",
+1012 => x"6840547e",
+1013 => x"557a527b",
+1014 => x"53a93dff",
+1015 => x"a8055186",
+1016 => x"9f3f6264",
+1017 => x"5e81c180",
+1018 => x"0c7c81c1",
+1019 => x"840c0b0b",
+1020 => x"80ddd051",
+1021 => x"ecb83f80",
+1022 => x"f2b80852",
+1023 => x"0b0b80de",
+1024 => x"8051ecaa",
+1025 => x"3f0b0b80",
+1026 => x"de8851ec",
+1027 => x"a13f80f2",
+1028 => x"c008520b",
+1029 => x"0b80de80",
+1030 => x"51ec933f",
+1031 => x"81c18408",
+1032 => x"520b0b80",
+1033 => x"deb851ec",
+1034 => x"853f0b0b",
+1035 => x"80ded451",
+1036 => x"ebfc3f80",
+1037 => x"0b800ca9",
+1038 => x"3d0d04a9",
+1039 => x"3dffa005",
+1040 => x"52805180",
+1041 => x"d43f9f53",
+1042 => x"0b0b80df",
+1043 => x"e0527c51",
+1044 => x"9d863f7a",
+1045 => x"7b81c0f0",
+1046 => x"0c811870",
+1047 => x"81ff0681",
+1048 => x"c0f83359",
+1049 => x"59595af4",
+1050 => x"f439ff16",
+1051 => x"707b3160",
+1052 => x"0c5c800b",
+1053 => x"811c5c5c",
+1054 => x"80e2b008",
+1055 => x"7b25f2d0",
+1056 => x"38f59f39",
+1057 => x"ff3d0d73",
+1058 => x"82327030",
+1059 => x"70720780",
+1060 => x"25800c52",
+1061 => x"52833d0d",
+1062 => x"04fe3d0d",
+1063 => x"74767153",
+1064 => x"54527182",
+1065 => x"2e833883",
+1066 => x"5171812e",
+1067 => x"9a388172",
+1068 => x"269f3871",
+1069 => x"822eb838",
+1070 => x"71842ea9",
+1071 => x"3870730c",
+1072 => x"70800c84",
+1073 => x"3d0d0480",
+1074 => x"e40b81c0",
+1075 => x"f008258b",
+1076 => x"3880730c",
+1077 => x"70800c84",
+1078 => x"3d0d0483",
+1079 => x"730c7080",
+1080 => x"0c843d0d",
+1081 => x"0482730c",
+1082 => x"70800c84",
+1083 => x"3d0d0481",
+1084 => x"730c7080",
+1085 => x"0c843d0d",
+1086 => x"04803d0d",
+1087 => x"74741482",
+1088 => x"05710c80",
+1089 => x"0c823d0d",
+1090 => x"04f73d0d",
+1091 => x"7b7d7f61",
+1092 => x"85127082",
+1093 => x"2b751170",
+1094 => x"74717084",
+1095 => x"05530c5a",
+1096 => x"5a5d5b76",
+1097 => x"0c7980f8",
+1098 => x"180c7986",
+1099 => x"12525758",
+1100 => x"5a5a7676",
+1101 => x"24993876",
+1102 => x"b329822b",
+1103 => x"79115153",
+1104 => x"76737084",
+1105 => x"05550c81",
+1106 => x"14547574",
+1107 => x"25f23876",
+1108 => x"81cc2919",
+1109 => x"fc110881",
+1110 => x"05fc120c",
+1111 => x"7a197008",
+1112 => x"9fa0130c",
+1113 => x"5856850b",
+1114 => x"81c0f00c",
+1115 => x"75800c8b",
+1116 => x"3d0d04fe",
+1117 => x"3d0d0293",
+1118 => x"05335180",
+1119 => x"02840597",
+1120 => x"05335452",
+1121 => x"70732e88",
+1122 => x"3871800c",
+1123 => x"843d0d04",
+1124 => x"7081c0f4",
+1125 => x"34810b80",
+1126 => x"0c843d0d",
+1127 => x"04f83d0d",
+1128 => x"7a7c5956",
+1129 => x"820b8319",
+1130 => x"55557416",
+1131 => x"70337533",
+1132 => x"5b515372",
+1133 => x"792e80c6",
+1134 => x"3880c10b",
+1135 => x"81168116",
+1136 => x"56565782",
+1137 => x"7525e338",
+1138 => x"ffa91770",
+1139 => x"81ff0655",
+1140 => x"59738226",
+1141 => x"83388755",
+1142 => x"81537680",
+1143 => x"d22e9838",
+1144 => x"77527551",
+1145 => x"9bc43f80",
+1146 => x"53728008",
+1147 => x"25893887",
+1148 => x"1581c0f0",
+1149 => x"0c815372",
+1150 => x"800c8a3d",
+1151 => x"0d047281",
+1152 => x"c0f43482",
+1153 => x"7525ffa2",
+1154 => x"38ffbd39",
+1155 => x"ef3d0d63",
+1156 => x"65675b42",
+1157 => x"79436769",
+1158 => x"59407741",
+1159 => x"5a805d80",
+1160 => x"5e617083",
+1161 => x"ffff0671",
+1162 => x"902a6270",
+1163 => x"83ffff06",
+1164 => x"71902a74",
+1165 => x"72297473",
+1166 => x"29757329",
+1167 => x"77742973",
+1168 => x"902a0572",
+1169 => x"11515856",
+1170 => x"535f5a57",
+1171 => x"5a585558",
+1172 => x"73732786",
+1173 => x"38848080",
+1174 => x"16567390",
+1175 => x"2a165b78",
+1176 => x"83ffff06",
+1177 => x"74848080",
+1178 => x"29055c7a",
+1179 => x"7c5a5d78",
+1180 => x"5e777f29",
+1181 => x"61782905",
+1182 => x"7d055d7c",
+1183 => x"7e567a0c",
+1184 => x"74841b0c",
+1185 => x"79800c93",
+1186 => x"3d0d04f9",
+1187 => x"3d0d797b",
+1188 => x"7d545872",
+1189 => x"59773079",
+1190 => x"70307072",
+1191 => x"079f2a73",
+1192 => x"71315a52",
+1193 => x"59777956",
+1194 => x"730c5373",
+1195 => x"84130c54",
+1196 => x"800c893d",
+1197 => x"0d04f93d",
+1198 => x"0d797b7d",
+1199 => x"7f565452",
+1200 => x"5472802e",
+1201 => x"a0387057",
+1202 => x"7158a073",
+1203 => x"31528072",
+1204 => x"25a13877",
+1205 => x"70742b57",
+1206 => x"70732a78",
+1207 => x"752b0756",
+1208 => x"51747653",
+1209 => x"5170740c",
+1210 => x"7184150c",
+1211 => x"73800c89",
+1212 => x"3d0d0480",
+1213 => x"56777230",
+1214 => x"2b557476",
+1215 => x"5351e639",
+1216 => x"e43d0d6e",
+1217 => x"a13d08a3",
+1218 => x"3d085957",
+1219 => x"5f80764d",
+1220 => x"774ea33d",
+1221 => x"08a53d08",
+1222 => x"574b754c",
+1223 => x"5e7d6c24",
+1224 => x"86fb3880",
+1225 => x"6a24878f",
+1226 => x"38696b58",
+1227 => x"566b6d5d",
+1228 => x"467b4775",
+1229 => x"44764564",
+1230 => x"6468685c",
+1231 => x"5c565674",
+1232 => x"81e73878",
+1233 => x"762782c7",
+1234 => x"387581ff",
+1235 => x"26832b55",
+1236 => x"83ffff76",
+1237 => x"278c3890",
+1238 => x"55fe800a",
+1239 => x"76278338",
+1240 => x"98557575",
+1241 => x"2a80e080",
+1242 => x"057033a0",
+1243 => x"77317131",
+1244 => x"57555774",
+1245 => x"802e9538",
+1246 => x"75752ba0",
+1247 => x"76317a77",
+1248 => x"2b7c722a",
+1249 => x"077c782b",
+1250 => x"5d5b5956",
+1251 => x"75902a76",
+1252 => x"83ffff06",
+1253 => x"71547a53",
+1254 => x"59578880",
+1255 => x"3f80085b",
+1256 => x"87ea3f80",
+1257 => x"08800879",
+1258 => x"297c902b",
+1259 => x"7c902a07",
+1260 => x"56565973",
+1261 => x"75279438",
+1262 => x"8008ff05",
+1263 => x"76155559",
+1264 => x"75742687",
+1265 => x"38747426",
+1266 => x"87b93876",
+1267 => x"52737531",
+1268 => x"5187c93f",
+1269 => x"80085587",
+1270 => x"b33f8008",
+1271 => x"80087929",
+1272 => x"7b83ffff",
+1273 => x"0677902b",
+1274 => x"07565957",
+1275 => x"73782796",
+1276 => x"388008ff",
+1277 => x"05761555",
+1278 => x"57757426",
+1279 => x"89387774",
+1280 => x"26777131",
+1281 => x"58567890",
+1282 => x"2b770758",
+1283 => x"805b7a40",
+1284 => x"77417f61",
+1285 => x"56547d80",
+1286 => x"d938737f",
+1287 => x"0c747f84",
+1288 => x"050c7e80",
+1289 => x"0c9e3d0d",
+1290 => x"0480705c",
+1291 => x"58747926",
+1292 => x"dd387481",
+1293 => x"ff26832b",
+1294 => x"577483ff",
+1295 => x"ff2682a5",
+1296 => x"3874772a",
+1297 => x"80e08005",
+1298 => x"7033a079",
+1299 => x"31713159",
+1300 => x"5c5d7682",
+1301 => x"b3387654",
+1302 => x"74792783",
+1303 => x"38815479",
+1304 => x"76277407",
+1305 => x"59815878",
+1306 => x"ffa23876",
+1307 => x"58805bff",
+1308 => x"9d397352",
+1309 => x"74539e3d",
+1310 => x"e80551fc",
+1311 => x"8e3f6769",
+1312 => x"567f0c74",
+1313 => x"7f84050c",
+1314 => x"7e800c9e",
+1315 => x"3d0d0475",
+1316 => x"802e81c4",
+1317 => x"387581ff",
+1318 => x"26832b55",
+1319 => x"83ffff76",
+1320 => x"278c3890",
+1321 => x"55fe800a",
+1322 => x"76278338",
+1323 => x"98557575",
+1324 => x"2a80e080",
+1325 => x"057033a0",
+1326 => x"77317131",
+1327 => x"575e5474",
+1328 => x"84913878",
+1329 => x"76315481",
+1330 => x"76902a77",
+1331 => x"83ffff06",
+1332 => x"5f5d5b7b",
+1333 => x"52735185",
+1334 => x"c33f8008",
+1335 => x"5785ad3f",
+1336 => x"80088008",
+1337 => x"7e297890",
+1338 => x"2b7c902a",
+1339 => x"07565659",
+1340 => x"73752794",
+1341 => x"388008ff",
+1342 => x"05761555",
+1343 => x"59757426",
+1344 => x"87387474",
+1345 => x"2684f338",
+1346 => x"7b527375",
+1347 => x"3151858c",
+1348 => x"3f800855",
+1349 => x"84f63f80",
+1350 => x"0880087e",
+1351 => x"297b83ff",
+1352 => x"ff067790",
+1353 => x"2b075659",
+1354 => x"57737827",
+1355 => x"96388008",
+1356 => x"ff057615",
+1357 => x"55577574",
+1358 => x"26893877",
+1359 => x"74267771",
+1360 => x"31585a78",
+1361 => x"902b7707",
+1362 => x"7b41417f",
+1363 => x"6156547d",
+1364 => x"802efdc6",
+1365 => x"38fe9b39",
+1366 => x"75528151",
+1367 => x"84ae3f80",
+1368 => x"0856feb1",
+1369 => x"399057fe",
+1370 => x"800a7527",
+1371 => x"fdd33898",
+1372 => x"75712a80",
+1373 => x"e0800570",
+1374 => x"33a07331",
+1375 => x"7131535d",
+1376 => x"5e577680",
+1377 => x"2efdcf38",
+1378 => x"a0773175",
+1379 => x"782b7772",
+1380 => x"2a077779",
+1381 => x"2b7b7a2b",
+1382 => x"7d742a07",
+1383 => x"7d7b2b73",
+1384 => x"902a7483",
+1385 => x"ffff0671",
+1386 => x"597f772a",
+1387 => x"585e5c41",
+1388 => x"5f585c54",
+1389 => x"83e63f80",
+1390 => x"085483d0",
+1391 => x"3f800880",
+1392 => x"08792975",
+1393 => x"902b7e90",
+1394 => x"2a075656",
+1395 => x"59737527",
+1396 => x"99388008",
+1397 => x"ff057b15",
+1398 => x"55597a74",
+1399 => x"268c3873",
+1400 => x"75278738",
+1401 => x"ff197b15",
+1402 => x"55597652",
+1403 => x"73753151",
+1404 => x"83aa3f80",
+1405 => x"08558394",
+1406 => x"3f800880",
+1407 => x"0879297d",
+1408 => x"83ffff06",
+1409 => x"77902b07",
+1410 => x"56595773",
+1411 => x"78279938",
+1412 => x"8008ff05",
+1413 => x"7b155557",
+1414 => x"7a74268c",
+1415 => x"38737827",
+1416 => x"8738ff17",
+1417 => x"7b155557",
+1418 => x"73783179",
+1419 => x"902b7807",
+1420 => x"7083ffff",
+1421 => x"0671902a",
+1422 => x"7983ffff",
+1423 => x"067a902a",
+1424 => x"73722973",
+1425 => x"73297473",
+1426 => x"29767429",
+1427 => x"73902a05",
+1428 => x"72055755",
+1429 => x"435f5b58",
+1430 => x"5a57595a",
+1431 => x"747c2786",
+1432 => x"38848080",
+1433 => x"17577490",
+1434 => x"2a177983",
+1435 => x"ffff0676",
+1436 => x"84808029",
+1437 => x"05575776",
+1438 => x"7a269a38",
+1439 => x"767a3270",
+1440 => x"30707207",
+1441 => x"8025565a",
+1442 => x"5b7c7627",
+1443 => x"fafe3873",
+1444 => x"802efaf8",
+1445 => x"38ff1858",
+1446 => x"805bfaf2",
+1447 => x"39ff7653",
+1448 => x"77549f3d",
+1449 => x"e805525e",
+1450 => x"f7e13f67",
+1451 => x"69574c75",
+1452 => x"4d698025",
+1453 => x"f8f3387d",
+1454 => x"096a6c5c",
+1455 => x"537a549f",
+1456 => x"3de80552",
+1457 => x"5ef7c43f",
+1458 => x"6769714c",
+1459 => x"704d5856",
+1460 => x"f8db39a0",
+1461 => x"75317676",
+1462 => x"2b7a772b",
+1463 => x"7c732a07",
+1464 => x"7c782b72",
+1465 => x"902a7383",
+1466 => x"ffff0671",
+1467 => x"587e762a",
+1468 => x"5742405d",
+1469 => x"5d575881",
+1470 => x"a33f8008",
+1471 => x"57818d3f",
+1472 => x"80088008",
+1473 => x"7e297890",
+1474 => x"2b7d902a",
+1475 => x"07565659",
+1476 => x"73752799",
+1477 => x"388008ff",
+1478 => x"05761555",
+1479 => x"59757426",
+1480 => x"8c387375",
+1481 => x"278738ff",
+1482 => x"19761555",
+1483 => x"597b5273",
+1484 => x"75315180",
+1485 => x"e73f8008",
+1486 => x"5580d13f",
+1487 => x"80088008",
+1488 => x"7e297c83",
+1489 => x"ffff0670",
+1490 => x"78902b07",
+1491 => x"51565858",
+1492 => x"73772799",
+1493 => x"388008ff",
+1494 => x"05761555",
+1495 => x"58757426",
+1496 => x"8c387377",
+1497 => x"278738ff",
+1498 => x"18761555",
+1499 => x"5878902b",
+1500 => x"78077478",
+1501 => x"31555bfa",
+1502 => x"da39ff19",
+1503 => x"76155559",
+1504 => x"fb8639ff",
+1505 => x"19761555",
+1506 => x"59f8c039",
+1507 => x"fe3d0d80",
+1508 => x"53755274",
+1509 => x"5181913f",
+1510 => x"843d0d04",
+1511 => x"fe3d0d81",
+1512 => x"53755274",
+1513 => x"5181813f",
+1514 => x"843d0d04",
+1515 => x"fb3d0d77",
+1516 => x"79555580",
+1517 => x"56757524",
+1518 => x"ab388074",
+1519 => x"249d3880",
+1520 => x"53735274",
+1521 => x"5180e13f",
+1522 => x"80085475",
+1523 => x"802e8538",
+1524 => x"80083054",
+1525 => x"73800c87",
+1526 => x"3d0d0473",
+1527 => x"30768132",
+1528 => x"5754dc39",
+1529 => x"74305581",
+1530 => x"56738025",
+1531 => x"d238ec39",
+1532 => x"fa3d0d78",
+1533 => x"7a575580",
+1534 => x"57767524",
+1535 => x"a438759f",
+1536 => x"2c548153",
+1537 => x"75743274",
+1538 => x"31527451",
+1539 => x"9b3f8008",
+1540 => x"5476802e",
+1541 => x"85388008",
+1542 => x"30547380",
+1543 => x"0c883d0d",
+1544 => x"04743055",
+1545 => x"8157d739",
+1546 => x"fc3d0d76",
+1547 => x"78535481",
+1548 => x"53807473",
+1549 => x"26525572",
+1550 => x"802e9838",
+1551 => x"70802eab",
+1552 => x"38807224",
+1553 => x"a6387110",
+1554 => x"73107572",
+1555 => x"26535452",
+1556 => x"72ea3873",
+1557 => x"51788338",
+1558 => x"74517080",
+1559 => x"0c863d0d",
+1560 => x"04720a10",
+1561 => x"0a720a10",
+1562 => x"0a535372",
+1563 => x"802ee438",
+1564 => x"717426ed",
+1565 => x"38737231",
+1566 => x"75740774",
+1567 => x"0a100a74",
+1568 => x"0a100a55",
+1569 => x"555654e3",
+1570 => x"39ff3d0d",
+1571 => x"735280ea",
+1572 => x"fc085196",
+1573 => x"3f833d0d",
+1574 => x"04ff3d0d",
+1575 => x"735280ea",
+1576 => x"fc085190",
+1577 => x"cc3f833d",
+1578 => x"0d04f43d",
+1579 => x"0d7e608b",
+1580 => x"1170f806",
+1581 => x"5b55555d",
+1582 => x"72962683",
+1583 => x"38905880",
+1584 => x"78247479",
+1585 => x"26075580",
+1586 => x"5474742e",
+1587 => x"09810680",
+1588 => x"ca387c51",
+1589 => x"8d9e3f77",
+1590 => x"83f72680",
+1591 => x"c5387783",
+1592 => x"2a701010",
+1593 => x"1080e2f4",
+1594 => x"058c1108",
+1595 => x"58585475",
+1596 => x"772e81f0",
+1597 => x"38841608",
+1598 => x"fc068c17",
+1599 => x"08881808",
+1600 => x"718c120c",
+1601 => x"88120c5b",
+1602 => x"76058411",
+1603 => x"08810784",
+1604 => x"120c537c",
+1605 => x"518cde3f",
+1606 => x"88165473",
+1607 => x"800c8e3d",
+1608 => x"0d047789",
+1609 => x"2a78832a",
+1610 => x"58547380",
+1611 => x"2ebf3877",
+1612 => x"862ab805",
+1613 => x"57847427",
+1614 => x"b43880db",
+1615 => x"14579474",
+1616 => x"27ab3877",
+1617 => x"8c2a80ee",
+1618 => x"055780d4",
+1619 => x"74279e38",
+1620 => x"778f2a80",
+1621 => x"f7055782",
+1622 => x"d4742791",
+1623 => x"3877922a",
+1624 => x"80fc0557",
+1625 => x"8ad47427",
+1626 => x"843880fe",
+1627 => x"57761010",
+1628 => x"1080e2f4",
+1629 => x"058c1108",
+1630 => x"56537473",
+1631 => x"2ea33884",
+1632 => x"1508fc06",
+1633 => x"70793155",
+1634 => x"56738f24",
+1635 => x"88e43873",
+1636 => x"802588e6",
+1637 => x"388c1508",
+1638 => x"5574732e",
+1639 => x"098106df",
+1640 => x"38811759",
+1641 => x"80e38408",
+1642 => x"567580e2",
+1643 => x"fc2e82cc",
+1644 => x"38841608",
+1645 => x"fc067079",
+1646 => x"31555573",
+1647 => x"8f24bb38",
+1648 => x"80e2fc0b",
+1649 => x"80e3880c",
+1650 => x"80e2fc0b",
+1651 => x"80e3840c",
+1652 => x"80742480",
+1653 => x"db387416",
+1654 => x"84110881",
+1655 => x"0784120c",
+1656 => x"53feb039",
+1657 => x"88168c11",
+1658 => x"08575975",
+1659 => x"792e0981",
+1660 => x"06fe8238",
+1661 => x"821459ff",
+1662 => x"ab397716",
+1663 => x"78810784",
+1664 => x"180c7080",
+1665 => x"e3880c70",
+1666 => x"80e3840c",
+1667 => x"80e2fc0b",
+1668 => x"8c120c8c",
+1669 => x"11088812",
+1670 => x"0c748107",
+1671 => x"84120c74",
+1672 => x"0574710c",
+1673 => x"5b7c518a",
+1674 => x"cc3f8816",
+1675 => x"54fdec39",
+1676 => x"83ff7527",
+1677 => x"83913874",
+1678 => x"892a7583",
+1679 => x"2a545473",
+1680 => x"802ebf38",
+1681 => x"74862ab8",
+1682 => x"05538474",
+1683 => x"27b43880",
+1684 => x"db145394",
+1685 => x"7427ab38",
+1686 => x"748c2a80",
+1687 => x"ee055380",
+1688 => x"d474279e",
+1689 => x"38748f2a",
+1690 => x"80f70553",
+1691 => x"82d47427",
+1692 => x"91387492",
+1693 => x"2a80fc05",
+1694 => x"538ad474",
+1695 => x"27843880",
+1696 => x"fe537210",
+1697 => x"101080e2",
+1698 => x"f4058811",
+1699 => x"08555773",
+1700 => x"772e868b",
+1701 => x"38841408",
+1702 => x"fc065b74",
+1703 => x"7b278d38",
+1704 => x"88140854",
+1705 => x"73772e09",
+1706 => x"8106ea38",
+1707 => x"8c140880",
+1708 => x"e2f40b84",
+1709 => x"0508718c",
+1710 => x"190c7588",
+1711 => x"190c7788",
+1712 => x"130c5c57",
+1713 => x"758c150c",
+1714 => x"78538079",
+1715 => x"24839838",
+1716 => x"72822c81",
+1717 => x"712b5656",
+1718 => x"747b2680",
+1719 => x"ca387a75",
+1720 => x"06577682",
+1721 => x"a33878fc",
+1722 => x"06840559",
+1723 => x"7410707c",
+1724 => x"06555573",
+1725 => x"82923884",
+1726 => x"1959f139",
+1727 => x"80e2f40b",
+1728 => x"84050879",
+1729 => x"545b7880",
+1730 => x"25c63882",
+1731 => x"da397409",
+1732 => x"7b067080",
+1733 => x"e2f40b84",
+1734 => x"050c5b74",
+1735 => x"1055747b",
+1736 => x"26853874",
+1737 => x"85bc3880",
+1738 => x"e2f40b88",
+1739 => x"05087084",
+1740 => x"1208fc06",
+1741 => x"707b317b",
+1742 => x"72268f72",
+1743 => x"25075d57",
+1744 => x"5c5c5578",
+1745 => x"802e80d9",
+1746 => x"38791580",
+1747 => x"e2ec0819",
+1748 => x"90115954",
+1749 => x"5680e2e8",
+1750 => x"08ff2e88",
+1751 => x"38a08f13",
+1752 => x"e0800657",
+1753 => x"76527c51",
+1754 => x"888c3f80",
+1755 => x"08548008",
+1756 => x"ff2e9038",
+1757 => x"80087627",
+1758 => x"82a73874",
+1759 => x"80e2f42e",
+1760 => x"829f3880",
+1761 => x"e2f40b88",
+1762 => x"05085584",
+1763 => x"1508fc06",
+1764 => x"70793179",
+1765 => x"72268f72",
+1766 => x"25075d55",
+1767 => x"5a7a83f2",
+1768 => x"38778107",
+1769 => x"84160c77",
+1770 => x"157080e2",
+1771 => x"f40b8805",
+1772 => x"0c748107",
+1773 => x"84120c56",
+1774 => x"7c5187b9",
+1775 => x"3f881554",
+1776 => x"73800c8e",
+1777 => x"3d0d0474",
+1778 => x"832a7054",
+1779 => x"54807424",
+1780 => x"819b3872",
+1781 => x"822c8171",
+1782 => x"2b80e2f8",
+1783 => x"08077080",
+1784 => x"e2f40b84",
+1785 => x"050c7510",
+1786 => x"101080e2",
+1787 => x"f4058811",
+1788 => x"08718c1b",
+1789 => x"0c70881b",
+1790 => x"0c798813",
+1791 => x"0c57555c",
+1792 => x"55758c15",
+1793 => x"0cfdc139",
+1794 => x"78791010",
+1795 => x"1080e2f4",
+1796 => x"0570565b",
+1797 => x"5c8c1408",
+1798 => x"5675742e",
+1799 => x"a3388416",
+1800 => x"08fc0670",
+1801 => x"79315853",
+1802 => x"768f2483",
+1803 => x"f1387680",
+1804 => x"2584af38",
+1805 => x"8c160856",
+1806 => x"75742e09",
+1807 => x"8106df38",
+1808 => x"8814811a",
+1809 => x"70830655",
+1810 => x"5a5472c9",
+1811 => x"387b8306",
+1812 => x"5675802e",
+1813 => x"fdb838ff",
+1814 => x"1cf81b5b",
+1815 => x"5c881a08",
+1816 => x"7a2eea38",
+1817 => x"fdb53983",
+1818 => x"1953fce4",
+1819 => x"39831470",
+1820 => x"822c8171",
+1821 => x"2b80e2f8",
+1822 => x"08077080",
+1823 => x"e2f40b84",
+1824 => x"050c7610",
+1825 => x"101080e2",
+1826 => x"f4058811",
+1827 => x"08718c1c",
+1828 => x"0c70881c",
+1829 => x"0c7a8813",
+1830 => x"0c58535d",
+1831 => x"5653fee1",
+1832 => x"3980e2b8",
+1833 => x"08175980",
+1834 => x"08762e81",
+1835 => x"8b3880e2",
+1836 => x"e808ff2e",
+1837 => x"848e3873",
+1838 => x"76311980",
+1839 => x"e2b80c73",
+1840 => x"87067056",
+1841 => x"5372802e",
+1842 => x"88388873",
+1843 => x"31701555",
+1844 => x"5576149f",
+1845 => x"ff06a080",
+1846 => x"71311670",
+1847 => x"547e5351",
+1848 => x"5385933f",
+1849 => x"80085680",
+1850 => x"08ff2e81",
+1851 => x"9e3880e2",
+1852 => x"b8081370",
+1853 => x"80e2b80c",
+1854 => x"747580e2",
+1855 => x"f40b8805",
+1856 => x"0c777631",
+1857 => x"15810755",
+1858 => x"56597a80",
+1859 => x"e2f42e83",
+1860 => x"c038798f",
+1861 => x"2682ef38",
+1862 => x"810b8415",
+1863 => x"0c841508",
+1864 => x"fc067079",
+1865 => x"31797226",
+1866 => x"8f722507",
+1867 => x"5d555a7a",
+1868 => x"802efced",
+1869 => x"3880db39",
+1870 => x"80089fff",
+1871 => x"065574fe",
+1872 => x"ed387880",
+1873 => x"e2b80c80",
+1874 => x"e2f40b88",
+1875 => x"05087a18",
+1876 => x"81078412",
+1877 => x"0c5580e2",
+1878 => x"e4087927",
+1879 => x"86387880",
+1880 => x"e2e40c80",
+1881 => x"e2e00879",
+1882 => x"27fca038",
+1883 => x"7880e2e0",
+1884 => x"0c841508",
+1885 => x"fc067079",
+1886 => x"31797226",
+1887 => x"8f722507",
+1888 => x"5d555a7a",
+1889 => x"802efc99",
+1890 => x"38883980",
+1891 => x"745753fe",
+1892 => x"dd397c51",
+1893 => x"83df3f80",
+1894 => x"0b800c8e",
+1895 => x"3d0d0480",
+1896 => x"7324a538",
+1897 => x"72822c81",
+1898 => x"712b80e2",
+1899 => x"f8080770",
+1900 => x"80e2f40b",
+1901 => x"84050c5c",
+1902 => x"5a768c17",
+1903 => x"0c738817",
+1904 => x"0c758818",
+1905 => x"0cf9fd39",
+1906 => x"83137082",
+1907 => x"2c81712b",
+1908 => x"80e2f808",
+1909 => x"077080e2",
+1910 => x"f40b8405",
+1911 => x"0c5d5b53",
+1912 => x"d8397a75",
+1913 => x"065c7bfc",
+1914 => x"9f388419",
+1915 => x"75105659",
+1916 => x"f139ff17",
+1917 => x"810559f7",
+1918 => x"ab398c15",
+1919 => x"08881608",
+1920 => x"718c120c",
+1921 => x"88120c59",
+1922 => x"75158411",
+1923 => x"08810784",
+1924 => x"120c587c",
+1925 => x"5182de3f",
+1926 => x"881554fb",
+1927 => x"a3397716",
+1928 => x"78810784",
+1929 => x"180c8c17",
+1930 => x"08881808",
+1931 => x"718c120c",
+1932 => x"88120c5c",
+1933 => x"7080e388",
+1934 => x"0c7080e3",
+1935 => x"840c80e2",
+1936 => x"fc0b8c12",
+1937 => x"0c8c1108",
+1938 => x"88120c77",
+1939 => x"81078412",
+1940 => x"0c770577",
+1941 => x"710c557c",
+1942 => x"51829a3f",
+1943 => x"881654f5",
+1944 => x"ba397216",
+1945 => x"84110881",
+1946 => x"0784120c",
+1947 => x"588c1608",
+1948 => x"88170871",
+1949 => x"8c120c88",
+1950 => x"120c577c",
+1951 => x"5181f63f",
+1952 => x"881654f5",
+1953 => x"96397284",
+1954 => x"150cf41a",
+1955 => x"f8067084",
+1956 => x"1d088106",
+1957 => x"07841d0c",
+1958 => x"701c5556",
+1959 => x"850b8415",
+1960 => x"0c850b88",
+1961 => x"150c8f76",
+1962 => x"27fdab38",
+1963 => x"881b527c",
+1964 => x"5184be3f",
+1965 => x"80e2f40b",
+1966 => x"88050880",
+1967 => x"e2b8085a",
+1968 => x"55fd9339",
+1969 => x"7880e2b8",
+1970 => x"0c7380e2",
+1971 => x"e80cfbef",
+1972 => x"39728415",
+1973 => x"0cfcff39",
+1974 => x"fb3d0d77",
+1975 => x"707a7c58",
+1976 => x"5553568f",
+1977 => x"752780e6",
+1978 => x"38727607",
+1979 => x"83065170",
+1980 => x"80dc3875",
+1981 => x"73525470",
+1982 => x"70840552",
+1983 => x"08747084",
+1984 => x"05560c73",
+1985 => x"71708405",
+1986 => x"53087170",
+1987 => x"8405530c",
+1988 => x"71708405",
+1989 => x"53087170",
+1990 => x"8405530c",
+1991 => x"71708405",
+1992 => x"53087170",
+1993 => x"8405530c",
+1994 => x"f0165654",
+1995 => x"748f26c7",
+1996 => x"38837527",
+1997 => x"95387070",
+1998 => x"84055208",
+1999 => x"74708405",
+2000 => x"560cfc15",
+2001 => x"55748326",
+2002 => x"ed387371",
+2003 => x"5452ff15",
+2004 => x"5170ff2e",
+2005 => x"98387270",
+2006 => x"81055433",
+2007 => x"72708105",
+2008 => x"5434ff11",
+2009 => x"5170ff2e",
+2010 => x"098106ea",
+2011 => x"3875800c",
+2012 => x"873d0d04",
+2013 => x"0404fd3d",
+2014 => x"0d800b81",
+2015 => x"c2d40c76",
+2016 => x"5187ca3f",
+2017 => x"80085380",
+2018 => x"08ff2e88",
+2019 => x"3872800c",
+2020 => x"853d0d04",
+2021 => x"81c2d408",
+2022 => x"5473802e",
+2023 => x"f0387574",
+2024 => x"710c5272",
+2025 => x"800c853d",
+2026 => x"0d04fb3d",
+2027 => x"0d777970",
+2028 => x"72078306",
+2029 => x"53545270",
+2030 => x"93387173",
+2031 => x"73085456",
+2032 => x"54717308",
+2033 => x"2e80c438",
+2034 => x"73755452",
+2035 => x"71337081",
+2036 => x"ff065254",
+2037 => x"70802e9d",
+2038 => x"38723355",
+2039 => x"70752e09",
+2040 => x"81069538",
+2041 => x"81128114",
+2042 => x"71337081",
+2043 => x"ff065456",
+2044 => x"545270e5",
+2045 => x"38723355",
+2046 => x"7381ff06",
+2047 => x"7581ff06",
+2048 => x"71713180",
+2049 => x"0c555287",
+2050 => x"3d0d0471",
+2051 => x"09f7fbfd",
+2052 => x"ff1306f8",
+2053 => x"84828180",
+2054 => x"06527197",
+2055 => x"38841484",
+2056 => x"16710854",
+2057 => x"56547175",
+2058 => x"082ee038",
+2059 => x"73755452",
+2060 => x"ff9a3980",
+2061 => x"0b800c87",
+2062 => x"3d0d04fb",
+2063 => x"3d0d7770",
+2064 => x"5256feb0",
+2065 => x"3f80e2f4",
+2066 => x"0b880508",
+2067 => x"841108fc",
+2068 => x"06707b31",
+2069 => x"9fef05e0",
+2070 => x"8006e080",
+2071 => x"05525555",
+2072 => x"a0807524",
+2073 => x"94388052",
+2074 => x"7551fe8a",
+2075 => x"3f80e2fc",
+2076 => x"08145372",
+2077 => x"80082e8f",
+2078 => x"387551fd",
+2079 => x"f83f8053",
+2080 => x"72800c87",
+2081 => x"3d0d0474",
+2082 => x"30527551",
+2083 => x"fde83f80",
+2084 => x"08ff2ea8",
+2085 => x"3880e2f4",
+2086 => x"0b880508",
+2087 => x"74763181",
+2088 => x"0784120c",
+2089 => x"5380e2b8",
+2090 => x"08753180",
+2091 => x"e2b80c75",
+2092 => x"51fdc23f",
+2093 => x"810b800c",
+2094 => x"873d0d04",
+2095 => x"80527551",
+2096 => x"fdb43f80",
+2097 => x"e2f40b88",
+2098 => x"05088008",
+2099 => x"71315454",
+2100 => x"8f7325ff",
+2101 => x"a4388008",
+2102 => x"80e2e808",
+2103 => x"3180e2b8",
+2104 => x"0c728107",
+2105 => x"84150c75",
+2106 => x"51fd8a3f",
+2107 => x"8053ff90",
+2108 => x"39f73d0d",
+2109 => x"7b7d545a",
+2110 => x"72802e82",
+2111 => x"83387951",
+2112 => x"fcf23ff8",
+2113 => x"13841108",
+2114 => x"70fe0670",
+2115 => x"13841108",
+2116 => x"fc065c57",
+2117 => x"58545780",
+2118 => x"e2fc0874",
+2119 => x"2e82de38",
+2120 => x"7784150c",
+2121 => x"80738106",
+2122 => x"56597479",
+2123 => x"2e81d538",
+2124 => x"77148411",
+2125 => x"08810656",
+2126 => x"5374a038",
+2127 => x"77165678",
+2128 => x"81e63888",
+2129 => x"14085574",
+2130 => x"80e2fc2e",
+2131 => x"82f9388c",
+2132 => x"1408708c",
+2133 => x"170c7588",
+2134 => x"120c5875",
+2135 => x"81078418",
+2136 => x"0c751776",
+2137 => x"710c5478",
+2138 => x"81913883",
+2139 => x"ff762781",
+2140 => x"c8387589",
+2141 => x"2a76832a",
+2142 => x"54547380",
+2143 => x"2ebf3875",
+2144 => x"862ab805",
+2145 => x"53847427",
+2146 => x"b43880db",
+2147 => x"14539474",
+2148 => x"27ab3875",
+2149 => x"8c2a80ee",
+2150 => x"055380d4",
+2151 => x"74279e38",
+2152 => x"758f2a80",
+2153 => x"f7055382",
+2154 => x"d4742791",
+2155 => x"3875922a",
+2156 => x"80fc0553",
+2157 => x"8ad47427",
+2158 => x"843880fe",
+2159 => x"53721010",
+2160 => x"1080e2f4",
+2161 => x"05881108",
+2162 => x"55557375",
+2163 => x"2e82bf38",
+2164 => x"841408fc",
+2165 => x"06597579",
+2166 => x"278d3888",
+2167 => x"14085473",
+2168 => x"752e0981",
+2169 => x"06ea388c",
+2170 => x"1408708c",
+2171 => x"190c7488",
+2172 => x"190c7788",
+2173 => x"120c5576",
+2174 => x"8c150c79",
+2175 => x"51faf63f",
+2176 => x"8b3d0d04",
+2177 => x"76087771",
+2178 => x"31587605",
+2179 => x"88180856",
+2180 => x"567480e2",
+2181 => x"fc2e80e0",
+2182 => x"388c1708",
+2183 => x"708c170c",
+2184 => x"7588120c",
+2185 => x"53fe8939",
+2186 => x"8814088c",
+2187 => x"1508708c",
+2188 => x"130c5988",
+2189 => x"190cfea3",
+2190 => x"3975832a",
+2191 => x"70545480",
+2192 => x"74248198",
+2193 => x"3872822c",
+2194 => x"81712b80",
+2195 => x"e2f80807",
+2196 => x"80e2f40b",
+2197 => x"84050c74",
+2198 => x"10101080",
+2199 => x"e2f40588",
+2200 => x"1108718c",
+2201 => x"1b0c7088",
+2202 => x"1b0c7988",
+2203 => x"130c565a",
+2204 => x"55768c15",
+2205 => x"0cff8439",
+2206 => x"8159fdb4",
+2207 => x"39771673",
+2208 => x"81065455",
+2209 => x"72983876",
+2210 => x"08777131",
+2211 => x"5875058c",
+2212 => x"18088819",
+2213 => x"08718c12",
+2214 => x"0c88120c",
+2215 => x"55557481",
+2216 => x"0784180c",
+2217 => x"7680e2f4",
+2218 => x"0b88050c",
+2219 => x"80e2f008",
+2220 => x"7526fec7",
+2221 => x"3880e2ec",
+2222 => x"08527951",
+2223 => x"fafd3f79",
+2224 => x"51f9b23f",
+2225 => x"feba3981",
+2226 => x"778c170c",
+2227 => x"7788170c",
+2228 => x"758c190c",
+2229 => x"7588190c",
+2230 => x"59fd8039",
+2231 => x"83147082",
+2232 => x"2c81712b",
+2233 => x"80e2f808",
+2234 => x"0780e2f4",
+2235 => x"0b84050c",
+2236 => x"75101010",
+2237 => x"80e2f405",
+2238 => x"88110871",
+2239 => x"8c1c0c70",
+2240 => x"881c0c7a",
+2241 => x"88130c57",
+2242 => x"5b5653fe",
+2243 => x"e4398073",
+2244 => x"24a33872",
+2245 => x"822c8171",
+2246 => x"2b80e2f8",
+2247 => x"080780e2",
+2248 => x"f40b8405",
+2249 => x"0c58748c",
+2250 => x"180c7388",
+2251 => x"180c7688",
+2252 => x"160cfdc3",
+2253 => x"39831370",
+2254 => x"822c8171",
+2255 => x"2b80e2f8",
+2256 => x"080780e2",
+2257 => x"f40b8405",
+2258 => x"0c5953da",
+2259 => x"39fe3d0d",
+2260 => x"81c2d808",
+2261 => x"51708a38",
+2262 => x"81c2e070",
+2263 => x"81c2d80c",
+2264 => x"51741152",
+2265 => x"ff537187",
+2266 => x"fb808026",
+2267 => x"88387181",
+2268 => x"c2d80c70",
+2269 => x"5372800c",
+2270 => x"843d0d04",
+2271 => x"fd3d0d80",
+2272 => x"0b80e2a4",
+2273 => x"08545472",
+2274 => x"812e9b38",
+2275 => x"7381c2dc",
+2276 => x"0cc28e3f",
+2277 => x"c0ea3f80",
+2278 => x"f1fc5281",
+2279 => x"51caf83f",
+2280 => x"80085189",
+2281 => x"a73f7281",
+2282 => x"c2dc0cc1",
+2283 => x"f43fc0d0",
+2284 => x"3f80f1fc",
+2285 => x"528151ca",
+2286 => x"de3f8008",
+2287 => x"51898d3f",
+2288 => x"00ff3900",
+2289 => x"ff39f53d",
+2290 => x"0d7e6081",
+2291 => x"c2dc0870",
+2292 => x"5b585b5b",
+2293 => x"7580c238",
+2294 => x"777a25a1",
+2295 => x"38771b70",
+2296 => x"337081ff",
+2297 => x"06585859",
+2298 => x"758a2e98",
+2299 => x"387681ff",
+2300 => x"0651c18c",
+2301 => x"3f811858",
+2302 => x"797824e1",
+2303 => x"3879800c",
+2304 => x"8d3d0d04",
+2305 => x"8d51c0f8",
+2306 => x"3f783370",
+2307 => x"81ff0652",
+2308 => x"57c0ed3f",
+2309 => x"811858e0",
+2310 => x"3979557a",
+2311 => x"547d5385",
+2312 => x"528d3dfc",
+2313 => x"0551c09a",
+2314 => x"3f800856",
+2315 => x"88973f7b",
+2316 => x"80080c75",
+2317 => x"800c8d3d",
+2318 => x"0d04f63d",
+2319 => x"0d7d7f81",
+2320 => x"c2dc0870",
+2321 => x"5a585a5a",
+2322 => x"7580c338",
+2323 => x"767925b1",
+2324 => x"38761a58",
+2325 => x"c08a3f80",
+2326 => x"08783480",
+2327 => x"0b800881",
+2328 => x"ff065758",
+2329 => x"758a2ea2",
+2330 => x"38758d32",
+2331 => x"70307080",
+2332 => x"257a0751",
+2333 => x"515675b8",
+2334 => x"38811757",
+2335 => x"787724d1",
+2336 => x"38765675",
+2337 => x"800c8c3d",
+2338 => x"0d048158",
+2339 => x"dc397855",
+2340 => x"79547c53",
+2341 => x"84528c3d",
+2342 => x"fc0551ff",
+2343 => x"bfa43f80",
+2344 => x"085687a1",
+2345 => x"3f7a8008",
+2346 => x"0c75800c",
+2347 => x"8c3d0d04",
+2348 => x"811756cf",
+2349 => x"39f93d0d",
+2350 => x"795781c2",
+2351 => x"dc08802e",
+2352 => x"ad387651",
+2353 => x"89b43f7b",
+2354 => x"567a5580",
+2355 => x"08810554",
+2356 => x"76538252",
+2357 => x"893dfc05",
+2358 => x"51ffbee6",
+2359 => x"3f800857",
+2360 => x"86e33f77",
+2361 => x"80080c76",
+2362 => x"800c893d",
+2363 => x"0d0486d5",
+2364 => x"3f850b80",
+2365 => x"080cff0b",
+2366 => x"800c893d",
+2367 => x"0d04fb3d",
+2368 => x"0d81c2dc",
+2369 => x"08705654",
+2370 => x"73883874",
+2371 => x"800c873d",
+2372 => x"0d047753",
+2373 => x"8352873d",
+2374 => x"fc0551ff",
+2375 => x"bea43f80",
+2376 => x"085486a1",
+2377 => x"3f758008",
+2378 => x"0c73800c",
+2379 => x"873d0d04",
+2380 => x"ff0b800c",
+2381 => x"04fb3d0d",
+2382 => x"775581c2",
+2383 => x"dc08802e",
+2384 => x"a9387451",
+2385 => x"88b43f80",
+2386 => x"08810554",
+2387 => x"74538752",
+2388 => x"873dfc05",
+2389 => x"51ffbdea",
+2390 => x"3f800855",
+2391 => x"85e73f75",
+2392 => x"80080c74",
+2393 => x"800c873d",
+2394 => x"0d0485d9",
+2395 => x"3f850b80",
+2396 => x"080cff0b",
+2397 => x"800c873d",
+2398 => x"0d04fa3d",
+2399 => x"0d81c2dc",
+2400 => x"08802ea3",
+2401 => x"387a5579",
+2402 => x"54785386",
+2403 => x"52883dfc",
+2404 => x"0551ffbd",
+2405 => x"ad3f8008",
+2406 => x"5685aa3f",
+2407 => x"7680080c",
+2408 => x"75800c88",
+2409 => x"3d0d0485",
+2410 => x"9c3f9d0b",
+2411 => x"80080cff",
+2412 => x"0b800c88",
+2413 => x"3d0d04f7",
+2414 => x"3d0d7b7d",
+2415 => x"5b59bc53",
+2416 => x"80527951",
+2417 => x"86aa3f80",
+2418 => x"70565798",
+2419 => x"56741970",
+2420 => x"3370782b",
+2421 => x"79078118",
+2422 => x"f81a5a58",
+2423 => x"59555884",
+2424 => x"7524ea38",
+2425 => x"767a2384",
+2426 => x"19588070",
+2427 => x"56579856",
+2428 => x"74187033",
+2429 => x"70782b79",
+2430 => x"078118f8",
+2431 => x"1a5a5859",
+2432 => x"51548475",
+2433 => x"24ea3876",
+2434 => x"821b2388",
+2435 => x"19588070",
+2436 => x"56579856",
+2437 => x"74187033",
+2438 => x"70782b79",
+2439 => x"078118f8",
+2440 => x"1a5a5859",
+2441 => x"51548475",
+2442 => x"24ea3876",
+2443 => x"841b0c8c",
+2444 => x"19588070",
+2445 => x"56579856",
+2446 => x"74187033",
+2447 => x"70782b79",
+2448 => x"078118f8",
+2449 => x"1a5a5859",
+2450 => x"51548475",
+2451 => x"24ea3876",
+2452 => x"881b2390",
+2453 => x"19588070",
+2454 => x"56579856",
+2455 => x"74187033",
+2456 => x"70782b79",
+2457 => x"078118f8",
+2458 => x"1a5a5859",
+2459 => x"51548475",
+2460 => x"24ea3876",
+2461 => x"8a1b2394",
+2462 => x"19588070",
+2463 => x"56579856",
+2464 => x"74187033",
+2465 => x"70782b79",
+2466 => x"078118f8",
+2467 => x"1a5a5859",
+2468 => x"51548475",
+2469 => x"24ea3876",
+2470 => x"8c1b2398",
+2471 => x"19588070",
+2472 => x"56579856",
+2473 => x"74187033",
+2474 => x"70782b79",
+2475 => x"078118f8",
+2476 => x"1a5a5859",
+2477 => x"51548475",
+2478 => x"24ea3876",
+2479 => x"8e1b239c",
+2480 => x"19588070",
+2481 => x"5657b856",
+2482 => x"74187033",
+2483 => x"70782b79",
+2484 => x"078118f8",
+2485 => x"1a5a5859",
+2486 => x"5a548875",
+2487 => x"24ea3876",
+2488 => x"901b0c8b",
+2489 => x"3d0d04e9",
+2490 => x"3d0d6a81",
+2491 => x"c2dc0857",
+2492 => x"57759338",
+2493 => x"80c0800b",
+2494 => x"84180c75",
+2495 => x"ac180c75",
+2496 => x"800c993d",
+2497 => x"0d04893d",
+2498 => x"70556a54",
+2499 => x"558a5299",
+2500 => x"3dffbc05",
+2501 => x"51ffbaaa",
+2502 => x"3f800877",
+2503 => x"53755256",
+2504 => x"fd953f82",
+2505 => x"a03f7780",
+2506 => x"080c7580",
+2507 => x"0c993d0d",
+2508 => x"04e93d0d",
+2509 => x"695781c2",
+2510 => x"dc08802e",
+2511 => x"b6387651",
+2512 => x"84b83f89",
+2513 => x"3d705680",
+2514 => x"08810555",
+2515 => x"7754568f",
+2516 => x"52993dff",
+2517 => x"bc0551ff",
+2518 => x"b9e83f80",
+2519 => x"086b5376",
+2520 => x"5257fcd3",
+2521 => x"3f81de3f",
+2522 => x"7780080c",
+2523 => x"76800c99",
+2524 => x"3d0d0481",
+2525 => x"d03f850b",
+2526 => x"80080cff",
+2527 => x"0b800c99",
+2528 => x"3d0d04fc",
+2529 => x"3d0d8154",
+2530 => x"81c2dc08",
+2531 => x"88387380",
+2532 => x"0c863d0d",
+2533 => x"04765397",
+2534 => x"b952863d",
+2535 => x"fc0551ff",
+2536 => x"b9a03f80",
+2537 => x"0854819d",
+2538 => x"3f748008",
+2539 => x"0c73800c",
+2540 => x"863d0d04",
+2541 => x"f43d0d7e",
+2542 => x"80f2a808",
+2543 => x"700881ff",
+2544 => x"06913df8",
+2545 => x"05545159",
+2546 => x"59ffbac5",
+2547 => x"3f775780",
+2548 => x"5476557b",
+2549 => x"7d585276",
+2550 => x"538e3df0",
+2551 => x"0551d6a0",
+2552 => x"3f797b58",
+2553 => x"790c7684",
+2554 => x"1a0c7880",
+2555 => x"0c8e3d0d",
+2556 => x"04f43d0d",
+2557 => x"7e80f2a8",
+2558 => x"08700870",
+2559 => x"81ff0692",
+2560 => x"3df80555",
+2561 => x"515a5759",
+2562 => x"ffba863f",
+2563 => x"7757800b",
+2564 => x"8b3d5954",
+2565 => x"76557b7d",
+2566 => x"58527653",
+2567 => x"7751d5e0",
+2568 => x"3f8056bd",
+2569 => x"84c07655",
+2570 => x"55797b58",
+2571 => x"52765377",
+2572 => x"51d5cd3f",
+2573 => x"7a577880",
+2574 => x"2e843876",
+2575 => x"790c7680",
+2576 => x"0c8e3d0d",
+2577 => x"0480eafc",
+2578 => x"08800c04",
+2579 => x"f73d0d7b",
+2580 => x"80eafc08",
+2581 => x"82c81108",
+2582 => x"5a545a77",
+2583 => x"802e80da",
+2584 => x"38818818",
+2585 => x"841908ff",
+2586 => x"0581712b",
+2587 => x"59555980",
+2588 => x"742480ea",
+2589 => x"38807424",
+2590 => x"b5387382",
+2591 => x"2b781188",
+2592 => x"05565681",
+2593 => x"80190877",
+2594 => x"06537280",
+2595 => x"2eb63878",
+2596 => x"16700853",
+2597 => x"53795174",
+2598 => x"0853722d",
+2599 => x"ff14fc17",
+2600 => x"fc177981",
+2601 => x"2c5a5757",
+2602 => x"54738025",
+2603 => x"d6387708",
+2604 => x"5877ffad",
+2605 => x"3880eafc",
+2606 => x"0853bc13",
+2607 => x"08a53879",
+2608 => x"51f5fd3f",
+2609 => x"74085372",
+2610 => x"2dff14fc",
+2611 => x"17fc1779",
+2612 => x"812c5a57",
+2613 => x"57547380",
+2614 => x"25ffa838",
+2615 => x"d1398057",
+2616 => x"ff933972",
+2617 => x"51bc1308",
+2618 => x"54732d79",
+2619 => x"51f5d13f",
+2620 => x"fb3d0d77",
+2621 => x"7a71028c",
+2622 => x"05a30533",
+2623 => x"58545456",
+2624 => x"83732780",
+2625 => x"d4387583",
+2626 => x"06517080",
+2627 => x"cc387488",
+2628 => x"2b750770",
+2629 => x"71902b07",
+2630 => x"55518f73",
+2631 => x"27a73873",
+2632 => x"72708405",
+2633 => x"540c7174",
+2634 => x"71708405",
+2635 => x"530c7471",
+2636 => x"70840553",
+2637 => x"0c747170",
+2638 => x"8405530c",
+2639 => x"f0145452",
+2640 => x"728f26db",
+2641 => x"38837327",
+2642 => x"90387372",
+2643 => x"70840554",
+2644 => x"0cfc1353",
+2645 => x"728326f2",
+2646 => x"38ff1351",
+2647 => x"70ff2e93",
+2648 => x"38747270",
+2649 => x"81055434",
+2650 => x"ff115170",
+2651 => x"ff2e0981",
+2652 => x"06ef3875",
+2653 => x"800c873d",
+2654 => x"0d04fd3d",
+2655 => x"0d757071",
+2656 => x"83065355",
+2657 => x"5270b438",
+2658 => x"71700870",
+2659 => x"09f7fbfd",
+2660 => x"ff1206f8",
+2661 => x"84828180",
+2662 => x"06545253",
+2663 => x"719b3884",
+2664 => x"13700870",
+2665 => x"09f7fbfd",
+2666 => x"ff1206f8",
+2667 => x"84828180",
+2668 => x"06545253",
+2669 => x"71802ee7",
+2670 => x"38725271",
+2671 => x"33537280",
+2672 => x"2e8a3881",
+2673 => x"12703354",
+2674 => x"5272f838",
+2675 => x"71743180",
+2676 => x"0c853d0d",
+2677 => x"04ff3d0d",
+2678 => x"80f2840b",
+2679 => x"fc057008",
+2680 => x"525270ff",
+2681 => x"2e913870",
+2682 => x"2dfc1270",
+2683 => x"08525270",
+2684 => x"ff2e0981",
+2685 => x"06f13883",
+2686 => x"3d0d0404",
+2687 => x"ffb7a63f",
+2688 => x"04000000",
+2689 => x"30313233",
+2690 => x"34353637",
+2691 => x"38390000",
+2692 => x"44485259",
+2693 => x"53544f4e",
+2694 => x"45205052",
+2695 => x"4f475241",
+2696 => x"4d2c2053",
+2697 => x"4f4d4520",
+2698 => x"53545249",
+2699 => x"4e470000",
+2700 => x"44485259",
+2701 => x"53544f4e",
+2702 => x"45205052",
+2703 => x"4f475241",
+2704 => x"4d2c2031",
+2705 => x"27535420",
+2706 => x"53545249",
+2707 => x"4e470000",
+2708 => x"44687279",
+2709 => x"73746f6e",
+2710 => x"65204265",
+2711 => x"6e63686d",
+2712 => x"61726b2c",
+2713 => x"20566572",
+2714 => x"73696f6e",
+2715 => x"20322e31",
+2716 => x"20284c61",
+2717 => x"6e677561",
+2718 => x"67653a20",
+2719 => x"43290a00",
+2720 => x"50726f67",
+2721 => x"72616d20",
+2722 => x"636f6d70",
+2723 => x"696c6564",
+2724 => x"20776974",
+2725 => x"68202772",
+2726 => x"65676973",
+2727 => x"74657227",
+2728 => x"20617474",
+2729 => x"72696275",
+2730 => x"74650a00",
+2731 => x"45786563",
+2732 => x"7574696f",
+2733 => x"6e207374",
+2734 => x"61727473",
+2735 => x"2c202564",
+2736 => x"2072756e",
+2737 => x"73207468",
+2738 => x"726f7567",
+2739 => x"68204468",
+2740 => x"72797374",
+2741 => x"6f6e650a",
+2742 => x"00000000",
+2743 => x"44485259",
+2744 => x"53544f4e",
+2745 => x"45205052",
+2746 => x"4f475241",
+2747 => x"4d2c2032",
+2748 => x"274e4420",
+2749 => x"53545249",
+2750 => x"4e470000",
+2751 => x"45786563",
+2752 => x"7574696f",
+2753 => x"6e20656e",
+2754 => x"64730a00",
+2755 => x"46696e61",
+2756 => x"6c207661",
+2757 => x"6c756573",
+2758 => x"206f6620",
+2759 => x"74686520",
+2760 => x"76617269",
+2761 => x"61626c65",
+2762 => x"73207573",
+2763 => x"65642069",
+2764 => x"6e207468",
+2765 => x"65206265",
+2766 => x"6e63686d",
+2767 => x"61726b3a",
+2768 => x"0a000000",
+2769 => x"496e745f",
+2770 => x"476c6f62",
+2771 => x"3a202020",
+2772 => x"20202020",
+2773 => x"20202020",
+2774 => x"2025640a",
+2775 => x"00000000",
+2776 => x"20202020",
+2777 => x"20202020",
+2778 => x"73686f75",
+2779 => x"6c642062",
+2780 => x"653a2020",
+2781 => x"2025640a",
+2782 => x"00000000",
+2783 => x"426f6f6c",
+2784 => x"5f476c6f",
+2785 => x"623a2020",
+2786 => x"20202020",
+2787 => x"20202020",
+2788 => x"2025640a",
+2789 => x"00000000",
+2790 => x"43685f31",
+2791 => x"5f476c6f",
+2792 => x"623a2020",
+2793 => x"20202020",
+2794 => x"20202020",
+2795 => x"2025630a",
+2796 => x"00000000",
+2797 => x"20202020",
+2798 => x"20202020",
+2799 => x"73686f75",
+2800 => x"6c642062",
+2801 => x"653a2020",
+2802 => x"2025630a",
+2803 => x"00000000",
+2804 => x"43685f32",
+2805 => x"5f476c6f",
+2806 => x"623a2020",
+2807 => x"20202020",
+2808 => x"20202020",
+2809 => x"2025630a",
+2810 => x"00000000",
+2811 => x"4172725f",
+2812 => x"315f476c",
+2813 => x"6f625b38",
+2814 => x"5d3a2020",
+2815 => x"20202020",
+2816 => x"2025640a",
+2817 => x"00000000",
+2818 => x"4172725f",
+2819 => x"325f476c",
+2820 => x"6f625b38",
+2821 => x"5d5b375d",
+2822 => x"3a202020",
+2823 => x"2025640a",
+2824 => x"00000000",
+2825 => x"20202020",
+2826 => x"20202020",
+2827 => x"73686f75",
+2828 => x"6c642062",
+2829 => x"653a2020",
+2830 => x"204e756d",
+2831 => x"6265725f",
+2832 => x"4f665f52",
+2833 => x"756e7320",
+2834 => x"2b203130",
+2835 => x"0a000000",
+2836 => x"5074725f",
+2837 => x"476c6f62",
+2838 => x"2d3e0a00",
+2839 => x"20205074",
+2840 => x"725f436f",
+2841 => x"6d703a20",
+2842 => x"20202020",
+2843 => x"20202020",
+2844 => x"2025640a",
+2845 => x"00000000",
+2846 => x"20202020",
+2847 => x"20202020",
+2848 => x"73686f75",
+2849 => x"6c642062",
+2850 => x"653a2020",
+2851 => x"2028696d",
+2852 => x"706c656d",
+2853 => x"656e7461",
+2854 => x"74696f6e",
+2855 => x"2d646570",
+2856 => x"656e6465",
+2857 => x"6e74290a",
+2858 => x"00000000",
+2859 => x"20204469",
+2860 => x"7363723a",
+2861 => x"20202020",
+2862 => x"20202020",
+2863 => x"20202020",
+2864 => x"2025640a",
+2865 => x"00000000",
+2866 => x"2020456e",
+2867 => x"756d5f43",
+2868 => x"6f6d703a",
+2869 => x"20202020",
+2870 => x"20202020",
+2871 => x"2025640a",
+2872 => x"00000000",
+2873 => x"2020496e",
+2874 => x"745f436f",
+2875 => x"6d703a20",
+2876 => x"20202020",
+2877 => x"20202020",
+2878 => x"2025640a",
+2879 => x"00000000",
+2880 => x"20205374",
+2881 => x"725f436f",
+2882 => x"6d703a20",
+2883 => x"20202020",
+2884 => x"20202020",
+2885 => x"2025730a",
+2886 => x"00000000",
+2887 => x"20202020",
+2888 => x"20202020",
+2889 => x"73686f75",
+2890 => x"6c642062",
+2891 => x"653a2020",
+2892 => x"20444852",
+2893 => x"5953544f",
+2894 => x"4e452050",
+2895 => x"524f4752",
+2896 => x"414d2c20",
+2897 => x"534f4d45",
+2898 => x"20535452",
+2899 => x"494e470a",
+2900 => x"00000000",
+2901 => x"4e657874",
+2902 => x"5f507472",
+2903 => x"5f476c6f",
+2904 => x"622d3e0a",
+2905 => x"00000000",
+2906 => x"20202020",
+2907 => x"20202020",
+2908 => x"73686f75",
+2909 => x"6c642062",
+2910 => x"653a2020",
+2911 => x"2028696d",
+2912 => x"706c656d",
+2913 => x"656e7461",
+2914 => x"74696f6e",
+2915 => x"2d646570",
+2916 => x"656e6465",
+2917 => x"6e74292c",
+2918 => x"2073616d",
+2919 => x"65206173",
+2920 => x"2061626f",
+2921 => x"76650a00",
+2922 => x"496e745f",
+2923 => x"315f4c6f",
+2924 => x"633a2020",
+2925 => x"20202020",
+2926 => x"20202020",
+2927 => x"2025640a",
+2928 => x"00000000",
+2929 => x"496e745f",
+2930 => x"325f4c6f",
+2931 => x"633a2020",
+2932 => x"20202020",
+2933 => x"20202020",
+2934 => x"2025640a",
+2935 => x"00000000",
+2936 => x"496e745f",
+2937 => x"335f4c6f",
+2938 => x"633a2020",
+2939 => x"20202020",
+2940 => x"20202020",
+2941 => x"2025640a",
+2942 => x"00000000",
+2943 => x"456e756d",
+2944 => x"5f4c6f63",
+2945 => x"3a202020",
+2946 => x"20202020",
+2947 => x"20202020",
+2948 => x"2025640a",
+2949 => x"00000000",
+2950 => x"5374725f",
+2951 => x"315f4c6f",
+2952 => x"633a2020",
+2953 => x"20202020",
+2954 => x"20202020",
+2955 => x"2025730a",
+2956 => x"00000000",
+2957 => x"20202020",
+2958 => x"20202020",
+2959 => x"73686f75",
+2960 => x"6c642062",
+2961 => x"653a2020",
+2962 => x"20444852",
+2963 => x"5953544f",
+2964 => x"4e452050",
+2965 => x"524f4752",
+2966 => x"414d2c20",
+2967 => x"31275354",
+2968 => x"20535452",
+2969 => x"494e470a",
+2970 => x"00000000",
+2971 => x"5374725f",
+2972 => x"325f4c6f",
+2973 => x"633a2020",
+2974 => x"20202020",
+2975 => x"20202020",
+2976 => x"2025730a",
+2977 => x"00000000",
+2978 => x"20202020",
+2979 => x"20202020",
+2980 => x"73686f75",
+2981 => x"6c642062",
+2982 => x"653a2020",
+2983 => x"20444852",
+2984 => x"5953544f",
+2985 => x"4e452050",
+2986 => x"524f4752",
+2987 => x"414d2c20",
+2988 => x"32274e44",
+2989 => x"20535452",
+2990 => x"494e470a",
+2991 => x"00000000",
+2992 => x"55736572",
+2993 => x"2074696d",
+2994 => x"653a2025",
+2995 => x"640a0000",
+2996 => x"4d696372",
+2997 => x"6f736563",
+2998 => x"6f6e6473",
+2999 => x"20666f72",
+3000 => x"206f6e65",
+3001 => x"2072756e",
+3002 => x"20746872",
+3003 => x"6f756768",
+3004 => x"20446872",
+3005 => x"7973746f",
+3006 => x"6e653a20",
+3007 => x"00000000",
+3008 => x"2564200a",
+3009 => x"00000000",
+3010 => x"44687279",
+3011 => x"73746f6e",
+3012 => x"65732070",
+3013 => x"65722053",
+3014 => x"65636f6e",
+3015 => x"643a2020",
+3016 => x"20202020",
+3017 => x"20202020",
+3018 => x"20202020",
+3019 => x"20202020",
+3020 => x"20202020",
+3021 => x"00000000",
+3022 => x"56415820",
+3023 => x"4d495053",
+3024 => x"20726174",
+3025 => x"696e6720",
+3026 => x"2a203130",
+3027 => x"3030203d",
+3028 => x"20256420",
+3029 => x"0a000000",
+3030 => x"50726f67",
+3031 => x"72616d20",
+3032 => x"636f6d70",
+3033 => x"696c6564",
+3034 => x"20776974",
+3035 => x"686f7574",
+3036 => x"20277265",
+3037 => x"67697374",
+3038 => x"65722720",
+3039 => x"61747472",
+3040 => x"69627574",
+3041 => x"650a0000",
+3042 => x"4d656173",
+3043 => x"75726564",
+3044 => x"2074696d",
+3045 => x"6520746f",
+3046 => x"6f20736d",
+3047 => x"616c6c20",
+3048 => x"746f206f",
+3049 => x"62746169",
+3050 => x"6e206d65",
+3051 => x"616e696e",
+3052 => x"6766756c",
+3053 => x"20726573",
+3054 => x"756c7473",
+3055 => x"0a000000",
+3056 => x"506c6561",
+3057 => x"73652069",
+3058 => x"6e637265",
+3059 => x"61736520",
+3060 => x"6e756d62",
+3061 => x"6572206f",
+3062 => x"66207275",
+3063 => x"6e730a00",
+3064 => x"44485259",
+3065 => x"53544f4e",
+3066 => x"45205052",
+3067 => x"4f475241",
+3068 => x"4d2c2033",
+3069 => x"27524420",
+3070 => x"53545249",
+3071 => x"4e470000",
+3072 => x"00010202",
+3073 => x"03030303",
+3074 => x"04040404",
+3075 => x"04040404",
+3076 => x"05050505",
+3077 => x"05050505",
+3078 => x"05050505",
+3079 => x"05050505",
+3080 => x"06060606",
+3081 => x"06060606",
+3082 => x"06060606",
+3083 => x"06060606",
+3084 => x"06060606",
+3085 => x"06060606",
+3086 => x"06060606",
+3087 => x"06060606",
+3088 => x"07070707",
+3089 => x"07070707",
+3090 => x"07070707",
+3091 => x"07070707",
+3092 => x"07070707",
+3093 => x"07070707",
+3094 => x"07070707",
+3095 => x"07070707",
+3096 => x"07070707",
+3097 => x"07070707",
+3098 => x"07070707",
+3099 => x"07070707",
+3100 => x"07070707",
+3101 => x"07070707",
+3102 => x"07070707",
+3103 => x"07070707",
+3104 => x"08080808",
+3105 => x"08080808",
+3106 => x"08080808",
+3107 => x"08080808",
+3108 => x"08080808",
+3109 => x"08080808",
+3110 => x"08080808",
+3111 => x"08080808",
+3112 => x"08080808",
+3113 => x"08080808",
+3114 => x"08080808",
+3115 => x"08080808",
+3116 => x"08080808",
+3117 => x"08080808",
+3118 => x"08080808",
+3119 => x"08080808",
+3120 => x"08080808",
+3121 => x"08080808",
+3122 => x"08080808",
+3123 => x"08080808",
+3124 => x"08080808",
+3125 => x"08080808",
+3126 => x"08080808",
+3127 => x"08080808",
+3128 => x"08080808",
+3129 => x"08080808",
+3130 => x"08080808",
+3131 => x"08080808",
+3132 => x"08080808",
+3133 => x"08080808",
+3134 => x"08080808",
+3135 => x"08080808",
+3136 => x"43000000",
+3137 => x"64756d6d",
+3138 => x"792e6578",
+3139 => x"65000000",
+3140 => x"00ffffff",
+3141 => x"ff00ffff",
+3142 => x"ffff00ff",
+3143 => x"ffffff00",
+3144 => x"00000000",
+3145 => x"00000000",
+3146 => x"00000000",
+3147 => x"0000390c",
+3148 => x"000004d2", -- iterations 0x4d2=1234
+3149 => x"00000000",
+3150 => x"00000000",
+3151 => x"00000000",
+3152 => x"00000000",
+3153 => x"00000000",
+3154 => x"00000000",
+3155 => x"00000000",
+3156 => x"00000000",
+3157 => x"00000000",
+3158 => x"00000000",
+3159 => x"00000000",
+3160 => x"00000000",
+3161 => x"00000000",
+3162 => x"ffffffff",
+3163 => x"00000000",
+3164 => x"00020000",
+3165 => x"00000000",
+3166 => x"00000000",
+3167 => x"00003174",
+3168 => x"00003174",
+3169 => x"0000317c",
+3170 => x"0000317c",
+3171 => x"00003184",
+3172 => x"00003184",
+3173 => x"0000318c",
+3174 => x"0000318c",
+3175 => x"00003194",
+3176 => x"00003194",
+3177 => x"0000319c",
+3178 => x"0000319c",
+3179 => x"000031a4",
+3180 => x"000031a4",
+3181 => x"000031ac",
+3182 => x"000031ac",
+3183 => x"000031b4",
+3184 => x"000031b4",
+3185 => x"000031bc",
+3186 => x"000031bc",
+3187 => x"000031c4",
+3188 => x"000031c4",
+3189 => x"000031cc",
+3190 => x"000031cc",
+3191 => x"000031d4",
+3192 => x"000031d4",
+3193 => x"000031dc",
+3194 => x"000031dc",
+3195 => x"000031e4",
+3196 => x"000031e4",
+3197 => x"000031ec",
+3198 => x"000031ec",
+3199 => x"000031f4",
+3200 => x"000031f4",
+3201 => x"000031fc",
+3202 => x"000031fc",
+3203 => x"00003204",
+3204 => x"00003204",
+3205 => x"0000320c",
+3206 => x"0000320c",
+3207 => x"00003214",
+3208 => x"00003214",
+3209 => x"0000321c",
+3210 => x"0000321c",
+3211 => x"00003224",
+3212 => x"00003224",
+3213 => x"0000322c",
+3214 => x"0000322c",
+3215 => x"00003234",
+3216 => x"00003234",
+3217 => x"0000323c",
+3218 => x"0000323c",
+3219 => x"00003244",
+3220 => x"00003244",
+3221 => x"0000324c",
+3222 => x"0000324c",
+3223 => x"00003254",
+3224 => x"00003254",
+3225 => x"0000325c",
+3226 => x"0000325c",
+3227 => x"00003264",
+3228 => x"00003264",
+3229 => x"0000326c",
+3230 => x"0000326c",
+3231 => x"00003274",
+3232 => x"00003274",
+3233 => x"0000327c",
+3234 => x"0000327c",
+3235 => x"00003284",
+3236 => x"00003284",
+3237 => x"0000328c",
+3238 => x"0000328c",
+3239 => x"00003294",
+3240 => x"00003294",
+3241 => x"0000329c",
+3242 => x"0000329c",
+3243 => x"000032a4",
+3244 => x"000032a4",
+3245 => x"000032ac",
+3246 => x"000032ac",
+3247 => x"000032b4",
+3248 => x"000032b4",
+3249 => x"000032bc",
+3250 => x"000032bc",
+3251 => x"000032c4",
+3252 => x"000032c4",
+3253 => x"000032cc",
+3254 => x"000032cc",
+3255 => x"000032d4",
+3256 => x"000032d4",
+3257 => x"000032dc",
+3258 => x"000032dc",
+3259 => x"000032e4",
+3260 => x"000032e4",
+3261 => x"000032ec",
+3262 => x"000032ec",
+3263 => x"000032f4",
+3264 => x"000032f4",
+3265 => x"000032fc",
+3266 => x"000032fc",
+3267 => x"00003304",
+3268 => x"00003304",
+3269 => x"0000330c",
+3270 => x"0000330c",
+3271 => x"00003314",
+3272 => x"00003314",
+3273 => x"0000331c",
+3274 => x"0000331c",
+3275 => x"00003324",
+3276 => x"00003324",
+3277 => x"0000332c",
+3278 => x"0000332c",
+3279 => x"00003334",
+3280 => x"00003334",
+3281 => x"0000333c",
+3282 => x"0000333c",
+3283 => x"00003344",
+3284 => x"00003344",
+3285 => x"0000334c",
+3286 => x"0000334c",
+3287 => x"00003354",
+3288 => x"00003354",
+3289 => x"0000335c",
+3290 => x"0000335c",
+3291 => x"00003364",
+3292 => x"00003364",
+3293 => x"0000336c",
+3294 => x"0000336c",
+3295 => x"00003374",
+3296 => x"00003374",
+3297 => x"0000337c",
+3298 => x"0000337c",
+3299 => x"00003384",
+3300 => x"00003384",
+3301 => x"0000338c",
+3302 => x"0000338c",
+3303 => x"00003394",
+3304 => x"00003394",
+3305 => x"0000339c",
+3306 => x"0000339c",
+3307 => x"000033a4",
+3308 => x"000033a4",
+3309 => x"000033ac",
+3310 => x"000033ac",
+3311 => x"000033b4",
+3312 => x"000033b4",
+3313 => x"000033bc",
+3314 => x"000033bc",
+3315 => x"000033c4",
+3316 => x"000033c4",
+3317 => x"000033cc",
+3318 => x"000033cc",
+3319 => x"000033d4",
+3320 => x"000033d4",
+3321 => x"000033dc",
+3322 => x"000033dc",
+3323 => x"000033e4",
+3324 => x"000033e4",
+3325 => x"000033ec",
+3326 => x"000033ec",
+3327 => x"000033f4",
+3328 => x"000033f4",
+3329 => x"000033fc",
+3330 => x"000033fc",
+3331 => x"00003404",
+3332 => x"00003404",
+3333 => x"0000340c",
+3334 => x"0000340c",
+3335 => x"00003414",
+3336 => x"00003414",
+3337 => x"0000341c",
+3338 => x"0000341c",
+3339 => x"00003424",
+3340 => x"00003424",
+3341 => x"0000342c",
+3342 => x"0000342c",
+3343 => x"00003434",
+3344 => x"00003434",
+3345 => x"0000343c",
+3346 => x"0000343c",
+3347 => x"00003444",
+3348 => x"00003444",
+3349 => x"0000344c",
+3350 => x"0000344c",
+3351 => x"00003454",
+3352 => x"00003454",
+3353 => x"0000345c",
+3354 => x"0000345c",
+3355 => x"00003464",
+3356 => x"00003464",
+3357 => x"0000346c",
+3358 => x"0000346c",
+3359 => x"00003474",
+3360 => x"00003474",
+3361 => x"0000347c",
+3362 => x"0000347c",
+3363 => x"00003484",
+3364 => x"00003484",
+3365 => x"0000348c",
+3366 => x"0000348c",
+3367 => x"00003494",
+3368 => x"00003494",
+3369 => x"0000349c",
+3370 => x"0000349c",
+3371 => x"000034a4",
+3372 => x"000034a4",
+3373 => x"000034ac",
+3374 => x"000034ac",
+3375 => x"000034b4",
+3376 => x"000034b4",
+3377 => x"000034bc",
+3378 => x"000034bc",
+3379 => x"000034c4",
+3380 => x"000034c4",
+3381 => x"000034cc",
+3382 => x"000034cc",
+3383 => x"000034d4",
+3384 => x"000034d4",
+3385 => x"000034dc",
+3386 => x"000034dc",
+3387 => x"000034e4",
+3388 => x"000034e4",
+3389 => x"000034ec",
+3390 => x"000034ec",
+3391 => x"000034f4",
+3392 => x"000034f4",
+3393 => x"000034fc",
+3394 => x"000034fc",
+3395 => x"00003504",
+3396 => x"00003504",
+3397 => x"0000350c",
+3398 => x"0000350c",
+3399 => x"00003514",
+3400 => x"00003514",
+3401 => x"0000351c",
+3402 => x"0000351c",
+3403 => x"00003524",
+3404 => x"00003524",
+3405 => x"0000352c",
+3406 => x"0000352c",
+3407 => x"00003534",
+3408 => x"00003534",
+3409 => x"0000353c",
+3410 => x"0000353c",
+3411 => x"00003544",
+3412 => x"00003544",
+3413 => x"0000354c",
+3414 => x"0000354c",
+3415 => x"00003554",
+3416 => x"00003554",
+3417 => x"0000355c",
+3418 => x"0000355c",
+3419 => x"00003564",
+3420 => x"00003564",
+3421 => x"0000356c",
+3422 => x"0000356c",
+3423 => x"00003580",
+3424 => x"00000000",
+3425 => x"000037e8",
+3426 => x"00003844",
+3427 => x"000038a0",
+3428 => x"00000000",
+3429 => x"00000000",
+3430 => x"00000000",
+3431 => x"00000000",
+3432 => x"00000000",
+3433 => x"00000000",
+3434 => x"00000000",
+3435 => x"00000000",
+3436 => x"00000000",
+3437 => x"00003100",
+3438 => x"00000000",
+3439 => x"00000000",
+3440 => x"00000000",
+3441 => x"00000000",
+3442 => x"00000000",
+3443 => x"00000000",
+3444 => x"00000000",
+3445 => x"00000000",
+3446 => x"00000000",
+3447 => x"00000000",
+3448 => x"00000000",
+3449 => x"00000000",
+3450 => x"00000000",
+3451 => x"00000000",
+3452 => x"00000000",
+3453 => x"00000000",
+3454 => x"00000000",
+3455 => x"00000000",
+3456 => x"00000000",
+3457 => x"00000000",
+3458 => x"00000000",
+3459 => x"00000000",
+3460 => x"00000000",
+3461 => x"00000000",
+3462 => x"00000000",
+3463 => x"00000000",
+3464 => x"00000000",
+3465 => x"00000000",
+3466 => x"00000001",
+3467 => x"330eabcd",
+3468 => x"1234e66d",
+3469 => x"deec0005",
+3470 => x"000b0000",
+3471 => x"00000000",
+3472 => x"00000000",
+3473 => x"00000000",
+3474 => x"00000000",
+3475 => x"00000000",
+3476 => x"00000000",
+3477 => x"00000000",
+3478 => x"00000000",
+3479 => x"00000000",
+3480 => x"00000000",
+3481 => x"00000000",
+3482 => x"00000000",
+3483 => x"00000000",
+3484 => x"00000000",
+3485 => x"00000000",
+3486 => x"00000000",
+3487 => x"00000000",
+3488 => x"00000000",
+3489 => x"00000000",
+3490 => x"00000000",
+3491 => x"00000000",
+3492 => x"00000000",
+3493 => x"00000000",
+3494 => x"00000000",
+3495 => x"00000000",
+3496 => x"00000000",
+3497 => x"00000000",
+3498 => x"00000000",
+3499 => x"00000000",
+3500 => x"00000000",
+3501 => x"00000000",
+3502 => x"00000000",
+3503 => x"00000000",
+3504 => x"00000000",
+3505 => x"00000000",
+3506 => x"00000000",
+3507 => x"00000000",
+3508 => x"00000000",
+3509 => x"00000000",
+3510 => x"00000000",
+3511 => x"00000000",
+3512 => x"00000000",
+3513 => x"00000000",
+3514 => x"00000000",
+3515 => x"00000000",
+3516 => x"00000000",
+3517 => x"00000000",
+3518 => x"00000000",
+3519 => x"00000000",
+3520 => x"00000000",
+3521 => x"00000000",
+3522 => x"00000000",
+3523 => x"00000000",
+3524 => x"00000000",
+3525 => x"00000000",
+3526 => x"00000000",
+3527 => x"00000000",
+3528 => x"00000000",
+3529 => x"00000000",
+3530 => x"00000000",
+3531 => x"00000000",
+3532 => x"00000000",
+3533 => x"00000000",
+3534 => x"00000000",
+3535 => x"00000000",
+3536 => x"00000000",
+3537 => x"00000000",
+3538 => x"00000000",
+3539 => x"00000000",
+3540 => x"00000000",
+3541 => x"00000000",
+3542 => x"00000000",
+3543 => x"00000000",
+3544 => x"00000000",
+3545 => x"00000000",
+3546 => x"00000000",
+3547 => x"00000000",
+3548 => x"00000000",
+3549 => x"00000000",
+3550 => x"00000000",
+3551 => x"00000000",
+3552 => x"00000000",
+3553 => x"00000000",
+3554 => x"00000000",
+3555 => x"00000000",
+3556 => x"00000000",
+3557 => x"00000000",
+3558 => x"00000000",
+3559 => x"00000000",
+3560 => x"00000000",
+3561 => x"00000000",
+3562 => x"00000000",
+3563 => x"00000000",
+3564 => x"00000000",
+3565 => x"00000000",
+3566 => x"00000000",
+3567 => x"00000000",
+3568 => x"00000000",
+3569 => x"00000000",
+3570 => x"00000000",
+3571 => x"00000000",
+3572 => x"00000000",
+3573 => x"00000000",
+3574 => x"00000000",
+3575 => x"00000000",
+3576 => x"00000000",
+3577 => x"00000000",
+3578 => x"00000000",
+3579 => x"00000000",
+3580 => x"00000000",
+3581 => x"00000000",
+3582 => x"00000000",
+3583 => x"00000000",
+3584 => x"00000000",
+3585 => x"00000000",
+3586 => x"00000000",
+3587 => x"00000000",
+3588 => x"00000000",
+3589 => x"00000000",
+3590 => x"00000000",
+3591 => x"00000000",
+3592 => x"00000000",
+3593 => x"00000000",
+3594 => x"00000000",
+3595 => x"00000000",
+3596 => x"00000000",
+3597 => x"00000000",
+3598 => x"00000000",
+3599 => x"00000000",
+3600 => x"00000000",
+3601 => x"00000000",
+3602 => x"00000000",
+3603 => x"00000000",
+3604 => x"00000000",
+3605 => x"00000000",
+3606 => x"00000000",
+3607 => x"00000000",
+3608 => x"00000000",
+3609 => x"00000000",
+3610 => x"00000000",
+3611 => x"00000000",
+3612 => x"00000000",
+3613 => x"00000000",
+3614 => x"00000000",
+3615 => x"00000000",
+3616 => x"00000000",
+3617 => x"00000000",
+3618 => x"00000000",
+3619 => x"00000000",
+3620 => x"00000000",
+3621 => x"00000000",
+3622 => x"00000000",
+3623 => x"00000000",
+3624 => x"00000000",
+3625 => x"00000000",
+3626 => x"00000000",
+3627 => x"00000000",
+3628 => x"00000000",
+3629 => x"00000000",
+3630 => x"00000000",
+3631 => x"00000000",
+3632 => x"00000000",
+3633 => x"00000000",
+3634 => x"00000000",
+3635 => x"00000000",
+3636 => x"00000000",
+3637 => x"00000000",
+3638 => x"00000000",
+3639 => x"00000000",
+3640 => x"00000000",
+3641 => x"00000000",
+3642 => x"00000000",
+3643 => x"00000000",
+3644 => x"00000000",
+3645 => x"00000000",
+3646 => x"00000000",
+3647 => x"00003104",
+3648 => x"ffffffff",
+3649 => x"00000000",
+3650 => x"ffffffff",
+3651 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+mem_busy<=mem_readEnable; -- we're done on the cycle after we serve the read request
+
+process (clk, areset)
+begin
+ if areset = '1' then
+ elsif (clk'event and clk = '1') then
+ if (mem_writeEnable = '1') then
+ ram(conv_integer(mem_addr(maxAddrBit downto minAddrBit))) := mem_write;
+ end if;
+ mem_read <= ram(conv_integer(mem_addr(maxAddrBit downto minAddrBit)));
+ end if;
+end process;
+
+
+
+
+end dram_arch;
diff --git a/zpu/hdl/zpu4/src/dram_hello.vhd b/zpu/hdl/zpu4/src/dram_hello.vhd
new file mode 100644
index 0000000..dc46dbb
--- /dev/null
+++ b/zpu/hdl/zpu4/src/dram_hello.vhd
@@ -0,0 +1,3214 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity dram is
+port (clk : in std_logic;
+ mem_writeEnable : in std_logic;
+ mem_readEnable : in std_logic;
+ mem_addr : in std_logic_vector(maxAddrBit downto 0);
+ mem_write : in std_logic_vector(wordSize-1 downto 0);
+ mem_read : out std_logic_vector(wordSize-1 downto 0);
+ mem_busy : out std_logic;
+ mem_writeMask : in std_logic_vector(wordBytes-1 downto 0));
+end dram;
+
+architecture dram_arch of dram is
+
+
+type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+0 => x"0b0b0b0b",
+1 => x"80700b0b",
+2 => x"80d3900c",
+3 => x"3a0b0b80",
+4 => x"c8b20400",
+5 => x"00000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"80c8fb2d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b2a83",
+20 => x"ffff0652",
+21 => x"04000000",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b2b0906",
+29 => x"7383ffff",
+30 => x"0b0b0b0b",
+31 => x"83a70400",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"53510400",
+38 => x"00000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"51040000",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"53510400",
+55 => x"00000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"51040000",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"00000000",
+65 => x"00000000",
+66 => x"00000000",
+67 => x"00000000",
+68 => x"00000000",
+69 => x"00000000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"0b0b0b88",
+73 => x"c4040000",
+74 => x"00000000",
+75 => x"00000000",
+76 => x"00000000",
+77 => x"00000000",
+78 => x"00000000",
+79 => x"00000000",
+80 => x"720a722b",
+81 => x"0a535104",
+82 => x"00000000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a7",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"06075351",
+101 => x"04000000",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"71715351",
+105 => x"020d0406",
+106 => x"73830609",
+107 => x"81058205",
+108 => x"832b0b2b",
+109 => x"0772fc06",
+110 => x"0c515104",
+111 => x"00000000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"51040000",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"53510400",
+125 => x"00000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"52040000",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"05055351",
+138 => x"04000000",
+139 => x"00000000",
+140 => x"00000000",
+141 => x"00000000",
+142 => x"00000000",
+143 => x"00000000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07535104",
+147 => x"00000000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"04000000",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b80d2",
+162 => x"fc738306",
+163 => x"10100508",
+164 => x"060b0b0b",
+165 => x"88aa0400",
+166 => x"00000000",
+167 => x"00000000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0b8d",
+171 => x"872d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c510400",
+175 => x"00000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0b8d",
+179 => x"cb2d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c510400",
+183 => x"00000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70547106",
+188 => x"73097274",
+189 => x"05ff0506",
+190 => x"07515151",
+191 => x"04000000",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"05705471",
+196 => x"06730972",
+197 => x"7405ff05",
+198 => x"06075151",
+199 => x"51040000",
+200 => x"05ff0504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"80d38c0c",
+210 => x"51040000",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"71810552",
+217 => x"04000000",
+218 => x"00000000",
+219 => x"00000000",
+220 => x"00000000",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"04000000",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"717105ff",
+249 => x"05715351",
+250 => x"020d0400",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"83d93f80",
+257 => x"ca953f04",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10101053",
+266 => x"51047381",
+267 => x"ff067383",
+268 => x"06098105",
+269 => x"83051010",
+270 => x"102b0772",
+271 => x"fc060c51",
+272 => x"51043c04",
+273 => x"72728072",
+274 => x"8106ff05",
+275 => x"09720605",
+276 => x"71105272",
+277 => x"0a100a53",
+278 => x"72ed3851",
+279 => x"51535104",
+280 => x"ff3d0d0b",
+281 => x"0b80e2f8",
+282 => x"08528412",
+283 => x"08708106",
+284 => x"515170f6",
+285 => x"38710881",
+286 => x"ff06800c",
+287 => x"833d0d04",
+288 => x"ff3d0d0b",
+289 => x"0b80e2f8",
+290 => x"08528412",
+291 => x"08700a10",
+292 => x"0a708106",
+293 => x"51515170",
+294 => x"f1387372",
+295 => x"0c833d0d",
+296 => x"0480d38c",
+297 => x"08802ea8",
+298 => x"38838080",
+299 => x"0b0b0b80",
+300 => x"e2f80c82",
+301 => x"a0800b0b",
+302 => x"0b80e2fc",
+303 => x"0c829080",
+304 => x"0b80e38c",
+305 => x"0c0b0b80",
+306 => x"e3800b80",
+307 => x"e3900c04",
+308 => x"f8808080",
+309 => x"a40b0b0b",
+310 => x"80e2f80c",
+311 => x"f8808082",
+312 => x"800b0b0b",
+313 => x"80e2fc0c",
+314 => x"f8808084",
+315 => x"800b80e3",
+316 => x"8c0cf880",
+317 => x"8080940b",
+318 => x"80e3900c",
+319 => x"f8808080",
+320 => x"9c0b80e3",
+321 => x"880cf880",
+322 => x"8080a00b",
+323 => x"80e3940c",
+324 => x"04f23d0d",
+325 => x"600b0b80",
+326 => x"e2fc0856",
+327 => x"5d82750c",
+328 => x"8059805a",
+329 => x"800b8f3d",
+330 => x"71101017",
+331 => x"70085957",
+332 => x"5d5b8076",
+333 => x"81ff067c",
+334 => x"832b5658",
+335 => x"5276537b",
+336 => x"5181fa3f",
+337 => x"7d7f7a72",
+338 => x"077c7207",
+339 => x"71716081",
+340 => x"05415f5d",
+341 => x"5b595755",
+342 => x"7a8724bb",
+343 => x"380b0b80",
+344 => x"e2fc087b",
+345 => x"10101170",
+346 => x"08585155",
+347 => x"807681ff",
+348 => x"067c832b",
+349 => x"56585276",
+350 => x"537b5181",
+351 => x"c03f7d7f",
+352 => x"7a72077c",
+353 => x"72077171",
+354 => x"60810541",
+355 => x"5f5d5b59",
+356 => x"5755877b",
+357 => x"25c73876",
+358 => x"7d0c7784",
+359 => x"1e0c7c80",
+360 => x"0c903d0d",
+361 => x"04ff3d0d",
+362 => x"80e38433",
+363 => x"5170a738",
+364 => x"80d39808",
+365 => x"70085252",
+366 => x"70802e94",
+367 => x"38841280",
+368 => x"d3980c70",
+369 => x"2d80d398",
+370 => x"08700852",
+371 => x"5270ee38",
+372 => x"810b80e3",
+373 => x"8434833d",
+374 => x"0d040480",
+375 => x"3d0d0b0b",
+376 => x"80e2f408",
+377 => x"802e8e38",
+378 => x"0b0b0b0b",
+379 => x"800b802e",
+380 => x"09810685",
+381 => x"38823d0d",
+382 => x"040b0b80",
+383 => x"e2f4510b",
+384 => x"0b0bf3fc",
+385 => x"3f823d0d",
+386 => x"0404fe3d",
+387 => x"0d89530b",
+388 => x"0b80d2c8",
+389 => x"51838d3f",
+390 => x"0b0b80d2",
+391 => x"d8518384",
+392 => x"3f810a0b",
+393 => x"80e3980c",
+394 => x"ff0b80e3",
+395 => x"9c0cff13",
+396 => x"53728025",
+397 => x"da387280",
+398 => x"0c843d0d",
+399 => x"04f93d0d",
+400 => x"797b7d7f",
+401 => x"56545254",
+402 => x"72802ea0",
+403 => x"38705771",
+404 => x"58a07331",
+405 => x"52807225",
+406 => x"a1387770",
+407 => x"742b5770",
+408 => x"732a7875",
+409 => x"2b075651",
+410 => x"74765351",
+411 => x"70740c71",
+412 => x"84150c73",
+413 => x"800c893d",
+414 => x"0d048056",
+415 => x"7772302b",
+416 => x"55747653",
+417 => x"51e639fb",
+418 => x"3d0d7779",
+419 => x"55558056",
+420 => x"757524ab",
+421 => x"38807424",
+422 => x"9d388053",
+423 => x"73527451",
+424 => x"80e13f80",
+425 => x"08547580",
+426 => x"2e853880",
+427 => x"08305473",
+428 => x"800c873d",
+429 => x"0d047330",
+430 => x"76813257",
+431 => x"54dc3974",
+432 => x"30558156",
+433 => x"738025d2",
+434 => x"38ec39fa",
+435 => x"3d0d787a",
+436 => x"57558057",
+437 => x"767524a4",
+438 => x"38759f2c",
+439 => x"54815375",
+440 => x"74327431",
+441 => x"5274519b",
+442 => x"3f800854",
+443 => x"76802e85",
+444 => x"38800830",
+445 => x"5473800c",
+446 => x"883d0d04",
+447 => x"74305581",
+448 => x"57d739fc",
+449 => x"3d0d7678",
+450 => x"53548153",
+451 => x"80747326",
+452 => x"52557280",
+453 => x"2e983870",
+454 => x"802eab38",
+455 => x"807224a6",
+456 => x"38711073",
+457 => x"10757226",
+458 => x"53545272",
+459 => x"ea387351",
+460 => x"78833874",
+461 => x"5170800c",
+462 => x"863d0d04",
+463 => x"720a100a",
+464 => x"720a100a",
+465 => x"53537280",
+466 => x"2ee43871",
+467 => x"7426ed38",
+468 => x"73723175",
+469 => x"7407740a",
+470 => x"100a740a",
+471 => x"100a5555",
+472 => x"5654e339",
+473 => x"f73d0d7c",
+474 => x"70525380",
+475 => x"f93f7254",
+476 => x"80085580",
+477 => x"d2e85681",
+478 => x"57800881",
+479 => x"055a8b3d",
+480 => x"e4115953",
+481 => x"8259f413",
+482 => x"527b8811",
+483 => x"08525381",
+484 => x"b03f8008",
+485 => x"30708008",
+486 => x"079f2c8a",
+487 => x"07800c53",
+488 => x"8b3d0d04",
+489 => x"f63d0d7c",
+490 => x"80d39c08",
+491 => x"71535553",
+492 => x"b53f7255",
+493 => x"80085680",
+494 => x"d2e85781",
+495 => x"58800881",
+496 => x"055b8c3d",
+497 => x"e4115a53",
+498 => x"825af413",
+499 => x"52881408",
+500 => x"5180ee3f",
+501 => x"80083070",
+502 => x"8008079f",
+503 => x"2c8a0780",
+504 => x"0c548c3d",
+505 => x"0d04fd3d",
+506 => x"0d757071",
+507 => x"83065355",
+508 => x"5270b438",
+509 => x"71700870",
+510 => x"09f7fbfd",
+511 => x"ff1206f8",
+512 => x"84828180",
+513 => x"06545253",
+514 => x"719b3884",
+515 => x"13700870",
+516 => x"09f7fbfd",
+517 => x"ff1206f8",
+518 => x"84828180",
+519 => x"06545253",
+520 => x"71802ee7",
+521 => x"38725271",
+522 => x"33537280",
+523 => x"2e8a3881",
+524 => x"12703354",
+525 => x"5272f838",
+526 => x"71743180",
+527 => x"0c853d0d",
+528 => x"04f23d0d",
+529 => x"60628811",
+530 => x"08705856",
+531 => x"5f5a7380",
+532 => x"2e818c38",
+533 => x"8c1a2270",
+534 => x"832a8132",
+535 => x"81065658",
+536 => x"74863890",
+537 => x"1a089138",
+538 => x"795190b7",
+539 => x"3fff5580",
+540 => x"0880ec38",
+541 => x"8c1a2258",
+542 => x"7d085580",
+543 => x"7883ffff",
+544 => x"06700a10",
+545 => x"0a810641",
+546 => x"5c577e77",
+547 => x"2e80d738",
+548 => x"76903874",
+549 => x"08841608",
+550 => x"88175758",
+551 => x"5676802e",
+552 => x"f2387654",
+553 => x"88807727",
+554 => x"84388880",
+555 => x"54735375",
+556 => x"529c1a08",
+557 => x"51a41a08",
+558 => x"58772d80",
+559 => x"0b800825",
+560 => x"82e03880",
+561 => x"08167780",
+562 => x"08317f88",
+563 => x"05088008",
+564 => x"31706188",
+565 => x"050c5b58",
+566 => x"5678ffb4",
+567 => x"38805574",
+568 => x"800c903d",
+569 => x"0d047a81",
+570 => x"32810677",
+571 => x"40567580",
+572 => x"2e81bd38",
+573 => x"76903874",
+574 => x"08841608",
+575 => x"88175758",
+576 => x"5976802e",
+577 => x"f238881a",
+578 => x"087883ff",
+579 => x"ff067089",
+580 => x"2a810656",
+581 => x"59567380",
+582 => x"2e82f838",
+583 => x"7577278b",
+584 => x"3877872a",
+585 => x"81065c7b",
+586 => x"82b53876",
+587 => x"76278338",
+588 => x"76567553",
+589 => x"78527908",
+590 => x"5185833f",
+591 => x"881a0876",
+592 => x"31881b0c",
+593 => x"7908167a",
+594 => x"0c765675",
+595 => x"19777731",
+596 => x"7f880508",
+597 => x"78317061",
+598 => x"88050c41",
+599 => x"58597e80",
+600 => x"2efefa38",
+601 => x"8c1a2258",
+602 => x"ff8a3978",
+603 => x"79547c53",
+604 => x"7b525684",
+605 => x"c93f881a",
+606 => x"08793188",
+607 => x"1b0c7908",
+608 => x"197a0c7c",
+609 => x"76315d7c",
+610 => x"8e387951",
+611 => x"8ff23f80",
+612 => x"08818f38",
+613 => x"80085f75",
+614 => x"1c777731",
+615 => x"7f880508",
+616 => x"78317061",
+617 => x"88050c5d",
+618 => x"585c7a80",
+619 => x"2efeae38",
+620 => x"76818338",
+621 => x"74088416",
+622 => x"08881757",
+623 => x"585c7680",
+624 => x"2ef23876",
+625 => x"538a527b",
+626 => x"5182d33f",
+627 => x"80087c31",
+628 => x"81055d80",
+629 => x"08843881",
+630 => x"175d815f",
+631 => x"7c59767d",
+632 => x"27833876",
+633 => x"59941a08",
+634 => x"881b0811",
+635 => x"5758807a",
+636 => x"085c5490",
+637 => x"1a087b27",
+638 => x"83388154",
+639 => x"75792584",
+640 => x"3873ba38",
+641 => x"777924fe",
+642 => x"e2387753",
+643 => x"7b529c1a",
+644 => x"0851a41a",
+645 => x"0859782d",
+646 => x"80085680",
+647 => x"088024fe",
+648 => x"e2388c1a",
+649 => x"2280c007",
+650 => x"5e7d8c1b",
+651 => x"23ff5574",
+652 => x"800c903d",
+653 => x"0d047eff",
+654 => x"a338ff87",
+655 => x"3975537b",
+656 => x"527a5182",
+657 => x"f93f7908",
+658 => x"167a0c79",
+659 => x"518eb13f",
+660 => x"8008cf38",
+661 => x"7c76315d",
+662 => x"7cfebc38",
+663 => x"feac3990",
+664 => x"1a087a08",
+665 => x"71317811",
+666 => x"70565a57",
+667 => x"5280d39c",
+668 => x"08518494",
+669 => x"3f800880",
+670 => x"2effa738",
+671 => x"8008901b",
+672 => x"0c800816",
+673 => x"7a0c7794",
+674 => x"1b0c7688",
+675 => x"1b0c7656",
+676 => x"fd993979",
+677 => x"0858901a",
+678 => x"08782783",
+679 => x"38815475",
+680 => x"77278438",
+681 => x"73b33894",
+682 => x"1a085473",
+683 => x"772680d3",
+684 => x"38735378",
+685 => x"529c1a08",
+686 => x"51a41a08",
+687 => x"58772d80",
+688 => x"08568008",
+689 => x"8024fd83",
+690 => x"388c1a22",
+691 => x"80c0075e",
+692 => x"7d8c1b23",
+693 => x"ff55fed7",
+694 => x"39755378",
+695 => x"52775181",
+696 => x"dd3f7908",
+697 => x"167a0c79",
+698 => x"518d953f",
+699 => x"8008802e",
+700 => x"fcd9388c",
+701 => x"1a2280c0",
+702 => x"075e7d8c",
+703 => x"1b23ff55",
+704 => x"fead3976",
+705 => x"77547953",
+706 => x"78525681",
+707 => x"b13f881a",
+708 => x"08773188",
+709 => x"1b0c7908",
+710 => x"177a0cfc",
+711 => x"ae39fa3d",
+712 => x"0d7a7902",
+713 => x"8805a705",
+714 => x"33555354",
+715 => x"83742780",
+716 => x"df387183",
+717 => x"06517080",
+718 => x"d7387171",
+719 => x"57558351",
+720 => x"75828029",
+721 => x"13ff1252",
+722 => x"56708025",
+723 => x"f3388374",
+724 => x"27bc3874",
+725 => x"08763270",
+726 => x"09f7fbfd",
+727 => x"ff1206f8",
+728 => x"84828180",
+729 => x"06515170",
+730 => x"802e9838",
+731 => x"74518052",
+732 => x"70335772",
+733 => x"772eb938",
+734 => x"81118113",
+735 => x"53518372",
+736 => x"27ee38fc",
+737 => x"14841656",
+738 => x"54738326",
+739 => x"c6387452",
+740 => x"ff145170",
+741 => x"ff2e9738",
+742 => x"71335472",
+743 => x"742e9838",
+744 => x"8112ff12",
+745 => x"525270ff",
+746 => x"2e098106",
+747 => x"eb388051",
+748 => x"70800c88",
+749 => x"3d0d0471",
+750 => x"800c883d",
+751 => x"0d04fa3d",
+752 => x"0d787a7c",
+753 => x"72727259",
+754 => x"57555856",
+755 => x"57747727",
+756 => x"b2387515",
+757 => x"51767127",
+758 => x"aa387076",
+759 => x"18ff1853",
+760 => x"535370ff",
+761 => x"2e9638ff",
+762 => x"12ff1454",
+763 => x"52723372",
+764 => x"34ff1151",
+765 => x"70ff2e09",
+766 => x"8106ec38",
+767 => x"76800c88",
+768 => x"3d0d048f",
+769 => x"762780e6",
+770 => x"38747707",
+771 => x"83065170",
+772 => x"80dc3876",
+773 => x"75525370",
+774 => x"70840552",
+775 => x"08737084",
+776 => x"05550c72",
+777 => x"71708405",
+778 => x"53087170",
+779 => x"8405530c",
+780 => x"71708405",
+781 => x"53087170",
+782 => x"8405530c",
+783 => x"71708405",
+784 => x"53087170",
+785 => x"8405530c",
+786 => x"f0155553",
+787 => x"738f26c7",
+788 => x"38837427",
+789 => x"95387070",
+790 => x"84055208",
+791 => x"73708405",
+792 => x"550cfc14",
+793 => x"54738326",
+794 => x"ed387271",
+795 => x"5452ff14",
+796 => x"5170ff2e",
+797 => x"ff863872",
+798 => x"70810554",
+799 => x"33727081",
+800 => x"055434ff",
+801 => x"1151ea39",
+802 => x"ef3d0d63",
+803 => x"6567405d",
+804 => x"427b802e",
+805 => x"85823861",
+806 => x"51a9eb3f",
+807 => x"f81c7084",
+808 => x"120870fc",
+809 => x"0670628b",
+810 => x"0570f806",
+811 => x"4159455c",
+812 => x"5f415796",
+813 => x"742782c5",
+814 => x"38807b24",
+815 => x"7e7c2607",
+816 => x"58805477",
+817 => x"742e0981",
+818 => x"0682ab38",
+819 => x"787b2581",
+820 => x"fe387817",
+821 => x"80dad80b",
+822 => x"8805085b",
+823 => x"5679762e",
+824 => x"84c53884",
+825 => x"160870fe",
+826 => x"06178411",
+827 => x"08810641",
+828 => x"55557e82",
+829 => x"8d3874fc",
+830 => x"06587976",
+831 => x"2e84e338",
+832 => x"78185f7e",
+833 => x"7b2581ff",
+834 => x"387c8106",
+835 => x"547382c1",
+836 => x"38767708",
+837 => x"31841108",
+838 => x"fc065657",
+839 => x"75802e91",
+840 => x"3879762e",
+841 => x"84f03874",
+842 => x"18195877",
+843 => x"7b258491",
+844 => x"3876802e",
+845 => x"829b3878",
+846 => x"15567a76",
+847 => x"24829238",
+848 => x"8c170888",
+849 => x"1808718c",
+850 => x"120c8812",
+851 => x"0c5e7559",
+852 => x"881761fc",
+853 => x"055b5679",
+854 => x"a42685ff",
+855 => x"387b7659",
+856 => x"55937a27",
+857 => x"80c9387b",
+858 => x"7084055d",
+859 => x"087c5676",
+860 => x"0c747084",
+861 => x"0556088c",
+862 => x"180c9017",
+863 => x"589b7a27",
+864 => x"ae387470",
+865 => x"84055608",
+866 => x"780c7470",
+867 => x"84055608",
+868 => x"94180c98",
+869 => x"1758a37a",
+870 => x"27953874",
+871 => x"70840556",
+872 => x"08780c74",
+873 => x"70840556",
+874 => x"089c180c",
+875 => x"a0175874",
+876 => x"70840556",
+877 => x"08755f78",
+878 => x"7084055a",
+879 => x"0c777e70",
+880 => x"84054008",
+881 => x"71708405",
+882 => x"530c7e08",
+883 => x"710c5d78",
+884 => x"7b315675",
+885 => x"8f2680c9",
+886 => x"38841708",
+887 => x"81067907",
+888 => x"84180c78",
+889 => x"17841108",
+890 => x"81078412",
+891 => x"0c5b6151",
+892 => x"a7953f88",
+893 => x"17547380",
+894 => x"0c933d0d",
+895 => x"04905bfd",
+896 => x"b8397756",
+897 => x"fe83398c",
+898 => x"16088817",
+899 => x"08718c12",
+900 => x"0c88120c",
+901 => x"587e707c",
+902 => x"3157598f",
+903 => x"7627ffb9",
+904 => x"387a1784",
+905 => x"18088106",
+906 => x"7c078419",
+907 => x"0c768107",
+908 => x"84120c76",
+909 => x"11841108",
+910 => x"81078412",
+911 => x"0c5b8805",
+912 => x"5261518f",
+913 => x"de3f6151",
+914 => x"a6bd3f88",
+915 => x"1754ffa6",
+916 => x"397d5261",
+917 => x"5197db3f",
+918 => x"80085a80",
+919 => x"08802e81",
+920 => x"ab388008",
+921 => x"f8056084",
+922 => x"0508fe06",
+923 => x"61055855",
+924 => x"74772e83",
+925 => x"f238fc19",
+926 => x"5877a426",
+927 => x"81b0387b",
+928 => x"80085657",
+929 => x"93782780",
+930 => x"dc387b70",
+931 => x"70840552",
+932 => x"08800870",
+933 => x"8405800c",
+934 => x"0c800871",
+935 => x"70840553",
+936 => x"085d567b",
+937 => x"76708405",
+938 => x"580c579b",
+939 => x"7827b638",
+940 => x"76708405",
+941 => x"58087570",
+942 => x"8405570c",
+943 => x"76708405",
+944 => x"58087570",
+945 => x"8405570c",
+946 => x"a3782799",
+947 => x"38767084",
+948 => x"05580875",
+949 => x"70840557",
+950 => x"0c767084",
+951 => x"05580875",
+952 => x"70840557",
+953 => x"0c767084",
+954 => x"05580877",
+955 => x"5e757084",
+956 => x"05570c74",
+957 => x"7d708405",
+958 => x"5f087170",
+959 => x"8405530c",
+960 => x"7d08710c",
+961 => x"5f7b5261",
+962 => x"518e983f",
+963 => x"6151a4f7",
+964 => x"3f79800c",
+965 => x"933d0d04",
+966 => x"7d526151",
+967 => x"96943f80",
+968 => x"08800c93",
+969 => x"3d0d0484",
+970 => x"160855fb",
+971 => x"c9397753",
+972 => x"7b528008",
+973 => x"51a2a93f",
+974 => x"7b526151",
+975 => x"8de53fcc",
+976 => x"398c1608",
+977 => x"88170871",
+978 => x"8c120c88",
+979 => x"120c5d8c",
+980 => x"17088818",
+981 => x"08718c12",
+982 => x"0c88120c",
+983 => x"597759fb",
+984 => x"ef397818",
+985 => x"901c4055",
+986 => x"7e7524fb",
+987 => x"9c387a17",
+988 => x"7080dad8",
+989 => x"0b88050c",
+990 => x"757c3181",
+991 => x"0784120c",
+992 => x"56841708",
+993 => x"81067b07",
+994 => x"84180c61",
+995 => x"51a3f83f",
+996 => x"881754fc",
+997 => x"e1397418",
+998 => x"19901c5e",
+999 => x"5a7c7a24",
+1000 => x"fb8f388c",
+1001 => x"17088818",
+1002 => x"08718c12",
+1003 => x"0c88120c",
+1004 => x"5e881761",
+1005 => x"fc055759",
+1006 => x"75a42681",
+1007 => x"b6387b79",
+1008 => x"59559376",
+1009 => x"2780c938",
+1010 => x"7b708405",
+1011 => x"5d087c56",
+1012 => x"790c7470",
+1013 => x"84055608",
+1014 => x"8c180c90",
+1015 => x"17589b76",
+1016 => x"27ae3874",
+1017 => x"70840556",
+1018 => x"08780c74",
+1019 => x"70840556",
+1020 => x"0894180c",
+1021 => x"981758a3",
+1022 => x"76279538",
+1023 => x"74708405",
+1024 => x"5608780c",
+1025 => x"74708405",
+1026 => x"56089c18",
+1027 => x"0ca01758",
+1028 => x"74708405",
+1029 => x"56087541",
+1030 => x"78708405",
+1031 => x"5a0c7760",
+1032 => x"70840542",
+1033 => x"08717084",
+1034 => x"05530c60",
+1035 => x"08710c5e",
+1036 => x"7a177080",
+1037 => x"dad80b88",
+1038 => x"050c7a7c",
+1039 => x"31810784",
+1040 => x"120c5884",
+1041 => x"17088106",
+1042 => x"7b078418",
+1043 => x"0c6151a2",
+1044 => x"b63f7854",
+1045 => x"73800c93",
+1046 => x"3d0d0479",
+1047 => x"537b5275",
+1048 => x"519ffd3f",
+1049 => x"fae93984",
+1050 => x"1508fc06",
+1051 => x"19605859",
+1052 => x"fadd3975",
+1053 => x"537b5278",
+1054 => x"519fe53f",
+1055 => x"7a177080",
+1056 => x"dad80b88",
+1057 => x"050c7a7c",
+1058 => x"31810784",
+1059 => x"120c5884",
+1060 => x"17088106",
+1061 => x"7b078418",
+1062 => x"0c6151a1",
+1063 => x"ea3f7854",
+1064 => x"ffb239fa",
+1065 => x"3d0d7880",
+1066 => x"d39c0854",
+1067 => x"55b81308",
+1068 => x"802e81af",
+1069 => x"388c1522",
+1070 => x"7083ffff",
+1071 => x"0670832a",
+1072 => x"81328106",
+1073 => x"55555672",
+1074 => x"802e80da",
+1075 => x"3873842a",
+1076 => x"81328106",
+1077 => x"57ff5376",
+1078 => x"80f23873",
+1079 => x"822a8106",
+1080 => x"5473802e",
+1081 => x"b938b015",
+1082 => x"08547380",
+1083 => x"2e9c3880",
+1084 => x"c0155373",
+1085 => x"732e8f38",
+1086 => x"735280d3",
+1087 => x"9c08518a",
+1088 => x"a23f8c15",
+1089 => x"225676b0",
+1090 => x"160c75db",
+1091 => x"0657768c",
+1092 => x"1623800b",
+1093 => x"84160c90",
+1094 => x"1508750c",
+1095 => x"76567588",
+1096 => x"0754738c",
+1097 => x"16239015",
+1098 => x"08802ebf",
+1099 => x"388c1522",
+1100 => x"70810655",
+1101 => x"53739c38",
+1102 => x"720a100a",
+1103 => x"81065675",
+1104 => x"85389415",
+1105 => x"08547388",
+1106 => x"160c8053",
+1107 => x"72800c88",
+1108 => x"3d0d0480",
+1109 => x"0b88160c",
+1110 => x"94150830",
+1111 => x"98160c80",
+1112 => x"53ea3972",
+1113 => x"5182a63f",
+1114 => x"fecb3974",
+1115 => x"518fc03f",
+1116 => x"8c152270",
+1117 => x"81065553",
+1118 => x"73802eff",
+1119 => x"bb38d439",
+1120 => x"f83d0d7a",
+1121 => x"5776802e",
+1122 => x"81973880",
+1123 => x"d39c0854",
+1124 => x"b8140880",
+1125 => x"2e80eb38",
+1126 => x"8c172270",
+1127 => x"902b7090",
+1128 => x"2c70832a",
+1129 => x"81328106",
+1130 => x"5b5b5755",
+1131 => x"7780cb38",
+1132 => x"90170856",
+1133 => x"75802e80",
+1134 => x"c1387608",
+1135 => x"76317678",
+1136 => x"0c798306",
+1137 => x"55557385",
+1138 => x"38941708",
+1139 => x"58778818",
+1140 => x"0c807525",
+1141 => x"a5387453",
+1142 => x"75529c17",
+1143 => x"0851a417",
+1144 => x"0854732d",
+1145 => x"800b8008",
+1146 => x"2580c938",
+1147 => x"80081675",
+1148 => x"80083156",
+1149 => x"56748024",
+1150 => x"dd38800b",
+1151 => x"800c8a3d",
+1152 => x"0d047351",
+1153 => x"81873f8c",
+1154 => x"17227090",
+1155 => x"2b70902c",
+1156 => x"70832a81",
+1157 => x"3281065b",
+1158 => x"5b575577",
+1159 => x"dd38ff90",
+1160 => x"39a38052",
+1161 => x"80d39c08",
+1162 => x"518cd43f",
+1163 => x"8008800c",
+1164 => x"8a3d0d04",
+1165 => x"8c172280",
+1166 => x"c0075877",
+1167 => x"8c1823ff",
+1168 => x"0b800c8a",
+1169 => x"3d0d04fa",
+1170 => x"3d0d7970",
+1171 => x"80dc298c",
+1172 => x"11547a53",
+1173 => x"56578fda",
+1174 => x"3f800880",
+1175 => x"08555680",
+1176 => x"08802ea2",
+1177 => x"3880088c",
+1178 => x"0554800b",
+1179 => x"80080c76",
+1180 => x"80088405",
+1181 => x"0c738008",
+1182 => x"88050c74",
+1183 => x"53805273",
+1184 => x"519cf93f",
+1185 => x"75547380",
+1186 => x"0c883d0d",
+1187 => x"04fe3d0d",
+1188 => x"74aacc0b",
+1189 => x"bc120c53",
+1190 => x"810bb814",
+1191 => x"0c800b84",
+1192 => x"dc140c83",
+1193 => x"0b84e014",
+1194 => x"0c84e813",
+1195 => x"84e4140c",
+1196 => x"84130851",
+1197 => x"8070720c",
+1198 => x"7084130c",
+1199 => x"7088130c",
+1200 => x"52840b8c",
+1201 => x"1223718e",
+1202 => x"12237190",
+1203 => x"120c7194",
+1204 => x"120c7198",
+1205 => x"120c709c",
+1206 => x"120c80c3",
+1207 => x"bc0ba012",
+1208 => x"0c80c488",
+1209 => x"0ba4120c",
+1210 => x"80c5840b",
+1211 => x"a8120c80",
+1212 => x"c5d50bac",
+1213 => x"120c8813",
+1214 => x"0872710c",
+1215 => x"7284120c",
+1216 => x"7288120c",
+1217 => x"51890b8c",
+1218 => x"1223810b",
+1219 => x"8e122371",
+1220 => x"90120c71",
+1221 => x"94120c71",
+1222 => x"98120c70",
+1223 => x"9c120c80",
+1224 => x"c3bc0ba0",
+1225 => x"120c80c4",
+1226 => x"880ba412",
+1227 => x"0c80c584",
+1228 => x"0ba8120c",
+1229 => x"80c5d50b",
+1230 => x"ac120c8c",
+1231 => x"13087271",
+1232 => x"0c728412",
+1233 => x"0c728812",
+1234 => x"0c518a0b",
+1235 => x"8c122382",
+1236 => x"0b8e1223",
+1237 => x"7190120c",
+1238 => x"7194120c",
+1239 => x"7198120c",
+1240 => x"709c120c",
+1241 => x"80c3bc0b",
+1242 => x"a0120c80",
+1243 => x"c4880ba4",
+1244 => x"120c80c5",
+1245 => x"840ba812",
+1246 => x"0c80c5d5",
+1247 => x"0bac120c",
+1248 => x"843d0d04",
+1249 => x"f83d0d7a",
+1250 => x"80d39c08",
+1251 => x"b8110857",
+1252 => x"57587481",
+1253 => x"ec38aacc",
+1254 => x"0bbc170c",
+1255 => x"810bb817",
+1256 => x"0c7484dc",
+1257 => x"170c830b",
+1258 => x"84e0170c",
+1259 => x"84e81684",
+1260 => x"e4170c84",
+1261 => x"16087571",
+1262 => x"0c758412",
+1263 => x"0c758812",
+1264 => x"0c59840b",
+1265 => x"8c1a2374",
+1266 => x"8e1a2374",
+1267 => x"901a0c74",
+1268 => x"941a0c74",
+1269 => x"981a0c78",
+1270 => x"9c1a0c80",
+1271 => x"c3bc0ba0",
+1272 => x"1a0c80c4",
+1273 => x"880ba41a",
+1274 => x"0c80c584",
+1275 => x"0ba81a0c",
+1276 => x"80c5d50b",
+1277 => x"ac1a0c88",
+1278 => x"16087571",
+1279 => x"0c758412",
+1280 => x"0c758812",
+1281 => x"0c57890b",
+1282 => x"8c182381",
+1283 => x"0b8e1823",
+1284 => x"7490180c",
+1285 => x"7494180c",
+1286 => x"7498180c",
+1287 => x"769c180c",
+1288 => x"80c3bc0b",
+1289 => x"a0180c80",
+1290 => x"c4880ba4",
+1291 => x"180c80c5",
+1292 => x"840ba818",
+1293 => x"0c80c5d5",
+1294 => x"0bac180c",
+1295 => x"8c160875",
+1296 => x"710c7584",
+1297 => x"120c7588",
+1298 => x"120c548a",
+1299 => x"0b8c1523",
+1300 => x"820b8e15",
+1301 => x"23749015",
+1302 => x"0c749415",
+1303 => x"0c749815",
+1304 => x"0c739c15",
+1305 => x"0c80c3bc",
+1306 => x"0ba0150c",
+1307 => x"80c4880b",
+1308 => x"a4150c80",
+1309 => x"c5840ba8",
+1310 => x"150c80c5",
+1311 => x"d50bac15",
+1312 => x"0c84dc16",
+1313 => x"88110884",
+1314 => x"1208ff05",
+1315 => x"57575780",
+1316 => x"75249f38",
+1317 => x"8c162270",
+1318 => x"902b7090",
+1319 => x"2c515559",
+1320 => x"73802e80",
+1321 => x"ed3880dc",
+1322 => x"16ff1656",
+1323 => x"56748025",
+1324 => x"e3387608",
+1325 => x"5574802e",
+1326 => x"8f387488",
+1327 => x"11088412",
+1328 => x"08ff0557",
+1329 => x"5757c839",
+1330 => x"82fc5277",
+1331 => x"518ae33f",
+1332 => x"80088008",
+1333 => x"55568008",
+1334 => x"802ea338",
+1335 => x"80088c05",
+1336 => x"7580080c",
+1337 => x"54840b80",
+1338 => x"0884050c",
+1339 => x"73800888",
+1340 => x"050c82f0",
+1341 => x"53745273",
+1342 => x"5198813f",
+1343 => x"75547374",
+1344 => x"780c5573",
+1345 => x"ffb4388c",
+1346 => x"780c800b",
+1347 => x"800c8a3d",
+1348 => x"0d04810b",
+1349 => x"8c172373",
+1350 => x"760c7388",
+1351 => x"170c7384",
+1352 => x"170c7390",
+1353 => x"170c7394",
+1354 => x"170c7398",
+1355 => x"170cff0b",
+1356 => x"8e172373",
+1357 => x"b0170c73",
+1358 => x"b4170c73",
+1359 => x"80c4170c",
+1360 => x"7380c817",
+1361 => x"0c75800c",
+1362 => x"8a3d0d04",
+1363 => x"ff3d0da3",
+1364 => x"80527351",
+1365 => x"86a93f83",
+1366 => x"3d0d04ff",
+1367 => x"3d0da380",
+1368 => x"5280d39c",
+1369 => x"08518697",
+1370 => x"3f833d0d",
+1371 => x"04fb3d0d",
+1372 => x"77705256",
+1373 => x"98903f80",
+1374 => x"dad80b88",
+1375 => x"05088411",
+1376 => x"08fc0670",
+1377 => x"7b319fef",
+1378 => x"05e08006",
+1379 => x"e0800552",
+1380 => x"5555a080",
+1381 => x"75249438",
+1382 => x"80527551",
+1383 => x"97ea3f80",
+1384 => x"dae00814",
+1385 => x"53728008",
+1386 => x"2e8f3875",
+1387 => x"5197d83f",
+1388 => x"80537280",
+1389 => x"0c873d0d",
+1390 => x"04743052",
+1391 => x"755197c8",
+1392 => x"3f8008ff",
+1393 => x"2ea83880",
+1394 => x"dad80b88",
+1395 => x"05087476",
+1396 => x"31810784",
+1397 => x"120c5380",
+1398 => x"da9c0875",
+1399 => x"3180da9c",
+1400 => x"0c755197",
+1401 => x"a23f810b",
+1402 => x"800c873d",
+1403 => x"0d048052",
+1404 => x"75519794",
+1405 => x"3f80dad8",
+1406 => x"0b880508",
+1407 => x"80087131",
+1408 => x"54548f73",
+1409 => x"25ffa438",
+1410 => x"800880da",
+1411 => x"cc083180",
+1412 => x"da9c0c72",
+1413 => x"81078415",
+1414 => x"0c755196",
+1415 => x"ea3f8053",
+1416 => x"ff9039f7",
+1417 => x"3d0d7b7d",
+1418 => x"545a7280",
+1419 => x"2e828338",
+1420 => x"795196d2",
+1421 => x"3ff81384",
+1422 => x"110870fe",
+1423 => x"06701384",
+1424 => x"1108fc06",
+1425 => x"5c575854",
+1426 => x"5780dae0",
+1427 => x"08742e82",
+1428 => x"de387784",
+1429 => x"150c8073",
+1430 => x"81065659",
+1431 => x"74792e81",
+1432 => x"d5387714",
+1433 => x"84110881",
+1434 => x"06565374",
+1435 => x"a0387716",
+1436 => x"567881e6",
+1437 => x"38881408",
+1438 => x"557480da",
+1439 => x"e02e82f9",
+1440 => x"388c1408",
+1441 => x"708c170c",
+1442 => x"7588120c",
+1443 => x"58758107",
+1444 => x"84180c75",
+1445 => x"1776710c",
+1446 => x"54788191",
+1447 => x"3883ff76",
+1448 => x"2781c838",
+1449 => x"75892a76",
+1450 => x"832a5454",
+1451 => x"73802ebf",
+1452 => x"3875862a",
+1453 => x"b8055384",
+1454 => x"7427b438",
+1455 => x"80db1453",
+1456 => x"947427ab",
+1457 => x"38758c2a",
+1458 => x"80ee0553",
+1459 => x"80d47427",
+1460 => x"9e38758f",
+1461 => x"2a80f705",
+1462 => x"5382d474",
+1463 => x"27913875",
+1464 => x"922a80fc",
+1465 => x"05538ad4",
+1466 => x"74278438",
+1467 => x"80fe5372",
+1468 => x"10101080",
+1469 => x"dad80588",
+1470 => x"11085555",
+1471 => x"73752e82",
+1472 => x"bf388414",
+1473 => x"08fc0659",
+1474 => x"7579278d",
+1475 => x"38881408",
+1476 => x"5473752e",
+1477 => x"098106ea",
+1478 => x"388c1408",
+1479 => x"708c190c",
+1480 => x"7488190c",
+1481 => x"7788120c",
+1482 => x"55768c15",
+1483 => x"0c795194",
+1484 => x"d63f8b3d",
+1485 => x"0d047608",
+1486 => x"77713158",
+1487 => x"76058818",
+1488 => x"08565674",
+1489 => x"80dae02e",
+1490 => x"80e0388c",
+1491 => x"1708708c",
+1492 => x"170c7588",
+1493 => x"120c53fe",
+1494 => x"89398814",
+1495 => x"088c1508",
+1496 => x"708c130c",
+1497 => x"5988190c",
+1498 => x"fea33975",
+1499 => x"832a7054",
+1500 => x"54807424",
+1501 => x"81983872",
+1502 => x"822c8171",
+1503 => x"2b80dadc",
+1504 => x"080780da",
+1505 => x"d80b8405",
+1506 => x"0c741010",
+1507 => x"1080dad8",
+1508 => x"05881108",
+1509 => x"718c1b0c",
+1510 => x"70881b0c",
+1511 => x"7988130c",
+1512 => x"565a5576",
+1513 => x"8c150cff",
+1514 => x"84398159",
+1515 => x"fdb43977",
+1516 => x"16738106",
+1517 => x"54557298",
+1518 => x"38760877",
+1519 => x"71315875",
+1520 => x"058c1808",
+1521 => x"88190871",
+1522 => x"8c120c88",
+1523 => x"120c5555",
+1524 => x"74810784",
+1525 => x"180c7680",
+1526 => x"dad80b88",
+1527 => x"050c80da",
+1528 => x"d4087526",
+1529 => x"fec73880",
+1530 => x"dad00852",
+1531 => x"7951fafd",
+1532 => x"3f795193",
+1533 => x"923ffeba",
+1534 => x"3981778c",
+1535 => x"170c7788",
+1536 => x"170c758c",
+1537 => x"190c7588",
+1538 => x"190c59fd",
+1539 => x"80398314",
+1540 => x"70822c81",
+1541 => x"712b80da",
+1542 => x"dc080780",
+1543 => x"dad80b84",
+1544 => x"050c7510",
+1545 => x"101080da",
+1546 => x"d8058811",
+1547 => x"08718c1c",
+1548 => x"0c70881c",
+1549 => x"0c7a8813",
+1550 => x"0c575b56",
+1551 => x"53fee439",
+1552 => x"807324a3",
+1553 => x"3872822c",
+1554 => x"81712b80",
+1555 => x"dadc0807",
+1556 => x"80dad80b",
+1557 => x"84050c58",
+1558 => x"748c180c",
+1559 => x"7388180c",
+1560 => x"7688160c",
+1561 => x"fdc33983",
+1562 => x"1370822c",
+1563 => x"81712b80",
+1564 => x"dadc0807",
+1565 => x"80dad80b",
+1566 => x"84050c59",
+1567 => x"53da39f9",
+1568 => x"3d0d797b",
+1569 => x"5853800b",
+1570 => x"80d39c08",
+1571 => x"53567272",
+1572 => x"2ebc3884",
+1573 => x"dc135574",
+1574 => x"762eb338",
+1575 => x"88150884",
+1576 => x"1608ff05",
+1577 => x"54548073",
+1578 => x"2499388c",
+1579 => x"14227090",
+1580 => x"2b535871",
+1581 => x"80d43880",
+1582 => x"dc14ff14",
+1583 => x"54547280",
+1584 => x"25e93874",
+1585 => x"085574d4",
+1586 => x"3880d39c",
+1587 => x"085284dc",
+1588 => x"12557480",
+1589 => x"2ead3888",
+1590 => x"15088416",
+1591 => x"08ff0554",
+1592 => x"54807324",
+1593 => x"98388c14",
+1594 => x"2270902b",
+1595 => x"535871ad",
+1596 => x"3880dc14",
+1597 => x"ff145454",
+1598 => x"728025ea",
+1599 => x"38740855",
+1600 => x"74d53875",
+1601 => x"800c893d",
+1602 => x"0d047351",
+1603 => x"762d7580",
+1604 => x"080780dc",
+1605 => x"15ff1555",
+1606 => x"5556ffa2",
+1607 => x"39735176",
+1608 => x"2d758008",
+1609 => x"0780dc15",
+1610 => x"ff155555",
+1611 => x"56ca39ea",
+1612 => x"3d0d688c",
+1613 => x"1122700a",
+1614 => x"100a8106",
+1615 => x"57585674",
+1616 => x"80e4388e",
+1617 => x"16227090",
+1618 => x"2b70902c",
+1619 => x"51555880",
+1620 => x"7424b138",
+1621 => x"983dc405",
+1622 => x"53735280",
+1623 => x"d39c0851",
+1624 => x"93fb3f80",
+1625 => x"0b800824",
+1626 => x"97387983",
+1627 => x"e0800654",
+1628 => x"7380c080",
+1629 => x"2e818f38",
+1630 => x"73828080",
+1631 => x"2e819138",
+1632 => x"8c162257",
+1633 => x"76908007",
+1634 => x"54738c17",
+1635 => x"23888052",
+1636 => x"80d39c08",
+1637 => x"51819b3f",
+1638 => x"80089d38",
+1639 => x"8c162282",
+1640 => x"0755748c",
+1641 => x"172380c3",
+1642 => x"1670770c",
+1643 => x"90170c81",
+1644 => x"0b94170c",
+1645 => x"983d0d04",
+1646 => x"80d39c08",
+1647 => x"aacc0bbc",
+1648 => x"120c588c",
+1649 => x"16228180",
+1650 => x"0754738c",
+1651 => x"17238008",
+1652 => x"760c8008",
+1653 => x"90170c88",
+1654 => x"800b9417",
+1655 => x"0c74802e",
+1656 => x"d3388e16",
+1657 => x"2270902b",
+1658 => x"70902c53",
+1659 => x"56549cd0",
+1660 => x"3f800880",
+1661 => x"2effbd38",
+1662 => x"8c162281",
+1663 => x"0757768c",
+1664 => x"1723983d",
+1665 => x"0d04810b",
+1666 => x"8c172258",
+1667 => x"55fef539",
+1668 => x"a8160880",
+1669 => x"c5842e09",
+1670 => x"8106fee4",
+1671 => x"388c1622",
+1672 => x"88800754",
+1673 => x"738c1723",
+1674 => x"88800b80",
+1675 => x"cc170cfe",
+1676 => x"dc39f43d",
+1677 => x"0d7e608b",
+1678 => x"1170f806",
+1679 => x"5b55555d",
+1680 => x"72962683",
+1681 => x"38905880",
+1682 => x"78247479",
+1683 => x"26075580",
+1684 => x"5474742e",
+1685 => x"09810680",
+1686 => x"ca387c51",
+1687 => x"8ea83f77",
+1688 => x"83f72680",
+1689 => x"c5387783",
+1690 => x"2a701010",
+1691 => x"1080dad8",
+1692 => x"058c1108",
+1693 => x"58585475",
+1694 => x"772e81f0",
+1695 => x"38841608",
+1696 => x"fc068c17",
+1697 => x"08881808",
+1698 => x"718c120c",
+1699 => x"88120c5b",
+1700 => x"76058411",
+1701 => x"08810784",
+1702 => x"120c537c",
+1703 => x"518de83f",
+1704 => x"88165473",
+1705 => x"800c8e3d",
+1706 => x"0d047789",
+1707 => x"2a78832a",
+1708 => x"58547380",
+1709 => x"2ebf3877",
+1710 => x"862ab805",
+1711 => x"57847427",
+1712 => x"b43880db",
+1713 => x"14579474",
+1714 => x"27ab3877",
+1715 => x"8c2a80ee",
+1716 => x"055780d4",
+1717 => x"74279e38",
+1718 => x"778f2a80",
+1719 => x"f7055782",
+1720 => x"d4742791",
+1721 => x"3877922a",
+1722 => x"80fc0557",
+1723 => x"8ad47427",
+1724 => x"843880fe",
+1725 => x"57761010",
+1726 => x"1080dad8",
+1727 => x"058c1108",
+1728 => x"56537473",
+1729 => x"2ea33884",
+1730 => x"1508fc06",
+1731 => x"70793155",
+1732 => x"56738f24",
+1733 => x"88e43873",
+1734 => x"802588e6",
+1735 => x"388c1508",
+1736 => x"5574732e",
+1737 => x"098106df",
+1738 => x"38811759",
+1739 => x"80dae808",
+1740 => x"567580da",
+1741 => x"e02e82cc",
+1742 => x"38841608",
+1743 => x"fc067079",
+1744 => x"31555573",
+1745 => x"8f24bb38",
+1746 => x"80dae00b",
+1747 => x"80daec0c",
+1748 => x"80dae00b",
+1749 => x"80dae80c",
+1750 => x"80742480",
+1751 => x"db387416",
+1752 => x"84110881",
+1753 => x"0784120c",
+1754 => x"53feb039",
+1755 => x"88168c11",
+1756 => x"08575975",
+1757 => x"792e0981",
+1758 => x"06fe8238",
+1759 => x"821459ff",
+1760 => x"ab397716",
+1761 => x"78810784",
+1762 => x"180c7080",
+1763 => x"daec0c70",
+1764 => x"80dae80c",
+1765 => x"80dae00b",
+1766 => x"8c120c8c",
+1767 => x"11088812",
+1768 => x"0c748107",
+1769 => x"84120c74",
+1770 => x"0574710c",
+1771 => x"5b7c518b",
+1772 => x"d63f8816",
+1773 => x"54fdec39",
+1774 => x"83ff7527",
+1775 => x"83913874",
+1776 => x"892a7583",
+1777 => x"2a545473",
+1778 => x"802ebf38",
+1779 => x"74862ab8",
+1780 => x"05538474",
+1781 => x"27b43880",
+1782 => x"db145394",
+1783 => x"7427ab38",
+1784 => x"748c2a80",
+1785 => x"ee055380",
+1786 => x"d474279e",
+1787 => x"38748f2a",
+1788 => x"80f70553",
+1789 => x"82d47427",
+1790 => x"91387492",
+1791 => x"2a80fc05",
+1792 => x"538ad474",
+1793 => x"27843880",
+1794 => x"fe537210",
+1795 => x"101080da",
+1796 => x"d8058811",
+1797 => x"08555773",
+1798 => x"772e868b",
+1799 => x"38841408",
+1800 => x"fc065b74",
+1801 => x"7b278d38",
+1802 => x"88140854",
+1803 => x"73772e09",
+1804 => x"8106ea38",
+1805 => x"8c140880",
+1806 => x"dad80b84",
+1807 => x"0508718c",
+1808 => x"190c7588",
+1809 => x"190c7788",
+1810 => x"130c5c57",
+1811 => x"758c150c",
+1812 => x"78538079",
+1813 => x"24839838",
+1814 => x"72822c81",
+1815 => x"712b5656",
+1816 => x"747b2680",
+1817 => x"ca387a75",
+1818 => x"06577682",
+1819 => x"a33878fc",
+1820 => x"06840559",
+1821 => x"7410707c",
+1822 => x"06555573",
+1823 => x"82923884",
+1824 => x"1959f139",
+1825 => x"80dad80b",
+1826 => x"84050879",
+1827 => x"545b7880",
+1828 => x"25c63882",
+1829 => x"da397409",
+1830 => x"7b067080",
+1831 => x"dad80b84",
+1832 => x"050c5b74",
+1833 => x"1055747b",
+1834 => x"26853874",
+1835 => x"85bc3880",
+1836 => x"dad80b88",
+1837 => x"05087084",
+1838 => x"1208fc06",
+1839 => x"707b317b",
+1840 => x"72268f72",
+1841 => x"25075d57",
+1842 => x"5c5c5578",
+1843 => x"802e80d9",
+1844 => x"38791580",
+1845 => x"dad00819",
+1846 => x"90115954",
+1847 => x"5680dacc",
+1848 => x"08ff2e88",
+1849 => x"38a08f13",
+1850 => x"e0800657",
+1851 => x"76527c51",
+1852 => x"89963f80",
+1853 => x"08548008",
+1854 => x"ff2e9038",
+1855 => x"80087627",
+1856 => x"82a73874",
+1857 => x"80dad82e",
+1858 => x"829f3880",
+1859 => x"dad80b88",
+1860 => x"05085584",
+1861 => x"1508fc06",
+1862 => x"70793179",
+1863 => x"72268f72",
+1864 => x"25075d55",
+1865 => x"5a7a83f2",
+1866 => x"38778107",
+1867 => x"84160c77",
+1868 => x"157080da",
+1869 => x"d80b8805",
+1870 => x"0c748107",
+1871 => x"84120c56",
+1872 => x"7c5188c3",
+1873 => x"3f881554",
+1874 => x"73800c8e",
+1875 => x"3d0d0474",
+1876 => x"832a7054",
+1877 => x"54807424",
+1878 => x"819b3872",
+1879 => x"822c8171",
+1880 => x"2b80dadc",
+1881 => x"08077080",
+1882 => x"dad80b84",
+1883 => x"050c7510",
+1884 => x"101080da",
+1885 => x"d8058811",
+1886 => x"08718c1b",
+1887 => x"0c70881b",
+1888 => x"0c798813",
+1889 => x"0c57555c",
+1890 => x"55758c15",
+1891 => x"0cfdc139",
+1892 => x"78791010",
+1893 => x"1080dad8",
+1894 => x"0570565b",
+1895 => x"5c8c1408",
+1896 => x"5675742e",
+1897 => x"a3388416",
+1898 => x"08fc0670",
+1899 => x"79315853",
+1900 => x"768f2483",
+1901 => x"f1387680",
+1902 => x"2584af38",
+1903 => x"8c160856",
+1904 => x"75742e09",
+1905 => x"8106df38",
+1906 => x"8814811a",
+1907 => x"70830655",
+1908 => x"5a5472c9",
+1909 => x"387b8306",
+1910 => x"5675802e",
+1911 => x"fdb838ff",
+1912 => x"1cf81b5b",
+1913 => x"5c881a08",
+1914 => x"7a2eea38",
+1915 => x"fdb53983",
+1916 => x"1953fce4",
+1917 => x"39831470",
+1918 => x"822c8171",
+1919 => x"2b80dadc",
+1920 => x"08077080",
+1921 => x"dad80b84",
+1922 => x"050c7610",
+1923 => x"101080da",
+1924 => x"d8058811",
+1925 => x"08718c1c",
+1926 => x"0c70881c",
+1927 => x"0c7a8813",
+1928 => x"0c58535d",
+1929 => x"5653fee1",
+1930 => x"3980da9c",
+1931 => x"08175980",
+1932 => x"08762e81",
+1933 => x"8b3880da",
+1934 => x"cc08ff2e",
+1935 => x"848e3873",
+1936 => x"76311980",
+1937 => x"da9c0c73",
+1938 => x"87067056",
+1939 => x"5372802e",
+1940 => x"88388873",
+1941 => x"31701555",
+1942 => x"5576149f",
+1943 => x"ff06a080",
+1944 => x"71311670",
+1945 => x"547e5351",
+1946 => x"53869d3f",
+1947 => x"80085680",
+1948 => x"08ff2e81",
+1949 => x"9e3880da",
+1950 => x"9c081370",
+1951 => x"80da9c0c",
+1952 => x"747580da",
+1953 => x"d80b8805",
+1954 => x"0c777631",
+1955 => x"15810755",
+1956 => x"56597a80",
+1957 => x"dad82e83",
+1958 => x"c038798f",
+1959 => x"2682ef38",
+1960 => x"810b8415",
+1961 => x"0c841508",
+1962 => x"fc067079",
+1963 => x"31797226",
+1964 => x"8f722507",
+1965 => x"5d555a7a",
+1966 => x"802efced",
+1967 => x"3880db39",
+1968 => x"80089fff",
+1969 => x"065574fe",
+1970 => x"ed387880",
+1971 => x"da9c0c80",
+1972 => x"dad80b88",
+1973 => x"05087a18",
+1974 => x"81078412",
+1975 => x"0c5580da",
+1976 => x"c8087927",
+1977 => x"86387880",
+1978 => x"dac80c80",
+1979 => x"dac40879",
+1980 => x"27fca038",
+1981 => x"7880dac4",
+1982 => x"0c841508",
+1983 => x"fc067079",
+1984 => x"31797226",
+1985 => x"8f722507",
+1986 => x"5d555a7a",
+1987 => x"802efc99",
+1988 => x"38883980",
+1989 => x"745753fe",
+1990 => x"dd397c51",
+1991 => x"84e93f80",
+1992 => x"0b800c8e",
+1993 => x"3d0d0480",
+1994 => x"7324a538",
+1995 => x"72822c81",
+1996 => x"712b80da",
+1997 => x"dc080770",
+1998 => x"80dad80b",
+1999 => x"84050c5c",
+2000 => x"5a768c17",
+2001 => x"0c738817",
+2002 => x"0c758818",
+2003 => x"0cf9fd39",
+2004 => x"83137082",
+2005 => x"2c81712b",
+2006 => x"80dadc08",
+2007 => x"077080da",
+2008 => x"d80b8405",
+2009 => x"0c5d5b53",
+2010 => x"d8397a75",
+2011 => x"065c7bfc",
+2012 => x"9f388419",
+2013 => x"75105659",
+2014 => x"f139ff17",
+2015 => x"810559f7",
+2016 => x"ab398c15",
+2017 => x"08881608",
+2018 => x"718c120c",
+2019 => x"88120c59",
+2020 => x"75158411",
+2021 => x"08810784",
+2022 => x"120c587c",
+2023 => x"5183e83f",
+2024 => x"881554fb",
+2025 => x"a3397716",
+2026 => x"78810784",
+2027 => x"180c8c17",
+2028 => x"08881808",
+2029 => x"718c120c",
+2030 => x"88120c5c",
+2031 => x"7080daec",
+2032 => x"0c7080da",
+2033 => x"e80c80da",
+2034 => x"e00b8c12",
+2035 => x"0c8c1108",
+2036 => x"88120c77",
+2037 => x"81078412",
+2038 => x"0c770577",
+2039 => x"710c557c",
+2040 => x"5183a43f",
+2041 => x"881654f5",
+2042 => x"ba397216",
+2043 => x"84110881",
+2044 => x"0784120c",
+2045 => x"588c1608",
+2046 => x"88170871",
+2047 => x"8c120c88",
+2048 => x"120c577c",
+2049 => x"5183803f",
+2050 => x"881654f5",
+2051 => x"96397284",
+2052 => x"150cf41a",
+2053 => x"f8067084",
+2054 => x"1d088106",
+2055 => x"07841d0c",
+2056 => x"701c5556",
+2057 => x"850b8415",
+2058 => x"0c850b88",
+2059 => x"150c8f76",
+2060 => x"27fdab38",
+2061 => x"881b527c",
+2062 => x"51ebe83f",
+2063 => x"80dad80b",
+2064 => x"88050880",
+2065 => x"da9c085a",
+2066 => x"55fd9339",
+2067 => x"7880da9c",
+2068 => x"0c7380da",
+2069 => x"cc0cfbef",
+2070 => x"39728415",
+2071 => x"0cfcff39",
+2072 => x"fb3d0d77",
+2073 => x"707a7c58",
+2074 => x"5553568f",
+2075 => x"752780e6",
+2076 => x"38727607",
+2077 => x"83065170",
+2078 => x"80dc3875",
+2079 => x"73525470",
+2080 => x"70840552",
+2081 => x"08747084",
+2082 => x"05560c73",
+2083 => x"71708405",
+2084 => x"53087170",
+2085 => x"8405530c",
+2086 => x"71708405",
+2087 => x"53087170",
+2088 => x"8405530c",
+2089 => x"71708405",
+2090 => x"53087170",
+2091 => x"8405530c",
+2092 => x"f0165654",
+2093 => x"748f26c7",
+2094 => x"38837527",
+2095 => x"95387070",
+2096 => x"84055208",
+2097 => x"74708405",
+2098 => x"560cfc15",
+2099 => x"55748326",
+2100 => x"ed387371",
+2101 => x"5452ff15",
+2102 => x"5170ff2e",
+2103 => x"98387270",
+2104 => x"81055433",
+2105 => x"72708105",
+2106 => x"5434ff11",
+2107 => x"5170ff2e",
+2108 => x"098106ea",
+2109 => x"3875800c",
+2110 => x"873d0d04",
+2111 => x"fb3d0d77",
+2112 => x"7a71028c",
+2113 => x"05a30533",
+2114 => x"58545456",
+2115 => x"83732780",
+2116 => x"d4387583",
+2117 => x"06517080",
+2118 => x"cc387488",
+2119 => x"2b750770",
+2120 => x"71902b07",
+2121 => x"55518f73",
+2122 => x"27a73873",
+2123 => x"72708405",
+2124 => x"540c7174",
+2125 => x"71708405",
+2126 => x"530c7471",
+2127 => x"70840553",
+2128 => x"0c747170",
+2129 => x"8405530c",
+2130 => x"f0145452",
+2131 => x"728f26db",
+2132 => x"38837327",
+2133 => x"90387372",
+2134 => x"70840554",
+2135 => x"0cfc1353",
+2136 => x"728326f2",
+2137 => x"38ff1351",
+2138 => x"70ff2e93",
+2139 => x"38747270",
+2140 => x"81055434",
+2141 => x"ff115170",
+2142 => x"ff2e0981",
+2143 => x"06ef3875",
+2144 => x"800c873d",
+2145 => x"0d040404",
+2146 => x"fd3d0d80",
+2147 => x"0b80e3a0",
+2148 => x"0c765184",
+2149 => x"ee3f8008",
+2150 => x"538008ff",
+2151 => x"2e883872",
+2152 => x"800c853d",
+2153 => x"0d0480e3",
+2154 => x"a0085473",
+2155 => x"802ef038",
+2156 => x"7574710c",
+2157 => x"5272800c",
+2158 => x"853d0d04",
+2159 => x"f93d0d79",
+2160 => x"7c557b54",
+2161 => x"8e112270",
+2162 => x"902b7090",
+2163 => x"2c555780",
+2164 => x"d39c0853",
+2165 => x"585683f3",
+2166 => x"3f800857",
+2167 => x"800b8008",
+2168 => x"24933880",
+2169 => x"d0160880",
+2170 => x"080580d0",
+2171 => x"170c7680",
+2172 => x"0c893d0d",
+2173 => x"048c1622",
+2174 => x"83dfff06",
+2175 => x"55748c17",
+2176 => x"2376800c",
+2177 => x"893d0d04",
+2178 => x"fa3d0d78",
+2179 => x"8c112270",
+2180 => x"882a7081",
+2181 => x"06515758",
+2182 => x"5674a938",
+2183 => x"8c162283",
+2184 => x"dfff0655",
+2185 => x"748c1723",
+2186 => x"7a547953",
+2187 => x"8e162270",
+2188 => x"902b7090",
+2189 => x"2c545680",
+2190 => x"d39c0852",
+2191 => x"5681b23f",
+2192 => x"883d0d04",
+2193 => x"82548053",
+2194 => x"8e162270",
+2195 => x"902b7090",
+2196 => x"2c545680",
+2197 => x"d39c0852",
+2198 => x"5782b83f",
+2199 => x"8c162283",
+2200 => x"dfff0655",
+2201 => x"748c1723",
+2202 => x"7a547953",
+2203 => x"8e162270",
+2204 => x"902b7090",
+2205 => x"2c545680",
+2206 => x"d39c0852",
+2207 => x"5680f23f",
+2208 => x"883d0d04",
+2209 => x"f93d0d79",
+2210 => x"7c557b54",
+2211 => x"8e112270",
+2212 => x"902b7090",
+2213 => x"2c555780",
+2214 => x"d39c0853",
+2215 => x"585681f3",
+2216 => x"3f800857",
+2217 => x"8008ff2e",
+2218 => x"99388c16",
+2219 => x"22a08007",
+2220 => x"55748c17",
+2221 => x"23800880",
+2222 => x"d0170c76",
+2223 => x"800c893d",
+2224 => x"0d048c16",
+2225 => x"2283dfff",
+2226 => x"0655748c",
+2227 => x"17237680",
+2228 => x"0c893d0d",
+2229 => x"04fe3d0d",
+2230 => x"748e1122",
+2231 => x"70902b70",
+2232 => x"902c5551",
+2233 => x"515380d3",
+2234 => x"9c0851bd",
+2235 => x"3f843d0d",
+2236 => x"04fb3d0d",
+2237 => x"800b80e3",
+2238 => x"a00c7a53",
+2239 => x"79527851",
+2240 => x"82fc3f80",
+2241 => x"08558008",
+2242 => x"ff2e8838",
+2243 => x"74800c87",
+2244 => x"3d0d0480",
+2245 => x"e3a00856",
+2246 => x"75802ef0",
+2247 => x"38777671",
+2248 => x"0c547480",
+2249 => x"0c873d0d",
+2250 => x"04fd3d0d",
+2251 => x"800b80e3",
+2252 => x"a00c7651",
+2253 => x"85853f80",
+2254 => x"08538008",
+2255 => x"ff2e8838",
+2256 => x"72800c85",
+2257 => x"3d0d0480",
+2258 => x"e3a00854",
+2259 => x"73802ef0",
+2260 => x"38757471",
+2261 => x"0c527280",
+2262 => x"0c853d0d",
+2263 => x"04fc3d0d",
+2264 => x"800b80e3",
+2265 => x"a00c7852",
+2266 => x"775188b8",
+2267 => x"3f800854",
+2268 => x"8008ff2e",
+2269 => x"88387380",
+2270 => x"0c863d0d",
+2271 => x"0480e3a0",
+2272 => x"08557480",
+2273 => x"2ef03876",
+2274 => x"75710c53",
+2275 => x"73800c86",
+2276 => x"3d0d04fb",
+2277 => x"3d0d800b",
+2278 => x"80e3a00c",
+2279 => x"7a537952",
+2280 => x"78518593",
+2281 => x"3f800855",
+2282 => x"8008ff2e",
+2283 => x"88387480",
+2284 => x"0c873d0d",
+2285 => x"0480e3a0",
+2286 => x"08567580",
+2287 => x"2ef03877",
+2288 => x"76710c54",
+2289 => x"74800c87",
+2290 => x"3d0d04fb",
+2291 => x"3d0d800b",
+2292 => x"80e3a00c",
+2293 => x"7a537952",
+2294 => x"7851829a",
+2295 => x"3f800855",
+2296 => x"8008ff2e",
+2297 => x"88387480",
+2298 => x"0c873d0d",
+2299 => x"0480e3a0",
+2300 => x"08567580",
+2301 => x"2ef03877",
+2302 => x"76710c54",
+2303 => x"74800c87",
+2304 => x"3d0d04fe",
+2305 => x"3d0d80e3",
+2306 => x"a4085170",
+2307 => x"8a3880e3",
+2308 => x"ac7080e3",
+2309 => x"a40c5174",
+2310 => x"1152ff53",
+2311 => x"7187fb80",
+2312 => x"80268838",
+2313 => x"7180e3a4",
+2314 => x"0c705372",
+2315 => x"800c843d",
+2316 => x"0d04fd3d",
+2317 => x"0d800b80",
+2318 => x"d3900854",
+2319 => x"5472812e",
+2320 => x"9c387380",
+2321 => x"e3a80cc0",
+2322 => x"d83fffbf",
+2323 => x"b33f80e2",
+2324 => x"e0528151",
+2325 => x"c3b43f80",
+2326 => x"0851889b",
+2327 => x"3f7280e3",
+2328 => x"a80cc0bd",
+2329 => x"3fffbf98",
+2330 => x"3f80e2e0",
+2331 => x"528151c3",
+2332 => x"993f8008",
+2333 => x"5188803f",
+2334 => x"00ff3900",
+2335 => x"ff39f53d",
+2336 => x"0d7e6080",
+2337 => x"e3a80870",
+2338 => x"5b585b5b",
+2339 => x"7580c538",
+2340 => x"777a25a2",
+2341 => x"38771b70",
+2342 => x"337081ff",
+2343 => x"06585859",
+2344 => x"758a2e99",
+2345 => x"387681ff",
+2346 => x"0651ffbf",
+2347 => x"d33f8118",
+2348 => x"58797824",
+2349 => x"e0387980",
+2350 => x"0c8d3d0d",
+2351 => x"048d51ff",
+2352 => x"bfbe3f78",
+2353 => x"337081ff",
+2354 => x"065257ff",
+2355 => x"bfb23f81",
+2356 => x"1858de39",
+2357 => x"79557a54",
+2358 => x"7d538552",
+2359 => x"8d3dfc05",
+2360 => x"51ffbede",
+2361 => x"3f800856",
+2362 => x"87863f7b",
+2363 => x"80080c75",
+2364 => x"800c8d3d",
+2365 => x"0d04f63d",
+2366 => x"0d7d7f80",
+2367 => x"e3a80870",
+2368 => x"5a585a5a",
+2369 => x"7580c438",
+2370 => x"767925b2",
+2371 => x"38761a58",
+2372 => x"ffbecd3f",
+2373 => x"80087834",
+2374 => x"800b8008",
+2375 => x"81ff0657",
+2376 => x"58758a2e",
+2377 => x"a238758d",
+2378 => x"32703070",
+2379 => x"80257a07",
+2380 => x"51515675",
+2381 => x"b8388117",
+2382 => x"57787724",
+2383 => x"d0387656",
+2384 => x"75800c8c",
+2385 => x"3d0d0481",
+2386 => x"58dc3978",
+2387 => x"5579547c",
+2388 => x"5384528c",
+2389 => x"3dfc0551",
+2390 => x"ffbde73f",
+2391 => x"80085686",
+2392 => x"8f3f7a80",
+2393 => x"080c7580",
+2394 => x"0c8c3d0d",
+2395 => x"04811756",
+2396 => x"cf39f93d",
+2397 => x"0d795780",
+2398 => x"e3a80880",
+2399 => x"2ead3876",
+2400 => x"51c4e33f",
+2401 => x"7b567a55",
+2402 => x"80088105",
+2403 => x"54765382",
+2404 => x"52893dfc",
+2405 => x"0551ffbd",
+2406 => x"a93f8008",
+2407 => x"5785d13f",
+2408 => x"7780080c",
+2409 => x"76800c89",
+2410 => x"3d0d0485",
+2411 => x"c33f850b",
+2412 => x"80080cff",
+2413 => x"0b800c89",
+2414 => x"3d0d04fb",
+2415 => x"3d0d80e3",
+2416 => x"a8087056",
+2417 => x"54738838",
+2418 => x"74800c87",
+2419 => x"3d0d0477",
+2420 => x"53835287",
+2421 => x"3dfc0551",
+2422 => x"ffbce73f",
+2423 => x"80085485",
+2424 => x"8f3f7580",
+2425 => x"080c7380",
+2426 => x"0c873d0d",
+2427 => x"04ff0b80",
+2428 => x"0c04fb3d",
+2429 => x"0d775580",
+2430 => x"e3a80880",
+2431 => x"2ea93874",
+2432 => x"51c3e33f",
+2433 => x"80088105",
+2434 => x"54745387",
+2435 => x"52873dfc",
+2436 => x"0551ffbc",
+2437 => x"ad3f8008",
+2438 => x"5584d53f",
+2439 => x"7580080c",
+2440 => x"74800c87",
+2441 => x"3d0d0484",
+2442 => x"c73f850b",
+2443 => x"80080cff",
+2444 => x"0b800c87",
+2445 => x"3d0d04fa",
+2446 => x"3d0d80e3",
+2447 => x"a808802e",
+2448 => x"a3387a55",
+2449 => x"79547853",
+2450 => x"8652883d",
+2451 => x"fc0551ff",
+2452 => x"bbf03f80",
+2453 => x"08568498",
+2454 => x"3f768008",
+2455 => x"0c75800c",
+2456 => x"883d0d04",
+2457 => x"848a3f9d",
+2458 => x"0b80080c",
+2459 => x"ff0b800c",
+2460 => x"883d0d04",
+2461 => x"f73d0d7b",
+2462 => x"7d5b59bc",
+2463 => x"53805279",
+2464 => x"51f4f93f",
+2465 => x"80705657",
+2466 => x"98567419",
+2467 => x"70337078",
+2468 => x"2b790781",
+2469 => x"18f81a5a",
+2470 => x"58595558",
+2471 => x"847524ea",
+2472 => x"38767a23",
+2473 => x"84195880",
+2474 => x"70565798",
+2475 => x"56741870",
+2476 => x"3370782b",
+2477 => x"79078118",
+2478 => x"f81a5a58",
+2479 => x"59515484",
+2480 => x"7524ea38",
+2481 => x"76821b23",
+2482 => x"88195880",
+2483 => x"70565798",
+2484 => x"56741870",
+2485 => x"3370782b",
+2486 => x"79078118",
+2487 => x"f81a5a58",
+2488 => x"59515484",
+2489 => x"7524ea38",
+2490 => x"76841b0c",
+2491 => x"8c195880",
+2492 => x"70565798",
+2493 => x"56741870",
+2494 => x"3370782b",
+2495 => x"79078118",
+2496 => x"f81a5a58",
+2497 => x"59515484",
+2498 => x"7524ea38",
+2499 => x"76881b23",
+2500 => x"90195880",
+2501 => x"70565798",
+2502 => x"56741870",
+2503 => x"3370782b",
+2504 => x"79078118",
+2505 => x"f81a5a58",
+2506 => x"59515484",
+2507 => x"7524ea38",
+2508 => x"768a1b23",
+2509 => x"94195880",
+2510 => x"70565798",
+2511 => x"56741870",
+2512 => x"3370782b",
+2513 => x"79078118",
+2514 => x"f81a5a58",
+2515 => x"59515484",
+2516 => x"7524ea38",
+2517 => x"768c1b23",
+2518 => x"98195880",
+2519 => x"70565798",
+2520 => x"56741870",
+2521 => x"3370782b",
+2522 => x"79078118",
+2523 => x"f81a5a58",
+2524 => x"59515484",
+2525 => x"7524ea38",
+2526 => x"768e1b23",
+2527 => x"9c195880",
+2528 => x"705657b8",
+2529 => x"56741870",
+2530 => x"3370782b",
+2531 => x"79078118",
+2532 => x"f81a5a58",
+2533 => x"595a5488",
+2534 => x"7524ea38",
+2535 => x"76901b0c",
+2536 => x"8b3d0d04",
+2537 => x"e93d0d6a",
+2538 => x"80e3a808",
+2539 => x"57577593",
+2540 => x"3880c080",
+2541 => x"0b84180c",
+2542 => x"75ac180c",
+2543 => x"75800c99",
+2544 => x"3d0d0489",
+2545 => x"3d70556a",
+2546 => x"54558a52",
+2547 => x"993dffbc",
+2548 => x"0551ffb8",
+2549 => x"ed3f8008",
+2550 => x"77537552",
+2551 => x"56fd953f",
+2552 => x"818e3f77",
+2553 => x"80080c75",
+2554 => x"800c993d",
+2555 => x"0d04e93d",
+2556 => x"0d695780",
+2557 => x"e3a80880",
+2558 => x"2eb73876",
+2559 => x"51ffbfe6",
+2560 => x"3f893d70",
+2561 => x"56800881",
+2562 => x"05557754",
+2563 => x"568f5299",
+2564 => x"3dffbc05",
+2565 => x"51ffb8aa",
+2566 => x"3f80086b",
+2567 => x"53765257",
+2568 => x"fcd23f80",
+2569 => x"cb3f7780",
+2570 => x"080c7680",
+2571 => x"0c993d0d",
+2572 => x"04be3f85",
+2573 => x"0b80080c",
+2574 => x"ff0b800c",
+2575 => x"993d0d04",
+2576 => x"fc3d0d81",
+2577 => x"5480e3a8",
+2578 => x"08883873",
+2579 => x"800c863d",
+2580 => x"0d047653",
+2581 => x"97b95286",
+2582 => x"3dfc0551",
+2583 => x"ffb7e33f",
+2584 => x"8008548c",
+2585 => x"3f748008",
+2586 => x"0c73800c",
+2587 => x"863d0d04",
+2588 => x"80d39c08",
+2589 => x"800c04f7",
+2590 => x"3d0d7b80",
+2591 => x"d39c0882",
+2592 => x"c811085a",
+2593 => x"545a7780",
+2594 => x"2e80da38",
+2595 => x"81881884",
+2596 => x"1908ff05",
+2597 => x"81712b59",
+2598 => x"55598074",
+2599 => x"2480ea38",
+2600 => x"807424b5",
+2601 => x"3873822b",
+2602 => x"78118805",
+2603 => x"56568180",
+2604 => x"19087706",
+2605 => x"5372802e",
+2606 => x"b6387816",
+2607 => x"70085353",
+2608 => x"79517408",
+2609 => x"53722dff",
+2610 => x"14fc17fc",
+2611 => x"1779812c",
+2612 => x"5a575754",
+2613 => x"738025d6",
+2614 => x"38770858",
+2615 => x"77ffad38",
+2616 => x"80d39c08",
+2617 => x"53bc1308",
+2618 => x"a5387951",
+2619 => x"f78a3f74",
+2620 => x"0853722d",
+2621 => x"ff14fc17",
+2622 => x"fc177981",
+2623 => x"2c5a5757",
+2624 => x"54738025",
+2625 => x"ffa838d1",
+2626 => x"398057ff",
+2627 => x"93397251",
+2628 => x"bc130854",
+2629 => x"732d7951",
+2630 => x"f6de3fff",
+2631 => x"3d0d80e2",
+2632 => x"e80bfc05",
+2633 => x"70085252",
+2634 => x"70ff2e91",
+2635 => x"38702dfc",
+2636 => x"12700852",
+2637 => x"5270ff2e",
+2638 => x"098106f1",
+2639 => x"38833d0d",
+2640 => x"0404ffb8",
+2641 => x"e03f0400",
+2642 => x"48656c6c",
+2643 => x"6f20776f",
+2644 => x"726c6420",
+2645 => x"310a0000",
+2646 => x"48656c6c",
+2647 => x"6f20776f",
+2648 => x"726c6420",
+2649 => x"320a0000",
+2650 => x"0a000000",
+2651 => x"43000000",
+2652 => x"64756d6d",
+2653 => x"792e6578",
+2654 => x"65000000",
+2655 => x"00ffffff",
+2656 => x"ff00ffff",
+2657 => x"ffff00ff",
+2658 => x"ffffff00",
+2659 => x"00000000",
+2660 => x"00000000",
+2661 => x"00000000",
+2662 => x"00003170",
+2663 => x"000029a0",
+2664 => x"00000000",
+2665 => x"00002c08",
+2666 => x"00002c64",
+2667 => x"00002cc0",
+2668 => x"00000000",
+2669 => x"00000000",
+2670 => x"00000000",
+2671 => x"00000000",
+2672 => x"00000000",
+2673 => x"00000000",
+2674 => x"00000000",
+2675 => x"00000000",
+2676 => x"00000000",
+2677 => x"0000296c",
+2678 => x"00000000",
+2679 => x"00000000",
+2680 => x"00000000",
+2681 => x"00000000",
+2682 => x"00000000",
+2683 => x"00000000",
+2684 => x"00000000",
+2685 => x"00000000",
+2686 => x"00000000",
+2687 => x"00000000",
+2688 => x"00000000",
+2689 => x"00000000",
+2690 => x"00000000",
+2691 => x"00000000",
+2692 => x"00000000",
+2693 => x"00000000",
+2694 => x"00000000",
+2695 => x"00000000",
+2696 => x"00000000",
+2697 => x"00000000",
+2698 => x"00000000",
+2699 => x"00000000",
+2700 => x"00000000",
+2701 => x"00000000",
+2702 => x"00000000",
+2703 => x"00000000",
+2704 => x"00000000",
+2705 => x"00000000",
+2706 => x"00000001",
+2707 => x"330eabcd",
+2708 => x"1234e66d",
+2709 => x"deec0005",
+2710 => x"000b0000",
+2711 => x"00000000",
+2712 => x"00000000",
+2713 => x"00000000",
+2714 => x"00000000",
+2715 => x"00000000",
+2716 => x"00000000",
+2717 => x"00000000",
+2718 => x"00000000",
+2719 => x"00000000",
+2720 => x"00000000",
+2721 => x"00000000",
+2722 => x"00000000",
+2723 => x"00000000",
+2724 => x"00000000",
+2725 => x"00000000",
+2726 => x"00000000",
+2727 => x"00000000",
+2728 => x"00000000",
+2729 => x"00000000",
+2730 => x"00000000",
+2731 => x"00000000",
+2732 => x"00000000",
+2733 => x"00000000",
+2734 => x"00000000",
+2735 => x"00000000",
+2736 => x"00000000",
+2737 => x"00000000",
+2738 => x"00000000",
+2739 => x"00000000",
+2740 => x"00000000",
+2741 => x"00000000",
+2742 => x"00000000",
+2743 => x"00000000",
+2744 => x"00000000",
+2745 => x"00000000",
+2746 => x"00000000",
+2747 => x"00000000",
+2748 => x"00000000",
+2749 => x"00000000",
+2750 => x"00000000",
+2751 => x"00000000",
+2752 => x"00000000",
+2753 => x"00000000",
+2754 => x"00000000",
+2755 => x"00000000",
+2756 => x"00000000",
+2757 => x"00000000",
+2758 => x"00000000",
+2759 => x"00000000",
+2760 => x"00000000",
+2761 => x"00000000",
+2762 => x"00000000",
+2763 => x"00000000",
+2764 => x"00000000",
+2765 => x"00000000",
+2766 => x"00000000",
+2767 => x"00000000",
+2768 => x"00000000",
+2769 => x"00000000",
+2770 => x"00000000",
+2771 => x"00000000",
+2772 => x"00000000",
+2773 => x"00000000",
+2774 => x"00000000",
+2775 => x"00000000",
+2776 => x"00000000",
+2777 => x"00000000",
+2778 => x"00000000",
+2779 => x"00000000",
+2780 => x"00000000",
+2781 => x"00000000",
+2782 => x"00000000",
+2783 => x"00000000",
+2784 => x"00000000",
+2785 => x"00000000",
+2786 => x"00000000",
+2787 => x"00000000",
+2788 => x"00000000",
+2789 => x"00000000",
+2790 => x"00000000",
+2791 => x"00000000",
+2792 => x"00000000",
+2793 => x"00000000",
+2794 => x"00000000",
+2795 => x"00000000",
+2796 => x"00000000",
+2797 => x"00000000",
+2798 => x"00000000",
+2799 => x"00000000",
+2800 => x"00000000",
+2801 => x"00000000",
+2802 => x"00000000",
+2803 => x"00000000",
+2804 => x"00000000",
+2805 => x"00000000",
+2806 => x"00000000",
+2807 => x"00000000",
+2808 => x"00000000",
+2809 => x"00000000",
+2810 => x"00000000",
+2811 => x"00000000",
+2812 => x"00000000",
+2813 => x"00000000",
+2814 => x"00000000",
+2815 => x"00000000",
+2816 => x"00000000",
+2817 => x"00000000",
+2818 => x"00000000",
+2819 => x"00000000",
+2820 => x"00000000",
+2821 => x"00000000",
+2822 => x"00000000",
+2823 => x"00000000",
+2824 => x"00000000",
+2825 => x"00000000",
+2826 => x"00000000",
+2827 => x"00000000",
+2828 => x"00000000",
+2829 => x"00000000",
+2830 => x"00000000",
+2831 => x"00000000",
+2832 => x"00000000",
+2833 => x"00000000",
+2834 => x"00000000",
+2835 => x"00000000",
+2836 => x"00000000",
+2837 => x"00000000",
+2838 => x"00000000",
+2839 => x"00000000",
+2840 => x"00000000",
+2841 => x"00000000",
+2842 => x"00000000",
+2843 => x"00000000",
+2844 => x"00000000",
+2845 => x"00000000",
+2846 => x"00000000",
+2847 => x"00000000",
+2848 => x"00000000",
+2849 => x"00000000",
+2850 => x"00000000",
+2851 => x"00000000",
+2852 => x"00000000",
+2853 => x"00000000",
+2854 => x"00000000",
+2855 => x"00000000",
+2856 => x"00000000",
+2857 => x"00000000",
+2858 => x"00000000",
+2859 => x"00000000",
+2860 => x"00000000",
+2861 => x"00000000",
+2862 => x"00000000",
+2863 => x"00000000",
+2864 => x"00000000",
+2865 => x"00000000",
+2866 => x"00000000",
+2867 => x"00000000",
+2868 => x"00000000",
+2869 => x"00000000",
+2870 => x"00000000",
+2871 => x"00000000",
+2872 => x"00000000",
+2873 => x"00000000",
+2874 => x"00000000",
+2875 => x"00000000",
+2876 => x"00000000",
+2877 => x"00000000",
+2878 => x"00000000",
+2879 => x"00000000",
+2880 => x"00000000",
+2881 => x"00000000",
+2882 => x"00000000",
+2883 => x"00000000",
+2884 => x"00000000",
+2885 => x"00000000",
+2886 => x"00000000",
+2887 => x"00000000",
+2888 => x"00000000",
+2889 => x"00000000",
+2890 => x"00000000",
+2891 => x"00000000",
+2892 => x"00000000",
+2893 => x"00000000",
+2894 => x"00000000",
+2895 => x"00000000",
+2896 => x"00000000",
+2897 => x"00000000",
+2898 => x"00000000",
+2899 => x"ffffffff",
+2900 => x"00000000",
+2901 => x"00020000",
+2902 => x"00000000",
+2903 => x"00000000",
+2904 => x"00002d58",
+2905 => x"00002d58",
+2906 => x"00002d60",
+2907 => x"00002d60",
+2908 => x"00002d68",
+2909 => x"00002d68",
+2910 => x"00002d70",
+2911 => x"00002d70",
+2912 => x"00002d78",
+2913 => x"00002d78",
+2914 => x"00002d80",
+2915 => x"00002d80",
+2916 => x"00002d88",
+2917 => x"00002d88",
+2918 => x"00002d90",
+2919 => x"00002d90",
+2920 => x"00002d98",
+2921 => x"00002d98",
+2922 => x"00002da0",
+2923 => x"00002da0",
+2924 => x"00002da8",
+2925 => x"00002da8",
+2926 => x"00002db0",
+2927 => x"00002db0",
+2928 => x"00002db8",
+2929 => x"00002db8",
+2930 => x"00002dc0",
+2931 => x"00002dc0",
+2932 => x"00002dc8",
+2933 => x"00002dc8",
+2934 => x"00002dd0",
+2935 => x"00002dd0",
+2936 => x"00002dd8",
+2937 => x"00002dd8",
+2938 => x"00002de0",
+2939 => x"00002de0",
+2940 => x"00002de8",
+2941 => x"00002de8",
+2942 => x"00002df0",
+2943 => x"00002df0",
+2944 => x"00002df8",
+2945 => x"00002df8",
+2946 => x"00002e00",
+2947 => x"00002e00",
+2948 => x"00002e08",
+2949 => x"00002e08",
+2950 => x"00002e10",
+2951 => x"00002e10",
+2952 => x"00002e18",
+2953 => x"00002e18",
+2954 => x"00002e20",
+2955 => x"00002e20",
+2956 => x"00002e28",
+2957 => x"00002e28",
+2958 => x"00002e30",
+2959 => x"00002e30",
+2960 => x"00002e38",
+2961 => x"00002e38",
+2962 => x"00002e40",
+2963 => x"00002e40",
+2964 => x"00002e48",
+2965 => x"00002e48",
+2966 => x"00002e50",
+2967 => x"00002e50",
+2968 => x"00002e58",
+2969 => x"00002e58",
+2970 => x"00002e60",
+2971 => x"00002e60",
+2972 => x"00002e68",
+2973 => x"00002e68",
+2974 => x"00002e70",
+2975 => x"00002e70",
+2976 => x"00002e78",
+2977 => x"00002e78",
+2978 => x"00002e80",
+2979 => x"00002e80",
+2980 => x"00002e88",
+2981 => x"00002e88",
+2982 => x"00002e90",
+2983 => x"00002e90",
+2984 => x"00002e98",
+2985 => x"00002e98",
+2986 => x"00002ea0",
+2987 => x"00002ea0",
+2988 => x"00002ea8",
+2989 => x"00002ea8",
+2990 => x"00002eb0",
+2991 => x"00002eb0",
+2992 => x"00002eb8",
+2993 => x"00002eb8",
+2994 => x"00002ec0",
+2995 => x"00002ec0",
+2996 => x"00002ec8",
+2997 => x"00002ec8",
+2998 => x"00002ed0",
+2999 => x"00002ed0",
+3000 => x"00002ed8",
+3001 => x"00002ed8",
+3002 => x"00002ee0",
+3003 => x"00002ee0",
+3004 => x"00002ee8",
+3005 => x"00002ee8",
+3006 => x"00002ef0",
+3007 => x"00002ef0",
+3008 => x"00002ef8",
+3009 => x"00002ef8",
+3010 => x"00002f00",
+3011 => x"00002f00",
+3012 => x"00002f08",
+3013 => x"00002f08",
+3014 => x"00002f10",
+3015 => x"00002f10",
+3016 => x"00002f18",
+3017 => x"00002f18",
+3018 => x"00002f20",
+3019 => x"00002f20",
+3020 => x"00002f28",
+3021 => x"00002f28",
+3022 => x"00002f30",
+3023 => x"00002f30",
+3024 => x"00002f38",
+3025 => x"00002f38",
+3026 => x"00002f40",
+3027 => x"00002f40",
+3028 => x"00002f48",
+3029 => x"00002f48",
+3030 => x"00002f50",
+3031 => x"00002f50",
+3032 => x"00002f58",
+3033 => x"00002f58",
+3034 => x"00002f60",
+3035 => x"00002f60",
+3036 => x"00002f68",
+3037 => x"00002f68",
+3038 => x"00002f70",
+3039 => x"00002f70",
+3040 => x"00002f78",
+3041 => x"00002f78",
+3042 => x"00002f80",
+3043 => x"00002f80",
+3044 => x"00002f88",
+3045 => x"00002f88",
+3046 => x"00002f90",
+3047 => x"00002f90",
+3048 => x"00002f98",
+3049 => x"00002f98",
+3050 => x"00002fa0",
+3051 => x"00002fa0",
+3052 => x"00002fa8",
+3053 => x"00002fa8",
+3054 => x"00002fb0",
+3055 => x"00002fb0",
+3056 => x"00002fb8",
+3057 => x"00002fb8",
+3058 => x"00002fc0",
+3059 => x"00002fc0",
+3060 => x"00002fc8",
+3061 => x"00002fc8",
+3062 => x"00002fd0",
+3063 => x"00002fd0",
+3064 => x"00002fd8",
+3065 => x"00002fd8",
+3066 => x"00002fe0",
+3067 => x"00002fe0",
+3068 => x"00002fe8",
+3069 => x"00002fe8",
+3070 => x"00002ff0",
+3071 => x"00002ff0",
+3072 => x"00002ff8",
+3073 => x"00002ff8",
+3074 => x"00003000",
+3075 => x"00003000",
+3076 => x"00003008",
+3077 => x"00003008",
+3078 => x"00003010",
+3079 => x"00003010",
+3080 => x"00003018",
+3081 => x"00003018",
+3082 => x"00003020",
+3083 => x"00003020",
+3084 => x"00003028",
+3085 => x"00003028",
+3086 => x"00003030",
+3087 => x"00003030",
+3088 => x"00003038",
+3089 => x"00003038",
+3090 => x"00003040",
+3091 => x"00003040",
+3092 => x"00003048",
+3093 => x"00003048",
+3094 => x"00003050",
+3095 => x"00003050",
+3096 => x"00003058",
+3097 => x"00003058",
+3098 => x"00003060",
+3099 => x"00003060",
+3100 => x"00003068",
+3101 => x"00003068",
+3102 => x"00003070",
+3103 => x"00003070",
+3104 => x"00003078",
+3105 => x"00003078",
+3106 => x"00003080",
+3107 => x"00003080",
+3108 => x"00003088",
+3109 => x"00003088",
+3110 => x"00003090",
+3111 => x"00003090",
+3112 => x"00003098",
+3113 => x"00003098",
+3114 => x"000030a0",
+3115 => x"000030a0",
+3116 => x"000030a8",
+3117 => x"000030a8",
+3118 => x"000030b0",
+3119 => x"000030b0",
+3120 => x"000030b8",
+3121 => x"000030b8",
+3122 => x"000030c0",
+3123 => x"000030c0",
+3124 => x"000030c8",
+3125 => x"000030c8",
+3126 => x"000030d0",
+3127 => x"000030d0",
+3128 => x"000030d8",
+3129 => x"000030d8",
+3130 => x"000030e0",
+3131 => x"000030e0",
+3132 => x"000030e8",
+3133 => x"000030e8",
+3134 => x"000030f0",
+3135 => x"000030f0",
+3136 => x"000030f8",
+3137 => x"000030f8",
+3138 => x"00003100",
+3139 => x"00003100",
+3140 => x"00003108",
+3141 => x"00003108",
+3142 => x"00003110",
+3143 => x"00003110",
+3144 => x"00003118",
+3145 => x"00003118",
+3146 => x"00003120",
+3147 => x"00003120",
+3148 => x"00003128",
+3149 => x"00003128",
+3150 => x"00003130",
+3151 => x"00003130",
+3152 => x"00003138",
+3153 => x"00003138",
+3154 => x"00003140",
+3155 => x"00003140",
+3156 => x"00003148",
+3157 => x"00003148",
+3158 => x"00003150",
+3159 => x"00003150",
+3160 => x"00002970",
+3161 => x"ffffffff",
+3162 => x"00000000",
+3163 => x"ffffffff",
+3164 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ mem_busy<=mem_writeEnable or mem_readEnable;
+ if (mem_writeEnable = '1') then
+ ram(conv_integer(mem_addr(maxAddrBit downto minAddrBit))) := mem_write;
+ end if;
+ if (mem_readEnable = '1') then
+ mem_read <= ram(conv_integer(mem_addr(maxAddrBit downto minAddrBit)));
+ end if;
+ end if;
+end process;
+
+
+
+
+end dram_arch;
diff --git a/zpu/hdl/zpu4/src/fastdmips.do b/zpu/hdl/zpu4/src/fastdmips.do
new file mode 100644
index 0000000..504bf60
--- /dev/null
+++ b/zpu/hdl/zpu4/src/fastdmips.do
@@ -0,0 +1,19 @@
+set BreakOnAssertion 1
+vlib work
+
+vcom -93 -explicit zpu_config_fastsim.vhd
+vcom -93 -explicit zpupkg.vhd
+vcom -93 -explicit txt_util.vhd
+vcom -93 -explicit sim_fpga_top.vhd
+vcom -93 -explicit zpu_core.vhd
+vcom -93 -explicit dram_dmips.vhd
+vcom -93 -explicit timer.vhd
+vcom -93 -explicit io.vhd
+vcom -93 -explicit trace.vhd
+
+
+vsim fpga_top
+view wave
+
+# run ZPU
+run 60000 ms
diff --git a/zpu/hdl/zpu4/src/fastdmipsintstack.do b/zpu/hdl/zpu4/src/fastdmipsintstack.do
new file mode 100644
index 0000000..ee9571e
--- /dev/null
+++ b/zpu/hdl/zpu4/src/fastdmipsintstack.do
@@ -0,0 +1,19 @@
+set BreakOnAssertion 1
+vlib work
+
+vcom -93 -explicit zpu_config_fastsim.vhd
+vcom -93 -explicit zpupkg.vhd
+vcom -93 -explicit txt_util.vhd
+vcom -93 -explicit sim_fpga_top.vhd
+vcom -93 -explicit zpu_core_intstack.vhd
+vcom -93 -explicit dram_dmips.vhd
+vcom -93 -explicit timer.vhd
+vcom -93 -explicit io.vhd
+vcom -93 -explicit trace.vhd
+
+
+vsim fpga_top
+view wave
+
+# run ZPU
+run 60000 ms
diff --git a/zpu/hdl/zpu4/src/fastdmipssmall.do b/zpu/hdl/zpu4/src/fastdmipssmall.do
new file mode 100644
index 0000000..3eaa083
--- /dev/null
+++ b/zpu/hdl/zpu4/src/fastdmipssmall.do
@@ -0,0 +1,21 @@
+set BreakOnAssertion 1
+vlib work
+
+
+vcom -93 -explicit zpu_config_trace.vhd
+vcom -93 -explicit zpupkg.vhd
+vcom -93 -explicit txt_util.vhd
+vcom -93 -explicit sim_fpga_top.vhd
+vcom -93 -explicit zpu_core_small.vhd
+vcom -93 -explicit bram_dmips.vhd
+vcom -93 -explicit dram_dmips.vhd
+vcom -93 -explicit timer.vhd
+vcom -93 -explicit io.vhd
+vcom -93 -explicit trace.vhd
+
+
+vsim fpga_top
+view wave
+
+# run ZPU
+run 60000 ms
diff --git a/zpu/hdl/zpu4/src/fastsimzpu.do b/zpu/hdl/zpu4/src/fastsimzpu.do
new file mode 100644
index 0000000..504bf60
--- /dev/null
+++ b/zpu/hdl/zpu4/src/fastsimzpu.do
@@ -0,0 +1,19 @@
+set BreakOnAssertion 1
+vlib work
+
+vcom -93 -explicit zpu_config_fastsim.vhd
+vcom -93 -explicit zpupkg.vhd
+vcom -93 -explicit txt_util.vhd
+vcom -93 -explicit sim_fpga_top.vhd
+vcom -93 -explicit zpu_core.vhd
+vcom -93 -explicit dram_dmips.vhd
+vcom -93 -explicit timer.vhd
+vcom -93 -explicit io.vhd
+vcom -93 -explicit trace.vhd
+
+
+vsim fpga_top
+view wave
+
+# run ZPU
+run 60000 ms
diff --git a/zpu/hdl/zpu4/src/ic300.bitgen b/zpu/hdl/zpu4/src/ic300.bitgen
new file mode 100644
index 0000000..1095099
--- /dev/null
+++ b/zpu/hdl/zpu4/src/ic300.bitgen
@@ -0,0 +1,27 @@
+-g DebugBitstream:No
+-g Binary:yes
+-g CRC:Enable
+-g ConfigRate:50
+-g CclkPin:Pullnone
+-g M0Pin:Pullnone
+-g M1Pin:Pullnone
+-g M2Pin:Pullnone
+-g ProgPin:PullUp
+-g DonePin:Pullnone
+-g TckPin:Pullnone
+-g TdiPin:Pullnone
+-g TdoPin:Pullnone
+-g TmsPin:Pullnone
+-g UnusedPin:Pullnone
+-g UserID:0xFFFFFFFF
+-g DCMShutDown:Disable
+-g DCIUpdateMode:AsRequired
+-g StartUpClk:CClk
+-g DONE_cycle:4
+-g GTS_cycle:5
+-g GWE_cycle:6
+-g LCK_cycle:NoWait
+-g Security:Level1
+-g DonePipe:No
+-g DriveDone:Yes
+
diff --git a/zpu/hdl/zpu4/src/ic300.lso b/zpu/hdl/zpu4/src/ic300.lso
new file mode 100644
index 0000000..22de730
--- /dev/null
+++ b/zpu/hdl/zpu4/src/ic300.lso
@@ -0,0 +1 @@
+work
diff --git a/zpu/hdl/zpu4/src/ic300.ucf b/zpu/hdl/zpu4/src/ic300.ucf
new file mode 100644
index 0000000..4a141b9
--- /dev/null
+++ b/zpu/hdl/zpu4/src/ic300.ucf
@@ -0,0 +1,146 @@
+# clock inputs
+net "cpu_clk_p" loc = "R9" | iostandard=LVTTL;
+
+# input pins
+net "cpu_a_p(0)" loc = "N15" | iostandard=LVTTL;
+net "cpu_a_p(1)" loc = "P16" | iostandard=LVTTL;
+net "cpu_a_p(2)" loc = "P13" | iostandard=LVTTL;
+net "cpu_a_p(3)" loc = "N16" | iostandard=LVTTL;
+net "cpu_a_p(4)" loc = "P15" | iostandard=LVTTL;
+net "cpu_a_p(5)" loc = "R11" | iostandard=LVTTL;
+net "cpu_a_p(6)" loc = "T14" | iostandard=LVTTL;
+net "cpu_a_p(7)" loc = "R16" | iostandard=LVTTL;
+net "cpu_a_p(8)" loc = "P14" | iostandard=LVTTL;
+net "cpu_a_p(9)" loc = "T13" | iostandard=LVTTL;
+net "cpu_a_p(10)" loc = "R13" | iostandard=LVTTL;
+net "cpu_a_p(11)" loc = "P7" | iostandard=LVTTL;
+net "cpu_a_p(12)" loc = "N12" | iostandard=LVTTL;
+net "cpu_a_p(13)" loc = "R12" | iostandard=LVTTL;
+net "cpu_a_p(14)" loc = "L13" | iostandard=LVTTL;
+net "cpu_a_p(15)" loc = "K12" | iostandard=LVTTL;
+net "cpu_a_p(16)" loc = "K15" | iostandard=LVTTL;
+net "cpu_a_p(17)" loc = "T10" | iostandard=LVTTL;
+net "cpu_a_p(18)" loc = "T9" | iostandard=LVTTL;
+net "cpu_a_p(19)" loc = "N10" | iostandard=LVTTL;
+net "cpu_a_p(20)" loc = "T8" | iostandard=LVTTL;
+net "cpu_wr_n_p(0)" loc = "L15" | iostandard=LVTTL;
+net "cpu_wr_n_p(1)" loc = "N14" | iostandard=LVTTL;
+net "cpu_oe_n_p" loc = "T12" | iostandard=LVTTL;
+net "cpu_cs_n_p(1)" loc = "R3" | iostandard=LVTTL;
+net "cpu_cs_n_p(2)" loc = "M16" | iostandard=LVTTL;
+net "cpu_cs_n_p(3)" loc = "P11" | iostandard=LVTTL;
+
+#net "sdr_clk_fb_p" loc = "B8" | iostandard=SSTL2_I;
+
+# output pins
+net "cpu_fiq_p" loc = "K16" | iostandard=LVTTL;
+net "cpu_irq_p(0)" loc = "M14" | iostandard=LVTTL;
+net "cpu_irq_p(1)" loc = "J16" | iostandard=LVTTL;
+net "cpu_wait_n_p" loc = "M15" | iostandard=LVTTL;
+
+#net "sdr_clk_p" loc = "D8" | iostandard=SSTL2_I | FAST;
+#net "sdr_clk_n_p" loc = "F5" | iostandard=SSTL2_I | FAST;
+#net "cke_q_p" loc = "F4" | iostandard=SSTL2_I | FAST;
+#net "cs_qn_p" loc = "M2" | iostandard=SSTL2_I | FAST | PULLUP;
+#net "ras_qn_p" loc = "J2" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY;
+#net "cas_qn_p" loc = "M3" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY;
+#net "we_qn_p" loc = "K4" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY;
+#net "dm_q_p(0)" loc = "L4" | iostandard=SSTL2_I | FAST;
+#net "dm_q_p(1)" loc = "E4" | iostandard=SSTL2_I | FAST;
+#net "dqs_q_p(0)" loc = "L3" | iostandard=SSTL2_I | FAST;
+#net "dqs_q_p(1)" loc = "D3" | iostandard=SSTL2_I | FAST;
+#net "ba_q_p(0)" loc = "M1" | iostandard=SSTL2_I | FAST;
+#net "ba_q_p(1)" loc = "J3" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(0)" loc = "J4" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(1)" loc = "N2" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(2)" loc = "H4" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(3)" loc = "P2" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(4)" loc = "E7" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(5)" loc = "G4" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(6)" loc = "D7" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(7)" loc = "G5" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(8)" loc = "C7" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(9)" loc = "F3" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(10)" loc = "N3" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(11)" loc = "E6" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(12)" loc = "D6" | iostandard=SSTL2_I | FAST;
+
+# bidirectional pins
+net "cpu_d_p(0)" loc = "M11" | iostandard=LVTTL;
+net "cpu_d_p(1)" loc = "N11" | iostandard=LVTTL;
+net "cpu_d_p(2)" loc = "P10" | iostandard=LVTTL;
+net "cpu_d_p(3)" loc = "R10" | iostandard=LVTTL;
+net "cpu_d_p(4)" loc = "T7" | iostandard=LVTTL;
+net "cpu_d_p(5)" loc = "R7" | iostandard=LVTTL;
+net "cpu_d_p(6)" loc = "N6" | iostandard=LVTTL;
+net "cpu_d_p(7)" loc = "M6" | iostandard=LVTTL;
+net "cpu_d_p(8)" loc = "K13" | iostandard=LVTTL;
+net "cpu_d_p(9)" loc = "M10" | iostandard=LVTTL;
+net "cpu_d_p(10)" loc = "L12" | iostandard=LVTTL;
+net "cpu_d_p(11)" loc = "M13" | iostandard=LVTTL;
+net "cpu_d_p(12)" loc = "K14" | iostandard=LVTTL;
+net "cpu_d_p(13)" loc = "L14" | iostandard=LVTTL;
+net "cpu_d_p(14)" loc = "J13" | iostandard=LVTTL;
+net "cpu_d_p(15)" loc = "J14" | iostandard=LVTTL;
+
+#net "sdr_d_p(0)" loc = "G1" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(1)" loc = "H3" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(2)" loc = "G3" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(3)" loc = "K2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(4)" loc = "F2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(5)" loc = "L2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(6)" loc = "E1" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(7)" loc = "M4" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(8)" loc = "C6" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(9)" loc = "E2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(10)" loc = "C2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(11)" loc = "D1" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(12)" loc = "B7" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(13)" loc = "D2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(14)" loc = "B6" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(15)" loc = "B5" | iostandard=SSTL2_I | NODELAY | FAST;
+
+# TIMING
+# Create timing names
+NET "cpu_clk_p" TNM_NET = "cpu_clk_p";
+NET "sdr_clk_fb_p" TNM_NET = "sdr_clk_fb_p";
+#NET "cpu_clk" TNM_NET = "cpu_clk";
+#NET "cpu_clk_2x" TNM_NET = "cpu_clk_2x";
+#NET "cpu_clk_4x" TNM_NET = "cpu_clk_4x";
+#NET "ddr_in_clk" TNM_NET = "ddr_in_clk";
+#NET "ddr_in_clk_2x" TNM_NET = "ddr_in_clk_2x";
+
+## Create timing
+
+# Periode timing
+TIMESPEC "TS_cpu_clk" = PERIOD "cpu_clk_p" 10 ns HIGH 50 %;
+#TIMESPEC "TS_sdr_clk_fb_p" = PERIOD "sdr_clk_fb_p" 7.8 ns HIGH 50 %;
+
+# Clock domain crossing timing
+#TIMESPEC "TS_cpu1_to_cpu2" = FROM "cpu_clk" TO "cpu_clk_2x" 7.8 ns;
+#TIMESPEC "TS_cpu1_to_cpu4" = FROM "cpu_clk" TO "cpu_clk_4x" 3.9 ns;
+#TIMESPEC "TS_cpu1_to_ddr2" = FROM "cpu_clk" TO "ddr_in_clk" 7.8 ns;
+#TIMESPEC "TS_cpu1_to_ddr2_2x" = FROM "cpu_clk" TO "ddr_in_clk_2x" 3.9 ns;
+
+#TIMESPEC "TS_cpu2_to_cpu1" = FROM "cpu_clk_2x" TO "cpu_clk" 7.8 ns;
+#TIMESPEC "TS_cpu2_to_cpu4" = FROM "cpu_clk_2x" TO "cpu_clk_4x" 3.9 ns;
+#TIMESPEC "TS_cpu2_to_ddr2" = FROM "cpu_clk_2x" TO "ddr_in_clk" 7.8 ns;
+#TIMESPEC "TS_cpu2_to_ddr_2x" = FROM "cpu_clk_2x" TO "ddr_in_clk_2x" 3.9 ns;
+
+#TIMESPEC "TS_cpu4_to_cpu1" = FROM "cpu_clk_4x" TO "cpu_clk" 3.9 ns;
+#TIMESPEC "TS_cpu4_to_cpu2" = FROM "cpu_clk_4x" TO "cpu_clk_2x" 3.9 ns;
+#TIMESPEC "TS_cpu4_to_ddr2" = FROM "cpu_clk_4x" TO "ddr_in_clk" 3.9 ns;
+#TIMESPEC "TS_cpu4_to_ddr2_2x" = FROM "cpu_clk_4x" TO "ddr_in_clk_2x" 3.9 ns;
+
+#TIMESPEC "TS_ddr2_to_cpu1" = FROM "ddr_in_clk" TO "cpu_clk" 7.8 ns;
+#TIMESPEC "TS_ddr2_to_cpu2" = FROM "ddr_in_clk" TO "cpu_clk_2x" 7.8 ns;
+#TIMESPEC "TS_ddr2_to_cpu4" = FROM "ddr_in_clk" TO "cpu_clk_4x" 3.9 ns;
+#TIMESPEC "TS_ddr2_to_ddr2_2x" = FROM "ddr_in_clk" TO "ddr_in_clk_2x" 3.9 ns;
+
+#TIMESPEC "TS_ddr2_2x_to_cpu1" = FROM "ddr_in_clk_2x" TO "cpu_clk" 3.9 ns;
+#TIMESPEC "TS_ddr2_2x_to_cpu2" = FROM "ddr_in_clk_2x" TO "cpu_clk_2x" 3.9 ns;
+#TIMESPEC "TS_ddr2_2x_to_cpu4" = FROM "ddr_in_clk_2x" TO "cpu_clk_4x" 3.9 ns;
+#TIMESPEC "TS_ddr2_2x_to_ddr2" = FROM "ddr_in_clk_2x" TO "ddr_in_clk" 3.9 ns;
+
+
+
diff --git a/zpu/hdl/zpu4/src/ic300.vhd b/zpu/hdl/zpu4/src/ic300.vhd
new file mode 100644
index 0000000..a1b4f41
--- /dev/null
+++ b/zpu/hdl/zpu4/src/ic300.vhd
@@ -0,0 +1,144 @@
+--------------------------------------------------------------------------------
+-- Company: Zylin AS
+-- Engineer: Tore Ramsland
+--
+-- Create Date: 21:47:41 07/03/05
+-- Design Name: ic300
+-- Module Name: ic300 - behave
+-- Project Name: eCosBoard
+-- Target Device: XC3S400400-FG256
+-- Tool versions: 7.1i
+-- Description: Top level
+--
+-- Dependencies:
+--
+-- Revision:
+-- 2005-07-11 Updated to test FPGA
+--
+--------------------------------------------------------------------------------
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library UNISIM;
+use UNISIM.VComponents.all;
+
+library zylin;
+use zylin.arm7.all;
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+library work;
+use work.phi_config.all;
+use work.ic300pkg.all;
+
+entity ic300 is
+ generic(
+ simulate_io_time : boolean := false);
+ port ( -- Clock inputs
+ cpu_clk_p : in std_logic;
+
+ -- CPU interface signals
+ cpu_a_p : in std_logic_vector(20 downto 0);
+ cpu_wr_n_p : in std_logic_vector(1 downto 0);
+ cpu_cs_n_p : in std_logic_vector(3 downto 1);
+ cpu_oe_n_p : in std_logic;
+ cpu_d_p : inout std_logic_vector(15 downto 0);
+ cpu_irq_p : out std_logic_vector(1 downto 0);
+ cpu_fiq_p : out std_logic;
+ cpu_wait_n_p : out std_logic;
+
+ -- DDR SDRAM Signals
+ sdr_clk_p : out std_logic; -- ddr_sdram_clock
+ sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock
+ cke_q_p : out std_logic; -- clock enable
+ cs_qn_p : out std_logic; -- /chip select
+ ras_qn_p : inout std_logic; -- /ras
+ cas_qn_p : inout std_logic; -- /cas
+ we_qn_p : inout std_logic; -- /write enable
+ dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00"
+ dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write
+ ba_q_p : out std_logic_vector(1 downto 0); -- bank select
+ sdr_a_p : out std_logic_vector(12 downto 0); -- address bus
+ sdr_d_p : inout std_logic_vector(15 downto 0); -- bidir data bus
+ sdr_clk_fb_p : in std_logic -- DDR clock feedback
+ );
+end ic300;
+
+architecture behave of ic300 is
+
+signal cpu_we : std_logic_vector(1 downto 0); -- Write signal for lower(0) and upper(1) 8 data bits
+signal cpu_re : std_logic; -- Read enable signal for all 16 bits
+signal areset : std_logic; -- Asyncronous active high reset (for initialization)
+signal areset_dummy : std_logic;
+
+-- Clock module signals
+signal clk_status : std_logic_vector(2 downto 0); -- DLL lock status (from 3 DLL's)
+signal cpu_clk : std_logic; -- 64 MHz CPU clk
+signal cpu_clk_2x : std_logic; -- 128 MHz CPU clk (in phase with 64 MHz)
+signal cpu_clk_4x : std_logic; -- 256 MHz CPU clk (in phase with 64 MHz)
+signal ddr_in_clk : std_logic; -- 128 MHz clock from DDR SDRAM
+signal ddr_in_clk_2x : std_logic; -- 256 MHz clock from DDR SDRAM
+ -- NOTE! Phase relation to 64 MHz clock unknown
+
+-- Internal CPU interface signals
+signal cpu_din : std_logic_vector(15 downto 0); -- 16-bit data from CPU
+signal cpu_dout : std_logic_vector(15 downto 0); -- 16-bit data to CPU
+signal cpu_a : std_logic_vector(20 downto 0); -- 21-bit address from CPU
+
+begin
+
+-- areset <= '0';
+ areset_dummy <= '0';
+
+ global_init_reset:
+ rocbuf port map(I=>areset_dummy,O=>areset);
+
+ allclocks:
+ clocks port map(
+ areset => areset,
+ cpu_clk_p => cpu_clk_p,
+ cpu_clk => cpu_clk,
+ cpu_clk_2x => cpu_clk_2x,
+ cpu_clk_4x => cpu_clk_4x,
+ sdr_clk_fb_p => sdr_clk_fb_p,
+ ddr_in_clk => ddr_in_clk,
+ ddr_in_clk_2x => ddr_in_clk_2x,
+ locked => clk_status);
+
+ arm7cpu:
+ arm7wb generic map (simulate_io_time => simulate_io_time)
+ port map(
+ areset => areset,
+ cpu_clk => cpu_clk,
+ cpu_clk_2x => cpu_clk_2x,
+ cpu_a_p => cpu_a_p,
+ cpu_wr_n_p => cpu_wr_n_p,
+ cpu_cs_n_p => cpu_cs_n_p,
+ cpu_oe_n_p => cpu_oe_n_p,
+ cpu_d_p => cpu_d_p,
+ cpu_irq_p => cpu_irq_p,
+ cpu_fiq_p => cpu_fiq_p,
+ cpu_wait_n_p => cpu_wait_n_p,
+ cpu_din => cpu_din,
+ cpu_a => cpu_a,
+ cpu_we => cpu_we,
+ cpu_re => cpu_re,
+ cpu_dout => cpu_dout);
+
+
+ cpu_fpga_regs:
+ zpuio port map(
+ areset => areset,
+ cpu_clk => cpu_clk,
+ clk_status => clk_status,
+ cpu_din => cpu_din,
+ cpu_a => cpu_a,
+ cpu_we => cpu_we,
+ cpu_re => cpu_re,
+ cpu_dout => cpu_dout);
+
+
+end behave;
diff --git a/zpu/hdl/zpu4/src/ic300_config.vhd b/zpu/hdl/zpu4/src/ic300_config.vhd
new file mode 100644
index 0000000..b14ec79
--- /dev/null
+++ b/zpu/hdl/zpu4/src/ic300_config.vhd
@@ -0,0 +1,26 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+
+package phi_config is
+
+ constant Fpga_Global_Base : std_logic_vector(19 downto 17) := "000"; -- 0x0800....
+ constant Clock_Stat_Reg_Addr : std_logic_vector(5 downto 2) := "0000"; -- 0x....0000
+ constant Ctrl_Reg_Addr : std_logic_vector(5 downto 2) := "0001"; -- 0x....0004
+ constant output_enable : std_logic_vector(5 downto 2) := "0010"; -- 0x....0008
+ constant output_disable : std_logic_vector(5 downto 2) := "0011"; -- 0x....000C
+ constant data_status : std_logic_vector(5 downto 2) := "0100"; -- 0x....0010
+ constant set_output_data : std_logic_vector(5 downto 2) := "0101"; -- 0x....0014
+ constant clear_output_data : std_logic_vector(5 downto 2) := "0110"; -- 0x....0018
+ constant data_in_read : std_logic_vector(5 downto 2) := "0111"; -- 0x....001C
+ constant output_status : std_logic_vector(5 downto 2) := "1000"; -- 0x....0020
+ constant cpu_access_address : std_logic_vector(5 downto 2) := "1001"; -- 0x....0024
+
+ constant Fpga_Ethernet_Reg_Base : std_logic_vector(19 downto 17) := "110"; -- 0x080C0000
+
+ constant Fpga_DDR_Ctrl_Base : std_logic_vector(19 downto 17) := "111"; -- 0x080E....
+ constant DDR_Ctrl_Reg_Addr : std_logic_vector(3 downto 2) := "00"; -- 0x....0000
+ constant DDR_Mode_Reg_Addr : std_logic_vector(3 downto 2) := "01"; -- 0x....0004
+ constant DDR_Page_Select_Addr : std_logic_vector(3 downto 2) := "10"; -- 0x....0008
+
+
+end phi_config;
diff --git a/zpu/hdl/zpu4/src/ic300pkg.vhd b/zpu/hdl/zpu4/src/ic300pkg.vhd
new file mode 100644
index 0000000..13da306
--- /dev/null
+++ b/zpu/hdl/zpu4/src/ic300pkg.vhd
@@ -0,0 +1,88 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+
+package ic300pkg is
+
+ component ic300 is
+ port ( -- Clock inputs
+ cpu_clk_p : in std_logic;
+
+ -- CPU interface signals
+ cpu_a_p : in std_logic_vector(20 downto 0);
+ cpu_wr_n_p : in std_logic_vector(1 downto 0);
+ cpu_cs_n_p : in std_logic_vector(3 downto 1);
+ cpu_oe_n_p : in std_logic;
+ cpu_d_p : inout std_logic_vector(15 downto 0);
+ cpu_irq_p : out std_logic_vector(1 downto 0);
+ cpu_fiq_p : out std_logic;
+ cpu_wait_n_p : out std_logic;
+
+ -- DDR SDRAM Signals
+ sdr_clk_p : out std_logic; -- ddr_sdram_clock
+ sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock
+ cke_q_p : out std_logic; -- clock enable
+ cs_qn_p : out std_logic; -- /chip select
+ ras_qn_p : inout std_logic; -- /ras
+ cas_qn_p : inout std_logic; -- /cas
+ we_qn_p : inout std_logic; -- /write enable
+ dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00"
+ dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write
+ ba_q_p : out std_logic_vector(1 downto 0); -- bank select
+ sdr_a_p : out std_logic_vector(12 downto 0); -- address bus
+ sdr_d_p : inout std_logic_vector(15 downto 0); -- bidir data bus
+ sdr_clk_fb_p : in std_logic -- DDR clock feedback
+ );
+ end component;
+
+ component clocks is
+ port ( areset : in std_logic;
+ cpu_clk_p : in std_logic;
+ sdr_clk_fb_p : in std_logic;
+ cpu_clk : out std_logic;
+ cpu_clk_2x : out std_logic;
+ cpu_clk_4x : out std_logic;
+ ddr_in_clk : out std_logic;
+ ddr_in_clk_2x : out std_logic;
+ locked : out std_logic_vector(2 downto 0));
+ end component;
+
+ component cpu_regs is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ clk_status : in std_logic_vector(2 downto 0);
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_dout : inout std_logic_vector(15 downto 0));
+ end component;
+
+ component ddr_bridge is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ cpu_clk_2x : in std_logic;
+ cpu_clk_4x : in std_logic;
+ ddr_in_clk : in std_logic;
+ ddr_in_clk_2x : in std_logic;
+
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_dout : inout std_logic_vector(15 downto 0);
+
+ sdr_clk_p : out std_logic; -- ddr_sdram_clock
+ sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock
+ cke_q_p : out std_logic; -- clock enable
+ cs_qn_p : out std_logic; -- /chip select
+ ras_qn_p : inout std_logic; -- /ras
+ cas_qn_p : inout std_logic; -- /cas
+ we_qn_p : inout std_logic; -- /write enable
+ dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00"
+ dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write
+ ba_q_p : out std_logic_vector(1 downto 0); -- bank select
+ sdr_a_p : out std_logic_vector(12 downto 0); -- address bus
+ sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus
+ end component;
+
+end ic300pkg;
diff --git a/zpu/hdl/zpu4/src/io.vhd b/zpu/hdl/zpu4/src/io.vhd
new file mode 100644
index 0000000..b5465d1
--- /dev/null
+++ b/zpu/hdl/zpu4/src/io.vhd
@@ -0,0 +1,92 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+use std.textio.all;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+use work.txt_util.all;
+
+entity zpu_io is
+ generic (
+ log_file: string := "log.txt"
+ );
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ busy : out std_logic;
+ writeEnable : in std_logic;
+ readEnable : in std_logic;
+ write : in std_logic_vector(7 downto 0);
+ read : out std_logic_vector(7 downto 0);
+ addr : in std_logic_vector(maxAddrBit downto minAddrBit)
+ );
+end zpu_io;
+
+
+architecture behave of zpu_io is
+
+
+
+signal timer_read : std_logic_vector(7 downto 0);
+--signal timer_write : std_logic_vector(7 downto 0);
+signal timer_we : std_logic;
+
+signal serving : std_logic;
+
+file l_file : TEXT open write_mode is log_file;
+
+begin
+
+
+ timerinst: timer port map (
+ clk => clk,
+ areset => areset,
+ we => timer_we,
+ din => write,
+ adr => addr(4 downto 2),
+ dout => timer_read);
+
+ busy <= writeEnable or readEnable;
+ timer_we <= writeEnable and addr(12);
+
+ process(areset, clk)
+ begin
+ if (areset = '1') then
+-- timer_we <= '0';
+ elsif (clk'event and clk = '1') then
+-- timer_we <= '0';
+ if writeEnable = '1' then
+ -- external interface
+ if addr=x"1000" then
+ -- Write to UART
+ -- report "" & character'image(conv_integer(memBint)) severity note;
+ print(l_file, character'val(conv_integer(write)));
+ elsif addr(12)='1' then
+-- report "xxx" severity failure;
+-- timer_we <= '1';
+ else
+ report "Illegal IO write" severity failure;
+ end if;
+
+ end if;
+ read <= (others => 'U');
+ if (readEnable = '1') then
+ if addr=x"1001" then
+ read <= (0=>'1', others => '0'); -- recieve empty
+ elsif addr(12)='1' then
+ read <= timer_read;
+ elsif addr(11)='1' then
+ read <= ZPU_Frequency;
+ else
+ report "Illegal IO read" severity failure;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+end behave;
+
diff --git a/zpu/hdl/zpu4/src/log.txt b/zpu/hdl/zpu4/src/log.txt
new file mode 100644
index 0000000..af58c93
--- /dev/null
+++ b/zpu/hdl/zpu4/src/log.txt
@@ -0,0 +1,380 @@
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+1
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+2
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+1
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+2
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+1
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+2
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+1
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+2
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+1
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+2
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+1
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+2
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+1
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+2
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+1
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+2
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+1
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+2
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+1
+
+
+
+
+
+
+H
+e
+l
+l
+o
+
+w
+o
+r
+l
+d
+
+2
+
+
+
+
+
+
diff --git a/zpu/hdl/zpu4/src/niltrace.vhd b/zpu/hdl/zpu4/src/niltrace.vhd
new file mode 100644
index 0000000..40fc1ca
--- /dev/null
+++ b/zpu/hdl/zpu4/src/niltrace.vhd
@@ -0,0 +1,26 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+use std.textio.all;
+use work.zpu_config.all;
+
+
+entity trace is
+ port(
+ clk : in std_logic;
+ begin_inst : in std_logic;
+ pc : in std_logic_vector(maxAddrBit downto 0);
+ opcode : in std_logic_vector(7 downto 0);
+ sp : in std_logic_vector(maxAddrBit downto 2);
+ memA : in std_logic_vector(wordSize-1 downto 0);
+ busy : in std_logic);
+end trace;
+
+
+architecture behave of trace is
+
+begin
+
+end behave;
+
diff --git a/zpu/hdl/zpu4/src/sim_fpga_top.vhd b/zpu/hdl/zpu4/src/sim_fpga_top.vhd
new file mode 100644
index 0000000..2905505
--- /dev/null
+++ b/zpu/hdl/zpu4/src/sim_fpga_top.vhd
@@ -0,0 +1,190 @@
+--------------------------------------------------------------------------------
+-- Company:
+-- Engineer:
+--
+-- Create Date: 20:15:31 04/14/05
+-- Design Name:
+-- Module Name: fpga_top - behave
+-- Project Name:
+-- Target Device:
+-- Tool versions:
+-- Description:
+--
+-- Dependencies:
+--
+-- Revision:
+-- Revision 0.01 - File Created
+-- Additional Comments:
+--
+--------------------------------------------------------------------------------
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_ARITH.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+---- Uncomment the following library declaration if instantiating
+---- any Xilinx primitives in this code.
+library UNISIM;
+use UNISIM.VComponents.all;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity fpga_top is
+end fpga_top;
+
+architecture behave of fpga_top is
+
+
+signal clk : std_logic;
+
+signal areset : std_logic;
+
+
+component zpu_io is
+ generic (
+ log_file: string := "log.txt"
+ );
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ busy : out std_logic;
+ writeEnable : in std_logic;
+ readEnable : in std_logic;
+ write : in std_logic_vector(7 downto 0);
+ read : out std_logic_vector(7 downto 0);
+ addr : in std_logic_vector(maxAddrBit downto minAddrBit)
+ );
+end component;
+
+
+
+
+
+signal mem_busy : std_logic;
+signal mem_read : std_logic_vector(wordSize-1 downto 0);
+signal mem_write : std_logic_vector(wordSize-1 downto 0);
+signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
+signal mem_writeEnable : std_logic;
+signal mem_readEnable : std_logic;
+signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+signal enable : std_logic;
+
+signal dram_mem_busy : std_logic;
+signal dram_mem_read : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_write : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_writeEnable : std_logic;
+signal dram_mem_readEnable : std_logic;
+signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+
+signal io_busy : std_logic;
+
+signal io_mem_read : std_logic_vector(7 downto 0);
+signal io_mem_writeEnable : std_logic;
+signal io_mem_readEnable : std_logic;
+
+
+signal dram_ready : std_logic;
+signal io_ready : std_logic;
+signal io_reading : std_logic;
+
+
+signal break : std_logic;
+
+begin
+ poweronreset: roc port map (O => areset);
+
+
+
+ zpu: zpu_core port map (
+ clk => clk ,
+ areset => areset,
+ enable => enable,
+ in_mem_busy => mem_busy,
+ mem_read => mem_read,
+ mem_write => mem_write,
+ out_mem_addr => mem_addr,
+ out_mem_writeEnable => mem_writeEnable,
+ out_mem_readEnable => mem_readEnable,
+ mem_writeMask => mem_writeMask,
+ interrupt => '0',
+ break => break);
+
+ dram_imp: dram port map (
+ clk => clk ,
+ areset => areset,
+ mem_busy => dram_mem_busy,
+ mem_read => dram_mem_read,
+ mem_write => mem_write,
+ mem_addr => mem_addr(maxAddrBit downto 0),
+ mem_writeEnable => dram_mem_writeEnable,
+ mem_readEnable => dram_mem_readEnable,
+ mem_writeMask => mem_writeMask);
+
+
+ ioMap: zpu_io port map (
+ clk => clk,
+ areset => areset,
+ busy => io_busy,
+ writeEnable => io_mem_writeEnable,
+ readEnable => io_mem_readEnable,
+ write => mem_write(7 downto 0),
+ read => io_mem_read,
+ addr => mem_addr(maxAddrBit downto minAddrBit)
+ );
+
+ dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit);
+ dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit);
+ io_mem_writeEnable <= mem_writeEnable and mem_addr(ioBit);
+ io_mem_readEnable <= mem_readEnable and mem_addr(ioBit);
+ mem_busy <= io_busy or dram_mem_busy or io_busy;
+
+
+
+ -- Memory reads either come from IO or DRAM. We need to pick the right one.
+ memorycontrol:
+ process(dram_mem_read, dram_ready, io_ready, io_mem_read)
+ begin
+ mem_read <= (others => 'U');
+ if dram_ready='1' then
+ mem_read <= dram_mem_read;
+ end if;
+
+ if io_ready='1' then
+ mem_read <= (others => '0');
+ mem_read(7 downto 0) <= io_mem_read;
+ end if;
+ end process;
+
+
+ io_ready <= (io_reading or io_mem_readEnable) and not io_busy;
+
+ memoryControlSync:
+ process(clk, areset)
+ begin
+ if areset = '1' then
+ enable <= '0';
+ io_reading <= '0';
+ dram_ready <= '0';
+ elsif (clk'event and clk = '1') then
+ enable <= '1';
+ io_reading <= io_busy or io_mem_readEnable;
+ dram_ready<=dram_mem_readEnable;
+
+ end if;
+ end process;
+
+ -- wiggle the clock @ 100MHz
+ clock : PROCESS
+ begin
+ clk <= '0';
+ wait for 5 ns;
+ clk <= '1';
+ wait for 5 ns;
+ end PROCESS clock;
+
+
+end behave;
diff --git a/zpu/hdl/zpu4/src/simzpu.do b/zpu/hdl/zpu4/src/simzpu.do
new file mode 100644
index 0000000..e6e3068
--- /dev/null
+++ b/zpu/hdl/zpu4/src/simzpu.do
@@ -0,0 +1,23 @@
+set BreakOnAssertion 1
+vlib work
+
+vcom -93 -explicit zpu_config.vhd
+vcom -93 -explicit zpupkg.vhd
+vcom -93 -explicit txt_util.vhd
+vcom -93 -explicit sim_fpga_top.vhd
+vcom -93 -explicit zpu_core.vhd
+vcom -93 -explicit dram.vhd
+vcom -93 -explicit timer.vhd
+vcom -93 -explicit io.vhd
+vcom -93 -explicit trace.vhd
+
+# run ZPU
+vsim fpga_top
+view wave
+add wave -recursive fpga_top/zpu/*
+#add wave -recursive fpga_top/*
+view structure
+#view signals
+
+# Enough to run tiny programs
+run 1000 ms
diff --git a/zpu/hdl/zpu4/src/simzpu_intstack.do b/zpu/hdl/zpu4/src/simzpu_intstack.do
new file mode 100644
index 0000000..cec4873
--- /dev/null
+++ b/zpu/hdl/zpu4/src/simzpu_intstack.do
@@ -0,0 +1,23 @@
+set BreakOnAssertion 1
+vlib work
+
+vcom -93 -explicit zpu_config_trace.vhd
+vcom -93 -explicit zpupkg.vhd
+vcom -93 -explicit txt_util.vhd
+vcom -93 -explicit sim_fpga_top.vhd
+vcom -93 -explicit zpu_core_intstack.vhd
+vcom -93 -explicit dram_hello.vhd
+vcom -93 -explicit timer.vhd
+vcom -93 -explicit io.vhd
+vcom -93 -explicit trace.vhd
+
+# run ZPU
+vsim fpga_top
+view wave
+add wave -recursive fpga_top/zpu/*
+#add wave -recursive fpga_top/*
+view structure
+#view signals
+
+# Enough to run tiny programs
+run 15 ms
diff --git a/zpu/hdl/zpu4/src/status.txt b/zpu/hdl/zpu4/src/status.txt
new file mode 100644
index 0000000..df01caf
--- /dev/null
+++ b/zpu/hdl/zpu4/src/status.txt
@@ -0,0 +1,109 @@
+- Before NEQBRANCH opt 4.684 DMIPS 8.0 cycles average, after
+- opcode pairs
+
+0x6060 0.1519223038446077 75961 9.048362120309708 LOADSP + LOADSP
+0x4040 0.13967027934055867 69835 11.08668042546436 STORESP + STORESP
+0x8038 0.10230620461240922 51153 10.251102204408818 IM + NEQBRANCH
+0x4060 0.09856219712439425 49281 9.822802471596571 STORESP + LOADSP
+0x6080 0.09734219468438937 48671 6.483415478886373 LOADSP + IM
+0x3860 0.08642217284434568 43211 12.616350364963504 NEQBRANCH + LOADSP
+0x8080 0.060966121932243864 30483 4.275915275634731 IM + IM
+0x8005 0.05317010634021268 26585 6.572311495673671 IM + ADD
+0x540 0.05215210430420861 26076 9.339541547277937 ADD + STORESP
+0x3d0d 0.050808101616203236 25404 12.398243045387995
+0xd04 0.0466000932001864 23300 20.0
+0x6040 0.04389608779217558 21948 9.460344827586207
+0x4080 0.043648087296174594 21824 7.630769230769231
+0xc80 0.03966807933615867 19834 11.438292964244521
+0x8010 0.0391500783001566 19575 6.1248435544430535
+0x480 0.038798077596155195 19399 10.941342357586013
+
+
+- zpu_core.vhd: 1500 LUTs. Xilinx ISE reports 83MHz maximum frequency after P&R
+ which matches what I've found w/my ic300.vhd testbench
+
+- zpu_core_instack.vhd
+ - problems w/simulation trace since storeb/loadb will run into undefined memory
+ during emulation. Solution: implement loadb+storeb.
+ - simulation needs to read cycles from ModelSim trace so as to m ake readcycles
+ not cause false positives. This has other interesting potentials w.r.t.
+ knowing which instructions take the longest.
+
+- Ca. 1700 LUT inc. all instructions. Removing all higher level instructions
+ => 1300.
+
+- Review memory interface
+ - When is mem_busy high? Will it be high on the next cycle after
+ I've send mem_read/writeEnable?
+ - Should I hold off posting a read/write until mem_busy = '0'?
+ - Write posting could increase performance somewhat. Should there be
+ a seperate write busy signal?
+ - Synchronous reset? The ARM7 will have to copy the program to DRAM and
+ then start the ZPU.
+
+- Current instruction set has
+ - 31 DMIPS single cycle performance Simulator.java
+ - 8 DMIPS w/single cycle RAM access in ModelSim
+
+112 0.06100380865858346 67215918
+56 0.04139603650830458 45611457
+129 0.0375812381475752 41408192
+5 0.03703417264799563 40805418
+113 0.03540341331682748 39008596
+128 0.0343154384313754 37809831
+83 0.03322159422742951 36604599
+114 0.03213492807203279 35407276
+132 0.03158580962697109 34802240
+12 0.03049709687915076 33602662
+8 0.029409690138646426 32404523
+115 0.026690690908727877 29408644
+46 0.025054316381406774 27605635
+82 0.023965804208719754 26406278
+84 0.023961360698074072 26401382
+116 0.023417718589457643 25802380
+81 0.02179306727026773 24012288
+117 0.021783900714401432 24002188
+4 0.01797685126990833 19807461
+6 0.016340292503890113 18004249
+85 0.016339001017850734 18002826
+255 0.016338918428089957 18002735
+86 0.016337281154151066 18000931
+11 0.011984767180825744 13205194
+51 0.0114390303780569 12603884
+38 0.010892246228211845 12001420
+118 0.010347263624247446 11400941
+131 0.009257503529350904 10200209
+7 0.008713386756504965 9600684
+22 0.008712946580307425 9600199
+
+
+64 0.16176824859336478 178241352
+96 0.23147927881894828 255051161
+128 0.2646966482624612 291651105
+
+
+- Alternate memory interface to allow more caching in memory subsystem?
+
+-- The memory interface allows a dual port memory to be used
+-- to increase performance.
+--
+-- Also it is possible to implement a zero cycle register file instead
+-- of memory, though obviously that will cause problems w.r.t. max
+-- frequency for the ZPU.
+--
+-- mem_writeEnable - set to '1' for a single cycle to send off a write request.
+-- mem_write is valid only while mem_writeEnable='1'.
+-- mem_readEnable - set to '1' for a single cycle to send off a read request.
+-- mem_read is a single cycle while mem_read_busy='0'.
+--
+-- mem_read/write_busy - It is illegal to send off a read/write request when mem_read/write_busy='1'.
+-- Set to '0' when mem_read is valid after a read request. Note that
+-- the definition allows zero wait state ram.
+-- mem_read/write_addr - address for read/write request
+-- mem_read - read data. Valid only on the cycle after mem_busy='0' after
+-- mem_readEnable='1' for a single cycle.
+-- mem_write - data to write
+-- mem_writeMask - set to '1' for those bits that are to be written to memory upon
+-- write request
+-- break - set to '1' when CPU hits break instruction
+-- interrupt - set to '1' until interrupts are cleared by CPU.
diff --git a/zpu/hdl/zpu4/src/testlut.vhd b/zpu/hdl/zpu4/src/testlut.vhd
new file mode 100644
index 0000000..668efcc
--- /dev/null
+++ b/zpu/hdl/zpu4/src/testlut.vhd
@@ -0,0 +1,114 @@
+-- Company: Zylin AS
+--
+-- Hooks up the ZPU to physical pads to ensure that it is not optimized to
+-- oblivion. This is purely to have something to measure LUT usage against.
+--
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity ic300 is
+ port ( -- Clock inputs
+ cpu_clk_p : in std_logic;
+
+ -- CPU interface signals
+ cpu_a_p : in std_logic_vector(20 downto 0);
+ cpu_wr_n_p : in std_logic_vector(1 downto 0);
+ cpu_cs_n_p : in std_logic_vector(3 downto 1);
+ cpu_oe_n_p : in std_logic;
+ cpu_d_p : out std_logic_vector(15 downto 0);
+ cpu_irq_p : out std_logic_vector(1 downto 0);
+ cpu_fiq_p : out std_logic;
+ cpu_wait_n_p : out std_logic;
+
+ sdr_clk_fb_p : in std_logic -- DDR clock feedback
+ );
+end ic300;
+
+architecture behave of ic300 is
+
+
+signal io_busy : std_logic;
+signal io_read : std_logic_vector(7 downto 0);
+signal io_write : std_logic_vector(7 downto 0);
+signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal io_writeEnable : std_logic;
+signal io_readEnable : std_logic;
+
+
+signal cpu_we : std_logic_vector(1 downto 0);
+signal cpu_re : std_logic;
+signal areset : std_logic;
+
+-- Clock module signals
+signal clk_status : std_logic_vector(2 downto 0);
+signal cpu_clk : std_logic;
+signal cpu_clk_2x : std_logic;
+signal cpu_clk_4x : std_logic;
+signal ddr_in_clk : std_logic;
+
+
+-- Internal CPU interface signals
+signal cpu_din : std_logic_vector(15 downto 0);
+signal cpu_dout : std_logic_vector(15 downto 0);
+signal cpu_a : std_logic_vector(20 downto 0);
+
+signal dummy : std_logic_vector(maxAddrBit downto minAddrBit+5);
+
+signal dummy2 : std_logic_vector(wordSize-1 downto 0);
+signal dummy3 : std_logic_vector(wordSize-1 downto 0);
+signal dummy4 : std_logic_vector(wordSize-1 downto 0);
+begin
+
+ areset <= '0'; -- MUST BE CHANGED TO SOMETHING CORRECT
+
+-- cpu_d_p <= (others => '0');
+ cpu_irq_p <= (others => '0');
+ cpu_fiq_p <= '0';
+ cpu_wait_n_p <= '0';
+
+ cpu_d_p(15 downto 15) <= (others => '0');
+
+ -- delay signals going out/in w/1 clk so the
+ -- ZPU does not have to drive those pins.
+ --
+ -- these registers can be placed close to the ZPU and these
+ -- registers then have a full clock to drive the pins.
+ process(cpu_clk_p, areset)
+ begin
+ if (cpu_clk_p'event and cpu_clk_p = '1') then
+ cpu_d_p(0) <= io_writeEnable;
+ cpu_d_p(1) <= io_readEnable;
+ cpu_d_p(9 downto 2) <= io_write;
+ io_read <= cpu_a_p(7 downto 0);
+ -- 32 read/write registers is plenty realisitic for a minimal size
+ -- soft-CPU
+ cpu_d_p(14 downto 10) <= io_addr(minAddrBit+4 downto minAddrBit);
+ end if;
+ end process;
+
+
+ zpu: zpu_core port map (
+ clk => cpu_clk_p ,
+ areset => areset,
+ enable => '1',
+
+ in_mem_busy => '0',
+ out_mem_writeEnable => io_writeEnable,
+ out_mem_readEnable => io_readEnable,
+ mem_write(7 downto 0) => io_write,
+ mem_write(wordSize-1 downto 8) => dummy3(wordSize-1 downto 8),
+ mem_read(7 downto 0) => io_read,
+ mem_read(wordSize-1 downto 8) => dummy2(wordSize-1 downto 8),
+ out_mem_addr(maxAddrBitIncIO) => dummy4(maxAddrBitIncIO),
+ out_mem_addr(minAddrBit-1 downto 0) => dummy4(minAddrBit-1 downto 0) ,
+ out_mem_addr(maxAddrBit downto minAddrBit) => io_addr,
+ interrupt => '0'
+ );
+
+
+end behave;
diff --git a/zpu/hdl/zpu4/src/timer.vhd b/zpu/hdl/zpu4/src/timer.vhd
new file mode 100644
index 0000000..60c8fe2
--- /dev/null
+++ b/zpu/hdl/zpu4/src/timer.vhd
@@ -0,0 +1,61 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+entity timer is
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ we : in std_logic;
+ din : in std_logic_vector(7 downto 0);
+ adr : in std_logic_vector(2 downto 0);
+ dout : out std_logic_vector(7 downto 0));
+end timer;
+
+
+architecture behave of timer is
+
+signal sample : std_logic;
+signal reset : std_logic;
+
+
+signal cnt : std_logic_vector(63 downto 0);
+signal cnt_smp : std_logic_vector(63 downto 0);
+
+begin
+
+ reset <= '1' when (we = '1' and din(0) = '1') else '0';
+ sample <= '1' when (we = '1' and din(1) = '1') else '0';
+
+ process(clk, areset) -- Carry generation
+ begin
+ if areset = '1' then
+ cnt <= (others => '0');
+ cnt_smp <= (others => '0');
+ elsif (clk'event and clk = '1') then
+ cnt <= cnt + 1;
+ if sample = '1' then
+-- report "sampling" severity failure;
+ cnt_smp <= cnt;
+ end if;
+ end if;
+ end process;
+
+
+ process(cnt_smp, adr)
+ begin
+ case adr is
+ when "000" => dout <= cnt_smp(7 downto 0);
+ when "001" => dout <= cnt_smp(15 downto 8);
+ when "010" => dout <= cnt_smp(23 downto 16);
+ when "011" => dout <= cnt_smp(31 downto 24);
+ when "100" => dout <= cnt_smp(39 downto 32);
+ when "101" => dout <= cnt_smp(47 downto 40);
+ when "110" => dout <= cnt_smp(55 downto 48);
+ when others => dout <= cnt_smp(63 downto 56);
+ end case;
+ end process;
+
+
+end behave;
+
diff --git a/zpu/hdl/zpu4/src/trace.vhd b/zpu/hdl/zpu4/src/trace.vhd
new file mode 100644
index 0000000..bc5279f
--- /dev/null
+++ b/zpu/hdl/zpu4/src/trace.vhd
@@ -0,0 +1,84 @@
+library ieee;
+use ieee.std_logic_1164.all;
+--use IEEE.STD_LOGIC_ARITH.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+use std.textio.all;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+use work.txt_util.all;
+
+
+entity trace is
+ generic (
+ log_file: string := "trace.txt"
+ );
+ port(
+ clk : in std_logic;
+ begin_inst : in std_logic;
+ pc : in std_logic_vector(maxAddrBitIncIO downto 0);
+ opcode : in std_logic_vector(7 downto 0);
+ sp : in std_logic_vector(maxAddrBitIncIO downto 2);
+ memA : in std_logic_vector(wordSize-1 downto 0);
+ memB : in std_logic_vector(wordSize-1 downto 0);
+ busy : in std_logic;
+ intSp : in std_logic_vector(stack_bits-1 downto 0)
+ );
+end trace;
+
+
+architecture behave of trace is
+
+
+file l_file : TEXT open write_mode is log_file;
+
+
+begin
+
+
+-- write data and control information to a file
+
+receive_data: process
+
+variable l: line;
+variable t : std_logic_vector(wordSize-1 downto 0);
+variable t2 : std_logic_vector(maxAddrBitIncIO downto 0);
+variable counter : std_logic_vector(63 downto 0);
+
+
+
+begin
+
+ t:= (others => '0');
+ t2:= (others => '0');
+
+counter := (others => '0');
+ -- print header for the logfile
+ print(l_file, "#pc,opcode,sp,top_of_stack ");
+ print(l_file, "#----------");
+ print(l_file, " ");
+
+ wait until clk = '1';
+ wait until clk = '0';
+
+ while true loop
+
+ counter := counter + 1;
+ if begin_inst = '1' then
+ t(maxAddrBitIncIO downto 2):=sp;
+ t2:=pc;
+ print(l_file, "0x" & hstr(t2) & " 0x" & hstr(opcode) & " 0x" & hstr(t) & " 0x" & hstr(memA) & " 0x" & hstr(memB) & " 0x" & hstr(intSp) & " 0x" & hstr(counter));
+ end if;
+
+ wait until clk = '0';
+
+ end loop;
+
+ end process receive_data;
+
+
+
+end behave;
+
diff --git a/zpu/hdl/zpu4/src/txt_util.vhd b/zpu/hdl/zpu4/src/txt_util.vhd
new file mode 100644
index 0000000..d3bf01a
--- /dev/null
+++ b/zpu/hdl/zpu4/src/txt_util.vhd
@@ -0,0 +1,587 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use std.textio.all;
+
+library work;
+
+package txt_util is
+
+ -- prints a message to the screen
+ procedure print(text: string);
+
+ -- prints the message when active
+ -- useful for debug switches
+ procedure print(active: boolean; text: string);
+
+ -- converts std_logic into a character
+ function chr(sl: std_logic) return character;
+
+ -- converts std_logic into a string (1 to 1)
+ function str(sl: std_logic) return string;
+
+ -- converts std_logic_vector into a string (binary base)
+ function str(slv: std_logic_vector) return string;
+
+ -- converts boolean into a string
+ function str(b: boolean) return string;
+
+ -- converts an integer into a single character
+ -- (can also be used for hex conversion and other bases)
+ function chr(int: integer) return character;
+
+ -- converts integer into string using specified base
+ function str(int: integer; base: integer) return string;
+
+ -- converts integer to string, using base 10
+ function str(int: integer) return string;
+
+ -- convert std_logic_vector into a string in hex format
+ function hstr(slv: std_logic_vector) return string;
+
+
+ -- functions to manipulate strings
+ -----------------------------------
+
+ -- convert a character to upper case
+ function to_upper(c: character) return character;
+
+ -- convert a character to lower case
+ function to_lower(c: character) return character;
+
+ -- convert a string to upper case
+ function to_upper(s: string) return string;
+
+ -- convert a string to lower case
+ function to_lower(s: string) return string;
+
+
+
+ -- functions to convert strings into other formats
+ --------------------------------------------------
+
+ -- converts a character into std_logic
+ function to_std_logic(c: character) return std_logic;
+
+ -- converts a string into std_logic_vector
+ function to_std_logic_vector(s: string) return std_logic_vector;
+
+
+
+ -- file I/O
+ -----------
+
+ -- read variable length string from input file
+ procedure str_read(file in_file: TEXT;
+ res_string: out string);
+
+ -- print string to a file and start new line
+ procedure print(file out_file: TEXT;
+ new_string: in string);
+
+ -- print character to a file and start new line
+ procedure print(file out_file: TEXT;
+ char: in character);
+
+end txt_util;
+
+
+
+
+package body txt_util is
+
+
+
+
+ -- prints text to the screen
+
+ procedure print(text: string) is
+ variable msg_line: line;
+ begin
+ write(msg_line, text);
+ writeline(output, msg_line);
+ end print;
+
+
+
+
+ -- prints text to the screen when active
+
+ procedure print(active: boolean; text: string) is
+ begin
+ if active then
+ print(text);
+ end if;
+ end print;
+
+
+ -- converts std_logic into a character
+
+ function chr(sl: std_logic) return character is
+ variable c: character;
+ begin
+ case sl is
+ when 'U' => c:= 'U';
+ when 'X' => c:= 'X';
+ when '0' => c:= '0';
+ when '1' => c:= '1';
+ when 'Z' => c:= 'Z';
+ when 'W' => c:= 'W';
+ when 'L' => c:= 'L';
+ when 'H' => c:= 'H';
+ when '-' => c:= '-';
+ end case;
+ return c;
+ end chr;
+
+
+
+ -- converts std_logic into a string (1 to 1)
+
+ function str(sl: std_logic) return string is
+ variable s: string(1 to 1);
+ begin
+ s(1) := chr(sl);
+ return s;
+ end str;
+
+
+
+ -- converts std_logic_vector into a string (binary base)
+ -- (this also takes care of the fact that the range of
+ -- a string is natural while a std_logic_vector may
+ -- have an integer range)
+
+ function str(slv: std_logic_vector) return string is
+ variable result : string (1 to slv'length);
+ variable r : integer;
+ begin
+ r := 1;
+ for i in slv'range loop
+ result(r) := chr(slv(i));
+ r := r + 1;
+ end loop;
+ return result;
+ end str;
+
+
+ function str(b: boolean) return string is
+
+ begin
+ if b then
+ return "true";
+ else
+ return "false";
+ end if;
+ end str;
+
+
+ -- converts an integer into a character
+ -- for 0 to 9 the obvious mapping is used, higher
+ -- values are mapped to the characters A-Z
+ -- (this is usefull for systems with base > 10)
+ -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
+
+ function chr(int: integer) return character is
+ variable c: character;
+ begin
+ case int is
+ when 0 => c := '0';
+ when 1 => c := '1';
+ when 2 => c := '2';
+ when 3 => c := '3';
+ when 4 => c := '4';
+ when 5 => c := '5';
+ when 6 => c := '6';
+ when 7 => c := '7';
+ when 8 => c := '8';
+ when 9 => c := '9';
+ when 10 => c := 'A';
+ when 11 => c := 'B';
+ when 12 => c := 'C';
+ when 13 => c := 'D';
+ when 14 => c := 'E';
+ when 15 => c := 'F';
+ when 16 => c := 'G';
+ when 17 => c := 'H';
+ when 18 => c := 'I';
+ when 19 => c := 'J';
+ when 20 => c := 'K';
+ when 21 => c := 'L';
+ when 22 => c := 'M';
+ when 23 => c := 'N';
+ when 24 => c := 'O';
+ when 25 => c := 'P';
+ when 26 => c := 'Q';
+ when 27 => c := 'R';
+ when 28 => c := 'S';
+ when 29 => c := 'T';
+ when 30 => c := 'U';
+ when 31 => c := 'V';
+ when 32 => c := 'W';
+ when 33 => c := 'X';
+ when 34 => c := 'Y';
+ when 35 => c := 'Z';
+ when others => c := '?';
+ end case;
+ return c;
+ end chr;
+
+
+
+ -- convert integer to string using specified base
+ -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
+
+ function str(int: integer; base: integer) return string is
+
+ variable temp: string(1 to 10);
+ variable num: integer;
+ variable abs_int: integer;
+ variable len: integer := 1;
+ variable power: integer := 1;
+
+ begin
+
+ -- bug fix for negative numbers
+ abs_int := abs(int);
+
+ num := abs_int;
+
+ while num >= base loop -- Determine how many
+ len := len + 1; -- characters required
+ num := num / base; -- to represent the
+ end loop ; -- number.
+
+ for i in len downto 1 loop -- Convert the number to
+ temp(i) := chr(abs_int/power mod base); -- a string starting
+ power := power * base; -- with the right hand
+ end loop ; -- side.
+
+ -- return result and add sign if required
+ if int < 0 then
+ return '-'& temp(1 to len);
+ else
+ return temp(1 to len);
+ end if;
+
+ end str;
+
+
+ -- convert integer to string, using base 10
+ function str(int: integer) return string is
+
+ begin
+
+ return str(int, 10) ;
+
+ end str;
+
+
+
+ -- converts a std_logic_vector into a hex string.
+ function hstr(slv: std_logic_vector) return string is
+ variable hexlen: integer;
+ variable longslv : std_logic_vector(67 downto 0) := (others => '0');
+ variable hex : string(1 to 16);
+ variable fourbit : std_logic_vector(3 downto 0);
+ begin
+ hexlen := (slv'left+1)/4;
+ if (slv'left+1) mod 4 /= 0 then
+ hexlen := hexlen + 1;
+ end if;
+ longslv(slv'left downto 0) := slv;
+ for i in (hexlen -1) downto 0 loop
+ fourbit := longslv(((i*4)+3) downto (i*4));
+ case fourbit is
+ when "0000" => hex(hexlen -I) := '0';
+ when "0001" => hex(hexlen -I) := '1';
+ when "0010" => hex(hexlen -I) := '2';
+ when "0011" => hex(hexlen -I) := '3';
+ when "0100" => hex(hexlen -I) := '4';
+ when "0101" => hex(hexlen -I) := '5';
+ when "0110" => hex(hexlen -I) := '6';
+ when "0111" => hex(hexlen -I) := '7';
+ when "1000" => hex(hexlen -I) := '8';
+ when "1001" => hex(hexlen -I) := '9';
+ when "1010" => hex(hexlen -I) := 'A';
+ when "1011" => hex(hexlen -I) := 'B';
+ when "1100" => hex(hexlen -I) := 'C';
+ when "1101" => hex(hexlen -I) := 'D';
+ when "1110" => hex(hexlen -I) := 'E';
+ when "1111" => hex(hexlen -I) := 'F';
+ when "ZZZZ" => hex(hexlen -I) := 'z';
+ when "UUUU" => hex(hexlen -I) := 'u';
+ when "XXXX" => hex(hexlen -I) := 'x';
+ when others => hex(hexlen -I) := '?';
+ end case;
+ end loop;
+ return hex(1 to hexlen);
+ end hstr;
+
+
+
+ -- functions to manipulate strings
+ -----------------------------------
+
+
+ -- convert a character to upper case
+
+ function to_upper(c: character) return character is
+
+ variable u: character;
+
+ begin
+
+ case c is
+ when 'a' => u := 'A';
+ when 'b' => u := 'B';
+ when 'c' => u := 'C';
+ when 'd' => u := 'D';
+ when 'e' => u := 'E';
+ when 'f' => u := 'F';
+ when 'g' => u := 'G';
+ when 'h' => u := 'H';
+ when 'i' => u := 'I';
+ when 'j' => u := 'J';
+ when 'k' => u := 'K';
+ when 'l' => u := 'L';
+ when 'm' => u := 'M';
+ when 'n' => u := 'N';
+ when 'o' => u := 'O';
+ when 'p' => u := 'P';
+ when 'q' => u := 'Q';
+ when 'r' => u := 'R';
+ when 's' => u := 'S';
+ when 't' => u := 'T';
+ when 'u' => u := 'U';
+ when 'v' => u := 'V';
+ when 'w' => u := 'W';
+ when 'x' => u := 'X';
+ when 'y' => u := 'Y';
+ when 'z' => u := 'Z';
+ when others => u := c;
+ end case;
+
+ return u;
+
+ end to_upper;
+
+
+ -- convert a character to lower case
+
+ function to_lower(c: character) return character is
+
+ variable l: character;
+
+ begin
+
+ case c is
+ when 'A' => l := 'a';
+ when 'B' => l := 'b';
+ when 'C' => l := 'c';
+ when 'D' => l := 'd';
+ when 'E' => l := 'e';
+ when 'F' => l := 'f';
+ when 'G' => l := 'g';
+ when 'H' => l := 'h';
+ when 'I' => l := 'i';
+ when 'J' => l := 'j';
+ when 'K' => l := 'k';
+ when 'L' => l := 'l';
+ when 'M' => l := 'm';
+ when 'N' => l := 'n';
+ when 'O' => l := 'o';
+ when 'P' => l := 'p';
+ when 'Q' => l := 'q';
+ when 'R' => l := 'r';
+ when 'S' => l := 's';
+ when 'T' => l := 't';
+ when 'U' => l := 'u';
+ when 'V' => l := 'v';
+ when 'W' => l := 'w';
+ when 'X' => l := 'x';
+ when 'Y' => l := 'y';
+ when 'Z' => l := 'z';
+ when others => l := c;
+ end case;
+
+ return l;
+
+ end to_lower;
+
+
+
+ -- convert a string to upper case
+
+ function to_upper(s: string) return string is
+
+ variable uppercase: string (s'range);
+
+ begin
+
+ for i in s'range loop
+ uppercase(i):= to_upper(s(i));
+ end loop;
+ return uppercase;
+
+ end to_upper;
+
+
+
+ -- convert a string to lower case
+
+ function to_lower(s: string) return string is
+
+ variable lowercase: string (s'range);
+
+ begin
+
+ for i in s'range loop
+ lowercase(i):= to_lower(s(i));
+ end loop;
+ return lowercase;
+
+ end to_lower;
+
+
+
+-- functions to convert strings into other types
+
+
+-- converts a character into a std_logic
+
+function to_std_logic(c: character) return std_logic is
+ variable sl: std_logic;
+ begin
+ case c is
+ when 'U' =>
+ sl := 'U';
+ when 'X' =>
+ sl := 'X';
+ when '0' =>
+ sl := '0';
+ when '1' =>
+ sl := '1';
+ when 'Z' =>
+ sl := 'Z';
+ when 'W' =>
+ sl := 'W';
+ when 'L' =>
+ sl := 'L';
+ when 'H' =>
+ sl := 'H';
+ when '-' =>
+ sl := '-';
+ when others =>
+ sl := 'X';
+ end case;
+ return sl;
+ end to_std_logic;
+
+
+-- converts a string into std_logic_vector
+
+function to_std_logic_vector(s: string) return std_logic_vector is
+ variable slv: std_logic_vector(s'high-s'low downto 0);
+ variable k: integer;
+begin
+ k := s'high-s'low;
+ for i in s'range loop
+ slv(k) := to_std_logic(s(i));
+ k := k - 1;
+ end loop;
+ return slv;
+end to_std_logic_vector;
+
+
+
+
+
+
+----------------
+-- file I/O --
+----------------
+
+
+
+-- read variable length string from input file
+
+procedure str_read(file in_file: TEXT;
+ res_string: out string) is
+
+ variable l: line;
+ variable c: character;
+ variable is_string: boolean;
+
+ begin
+
+ readline(in_file, l);
+ -- clear the contents of the result string
+ for i in res_string'range loop
+ res_string(i) := ' ';
+ end loop;
+ -- read all characters of the line, up to the length
+ -- of the results string
+ for i in res_string'range loop
+ read(l, c, is_string);
+ res_string(i) := c;
+ if not is_string then -- found end of line
+ exit;
+ end if;
+ end loop;
+
+end str_read;
+
+
+-- print string to a file
+procedure print(file out_file: TEXT;
+ new_string: in string) is
+
+ variable l: line;
+
+ begin
+
+ write(l, new_string);
+ writeline(out_file, l);
+
+end print;
+
+
+-- print character to a file and start new line
+procedure print(file out_file: TEXT;
+ char: in character) is
+
+ variable l: line;
+
+ begin
+
+ write(l, char);
+ writeline(out_file, l);
+
+end print;
+
+
+
+-- appends contents of a string to a file until line feed occurs
+-- (LF is considered to be the end of the string)
+
+procedure str_write(file out_file: TEXT;
+ new_string: in string) is
+ begin
+
+ for i in new_string'range loop
+ print(out_file, new_string(i));
+ if new_string(i) = LF then -- end of string
+ exit;
+ end if;
+ end loop;
+
+end str_write;
+
+
+
+
+end txt_util;
+
+
+
+
diff --git a/zpu/hdl/zpu4/src/xmake.filelist b/zpu/hdl/zpu4/src/xmake.filelist
new file mode 100644
index 0000000..91e623f
--- /dev/null
+++ b/zpu/hdl/zpu4/src/xmake.filelist
@@ -0,0 +1,12 @@
+vhdl work "ic300_config.vhd"
+vhdl work "ic300pkg.vhd"
+vhdl zylin "zpu_config.vhd"
+vhdl zylin "zpupkg.vhd"
+vhdl zylin "zpu_core.vhd"
+vhdl work "bram.vhd"
+vhdl zylin "zpuio.vhd"
+vhdl zylin "..\dummyfpgalib\arm7\src\arm7pkg.vhd"
+vhdl zylin "..\dummyfpgalib\arm7\src\arm7wb.vhd"
+vhdl work "clocks.vhd"
+vhdl work "timer.vhd"
+vhdl work "ic300.vhd" \ No newline at end of file
diff --git a/zpu/hdl/zpu4/src/xmake.filelist.bramsmall b/zpu/hdl/zpu4/src/xmake.filelist.bramsmall
new file mode 100644
index 0000000..141633e
--- /dev/null
+++ b/zpu/hdl/zpu4/src/xmake.filelist.bramsmall
@@ -0,0 +1,5 @@
+vhdl work "zpu_config.vhd"
+vhdl work "zpupkg.vhd"
+vhdl work "zpu_core_small.vhd"
+vhdl work "bram_dmips.vhd"
+vhdl work "testlut.vhd"
diff --git a/zpu/hdl/zpu4/src/xmake.xst b/zpu/hdl/zpu4/src/xmake.xst
new file mode 100644
index 0000000..bfdb23f
--- /dev/null
+++ b/zpu/hdl/zpu4/src/xmake.xst
@@ -0,0 +1,53 @@
+set -tmpdir ../tmp
+set -xsthdpdir ../xst
+run
+-ifn xmake.filelist
+-ifmt mixed
+-ofn ../syn/ic300
+-ofmt NGC
+-p xc3s400-4-ft256
+-top ic300
+-opt_mode Area
+-opt_level 2
+-iuc NO
+-lso ic300.lso
+-keep_hierarchy NO
+-glob_opt AllClockNets
+-rtlview Yes
+-read_cores YES
+-write_timing_constraints NO
+-cross_clock_analysis NO
+-hierarchy_separator /
+-bus_delimiter <>
+-case maintain
+-slice_utilization_ratio 100
+-verilog2001 YES
+-fsm_extract YES -fsm_encoding Auto
+-safe_implementation No
+-fsm_style lut
+-ram_extract Yes
+-ram_style Auto
+-rom_extract Yes
+-rom_style Auto
+-mux_extract YES
+-mux_style Auto
+-decoder_extract YES
+-priority_extract YES
+-shreg_extract YES
+-shift_extract YES
+-xor_collapse YES
+-resource_sharing YES
+-mult_style auto
+-iobuf YES
+-max_fanout 500
+-bufg 8
+-register_duplication YES
+-equivalent_register_removal NO
+-register_balancing No
+-slice_packing YES
+-optimize_primitives NO
+-use_clock_enable Yes
+-use_sync_set No
+-use_sync_reset No
+-iob true
+-slice_utilization_ratio_maxmargin 5
diff --git a/zpu/hdl/zpu4/src/zpu_config.vhd b/zpu/hdl/zpu4/src/zpu_config.vhd
new file mode 100644
index 0000000..a13c0bf
--- /dev/null
+++ b/zpu/hdl/zpu4/src/zpu_config.vhd
@@ -0,0 +1,16 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+package zpu_config is
+ -- generate trace output or not.
+ constant Generate_Trace : boolean := false;
+ constant wordPower : integer := 5;
+ -- during simulation, set this to '0' to get matching trace.txt
+ constant DontCareValue : std_logic := 'X';
+ -- Clock frequency in MHz.
+ constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64";
+ -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1)
+ constant maxAddrBitIncIO : integer := 15;
+
+end zpu_config;
diff --git a/zpu/hdl/zpu4/src/zpu_config_fastsim.vhd b/zpu/hdl/zpu4/src/zpu_config_fastsim.vhd
new file mode 100644
index 0000000..d39c9e9
--- /dev/null
+++ b/zpu/hdl/zpu4/src/zpu_config_fastsim.vhd
@@ -0,0 +1,15 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+package zpu_config is
+
+ constant Generate_Trace : boolean := false;
+ constant wordPower : integer := 5;
+ -- during simulation, set this to '0' to get matching trace.txt
+ constant DontCareValue : std_logic := '0';
+ -- Clock frequency in MHz.
+ constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"50"; -- 80MHz
+ constant maxAddrBitIncIO : integer := 15;
+
+end zpu_config;
diff --git a/zpu/hdl/zpu4/src/zpu_config_trace.vhd b/zpu/hdl/zpu4/src/zpu_config_trace.vhd
new file mode 100644
index 0000000..d1bbbbb
--- /dev/null
+++ b/zpu/hdl/zpu4/src/zpu_config_trace.vhd
@@ -0,0 +1,15 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+package zpu_config is
+
+ constant Generate_Trace : boolean := true;
+ constant wordPower : integer := 5;
+ -- during simulation, set this to '0' to get matching trace.txt
+ constant DontCareValue : std_logic := '0';
+ -- Clock frequency in MHz.
+ constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64";
+ constant maxAddrBitIncIO : integer := 15;
+
+end zpu_config;
diff --git a/zpu/hdl/zpu4/src/zpu_core.vhd b/zpu/hdl/zpu4/src/zpu_core.vhd
new file mode 100644
index 0000000..c7093e2
--- /dev/null
+++ b/zpu/hdl/zpu4/src/zpu_core.vhd
@@ -0,0 +1,900 @@
+
+-- Company: ZPU4 generic memory interface CPU
+-- Engineer: Øyvind Harboe
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+use IEEE.STD_LOGIC_arith.ALL;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+
+-- mem_writeEnable - set to '1' for a single cycle to send off a write request.
+-- mem_write is valid only while mem_writeEnable='1'.
+-- mem_readEnable - set to '1' for a single cycle to send off a read request.
+--
+-- mem_busy - It is illegal to send off a read/write request when mem_busy='1'.
+-- Set to '0' when mem_read is valid after a read request.
+-- If it goes to '1'(busy), it is on the cycle after mem_read/writeEnable
+-- is '1'.
+-- mem_addr - address for read/write request
+-- mem_read - read data. Valid only on the cycle after mem_busy='0' after
+-- mem_readEnable='1' for a single cycle.
+-- mem_write - data to write
+-- mem_writeMask - set to '1' for those bits that are to be written to memory upon
+-- write request
+-- break - set to '1' when CPU hits break instruction
+-- interrupt - set to '1' until interrupts are cleared by CPU.
+
+
+
+
+entity zpu_core is
+ Port ( clk : in std_logic;
+ areset : in std_logic;
+ enable : in std_logic;
+ in_mem_busy : in std_logic;
+ mem_read : in std_logic_vector(wordSize-1 downto 0);
+ mem_write : out std_logic_vector(wordSize-1 downto 0);
+ out_mem_addr : out std_logic_vector(maxAddrBitIncIO downto 0);
+ out_mem_writeEnable : out std_logic;
+ out_mem_readEnable : out std_logic;
+ mem_writeMask: out std_logic_vector(wordBytes-1 downto 0);
+ interrupt : in std_logic;
+ break : out std_logic);
+end zpu_core;
+
+architecture behave of zpu_core is
+
+type InsnType is
+(
+State_AddTop,
+State_Dup,
+State_DupStackB,
+State_Pop,
+State_Popdown,
+State_Add,
+State_Or,
+State_And,
+State_Store,
+State_AddSP,
+State_Shift,
+State_Nop,
+State_Im,
+State_LoadSP,
+State_StoreSP,
+State_Emulate,
+State_Load,
+State_PushPC,
+State_PushSP,
+State_PopPC,
+State_PopPCRel,
+State_Not,
+State_Flip,
+State_PopSP,
+State_Neqbranch,
+State_Eq,
+State_Loadb,
+State_Mult,
+State_Lessthan,
+State_Lessthanorequal,
+State_Ulessthanorequal,
+State_Ulessthan,
+State_Pushspadd,
+State_Call,
+State_Callpcrel,
+State_Sub,
+State_Break,
+State_Storeb,
+State_InsnFetch
+);
+
+type StateType is
+(
+State_Load2,
+State_Popped,
+State_LoadSP2,
+State_LoadSP3,
+State_AddSP2,
+State_Fetch,
+State_Execute,
+State_Decode,
+State_Decode2,
+State_Resync,
+
+State_StoreSP2,
+State_Resync2,
+State_Resync3,
+State_Loadb2,
+State_Storeb2,
+State_Mult2,
+State_Mult3,
+State_Mult5,
+State_Mult4,
+State_BinaryOpResult2,
+State_BinaryOpResult,
+State_Idle
+);
+
+
+signal pc : std_logic_vector(maxAddrBitIncIO downto 0);
+signal sp : std_logic_vector(maxAddrBitIncIO downto minAddrBit);
+signal incSp : std_logic_vector(maxAddrBitIncIO downto minAddrBit);
+signal incIncSp : std_logic_vector(maxAddrBitIncIO downto minAddrBit);
+signal decSp : std_logic_vector(maxAddrBitIncIO downto minAddrBit);
+signal stackA : std_logic_vector(wordSize-1 downto 0);
+signal binaryOpResult : std_logic_vector(wordSize-1 downto 0);
+signal binaryOpResult2 : std_logic_vector(wordSize-1 downto 0);
+signal multResult2 : std_logic_vector(wordSize-1 downto 0);
+signal multResult3 : std_logic_vector(wordSize-1 downto 0);
+signal multResult : std_logic_vector(wordSize-1 downto 0);
+signal multA : std_logic_vector(wordSize-1 downto 0);
+signal multB : std_logic_vector(wordSize-1 downto 0);
+signal stackB : std_logic_vector(wordSize-1 downto 0);
+signal idim_flag : std_logic;
+signal busy : std_logic;
+signal mem_writeEnable : std_logic;
+signal mem_readEnable : std_logic;
+signal mem_addr : std_logic_vector(maxAddrBitIncIO downto minAddrBit);
+signal mem_delayAddr : std_logic_vector(maxAddrBitIncIO downto minAddrBit);
+signal mem_delayReadEnable : std_logic;
+
+signal decodeWord : std_logic_vector(wordSize-1 downto 0);
+
+
+signal state : StateType;
+signal insn : InsnType;
+type InsnArray is array(0 to wordBytes-1) of InsnType;
+signal decodedOpcode : InsnArray;
+
+type OpcodeArray is array(0 to wordBytes-1) of std_logic_vector(7 downto 0);
+
+signal opcode : OpcodeArray;
+
+
+
+
+signal begin_inst : std_logic;
+signal trace_opcode : std_logic_vector(7 downto 0);
+signal trace_pc : std_logic_vector(maxAddrBitIncIO downto 0);
+signal trace_sp : std_logic_vector(maxAddrBitIncIO downto minAddrBit);
+signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0);
+signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0);
+
+-- state machine.
+
+begin
+
+
+ traceFileGenerate:
+ if Generate_Trace generate
+ trace_file: trace port map (
+ clk => clk,
+ begin_inst => begin_inst,
+ pc => trace_pc,
+ opcode => trace_opcode,
+ sp => trace_sp,
+ memA => trace_topOfStack,
+ memB => trace_topOfStackB,
+ busy => busy,
+ intsp => (others => 'U')
+ );
+ end generate;
+
+
+ -- the memory subsystem will tell us one cycle later whether or
+ -- not it is busy
+ out_mem_writeEnable <= mem_writeEnable;
+ out_mem_readEnable <= mem_readEnable;
+ out_mem_addr(maxAddrBitIncIO downto minAddrBit) <= mem_addr;
+ out_mem_addr(minAddrBit-1 downto 0) <= (others => '0');
+
+ incSp <= sp + 1;
+ incIncSp <= sp + 2;
+ decSp <= sp - 1;
+
+
+ opcodeControl:
+ process(clk, areset)
+ variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0);
+ variable spOffset : std_logic_vector(4 downto 0);
+ variable tSpOffset : std_logic_vector(4 downto 0);
+ variable nextPC : std_logic_vector(maxAddrBitIncIO downto 0);
+ variable tNextState : InsnType;
+ variable tDecodedOpcode : InsnArray;
+ variable tMultResult : std_logic_vector(wordSize*2-1 downto 0);
+ begin
+ if areset = '1' then
+ state <= State_Idle;
+ break <= '0';
+ -- point to top of RAM-8
+ sp <= (others => '0');
+ sp(maxAddrBit downto minAddrBit+1) <= (others => '1');
+
+ pc <= (others => '0');
+ idim_flag <= '0';
+ begin_inst <= '0';
+ mem_writeEnable <= '0';
+ mem_readEnable <= '0';
+ multA <= (others => '0');
+ multB <= (others => '0');
+ mem_writeMask <= (others => '1');
+ elsif (clk'event and clk = '1') then
+ -- we must multiply unconditionally to get pipelined multiplication
+ tMultResult := multA * multB;
+ multResult3 <= multResult2;
+ multResult2 <= multResult;
+ multResult <= tMultResult(wordSize-1 downto 0);
+
+
+ binaryOpResult2 <= binaryOpResult; -- pipeline a bit.
+
+
+ multA <= (others => DontCareValue);
+ multB <= (others => DontCareValue);
+
+
+ mem_addr <= (others => DontCareValue);
+ mem_readEnable <='0';
+ mem_writeEnable <='0';
+ mem_write <= (others => DontCareValue);
+
+ if (mem_writeEnable = '1') and (mem_readEnable = '1') then
+ report "read/write collision" severity failure;
+ end if;
+
+
+
+
+ spOffset(4):=not opcode(conv_integer(pc(byteBits-1 downto 0)))(4);
+ spOffset(3 downto 0):=opcode(conv_integer(pc(byteBits-1 downto 0)))(3 downto 0);
+ nextPC := pc + 1;
+
+ -- prepare trace snapshot
+ trace_opcode <= opcode(conv_integer(pc(byteBits-1 downto 0)));
+ trace_pc <= pc;
+ trace_sp <= sp;
+ trace_topOfStack <= stackA;
+ trace_topOfStackB <= stackB;
+ begin_inst <= '0';
+
+
+ case state is
+ when State_Idle =>
+ if enable='1' then
+ state <= State_Resync;
+ end if;
+ -- Initial state of ZPU, fetch top of stack + first instruction
+ when State_Resync =>
+ if in_mem_busy='0' then
+ mem_addr <= sp;
+ mem_readEnable <= '1';
+ state <= State_Resync2;
+ end if;
+ when State_Resync2 =>
+ if in_mem_busy='0' then
+ stackA <= mem_read;
+ mem_addr <= incSp;
+ mem_readEnable <= '1';
+ state <= State_Resync3;
+ end if;
+ when State_Resync3 =>
+ if in_mem_busy='0' then
+ stackB <= mem_read;
+ mem_addr <= pc(maxAddrBitIncIO downto minAddrBit);
+ mem_readEnable <= '1';
+ state <= State_Decode;
+ end if;
+ when State_Decode =>
+ if in_mem_busy='0' then
+ decodeWord <= mem_read;
+ state <= State_Decode2;
+ end if;
+ when State_Decode2 =>
+ -- decode 4 instructions in parallel
+ for i in 0 to wordBytes-1 loop
+ tOpcode := decodeWord((wordBytes-1-i+1)*8-1 downto (wordBytes-1-i)*8);
+
+ tSpOffset(4):=not tOpcode(4);
+ tSpOffset(3 downto 0):=tOpcode(3 downto 0);
+
+ opcode(i) <= tOpcode;
+ if (tOpcode(7 downto 7)=OpCode_Im) then
+ tNextState:=State_Im;
+ elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then
+ if tSpOffset = 0 then
+ tNextState := State_Pop;
+ elsif tSpOffset=1 then
+ tNextState := State_PopDown;
+ else
+ tNextState :=State_StoreSP;
+ end if;
+ elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then
+ if tSpOffset = 0 then
+ tNextState :=State_Dup;
+ elsif tSpOffset = 1 then
+ tNextState :=State_DupStackB;
+ else
+ tNextState :=State_LoadSP;
+ end if;
+ elsif (tOpcode(7 downto 5)=OpCode_Emulate) then
+ tNextState :=State_Emulate;
+ if tOpcode(5 downto 0)=OpCode_Neqbranch then
+ tNextState :=State_Neqbranch;
+ elsif tOpcode(5 downto 0)=OpCode_Eq then
+ tNextState :=State_Eq;
+ elsif tOpcode(5 downto 0)=OpCode_Lessthan then
+ tNextState :=State_Lessthan;
+ elsif tOpcode(5 downto 0)=OpCode_Lessthanorequal then
+ --tNextState :=State_Lessthanorequal;
+ elsif tOpcode(5 downto 0)=OpCode_Ulessthan then
+ tNextState :=State_Ulessthan;
+ elsif tOpcode(5 downto 0)=OpCode_Ulessthanorequal then
+ --tNextState :=State_Ulessthanorequal;
+ elsif tOpcode(5 downto 0)=OpCode_Loadb then
+ tNextState :=State_Loadb;
+ elsif tOpcode(5 downto 0)=OpCode_Mult then
+ tNextState :=State_Mult;
+ elsif tOpcode(5 downto 0)=OpCode_Storeb then
+ tNextState :=State_Storeb;
+ elsif tOpcode(5 downto 0)=OpCode_Pushspadd then
+ tNextState :=State_Pushspadd;
+ elsif tOpcode(5 downto 0)=OpCode_Callpcrel then
+ tNextState :=State_Callpcrel;
+ elsif tOpcode(5 downto 0)=OpCode_Call then
+ --tNextState :=State_Call;
+ elsif tOpcode(5 downto 0)=OpCode_Sub then
+ tNextState :=State_Sub;
+ elsif tOpcode(5 downto 0)=OpCode_PopPCRel then
+ --tNextState :=State_PopPCRel;
+ end if;
+ elsif (tOpcode(7 downto 4)=OpCode_AddSP) then
+ if tSpOffset = 0 then
+ tNextState := State_Shift;
+ elsif tSpOffset = 1 then
+ tNextState := State_AddTop;
+ else
+ tNextState :=State_AddSP;
+ end if;
+ else
+ case tOpcode(3 downto 0) is
+ when OpCode_Nop =>
+ tNextState :=State_Nop;
+ when OpCode_PushSP =>
+ tNextState :=State_PushSP;
+ when OpCode_PopPC =>
+ tNextState :=State_PopPC;
+ when OpCode_Add =>
+ tNextState :=State_Add;
+ when OpCode_Or =>
+ tNextState :=State_Or;
+ when OpCode_And =>
+ tNextState :=State_And;
+ when OpCode_Load =>
+ tNextState :=State_Load;
+ when OpCode_Not =>
+ tNextState :=State_Not;
+ when OpCode_Flip =>
+ tNextState :=State_Flip;
+ when OpCode_Store =>
+ tNextState :=State_Store;
+ when OpCode_PopSP =>
+ tNextState :=State_PopSP;
+ when others =>
+ tNextState := State_Break;
+
+ end case;
+ end if;
+ tDecodedOpcode(i) := tNextState;
+
+ end loop;
+
+ insn <= tDecodedOpcode(conv_integer(pc(byteBits-1 downto 0)));
+
+ -- once we wrap, we need to fetch
+ tDecodedOpcode(0) := State_InsnFetch;
+
+ decodedOpcode <= tDecodedOpcode;
+ state <= State_Execute;
+
+
+
+ -- Each instruction must:
+ --
+ -- 1. set idim_flag
+ -- 2. increase pc if applicable
+ -- 3. set next state if appliable
+ -- 4. do it's operation
+
+ when State_Execute =>
+ insn <= decodedOpcode(conv_integer(nextPC(byteBits-1 downto 0)));
+
+ case insn is
+ when State_InsnFetch =>
+ state <= State_Fetch;
+ when State_Im =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '1';
+ pc <= pc + 1;
+
+ if idim_flag='1' then
+ stackA(wordSize-1 downto 7) <= stackA(wordSize-8 downto 0);
+ stackA(6 downto 0) <= opcode(conv_integer(pc(byteBits-1 downto 0)))(6 downto 0);
+ else
+ mem_writeEnable <= '1';
+ mem_addr <= incSp;
+ mem_write <= stackB;
+ stackB <= stackA;
+ sp <= decSp;
+ for i in wordSize-1 downto 7 loop
+ stackA(i) <= opcode(conv_integer(pc(byteBits-1 downto 0)))(6);
+ end loop;
+ stackA(6 downto 0) <= opcode(conv_integer(pc(byteBits-1 downto 0)))(6 downto 0);
+ end if;
+ end if;
+ when State_StoreSP =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ state <= State_StoreSP2;
+
+ mem_writeEnable <= '1';
+ mem_addr <= sp+spOffset;
+ mem_write <= stackA;
+ stackA <= stackB;
+ sp <= incSp;
+ end if;
+
+
+ when State_LoadSP =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ state <= State_LoadSP2;
+
+ sp <= decSp;
+ mem_writeEnable <= '1';
+ mem_addr <= incSp;
+ mem_write <= stackB;
+ end if;
+ when State_Emulate =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ sp <= decSp;
+ mem_writeEnable <= '1';
+ mem_addr <= incSp;
+ mem_write <= stackB;
+ stackA <= (others => DontCareValue);
+ stackA(maxAddrBitIncIO downto 0) <= pc + 1;
+ stackB <= stackA;
+
+ -- The emulate address is:
+ -- 98 7654 3210
+ -- 0000 00aa aaa0 0000
+ pc <= (others => '0');
+ pc(9 downto 5) <= opcode(conv_integer(pc(byteBits-1 downto 0)))(4 downto 0);
+ state <= State_Fetch;
+ end if;
+ when State_Callpcrel =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ stackA <= (others => DontCareValue);
+ stackA(maxAddrBitIncIO downto 0) <= pc + 1;
+
+ pc <= pc + stackA(maxAddrBitIncIO downto 0);
+ state <= State_Fetch;
+ end if;
+ when State_Call =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ stackA <= (others => DontCareValue);
+ stackA(maxAddrBitIncIO downto 0) <= pc + 1;
+ pc <= stackA(maxAddrBitIncIO downto 0);
+ state <= State_Fetch;
+ end if;
+ when State_AddSP =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ state <= State_AddSP2;
+
+ mem_readEnable <= '1';
+ mem_addr <= sp+spOffset;
+ end if;
+ when State_PushSP =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= pc + 1;
+
+ sp <= decSp;
+ stackA <= (others => '0');
+ stackA(maxAddrBitIncIO downto minAddrBit) <= sp;
+ stackB <= stackA;
+ mem_writeEnable <= '1';
+ mem_addr <= incSp;
+ mem_write <= stackB;
+ end if;
+ when State_PopPC =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= stackA(maxAddrBitIncIO downto 0);
+ sp <= incSp;
+
+ mem_writeEnable <= '1';
+ mem_addr <= incSp;
+ mem_write <= stackB;
+ state <= State_Resync;
+ end if;
+ when State_PopPCRel =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= stackA(maxAddrBitIncIO downto 0) + pc;
+ sp <= incSp;
+
+ mem_writeEnable <= '1';
+ mem_addr <= incSp;
+ mem_write <= stackB;
+ state <= State_Resync;
+ end if;
+ when State_Add =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ stackA <= stackA + stackB;
+
+ mem_readEnable <= '1';
+ mem_addr <= incIncSp;
+ sp <= incSp;
+ state <= State_Popped;
+ end if;
+ when State_Sub =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ binaryOpResult <= stackB - stackA;
+ state <= State_BinaryOpResult;
+ end if;
+ when State_Pop =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ mem_addr <= incIncSp;
+ mem_readEnable <= '1';
+ sp <= incSp;
+ stackA <= stackB;
+ state <= State_Popped;
+ end if;
+ when State_PopDown =>
+ if in_mem_busy='0' then
+ -- PopDown leaves top of stack unchanged
+ begin_inst <= '1';
+ idim_flag <= '0';
+ mem_addr <= incIncSp;
+ mem_readEnable <= '1';
+ sp <= incSp;
+ state <= State_Popped;
+ end if;
+ when State_Or =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ stackA <= stackA or stackB;
+ mem_readEnable <= '1';
+ mem_addr <= incIncSp;
+ sp <= incSp;
+ state <= State_Popped;
+ end if;
+ when State_And =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+
+ stackA <= stackA and stackB;
+ mem_readEnable <= '1';
+ mem_addr <= incIncSp;
+ sp <= incSp;
+ state <= State_Popped;
+ end if;
+ when State_Eq =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+
+ binaryOpResult <= (others => '0');
+ if (stackA=stackB) then
+ binaryOpResult(0) <= '1';
+ end if;
+ state <= State_BinaryOpResult;
+ end if;
+ when State_Ulessthan =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+
+ binaryOpResult <= (others => '0');
+ if (stackA<stackB) then
+ binaryOpResult(0) <= '1';
+ end if;
+ state <= State_BinaryOpResult;
+ end if;
+ when State_Ulessthanorequal =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+
+ binaryOpResult <= (others => '0');
+ if (stackA<=stackB) then
+ binaryOpResult(0) <= '1';
+ end if;
+ state <= State_BinaryOpResult;
+ end if;
+ when State_Lessthan =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+
+ binaryOpResult <= (others => '0');
+ if (signed(stackA)<signed(stackB)) then
+ binaryOpResult(0) <= '1';
+ end if;
+ state <= State_BinaryOpResult;
+ end if;
+ when State_Lessthanorequal =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+
+ binaryOpResult <= (others => '0');
+ if (signed(stackA)<=signed(stackB)) then
+ binaryOpResult(0) <= '1';
+ end if;
+ state <= State_BinaryOpResult;
+ end if;
+ when State_Load =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ state <= State_Load2;
+
+ mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit);
+ mem_readEnable <= '1';
+ end if;
+
+ when State_Dup =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= pc + 1;
+
+ sp <= decSp;
+ stackB <= stackA;
+ mem_write <= stackB;
+ mem_addr <= incSp;
+ mem_writeEnable <= '1';
+ end if;
+ when State_DupStackB =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= pc + 1;
+
+ sp <= decSp;
+ stackA <= stackB;
+ stackB <= stackA;
+ mem_write <= stackB;
+ mem_addr <= incSp;
+ mem_writeEnable <= '1';
+ end if;
+ when State_Store =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= pc + 1;
+ mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit);
+ mem_write <= stackB;
+ mem_writeEnable <= '1';
+ sp <= incIncSp;
+ state <= State_Resync;
+ end if;
+ when State_PopSP =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= pc + 1;
+
+ mem_write <= stackB;
+ mem_addr <= incSp;
+ mem_writeEnable <= '1';
+ sp <= stackA(maxAddrBitIncIO downto minAddrBit);
+ state <= State_Resync;
+ end if;
+ when State_Nop =>
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= pc + 1;
+ when State_Not =>
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= pc + 1;
+
+ stackA <= not stackA;
+ when State_Flip =>
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= pc + 1;
+
+ for i in 0 to wordSize-1 loop
+ stackA(i) <= stackA(wordSize-1-i);
+ end loop;
+ when State_AddTop =>
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= pc + 1;
+
+ stackA <= stackA + stackB;
+ when State_Shift =>
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= pc + 1;
+
+ stackA(wordSize-1 downto 1) <= stackA(wordSize-2 downto 0);
+ stackA(0) <= '0';
+ when State_Pushspadd =>
+ begin_inst <= '1';
+ idim_flag <= '0';
+ pc <= pc + 1;
+
+ stackA <= (others => '0');
+ stackA(maxAddrBitIncIO downto minAddrBit) <= stackA(maxAddrBitIncIO-minAddrBit downto 0)+sp;
+ when State_Neqbranch =>
+ -- branches are almost always taken as they form loops
+ begin_inst <= '1';
+ idim_flag <= '0';
+ sp <= incIncSp;
+ if (stackB/=0) then
+ pc <= stackA(maxAddrBitIncIO downto 0) + pc;
+ else
+ pc <= pc + 1;
+ end if;
+ -- need to fetch stack again.
+ state <= State_Resync;
+ when State_Mult =>
+ begin_inst <= '1';
+ idim_flag <= '0';
+
+ multA <= stackA;
+ multB <= stackB;
+ state <= State_Mult2;
+ when State_Break =>
+ report "Break instruction encountered" severity failure;
+ break <= '1';
+
+ when State_Loadb =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ state <= State_Loadb2;
+
+ mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit);
+ mem_readEnable <= '1';
+ end if;
+ when State_Storeb =>
+ if in_mem_busy='0' then
+ begin_inst <= '1';
+ idim_flag <= '0';
+ state <= State_Storeb2;
+
+ mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit);
+ mem_readEnable <= '1';
+ end if;
+
+ when others =>
+ sp <= (others => DontCareValue);
+ report "Illegal instruction" severity failure;
+ break <= '1';
+ end case;
+
+
+ when State_StoreSP2 =>
+ if in_mem_busy='0' then
+ mem_addr <= incSp;
+ mem_readEnable <= '1';
+ state <= State_Popped;
+ end if;
+ when State_LoadSP2 =>
+ if in_mem_busy='0' then
+ state <= State_LoadSP3;
+ mem_readEnable <= '1';
+ mem_addr <= sp+spOffset+1;
+ end if;
+ when State_LoadSP3 =>
+ if in_mem_busy='0' then
+ pc <= pc + 1;
+ state <= State_Execute;
+ stackB <= stackA;
+ stackA <= mem_read;
+ end if;
+ when State_AddSP2 =>
+ if in_mem_busy='0' then
+ pc <= pc + 1;
+ state <= State_Execute;
+ stackA <= stackA + mem_read;
+ end if;
+ when State_Load2 =>
+ if in_mem_busy='0' then
+ stackA <= mem_read;
+ pc <= pc + 1;
+ state <= State_Execute;
+ end if;
+ when State_Loadb2 =>
+ if in_mem_busy='0' then
+ stackA <= (others => '0');
+ stackA(7 downto 0) <= mem_read(((wordBytes-1-conv_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-conv_integer(stackA(byteBits-1 downto 0)))*8);
+ pc <= pc + 1;
+ state <= State_Execute;
+ end if;
+ when State_Storeb2 =>
+ if in_mem_busy='0' then
+ mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit);
+ mem_write <= mem_read;
+ mem_write(((wordBytes-1-conv_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-conv_integer(stackA(byteBits-1 downto 0)))*8) <= stackB(7 downto 0) ;
+ mem_writeEnable <= '1';
+ pc <= pc + 1;
+ sp <= incIncSp;
+ state <= State_Resync;
+ end if;
+ when State_Fetch =>
+ if in_mem_busy='0' then
+ mem_addr <= pc(maxAddrBitIncIO downto minAddrBit);
+ mem_readEnable <= '1';
+ state <= State_Decode;
+ end if;
+ when State_Mult2 =>
+ state <= State_Mult3;
+ when State_Mult3 =>
+ state <= State_Mult4;
+ when State_Mult4 =>
+ state <= State_Mult5;
+ when State_Mult5 =>
+ if in_mem_busy='0' then
+ stackA <= multResult3;
+ mem_readEnable <= '1';
+ mem_addr <= incIncSp;
+ sp <= incSp;
+ state <= State_Popped;
+ end if;
+ when State_BinaryOpResult =>
+ state <= State_BinaryOpResult2;
+ when State_BinaryOpResult2 =>
+ mem_readEnable <= '1';
+ mem_addr <= incIncSp;
+ sp <= incSp;
+ stackA <= binaryOpResult2;
+ state <= State_Popped;
+ when State_Popped =>
+ if in_mem_busy='0' then
+ pc <= pc + 1;
+ stackB <= mem_read;
+ state <= State_Execute;
+ end if;
+ when others =>
+ sp <= (others => DontCareValue);
+ report "Illegal state" severity failure;
+ break <= '1';
+ end case;
+ end if;
+ end process;
+
+
+
+end behave;
diff --git a/zpu/hdl/zpu4/src/zpu_core_small.vhd b/zpu/hdl/zpu4/src/zpu_core_small.vhd
new file mode 100644
index 0000000..4d73f88
--- /dev/null
+++ b/zpu/hdl/zpu4/src/zpu_core_small.vhd
@@ -0,0 +1,433 @@
+-- Company: ZPU3
+-- Engineer: Øyvind Harboe
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+
+entity zpu_core is
+ Port ( clk : in std_logic;
+ areset : in std_logic;
+ enable : in std_logic;
+ in_mem_busy : in std_logic;
+ mem_read : in std_logic_vector(wordSize-1 downto 0);
+ mem_write : out std_logic_vector(wordSize-1 downto 0);
+ out_mem_addr : out std_logic_vector(maxAddrBitIncIO downto 0);
+ out_mem_writeEnable : out std_logic;
+ out_mem_readEnable : out std_logic;
+ mem_writeMask: out std_logic_vector(wordBytes-1 downto 0);
+ interrupt : in std_logic;
+ break : out std_logic);
+end zpu_core;
+
+architecture behave of zpu_core is
+
+signal readIO : std_logic;
+
+
+
+signal memAWriteEnable : std_logic;
+signal memAAddr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal memAWrite : std_logic_vector(wordSize-1 downto 0);
+signal memARead : std_logic_vector(wordSize-1 downto 0);
+signal memBWriteEnable : std_logic;
+signal memBAddr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal memBWrite : std_logic_vector(wordSize-1 downto 0);
+signal memBRead : std_logic_vector(wordSize-1 downto 0);
+
+
+
+signal pc : std_logic_vector(maxAddrBit downto 0);
+signal sp : std_logic_vector(maxAddrBit downto minAddrBit);
+
+signal idim_flag : std_logic;
+
+--signal storeToStack : std_logic;
+--signal fetchNextInstruction : std_logic;
+--signal extraCycle : std_logic;
+signal busy : std_logic;
+--signal fetching : std_logic;
+
+signal begin_inst : std_logic;
+
+
+
+signal trace_opcode : std_logic_vector(7 downto 0);
+signal trace_pc : std_logic_vector(maxAddrBitIncIO downto 0);
+signal trace_sp : std_logic_vector(maxAddrBitIncIO downto minAddrBit);
+signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0);
+signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0);
+
+-- state machine.
+type State_Type is
+(
+State_Fetch,
+State_WriteIODone,
+State_Execute,
+State_StoreToStack,
+State_Add,
+State_Or,
+State_And,
+State_Store,
+State_ReadIO,
+State_WriteIO,
+State_Load,
+State_FetchNext,
+State_AddSP,
+State_ReadIODone,
+State_Decode,
+State_Resync
+);
+
+type DecodedOpcodeType is
+(
+Decoded_Nop,
+Decoded_Im,
+Decoded_ImShift,
+Decoded_LoadSP,
+Decoded_StoreSP ,
+Decoded_AddSP,
+Decoded_Emulate,
+Decoded_Break,
+Decoded_PushSP,
+Decoded_PopPC,
+Decoded_Add,
+Decoded_Or,
+Decoded_And,
+Decoded_Load,
+Decoded_Not,
+Decoded_Flip,
+Decoded_Store,
+Decoded_PopSP
+);
+
+
+
+signal sampledOpcode : std_logic_vector(OpCode_Size-1 downto 0);
+signal opcode : std_logic_vector(OpCode_Size-1 downto 0);
+
+signal decodedOpcode : DecodedOpcodeType;
+signal sampledDecodedOpcode : DecodedOpcodeType;
+
+
+signal state : State_Type;
+
+begin
+ traceFileGenerate:
+ if Generate_Trace generate
+ trace_file: trace port map (
+ clk => clk,
+ begin_inst => begin_inst,
+ pc => trace_pc,
+ opcode => trace_opcode,
+ sp => trace_sp,
+ memA => trace_topOfStack,
+ memB => trace_topOfStackB,
+ busy => busy,
+ intsp => (others => 'U')
+ );
+ end generate;
+
+
+ memory: dualport_ram port map (
+ clk => clk,
+ memAWriteEnable => memAWriteEnable,
+ memAAddr => memAAddr(maxAddrBitBRAM downto minAddrBit),
+ memAWrite => memAWrite,
+ memARead => memARead,
+ memBWriteEnable => memBWriteEnable,
+ memBAddr => memBAddr(maxAddrBitBRAM downto minAddrBit),
+ memBWrite => memBWrite,
+ memBRead => memBRead
+ );
+
+
+
+ decodeControl:
+ process(memBRead, pc)
+ variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0);
+ begin
+ tOpcode := memBRead((wordBytes-1-conv_integer(pc(minAddrBit-1 downto 0))+1)*8-1 downto (wordBytes-1-conv_integer(pc(minAddrBit-1 downto 0)))*8);
+
+ sampledOpcode <= tOpcode;
+
+ if (tOpcode(7 downto 7)=OpCode_Im) then
+ sampledDecodedOpcode<=Decoded_Im;
+ elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then
+ sampledDecodedOpcode<=Decoded_StoreSP;
+ elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then
+ sampledDecodedOpcode<=Decoded_LoadSP;
+ elsif (tOpcode(7 downto 5)=OpCode_Emulate) then
+ sampledDecodedOpcode<=Decoded_Emulate;
+ elsif (tOpcode(7 downto 4)=OpCode_AddSP) then
+ sampledDecodedOpcode<=Decoded_AddSP;
+ else
+ case tOpcode(3 downto 0) is
+ when OpCode_Break =>
+ sampledDecodedOpcode<=Decoded_Break;
+ when OpCode_PushSP =>
+ sampledDecodedOpcode<=Decoded_PushSP;
+ when OpCode_PopPC =>
+ sampledDecodedOpcode<=Decoded_PopPC;
+ when OpCode_Add =>
+ sampledDecodedOpcode<=Decoded_Add;
+ when OpCode_Or =>
+ sampledDecodedOpcode<=Decoded_Or;
+ when OpCode_And =>
+ sampledDecodedOpcode<=Decoded_And;
+ when OpCode_Load =>
+ sampledDecodedOpcode<=Decoded_Load;
+ when OpCode_Not =>
+ sampledDecodedOpcode<=Decoded_Not;
+ when OpCode_Flip =>
+ sampledDecodedOpcode<=Decoded_Flip;
+ when OpCode_Store =>
+ sampledDecodedOpcode<=Decoded_Store;
+ when OpCode_PopSP =>
+ sampledDecodedOpcode<=Decoded_PopSP;
+ when others =>
+ sampledDecodedOpcode<=Decoded_Nop;
+ end case;
+ end if;
+ end process;
+
+
+ opcodeControl:
+ process(clk, areset)
+ variable spOffset : std_logic_vector(4 downto 0);
+ begin
+ if areset = '1' then
+ state <= State_Resync;
+ break <= '0';
+ sp <= spStart(maxAddrBit downto minAddrBit);
+ pc <= (others => '0');
+ idim_flag <= '0';
+ begin_inst <= '0';
+ memAAddr <= (others => '0');
+ memBAddr <= (others => '0');
+ memAWriteEnable <= '0';
+ memBWriteEnable <= '0';
+ out_mem_writeEnable <= '0';
+ out_mem_readEnable <= '0';
+ memAWrite <= (others => '0');
+ memBWrite <= (others => '0');
+ mem_writeMask <= (others => '1');
+ elsif (clk'event and clk = '1') then
+ memAWriteEnable <= '0';
+ memBWriteEnable <= '0';
+ -- This saves ca. 100 LUT's, by explicitly declaring that the
+ -- memAWrite can be left at whatever value if memAWriteEnable is
+ -- not set.
+ memAWrite <= (others => DontCareValue);
+ memBWrite <= (others => DontCareValue);
+-- out_mem_addr <= (others => DontCareValue);
+-- mem_write <= (others => DontCareValue);
+ spOffset := (others => DontCareValue);
+ memAAddr <= (others => DontCareValue);
+ memBAddr <= (others => DontCareValue);
+
+ out_mem_writeEnable <= '0';
+ out_mem_readEnable <= '0';
+ begin_inst <= '0';
+ out_mem_addr <= memARead(maxAddrBitIncIO downto 0);
+ mem_write <= memBRead;
+
+ decodedOpcode <= sampledDecodedOpcode;
+ opcode <= sampledOpcode;
+
+ case state is
+ when State_Execute =>
+ state <= State_Fetch;
+ -- at this point:
+ -- memBRead contains opcode word
+ -- memARead contains top of stack
+ pc <= pc + 1;
+
+ -- trace
+ begin_inst <= '1';
+ trace_pc <= (others => '0');
+ trace_pc(maxAddrBit downto 0) <= pc;
+ trace_opcode <= opcode;
+ trace_sp <= (others => '0');
+ trace_sp(maxAddrBit downto minAddrBit) <= sp;
+ trace_topOfStack <= memARead;
+ trace_topOfStackB <= memBRead;
+
+ -- during the next cycle we'll be reading the next opcode
+ spOffset(4):=not opcode(4);
+ spOffset(3 downto 0):=opcode(3 downto 0);
+
+ idim_flag <= '0';
+ case decodedOpcode is
+ when Decoded_Im =>
+ idim_flag <= '1';
+ memAWriteEnable <= '1';
+ if (idim_flag='0') then
+ sp <= sp - 1;
+ memAAddr <= sp-1;
+ for i in wordSize-1 downto 7 loop
+ memAWrite(i) <= opcode(6);
+ end loop;
+ memAWrite(6 downto 0) <= opcode(6 downto 0);
+ else
+ memAAddr <= sp;
+ memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0);
+ memAWrite(6 downto 0) <= opcode(6 downto 0);
+ end if;
+ when Decoded_StoreSP =>
+ memBWriteEnable <= '1';
+ memBAddr <= sp+spOffset;
+ memBWrite <= memARead;
+ sp <= sp + 1;
+ state <= State_Resync;
+ when Decoded_LoadSP =>
+ sp <= sp - 1;
+ memAAddr <= sp+spOffset;
+ when Decoded_Emulate =>
+ sp <= sp - 1;
+ memAWriteEnable <= '1';
+ memAAddr <= sp - 1;
+ memAWrite <= (others => DontCareValue);
+ memAWrite(maxAddrBit downto 0) <= pc + 1;
+ -- The emulate address is:
+ -- 98 7654 3210
+ -- 0000 00aa aaa0 0000
+ pc <= (others => '0');
+ pc(9 downto 5) <= opcode(4 downto 0);
+ when Decoded_AddSP =>
+ memAAddr <= sp;
+ memBAddr <= sp+spOffset;
+ state <= State_AddSP;
+ when Decoded_Break =>
+ report "Break instruction encountered" severity failure;
+ break <= '1';
+ when Decoded_PushSP =>
+ memAWriteEnable <= '1';
+ memAAddr <= sp - 1;
+ sp <= sp - 1;
+ memAWrite <= (others => DontCareValue);
+ memAWrite(maxAddrBit downto minAddrBit) <= sp;
+ when Decoded_PopPC =>
+ pc <= memARead(maxAddrBit downto 0);
+ sp <= sp + 1;
+ state <= State_Resync;
+ when Decoded_Add =>
+ sp <= sp + 1;
+ state <= State_Add;
+ when Decoded_Or =>
+ sp <= sp + 1;
+ state <= State_Or;
+ when Decoded_And =>
+ sp <= sp + 1;
+ state <= State_And;
+ when Decoded_Load =>
+ if (memARead(ioBit)='1') then
+ out_mem_addr <= memARead(maxAddrBitIncIO downto 0);
+ out_mem_readEnable <= '1';
+ state <= State_ReadIO;
+ else
+ memAAddr <= memARead(maxAddrBit downto minAddrBit);
+ end if;
+ when Decoded_Not =>
+ memAAddr <= sp(maxAddrBit downto minAddrBit);
+ memAWriteEnable <= '1';
+ memAWrite <= not memARead;
+ when Decoded_Flip =>
+ memAAddr <= sp(maxAddrBit downto minAddrBit);
+ memAWriteEnable <= '1';
+ for i in 0 to wordSize-1 loop
+ memAWrite(i) <= memARead(wordSize-1-i);
+ end loop;
+ when Decoded_Store =>
+ memBAddr <= sp + 1;
+ sp <= sp + 1;
+ if (memARead(ioBit)='1') then
+ state <= State_WriteIO;
+ else
+ state <= State_Store;
+ end if;
+ when Decoded_PopSP =>
+ sp <= memARead(maxAddrBit downto minAddrBit);
+ state <= State_Resync;
+ when Decoded_Nop =>
+ memAAddr <= sp;
+ when others =>
+ null;
+ end case;
+ when State_ReadIO =>
+ if (in_mem_busy = '0') then
+ state <= State_Fetch;
+ memAWriteEnable <= '1';
+ memAWrite <= mem_read;
+ end if;
+ when State_WriteIO =>
+ sp <= sp + 1;
+ out_mem_writeEnable <= '1';
+ out_mem_addr <= memARead(maxAddrBitIncIO downto 0);
+ mem_write <= memBRead;
+ state <= State_WriteIODone;
+ when State_WriteIODone =>
+ if (in_mem_busy = '0') then
+ state <= State_Resync;
+ end if;
+ when State_Fetch =>
+ -- We need to resync. During the *next* cycle
+ -- we'll fetch the opcode @ pc and thus it will
+ -- be available for State_Execute the cycle after
+ -- next
+ memBAddr <= pc(maxAddrBit downto minAddrBit);
+ state <= State_FetchNext;
+ when State_FetchNext =>
+ -- at this point memARead contains the value that is either
+ -- from the top of stack or should be copied to the top of the stack
+ memAWriteEnable <= '1';
+ memAWrite <= memARead;
+ memAAddr <= sp;
+ memBAddr <= sp + 1;
+ state <= State_Decode;
+ when State_Decode =>
+ -- during the State_Execute cycle we'll be fetching SP+1
+ memAAddr <= sp;
+ memBAddr <= sp + 1;
+ state <= State_Execute;
+ when State_Store =>
+ sp <= sp + 1;
+ memAWriteEnable <= '1';
+ memAAddr <= memARead(maxAddrBit downto minAddrBit);
+ memAWrite <= memBRead;
+ state <= State_Resync;
+ when State_AddSP =>
+ state <= State_Add;
+ when State_Add =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite <= memARead + memBRead;
+ state <= State_Fetch;
+ when State_Or =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite <= memARead or memBRead;
+ state <= State_Fetch;
+ when State_Resync =>
+ memAAddr <= sp;
+ state <= State_Fetch;
+ when State_And =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite <= memARead and memBRead;
+ state <= State_Fetch;
+ when others =>
+ null;
+ end case;
+
+ end if;
+ end process;
+
+
+
+end behave;
diff --git a/zpu/hdl/zpu4/src/zpuio.vhd b/zpu/hdl/zpu4/src/zpuio.vhd
new file mode 100644
index 0000000..d14629e
--- /dev/null
+++ b/zpu/hdl/zpu4/src/zpuio.vhd
@@ -0,0 +1,256 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity zpuio is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ clk_status : in std_logic_vector(2 downto 0);
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_dout : inout std_logic_vector(15 downto 0));
+end zpuio;
+
+architecture behave of zpuio is
+
+signal timer_read : std_logic_vector(7 downto 0);
+--signal timer_write : std_logic_vector(7 downto 0);
+signal timer_we : std_logic;
+
+
+signal io_busy : std_logic;
+signal io_read : std_logic_vector(7 downto 0);
+--signal io_write : std_logic_vector(7 downto 0);
+signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal io_writeEnable : std_logic;
+signal Enable : std_logic;
+
+signal din : std_logic_vector(7 downto 0);
+signal dout : std_logic_vector(7 downto 0);
+signal adr : std_logic_vector(15 downto 0);
+signal break : std_logic;
+signal we : std_logic;
+signal re : std_logic;
+
+
+-- uart forwarding...
+
+signal uartTXPending : std_logic;
+signal uartTXCleared : std_logic;
+signal uartData : std_logic_vector(7 downto 0);
+
+signal readingTimer : std_logic;
+
+
+
+
+signal mem_busy : std_logic;
+signal mem_read : std_logic_vector(wordSize-1 downto 0);
+signal mem_write : std_logic_vector(wordSize-1 downto 0);
+signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
+signal mem_writeEnable : std_logic;
+signal mem_readEnable : std_logic;
+signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+signal dram_mem_busy : std_logic;
+signal dram_mem_read : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_write : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_writeEnable : std_logic;
+signal dram_mem_readEnable : std_logic;
+signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+
+
+--signal io_mem_read : std_logic_vector(7 downto 0);
+--signal io_mem_writeEnable : std_logic;
+--signal io_mem_readEnable : std_logic;
+signal io_readEnable : std_logic;
+
+
+signal dram_read : std_logic;
+
+
+
+begin
+
+ io_addr <= mem_addr(maxAddrBit downto minAddrBit);
+
+ timerinst: timer port map (
+ clk => cpu_clk,
+ areset => areset,
+ we => timer_we,
+ din => mem_write(7 downto 0),
+ adr => io_addr(4 downto 2),
+ dout => timer_read);
+
+ zpu: zpu_core port map (
+ clk => cpu_clk ,
+ areset => areset,
+ in_mem_busy => mem_busy,
+ mem_read => mem_read,
+ mem_write => mem_write,
+ out_mem_addr => mem_addr,
+ out_mem_writeEnable => mem_writeEnable,
+ out_mem_readEnable => mem_readEnable,
+ mem_writeMask => mem_writeMask,
+ interrupt => '0',
+ break => break);
+
+
+ram_imp: dram port map (
+ clk => cpu_clk ,
+ areset => areset,
+ mem_busy => dram_mem_busy,
+ mem_read => dram_mem_read,
+ mem_write => mem_write,
+ mem_addr => mem_addr(maxAddrBit downto 0),
+ mem_writeEnable => dram_mem_writeEnable,
+ mem_readEnable => dram_mem_readEnable,
+ mem_writeMask => mem_writeMask);
+
+
+ -- Read/write are on different addresses
+ -- The registers are 8 bits and mapped to bit[7:0]
+ --
+ -- 0xC000 Write: Writes to UART TX FIFO (4 byte FIFO)
+ -- Read : Reads from UART RX FIFO (4 byte FIFO)
+ -- 0xC004 Read : UART status register
+ -- Bit 0 = RX FIFO empty
+ -- Bit 1 = TX FIFO full
+ -- 0xA000 Skrive: LED's (8 stk.)
+
+ -- 0x9000 Write: bit 0: 1= reset counter
+ -- 0= counter running
+ -- bit 1: 1= sample counter (when set to 1)
+ -- 0=not used
+ -- Read : counter bit[7:0]
+ -- 0x9004 Read: counter bit [15:8]
+ -- 0x9008 Read: counter bit [23:16]
+ -- 0x900C Read: counter bit [31:24]
+ -- 0x9010 Read: counter bit [39:32]
+ -- 0x9014 Read: counter bit [47:40]
+ -- 0x9018 Read: counter bit [55:48]
+ -- 0x901C Read: counter bit [63:56]
+ --
+ -- 0x8800 Read: unsigned 8-bit integer with FPGA frequency (in MHz)
+
+ fauxUart:
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ io_busy <= '0';
+ uartTXPending <= '0';
+ timer_we <= '0';
+ io_busy <= '0';
+ uartData <= x"58"; -- 'X'
+ readingTimer <= '0';
+ elsif (cpu_clk'event and cpu_clk = '1') then
+ timer_we <= '0';
+ io_busy <= '0';
+ if uartTXCleared = '1' then
+ uartTXPending <= '0';
+ end if;
+
+ if io_writeEnable = '1' then
+ if io_addr=x"1000" then
+ -- Write to UART
+ uartData <= mem_write(7 downto 0);
+ uartTXPending <= '1';
+ io_busy <= '1';
+ elsif io_addr(12)='1' then
+ timer_we <= '1';
+ io_busy <= '1';
+ else
+ report "Illegal IO write" severity failure;
+ end if;
+ end if;
+ if (io_readEnable = '1') then
+ if io_addr=x"1001" then
+ io_read <= (0=>'1', -- recieve empty
+ 1 => uartTXPending, -- tx full
+ others => '0');
+ io_busy <= '1';
+ elsif io_addr(12)='1' then
+ readingTimer <= '1';
+ io_busy <= '1';
+ elsif io_addr(11)='1' then
+ io_read <= ZPU_Frequency;
+ io_busy <= '1';
+ else
+ report "Illegal IO read" severity failure;
+ end if;
+
+ else
+ if (readingTimer = '1') then
+ readingTimer <= '0';
+ io_read <= timer_read;
+ io_busy <= '0';
+ else
+ io_read <= (others => '1');
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+ forwardUARTOutputToARM:
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ uartTXCleared <= '0';
+ elsif (cpu_clk = '1' and cpu_clk'event) then
+ if cpu_we(0) = '1' and cpu_a(3 downto 1) = "000" then
+ uartTXCleared <= cpu_din(0);
+ else
+ uartTXCleared <= uartTXCleared;
+ end if;
+ end if;
+ end process;
+
+ cpu_dout(7 downto 0) <= uartData when (cpu_re = '1' and cpu_a(3 downto 1) = "001") else (others => 'Z');
+ cpu_dout <= (0 => uartTXPending, others => '0') when (cpu_re = '1' and cpu_a(3 downto 1) = "000") else (others => 'Z');
+
+ dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit);
+ dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit);
+ io_writeEnable <= mem_writeEnable and mem_addr(ioBit);
+-- io_readEnable <= mem_readEnable and mem_addr(ioBit);
+ mem_busy <= io_busy or dram_mem_busy or dram_read or io_readEnable;
+
+ -- Memory reads either come from IO or DRAM. We need to pick the right one.
+ memorycontrol:
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ dram_read <= '0';
+ io_readEnable <= '0';
+
+
+ elsif (cpu_clk'event and cpu_clk = '1') then
+ mem_read <= (others => '0');
+ if mem_addr(ioBit)='0' and mem_readEnable='1' then
+ dram_read <= '1';
+ end if;
+ if dram_read='1' and dram_mem_busy='0' then
+ dram_read <= '0';
+ mem_read <= dram_mem_read;
+ end if;
+
+ if mem_addr(ioBit)='1' and mem_readEnable='1' then
+ io_readEnable <= '1';
+ end if;
+ if io_readEnable='1' and io_busy='0' then
+ io_readEnable <= '0';
+ mem_read(7 downto 0) <= io_read;
+ end if;
+
+ end if;
+ end process;
+
+
+end behave;
diff --git a/zpu/hdl/zpu4/src/zpuio_bram.vhd b/zpu/hdl/zpu4/src/zpuio_bram.vhd
new file mode 100644
index 0000000..5d3f409
--- /dev/null
+++ b/zpu/hdl/zpu4/src/zpuio_bram.vhd
@@ -0,0 +1,229 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity zpuio is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ clk_status : in std_logic_vector(2 downto 0);
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_dout : inout std_logic_vector(15 downto 0));
+end zpuio;
+
+architecture behave of zpuio is
+
+signal timer_read : std_logic_vector(7 downto 0);
+--signal timer_write : std_logic_vector(7 downto 0);
+signal timer_we : std_logic;
+
+
+signal io_busy : std_logic;
+signal io_read : std_logic_vector(7 downto 0);
+--signal io_write : std_logic_vector(7 downto 0);
+signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal io_writeEnable : std_logic;
+signal Enable : std_logic;
+
+signal din : std_logic_vector(7 downto 0);
+signal dout : std_logic_vector(7 downto 0);
+signal adr : std_logic_vector(15 downto 0);
+signal break : std_logic;
+signal we : std_logic;
+signal re : std_logic;
+
+
+-- uart forwarding...
+
+signal uartTXPending : std_logic;
+signal uartTXCleared : std_logic;
+signal uartData : std_logic_vector(7 downto 0);
+
+signal readingTimer : std_logic;
+
+
+
+
+signal mem_busy : std_logic;
+signal mem_read : std_logic_vector(wordSize-1 downto 0);
+signal mem_write : std_logic_vector(wordSize-1 downto 0);
+signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
+signal mem_writeEnable : std_logic;
+signal mem_readEnable : std_logic;
+signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+
+
+
+--signal io_mem_read : std_logic_vector(7 downto 0);
+--signal io_mem_writeEnable : std_logic;
+--signal io_mem_readEnable : std_logic;
+signal io_readEnable : std_logic;
+
+
+
+
+
+begin
+
+ io_addr <= mem_addr(maxAddrBit downto minAddrBit);
+
+ timerinst: timer port map (
+ clk => cpu_clk,
+ areset => areset,
+ we => timer_we,
+ din => mem_write(7 downto 0),
+ adr => io_addr(4 downto 2),
+ dout => timer_read);
+
+ zpu: zpu_core port map (
+ clk => cpu_clk ,
+ areset => areset,
+ in_mem_busy => mem_busy,
+ mem_read => mem_read,
+ mem_write => mem_write,
+ out_mem_addr => mem_addr,
+ out_mem_writeEnable => mem_writeEnable,
+ out_mem_readEnable => mem_readEnable,
+ mem_writeMask => mem_writeMask,
+ interrupt => '0',
+ break => break);
+
+
+
+
+ -- Read/write are on different addresses
+ -- The registers are 8 bits and mapped to bit[7:0]
+ --
+ -- 0xC000 Write: Writes to UART TX FIFO (4 byte FIFO)
+ -- Read : Reads from UART RX FIFO (4 byte FIFO)
+ -- 0xC004 Read : UART status register
+ -- Bit 0 = RX FIFO empty
+ -- Bit 1 = TX FIFO full
+ -- 0xA000 Skrive: LED's (8 stk.)
+
+ -- 0x9000 Write: bit 0: 1= reset counter
+ -- 0= counter running
+ -- bit 1: 1= sample counter (when set to 1)
+ -- 0=not used
+ -- Read : counter bit[7:0]
+ -- 0x9004 Read: counter bit [15:8]
+ -- 0x9008 Read: counter bit [23:16]
+ -- 0x900C Read: counter bit [31:24]
+ -- 0x9010 Read: counter bit [39:32]
+ -- 0x9014 Read: counter bit [47:40]
+ -- 0x9018 Read: counter bit [55:48]
+ -- 0x901C Read: counter bit [63:56]
+ --
+ -- 0x8800 Read: unsigned 8-bit integer with FPGA frequency (in MHz)
+
+ fauxUart:
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ io_busy <= '0';
+ uartTXPending <= '0';
+ timer_we <= '0';
+ io_busy <= '0';
+ uartData <= x"58"; -- 'X'
+ readingTimer <= '0';
+ elsif (cpu_clk'event and cpu_clk = '1') then
+ timer_we <= '0';
+ io_busy <= '0';
+ if uartTXCleared = '1' then
+ uartTXPending <= '0';
+ end if;
+
+ if io_writeEnable = '1' then
+ if io_addr=x"1000" then
+ -- Write to UART
+ uartData <= mem_write(7 downto 0);
+ uartTXPending <= '1';
+ io_busy <= '1';
+ elsif io_addr(12)='1' then
+ timer_we <= '1';
+ io_busy <= '1';
+ else
+ report "Illegal IO write" severity failure;
+ end if;
+ end if;
+ if (io_readEnable = '1') then
+ if io_addr=x"1001" then
+ io_read <= (0=>'1', -- recieve empty
+ 1 => uartTXPending, -- tx full
+ others => '0');
+ io_busy <= '1';
+ elsif io_addr(12)='1' then
+ readingTimer <= '1';
+ io_busy <= '1';
+ elsif io_addr(11)='1' then
+ io_read <= ZPU_Frequency;
+ io_busy <= '1';
+ else
+ report "Illegal IO read" severity failure;
+ end if;
+
+ else
+ if (readingTimer = '1') then
+ readingTimer <= '0';
+ io_read <= timer_read;
+ io_busy <= '0';
+ else
+ io_read <= (others => '1');
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+ forwardUARTOutputToARM:
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ uartTXCleared <= '0';
+ elsif (cpu_clk = '1' and cpu_clk'event) then
+ if cpu_we(0) = '1' and cpu_a(3 downto 1) = "000" then
+ uartTXCleared <= cpu_din(0);
+ else
+ uartTXCleared <= uartTXCleared;
+ end if;
+ end if;
+ end process;
+
+ cpu_dout(7 downto 0) <= uartData when (cpu_re = '1' and cpu_a(3 downto 1) = "001") else (others => 'Z');
+ cpu_dout <= (0 => uartTXPending, others => '0') when (cpu_re = '1' and cpu_a(3 downto 1) = "000") else (others => 'Z');
+
+ io_writeEnable <= mem_writeEnable and mem_addr(ioBit);
+-- io_readEnable <= mem_readEnable and mem_addr(ioBit);
+ mem_busy <= io_busy or io_readEnable;
+
+ -- Memory reads either come from IO or DRAM. We need to pick the right one.
+ memorycontrol:
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ io_readEnable <= '0';
+
+
+ elsif (cpu_clk'event and cpu_clk = '1') then
+ mem_read <= (others => '0');
+
+ if mem_addr(ioBit)='1' and mem_readEnable='1' then
+ io_readEnable <= '1';
+ end if;
+ if io_readEnable='1' and io_busy='0' then
+ io_readEnable <= '0';
+ mem_read(7 downto 0) <= io_read;
+ end if;
+
+ end if;
+ end process;
+
+
+end behave;
diff --git a/zpu/hdl/zpu4/src/zpupkg.vhd b/zpu/hdl/zpu4/src/zpupkg.vhd
new file mode 100644
index 0000000..30c3e46
--- /dev/null
+++ b/zpu/hdl/zpu4/src/zpupkg.vhd
@@ -0,0 +1,168 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.STD_LOGIC_ARITH.all;
+
+library work;
+use work.zpu_config.all;
+
+package zpupkg is
+
+ -- This bit is set for read/writes to IO
+ -- FIX!!! eventually this should be set to wordSize-1 so as to
+ -- to make the address of IO independent of amount of memory
+ -- reserved for CPU. Requires trivial tweaks in toolchain/runtime
+ -- libraries.
+
+ constant byteBits : integer := wordPower-3; -- # of bits in a word that addresses bytes
+ constant maxAddrBit : integer := maxAddrBitIncIO-1;
+ constant ioBit : integer := maxAddrBit+1;
+ constant wordSize : integer := 2**wordPower;
+ constant wordBytes : integer := wordSize/8;
+ constant minAddrBit : integer := byteBits;
+ -- configurable internal stack size. Probably going to be 16 after toolchain is done
+ constant stack_bits : integer := 5;
+ constant stack_size : integer := 2**stack_bits;
+
+ component dualport_ram is
+ port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+ end component;
+
+ component dram is
+ port (clk : in std_logic;
+ areset : in std_logic;
+ mem_writeEnable : in std_logic;
+ mem_readEnable : in std_logic;
+ mem_addr : in std_logic_vector(maxAddrBit downto 0);
+ mem_write : in std_logic_vector(wordSize-1 downto 0);
+ mem_read : out std_logic_vector(wordSize-1 downto 0);
+ mem_busy : out std_logic;
+ mem_writeMask : in std_logic_vector(wordBytes-1 downto 0));
+ end component;
+
+
+ component trace is
+ port(
+ clk : in std_logic;
+ begin_inst : in std_logic;
+ pc : in std_logic_vector(maxAddrBitIncIO downto 0);
+ opcode : in std_logic_vector(7 downto 0);
+ sp : in std_logic_vector(maxAddrBitIncIO downto minAddrBit);
+ memA : in std_logic_vector(wordSize-1 downto 0);
+ memB : in std_logic_vector(wordSize-1 downto 0);
+ busy : in std_logic;
+ intSp : in std_logic_vector(stack_bits-1 downto 0)
+ );
+ end component;
+
+ component zpu_core is
+ port ( clk : in std_logic;
+ areset : in std_logic;
+ enable : in std_logic;
+ in_mem_busy : in std_logic;
+ mem_read : in std_logic_vector(wordSize-1 downto 0);
+ mem_write : out std_logic_vector(wordSize-1 downto 0);
+ out_mem_addr : out std_logic_vector(maxAddrBitIncIO downto 0);
+ out_mem_writeEnable : out std_logic;
+ out_mem_readEnable : out std_logic;
+ mem_writeMask: out std_logic_vector(wordBytes-1 downto 0);
+ interrupt : in std_logic;
+ break : out std_logic);
+ end component;
+
+
+
+ component timer is
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ we : in std_logic;
+ din : in std_logic_vector(7 downto 0);
+ adr : in std_logic_vector(2 downto 0);
+ dout : out std_logic_vector(7 downto 0));
+ end component;
+
+ component zpuio is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ clk_status : in std_logic_vector(2 downto 0);
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_dout : inout std_logic_vector(15 downto 0));
+ end component;
+
+
+
+
+ -- opcode decode constants
+ constant OpCode_Im : std_logic_vector(7 downto 7) := "1";
+ constant OpCode_StoreSP : std_logic_vector(7 downto 5) := "010";
+ constant OpCode_LoadSP : std_logic_vector(7 downto 5) := "011";
+ constant OpCode_Emulate : std_logic_vector(7 downto 5) := "001";
+ constant OpCode_AddSP : std_logic_vector(7 downto 4) := "0001";
+ constant OpCode_Short : std_logic_vector(7 downto 4) := "0000";
+
+ constant OpCode_Break : std_logic_vector(3 downto 0) := "0000";
+ constant OpCode_Shiftleft: std_logic_vector(3 downto 0) := "0001";
+ constant OpCode_PushSP : std_logic_vector(3 downto 0) := "0010";
+ constant OpCode_PushInt : std_logic_vector(3 downto 0) := "0011";
+
+ constant OpCode_PopPC : std_logic_vector(3 downto 0) := "0100";
+ constant OpCode_Add : std_logic_vector(3 downto 0) := "0101";
+ constant OpCode_And : std_logic_vector(3 downto 0) := "0110";
+ constant OpCode_Or : std_logic_vector(3 downto 0) := "0111";
+
+ constant OpCode_Load : std_logic_vector(3 downto 0) := "1000";
+ constant OpCode_Not : std_logic_vector(3 downto 0) := "1001";
+ constant OpCode_Flip : std_logic_vector(3 downto 0) := "1010";
+ constant OpCode_Nop : std_logic_vector(3 downto 0) := "1011";
+
+ constant OpCode_Store : std_logic_vector(3 downto 0) := "1100";
+ constant OpCode_PopSP : std_logic_vector(3 downto 0) := "1101";
+ constant OpCode_Compare : std_logic_vector(3 downto 0) := "1110";
+ constant OpCode_PopInt : std_logic_vector(3 downto 0) := "1111";
+
+ constant OpCode_Lessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(36, 6);
+ constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(37, 6);
+ constant OpCode_Ulessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(38, 6);
+ constant OpCode_Ulessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(39, 6);
+
+ constant OpCode_Swap : std_logic_vector(5 downto 0) := conv_std_logic_vector(40, 6);
+ constant OpCode_Mult : std_logic_vector(5 downto 0) := conv_std_logic_vector(41, 6);
+
+ constant OpCode_Lshiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(42, 6);
+ constant OpCode_Ashiftleft : std_logic_vector(5 downto 0) := conv_std_logic_vector(43, 6);
+ constant OpCode_Ashiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(44, 6);
+ constant OpCode_Call : std_logic_vector(5 downto 0) := conv_std_logic_vector(45, 6);
+
+ constant OpCode_Eq : std_logic_vector(5 downto 0) := conv_std_logic_vector(46, 6);
+ constant OpCode_Neq : std_logic_vector(5 downto 0) := conv_std_logic_vector(47, 6);
+
+ constant OpCode_Sub : std_logic_vector(5 downto 0) := conv_std_logic_vector(49, 6);
+ constant OpCode_Loadb : std_logic_vector(5 downto 0) := conv_std_logic_vector(51, 6);
+ constant OpCode_Storeb : std_logic_vector(5 downto 0) := conv_std_logic_vector(52, 6);
+
+ constant OpCode_Eqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(55, 6);
+ constant OpCode_Neqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(56, 6);
+ constant OpCode_Poppcrel : std_logic_vector(5 downto 0) := conv_std_logic_vector(57, 6);
+
+ constant OpCode_Pushspadd : std_logic_vector(5 downto 0) := conv_std_logic_vector(61, 6);
+ constant OpCode_Mult16x16 : std_logic_vector(5 downto 0) := conv_std_logic_vector(62, 6);
+ constant OpCode_Callpcrel : std_logic_vector(5 downto 0) := conv_std_logic_vector(63, 6);
+
+
+
+ constant OpCode_Size : integer := 8;
+
+
+
+end zpupkg;
OpenPOWER on IntegriCloud